From f37a9c98e59fdb76f78e03ef7bf1f0aca3f38a96 Mon Sep 17 00:00:00 2001 From: sub101 Date: Sun, 26 Nov 2023 16:21:57 +0900 Subject: [PATCH 01/11] =?UTF-8?q?#121=20/=20=EC=9D=B8=EC=95=B1=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + .../data/datasource/local/SparkleStorage.kt | 8 +++ .../sopt/uni/presentation/SplashActivity.kt | 68 ++++++++++++++++++ .../presentation/home/UpdateDialogFragment.kt | 70 +++++++++++++++++++ app/src/main/res/values/strings.xml | 5 ++ 5 files changed, 153 insertions(+) create mode 100644 app/src/main/java/sopt/uni/presentation/SplashActivity.kt create mode 100644 app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt diff --git a/app/build.gradle b/app/build.gradle index f93ad64..eea532b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -137,4 +137,6 @@ dependencies { // Splash Screen implementation 'androidx.core:core-splashscreen:1.0.1' + // In App Update + implementation 'com.google.android.play:app-update-ktx:2.1.0' } diff --git a/app/src/main/java/sopt/uni/data/datasource/local/SparkleStorage.kt b/app/src/main/java/sopt/uni/data/datasource/local/SparkleStorage.kt index b9a948f..42e9cae 100644 --- a/app/src/main/java/sopt/uni/data/datasource/local/SparkleStorage.kt +++ b/app/src/main/java/sopt/uni/data/datasource/local/SparkleStorage.kt @@ -42,6 +42,14 @@ object SparkleStorage { ) } + fun setUpdateAvailableBoolean(key: String, value: Boolean) { + pref.edit { putBoolean(key, value) } + } + + fun getUpdateAvailableBoolean(key: String): Boolean { + return pref.getBoolean(key, false) + } + var accessToken: String? get() = pref.getString(ACCESS_TOKEN, null) set(value) = pref.edit { putString(ACCESS_TOKEN, value).apply() } diff --git a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt new file mode 100644 index 0000000..3ba2f9f --- /dev/null +++ b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt @@ -0,0 +1,68 @@ +package sopt.uni.presentation + +import android.os.Bundle +import android.util.Log +import androidx.lifecycle.lifecycleScope +import com.google.android.play.core.appupdate.AppUpdateManagerFactory +import com.google.android.play.core.install.model.AppUpdateType +import com.google.android.play.core.install.model.UpdateAvailability +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import sopt.uni.R +import sopt.uni.data.datasource.local.SparkleStorage +import sopt.uni.databinding.ActivitySplashBinding +import sopt.uni.presentation.home.HomeActivity +import sopt.uni.presentation.invite.NickNameActivity +import sopt.uni.presentation.onboarding.OnBoardingActivity +import sopt.uni.util.binding.BindingActivity +import sopt.uni.util.extension.startActivity + +@AndroidEntryPoint +class SplashActivity : BindingActivity(R.layout.activity_splash) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + isUpdateAvailable() + + lifecycleScope.launch { + delay(2000) + if (SparkleStorage.accessToken != null) { + if (SparkleStorage.partnerId != -1) { + startActivity() + } else { + startActivity() + } + } else { + if (SparkleStorage.partnerId != -1) { + startActivity() + } else { + startActivity() + } + } + overridePendingTransition(0, 0) + finish() + } + } + + private fun isUpdateAvailable() { + val appUpdateManager = AppUpdateManagerFactory.create(this) + val appUpdateInfoTask = appUpdateManager.appUpdateInfo + appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> + if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( + AppUpdateType.IMMEDIATE, + ) + ) { + SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, true) + Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") + } else { + SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) + Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") + } + } + } + + companion object { + const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" + } +} diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt new file mode 100644 index 0000000..b3fbb75 --- /dev/null +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -0,0 +1,70 @@ +package sopt.uni.presentation.home + +import android.app.Activity.RESULT_OK +import android.os.Bundle +import android.view.View +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import com.google.android.play.core.appupdate.AppUpdateManagerFactory +import com.google.android.play.core.appupdate.AppUpdateOptions +import com.google.android.play.core.install.model.AppUpdateType +import com.google.android.play.core.install.model.UpdateAvailability +import dagger.hilt.android.AndroidEntryPoint +import sopt.uni.R +import sopt.uni.data.datasource.local.SparkleStorage +import sopt.uni.databinding.TitleAction2DialogBinding +import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.extension.setOnSingleClickListener + +@AndroidEntryPoint +class UpdateDialogFragment : + BindingDialogFragment(R.layout.title_action2_dialog) { + + private val startForResult = + registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { + if (it.resultCode != RESULT_OK) { + Toast.makeText(requireContext(), "업데이트에 실패했습니다. 다시 시도해주세요.", Toast.LENGTH_SHORT) + .show() + } else { + SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) + dismiss() + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + with(binding) { + dialogTitle.setText(getString(R.string.update_dialog_title)) + dialogBody.setText(getString(R.string.update_dialog_body)) + btnRight.setText(getString(R.string.update_dialog_ok)) + btnLeft.setOnSingleClickListener { + dismiss() + } + btnRight.setOnSingleClickListener { + requestUpdate() + } + } + } + + private fun requestUpdate() { + val appUpdateManager = AppUpdateManagerFactory.create(requireContext()) + val appUpdateInfoTask = appUpdateManager.appUpdateInfo + appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> + if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( + AppUpdateType.IMMEDIATE, + ) + ) { + appUpdateManager.startUpdateFlowForResult( + appUpdateInfo, + startForResult, + AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build(), + ) + } + } + } + + companion object { + const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b7fb5d..a709d0e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -121,6 +121,11 @@ 확인 Title + + 새로운 버전이 업데이트 되었어요 + 새로운 버전으로 업데이트 하시겠습니까? + 업데이트 + 한판승부 미션 카테고리 선택하기 From 19ac70bd897346281cee6e2edf2fa64fc42efab0 Mon Sep 17 00:00:00 2001 From: sub101 Date: Sun, 3 Dec 2023 22:14:54 +0900 Subject: [PATCH 02/11] =?UTF-8?q?#121/=20=EC=9D=B8=EC=95=B1=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/uni/presentation/SplashActivity.kt | 31 +++++++++++-------- .../presentation/home/UpdateDialogFragment.kt | 2 -- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt index 3ba2f9f..dcaf9d2 100644 --- a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt @@ -13,6 +13,7 @@ import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.ActivitySplashBinding import sopt.uni.presentation.home.HomeActivity +import sopt.uni.presentation.home.UpdateDialogFragment import sopt.uni.presentation.invite.NickNameActivity import sopt.uni.presentation.onboarding.OnBoardingActivity import sopt.uni.util.binding.BindingActivity @@ -46,19 +47,23 @@ class SplashActivity : BindingActivity(R.layout.activity_ } private fun isUpdateAvailable() { - val appUpdateManager = AppUpdateManagerFactory.create(this) - val appUpdateInfoTask = appUpdateManager.appUpdateInfo - appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> - if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( - AppUpdateType.IMMEDIATE, - ) - ) { - SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, true) - Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") - } else { - SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) - Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") - } +// val appUpdateManager = AppUpdateManagerFactory.create(this) +// val appUpdateInfoTask = appUpdateManager.appUpdateInfo +// appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> +// if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( +// AppUpdateType.IMMEDIATE, +// ) +// ) { +// SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, true) +// Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") +// } else { +// SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) +// Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") +// } +// } + Log.e("hyeon","${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") + if(SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)){ + UpdateDialogFragment().show(supportFragmentManager,"UpdateDialog") } } diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index b3fbb75..c26c791 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -9,14 +9,12 @@ import com.google.android.play.core.appupdate.AppUpdateManagerFactory import com.google.android.play.core.appupdate.AppUpdateOptions import com.google.android.play.core.install.model.AppUpdateType import com.google.android.play.core.install.model.UpdateAvailability -import dagger.hilt.android.AndroidEntryPoint import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.TitleAction2DialogBinding import sopt.uni.presentation.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener -@AndroidEntryPoint class UpdateDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { From 4b3f561cc637f3a6bef2a2dbe421947f2b57c589 Mon Sep 17 00:00:00 2001 From: sub101 Date: Sat, 30 Dec 2023 11:20:31 +0900 Subject: [PATCH 03/11] =?UTF-8?q?#121/=EC=9D=B8=EC=95=B1=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EB=82=B4=EB=B6=80=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/uni/presentation/SplashActivity.kt | 34 ++++++------------- .../presentation/home/UpdateDialogFragment.kt | 5 ++- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt index dcaf9d2..b464e6c 100644 --- a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt @@ -1,11 +1,7 @@ package sopt.uni.presentation import android.os.Bundle -import android.util.Log import androidx.lifecycle.lifecycleScope -import com.google.android.play.core.appupdate.AppUpdateManagerFactory -import com.google.android.play.core.install.model.AppUpdateType -import com.google.android.play.core.install.model.UpdateAvailability import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -24,7 +20,7 @@ class SplashActivity : BindingActivity(R.layout.activity_ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - isUpdateAvailable() + isAvailableUpdateVersion() lifecycleScope.launch { delay(2000) @@ -46,24 +42,16 @@ class SplashActivity : BindingActivity(R.layout.activity_ } } - private fun isUpdateAvailable() { -// val appUpdateManager = AppUpdateManagerFactory.create(this) -// val appUpdateInfoTask = appUpdateManager.appUpdateInfo -// appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> -// if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( -// AppUpdateType.IMMEDIATE, -// ) -// ) { -// SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, true) -// Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") -// } else { -// SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) -// Log.e("subin", "${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") -// } -// } - Log.e("hyeon","${SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)}") - if(SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)){ - UpdateDialogFragment().show(supportFragmentManager,"UpdateDialog") + private fun showUpdateDialog() { + UpdateDialogFragment().show( + supportFragmentManager, + "UpdateDialog", + ) + } + + private fun isAvailableUpdateVersion() { + if (SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)) { + showUpdateDialog() } } diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index c26c791..33ce183 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -1,6 +1,6 @@ package sopt.uni.presentation.home -import android.app.Activity.RESULT_OK +import android.app.Activity import android.os.Bundle import android.view.View import android.widget.Toast @@ -20,7 +20,7 @@ class UpdateDialogFragment : private val startForResult = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { - if (it.resultCode != RESULT_OK) { + if (it.resultCode != Activity.RESULT_OK) { Toast.makeText(requireContext(), "업데이트에 실패했습니다. 다시 시도해주세요.", Toast.LENGTH_SHORT) .show() } else { @@ -28,7 +28,6 @@ class UpdateDialogFragment : dismiss() } } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) From e85ec61d1cc7ffe7a405654107962353ec96ddc2 Mon Sep 17 00:00:00 2001 From: HaeTi Date: Sun, 21 Jan 2024 23:09:13 +0900 Subject: [PATCH 04/11] =?UTF-8?q?#121=20/=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EB=B3=B4=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/sopt/uni/di/AppModule.kt | 21 +++++++ .../sopt/uni/presentation/IntroActivity.kt | 28 +++++++++ .../sopt/uni/presentation/SplashActivity.kt | 61 ------------------- .../presentation/home/UpdateDialogFragment.kt | 51 ++++++++-------- 4 files changed, 74 insertions(+), 87 deletions(-) create mode 100644 app/src/main/java/sopt/uni/di/AppModule.kt delete mode 100644 app/src/main/java/sopt/uni/presentation/SplashActivity.kt diff --git a/app/src/main/java/sopt/uni/di/AppModule.kt b/app/src/main/java/sopt/uni/di/AppModule.kt new file mode 100644 index 0000000..8f639de --- /dev/null +++ b/app/src/main/java/sopt/uni/di/AppModule.kt @@ -0,0 +1,21 @@ +package sopt.uni.di + +import android.content.Context +import com.google.android.play.core.appupdate.AppUpdateManager +import com.google.android.play.core.appupdate.AppUpdateManagerFactory +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object AppModule { + + @Provides + @Singleton + fun provideAppUpdateManager(@ApplicationContext context: Context): AppUpdateManager = + AppUpdateManagerFactory.create(context) +} diff --git a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt index a6957ac..aec841d 100644 --- a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt @@ -5,10 +5,14 @@ import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import com.google.android.play.core.appupdate.AppUpdateManager +import com.google.android.play.core.install.model.AppUpdateType +import com.google.android.play.core.install.model.UpdateAvailability import dagger.hilt.android.AndroidEntryPoint import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.data.repository.shortgame.ShortGameRepository import sopt.uni.presentation.home.HomeActivity +import sopt.uni.presentation.home.UpdateDialogFragment import sopt.uni.presentation.invite.NickNameActivity import sopt.uni.presentation.invite.ShareInviteCodeActivity import sopt.uni.presentation.onboarding.OnBoardingActivity @@ -19,16 +23,40 @@ import javax.inject.Inject class IntroActivity : AppCompatActivity() { @Inject lateinit var shortGameRepository: ShortGameRepository + + @Inject + lateinit var appUpdateManager: AppUpdateManager + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) installSplashScreen() + checkUpdateAvailability() checkUserStatus() // 메모장 초기화 shortGameRepository.setMemoText("") } + private fun checkUpdateAvailability() { + val appUpdateInfoTask = appUpdateManager.appUpdateInfo + appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> + if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( + AppUpdateType.IMMEDIATE, + ) + ) { + showUpdateDialog() + } + } + } + + private fun showUpdateDialog() { + UpdateDialogFragment().show( + supportFragmentManager, + "UpdateDialog", + ) + } + private fun checkUserStatus() { if (SparkleStorage.accessToken != null) { Log.e("accessToken", SparkleStorage.accessToken.toString()) diff --git a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt b/app/src/main/java/sopt/uni/presentation/SplashActivity.kt deleted file mode 100644 index b464e6c..0000000 --- a/app/src/main/java/sopt/uni/presentation/SplashActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package sopt.uni.presentation - -import android.os.Bundle -import androidx.lifecycle.lifecycleScope -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import sopt.uni.R -import sopt.uni.data.datasource.local.SparkleStorage -import sopt.uni.databinding.ActivitySplashBinding -import sopt.uni.presentation.home.HomeActivity -import sopt.uni.presentation.home.UpdateDialogFragment -import sopt.uni.presentation.invite.NickNameActivity -import sopt.uni.presentation.onboarding.OnBoardingActivity -import sopt.uni.util.binding.BindingActivity -import sopt.uni.util.extension.startActivity - -@AndroidEntryPoint -class SplashActivity : BindingActivity(R.layout.activity_splash) { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(binding.root) - isAvailableUpdateVersion() - - lifecycleScope.launch { - delay(2000) - if (SparkleStorage.accessToken != null) { - if (SparkleStorage.partnerId != -1) { - startActivity() - } else { - startActivity() - } - } else { - if (SparkleStorage.partnerId != -1) { - startActivity() - } else { - startActivity() - } - } - overridePendingTransition(0, 0) - finish() - } - } - - private fun showUpdateDialog() { - UpdateDialogFragment().show( - supportFragmentManager, - "UpdateDialog", - ) - } - - private fun isAvailableUpdateVersion() { - if (SparkleStorage.getUpdateAvailableBoolean(IS_UPDATE_AVAILABLE)) { - showUpdateDialog() - } - } - - companion object { - const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" - } -} diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index 33ce183..0539734 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -2,32 +2,26 @@ package sopt.uni.presentation.home import android.app.Activity import android.os.Bundle +import android.util.Log import android.view.View import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts -import com.google.android.play.core.appupdate.AppUpdateManagerFactory +import com.google.android.play.core.appupdate.AppUpdateManager import com.google.android.play.core.appupdate.AppUpdateOptions import com.google.android.play.core.install.model.AppUpdateType -import com.google.android.play.core.install.model.UpdateAvailability import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.TitleAction2DialogBinding import sopt.uni.presentation.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener +import javax.inject.Inject class UpdateDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { - private val startForResult = - registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { - if (it.resultCode != Activity.RESULT_OK) { - Toast.makeText(requireContext(), "업데이트에 실패했습니다. 다시 시도해주세요.", Toast.LENGTH_SHORT) - .show() - } else { - SparkleStorage.setUpdateAvailableBoolean(IS_UPDATE_AVAILABLE, false) - dismiss() - } - } + @Inject + lateinit var appUpdateManager: AppUpdateManager + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -39,27 +33,32 @@ class UpdateDialogFragment : dismiss() } btnRight.setOnSingleClickListener { - requestUpdate() + updateSparkle() } } } - private fun requestUpdate() { - val appUpdateManager = AppUpdateManagerFactory.create(requireContext()) - val appUpdateInfoTask = appUpdateManager.appUpdateInfo - appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> - if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed( - AppUpdateType.IMMEDIATE, - ) - ) { - appUpdateManager.startUpdateFlowForResult( - appUpdateInfo, - startForResult, - AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build(), + private fun updateSparkle() { + appUpdateManager.startUpdateFlowForResult( + appUpdateManager.appUpdateInfo.result, + startForResult, + AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build(), + ) + } + + private val startForResult = + registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { + if (it.resultCode != Activity.RESULT_OK) { + Toast.makeText(requireContext(), "업데이트에 실패했습니다. 다시 시도해주세요.", Toast.LENGTH_SHORT) + .show() + Log.e("update", it.resultCode.toString()) + } else { + SparkleStorage.setUpdateAvailableBoolean( + UpdateDialogFragment.IS_UPDATE_AVAILABLE, + true, ) } } - } companion object { const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" From 8f05db01be7edf8afee13dff054ead5050a43ea0 Mon Sep 17 00:00:00 2001 From: sub101 Date: Sun, 28 Jan 2024 23:17:56 +0900 Subject: [PATCH 05/11] =?UTF-8?q?#121=20/=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=8C=9D=EC=97=85=20=EB=B2=84=ED=8A=BC=20=EB=88=84?= =?UTF-8?q?=EB=A5=B4=EB=A9=B4=20=EC=95=B1=20=EA=BA=BC=EC=A7=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- app/src/main/java/sopt/uni/presentation/IntroActivity.kt | 7 ++++++- .../sopt/uni/presentation/home/UpdateDialogFragment.kt | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index eea532b..d3deb93 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { applicationId "sopt.uni" minSdk 28 targetSdk 33 - versionCode 4 - versionName "1.0.1" + versionCode 3 + versionName "1.0.0" buildConfigField "String", "BASE_URL", properties["BASE_URL"] diff --git a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt index aec841d..ef97038 100644 --- a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt @@ -17,6 +17,7 @@ import sopt.uni.presentation.invite.NickNameActivity import sopt.uni.presentation.invite.ShareInviteCodeActivity import sopt.uni.presentation.onboarding.OnBoardingActivity import sopt.uni.util.extension.startActivity +import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint @@ -32,7 +33,6 @@ class IntroActivity : AppCompatActivity() { installSplashScreen() checkUpdateAvailability() - checkUserStatus() // 메모장 초기화 shortGameRepository.setMemoText("") @@ -46,8 +46,13 @@ class IntroActivity : AppCompatActivity() { ) ) { showUpdateDialog() + } else { + checkUserStatus() } } + appUpdateInfoTask.addOnFailureListener {exception -> + Timber.tag("inappUpdate").e("업데이트 체크 실패: ${exception.message}") + } } private fun showUpdateDialog() { diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index 0539734..6cdcc04 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -9,6 +9,7 @@ import androidx.activity.result.contract.ActivityResultContracts import com.google.android.play.core.appupdate.AppUpdateManager import com.google.android.play.core.appupdate.AppUpdateOptions import com.google.android.play.core.install.model.AppUpdateType +import dagger.hilt.android.AndroidEntryPoint import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.TitleAction2DialogBinding @@ -16,6 +17,7 @@ import sopt.uni.presentation.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener import javax.inject.Inject +@AndroidEntryPoint class UpdateDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { From 4774c974b57cfd9c6dc3874cf1c37e1240a3e31f Mon Sep 17 00:00:00 2001 From: l2zh Date: Mon, 29 Jan 2024 00:16:21 +0900 Subject: [PATCH 06/11] =?UTF-8?q?#121=20/=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=ED=94=84=EB=9E=98=EA=B7=B8=EB=A8=BC?= =?UTF-8?q?=ED=8A=B8=20=EA=B8=B0=EB=B3=B8=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=91=20setLayoutSizeRatio=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 15 ++++---- .../sopt/uni/presentation/IntroActivity.kt | 3 +- .../presentation/home/UpdateDialogFragment.kt | 5 ++- .../mypage/MypageAccountDialogFragment.kt | 5 ++- .../mypage/MypageDatePickerDialogFragment.kt | 4 +- .../dialog/CreateShortGameDialogFragment.kt | 2 +- .../presentation/timer/TimerDialogFragment.kt | 2 +- .../wish/fragment/NewWishDialogFragment.kt | 2 +- .../wish/fragment/UseWishDialogFragment.kt | 2 +- .../uni/util/binding/BindingDialogFragment.kt | 38 +++++++++++-------- app/src/main/res/values/dimens.xml | 3 -- 11 files changed, 45 insertions(+), 36 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 773fe0f..4e2d52b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,10 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt index ef97038..23a8ee1 100644 --- a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt @@ -50,8 +50,9 @@ class IntroActivity : AppCompatActivity() { checkUserStatus() } } - appUpdateInfoTask.addOnFailureListener {exception -> + appUpdateInfoTask.addOnFailureListener { exception -> Timber.tag("inappUpdate").e("업데이트 체크 실패: ${exception.message}") + showUpdateDialog() } } diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index 6cdcc04..ec6c5c4 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -13,7 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.TitleAction2DialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener import javax.inject.Inject @@ -26,6 +26,7 @@ class UpdateDialogFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(0.778f, 0.2f) with(binding) { dialogTitle.setText(getString(R.string.update_dialog_title)) @@ -56,7 +57,7 @@ class UpdateDialogFragment : Log.e("update", it.resultCode.toString()) } else { SparkleStorage.setUpdateAvailableBoolean( - UpdateDialogFragment.IS_UPDATE_AVAILABLE, + IS_UPDATE_AVAILABLE, true, ) } diff --git a/app/src/main/java/sopt/uni/presentation/mypage/MypageAccountDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/mypage/MypageAccountDialogFragment.kt index 6a54c84..67ccbb6 100644 --- a/app/src/main/java/sopt/uni/presentation/mypage/MypageAccountDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/mypage/MypageAccountDialogFragment.kt @@ -9,15 +9,16 @@ import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.NoBodyAction2DialogBinding import sopt.uni.databinding.TitleAction2DialogBinding import sopt.uni.di.ServicePool -import sopt.uni.presentation.BindingDialogFragment import sopt.uni.presentation.invite.NickNameActivity import sopt.uni.presentation.login.LoginActivity +import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener class MypageAccountLogoutDialogFragment : BindingDialogFragment(R.layout.no_body_action2_dialog) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(0.778f, 0.16f) with(binding) { dialogTitle.setText(getString(R.string.logout_dialog_title)) @@ -47,6 +48,7 @@ class MypageAccountDeleteDialogFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(0.778f, 0.22f) with(binding) { dialogTitle.setText(getString(R.string.delete_dialog_title)) @@ -77,6 +79,7 @@ class MypageAccountCoupleDisconnectDialogFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(0.778f, 0.22f) with(binding) { dialogTitle.setText(getString(R.string.disconnect_dialog_title)) diff --git a/app/src/main/java/sopt/uni/presentation/mypage/MypageDatePickerDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/mypage/MypageDatePickerDialogFragment.kt index d5904b8..b75fd0d 100644 --- a/app/src/main/java/sopt/uni/presentation/mypage/MypageDatePickerDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/mypage/MypageDatePickerDialogFragment.kt @@ -4,14 +4,13 @@ import android.os.Bundle import android.view.View import sopt.uni.R import sopt.uni.databinding.DatepickerDialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener import java.util.Calendar class MypageDatePickerDialogFragment : BindingDialogFragment( R.layout.datepicker_dialog, - isWrapContent = true, ) { private var listener: DatePickerDialogListener? = null @@ -21,6 +20,7 @@ class MypageDatePickerDialogFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(0.77f, 0.34f) setMaxDate() diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt index 1384986..cb9886d 100644 --- a/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import sopt.uni.R import sopt.uni.databinding.TitleAction2DialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment class CreateShortGameDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { diff --git a/app/src/main/java/sopt/uni/presentation/timer/TimerDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/timer/TimerDialogFragment.kt index bbdf9e4..b57ecbb 100644 --- a/app/src/main/java/sopt/uni/presentation/timer/TimerDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/timer/TimerDialogFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import sopt.uni.R import sopt.uni.databinding.TitleAction2DialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener class TimerDialogFragment : diff --git a/app/src/main/java/sopt/uni/presentation/wish/fragment/NewWishDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/wish/fragment/NewWishDialogFragment.kt index cab0cb6..273e9be 100644 --- a/app/src/main/java/sopt/uni/presentation/wish/fragment/NewWishDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/wish/fragment/NewWishDialogFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import sopt.uni.R import sopt.uni.databinding.TitleAction2DialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener class NewWishDialogFragment : diff --git a/app/src/main/java/sopt/uni/presentation/wish/fragment/UseWishDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/wish/fragment/UseWishDialogFragment.kt index a18812d..0b1efa5 100644 --- a/app/src/main/java/sopt/uni/presentation/wish/fragment/UseWishDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/wish/fragment/UseWishDialogFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import sopt.uni.R import sopt.uni.databinding.TitleAction2DialogBinding -import sopt.uni.presentation.BindingDialogFragment +import sopt.uni.util.binding.BindingDialogFragment class UseWishDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { diff --git a/app/src/main/java/sopt/uni/util/binding/BindingDialogFragment.kt b/app/src/main/java/sopt/uni/util/binding/BindingDialogFragment.kt index f87624e..89f8382 100644 --- a/app/src/main/java/sopt/uni/util/binding/BindingDialogFragment.kt +++ b/app/src/main/java/sopt/uni/util/binding/BindingDialogFragment.kt @@ -1,5 +1,7 @@ -package sopt.uni.presentation +package sopt.uni.util.binding +import android.graphics.Color +import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -10,21 +12,11 @@ import androidx.databinding.ViewDataBinding import androidx.fragment.app.DialogFragment import sopt.uni.R -abstract class BindingDialogFragment( +abstract class BindingDialogFragment( @LayoutRes private val layoutRes: Int, - private val isWrapContent: Boolean = false, -) : - DialogFragment() { - private var _binding: B? = null - val binding get() = requireNotNull(_binding!!) { "${this::class.java.simpleName}에서 에러가 발생했습니다." } - - override fun onStart() { - super.onStart() - val width = if (isWrapContent) ViewGroup.LayoutParams.WRAP_CONTENT else resources.getDimensionPixelSize(R.dimen.dialog_width) - val height = if (isWrapContent) ViewGroup.LayoutParams.WRAP_CONTENT else resources.getDimensionPixelSize(R.dimen.dialog_height) - dialog?.window?.setLayout(width, height) - dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent) - } +) : DialogFragment() { + private var _binding: T? = null + protected val binding get() = _binding ?: error(getString(R.string.binding_error)) override fun onCreateView( inflater: LayoutInflater, @@ -35,8 +27,22 @@ abstract class BindingDialogFragment( return binding.root } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + } + + protected fun setLayoutSizeRatio(widthPercent: Float, heightPercent: Float) { + context?.resources?.displayMetrics?.let { metrics -> + binding.root.layoutParams.apply { + width = ((metrics.widthPixels * widthPercent).toInt()) + height = ((metrics.heightPixels * heightPercent).toInt()) + } + } + } + override fun onDestroyView() { - super.onDestroyView() _binding = null + super.onDestroyView() } } diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 52ab39c..a04114a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,9 +3,6 @@ 158dp 49dp 328dp - 300dp - 165dp - 48dp From 4fb0c97bbc9f0dbf78e24a113d00b221cedad45e Mon Sep 17 00:00:00 2001 From: l2zh Date: Mon, 29 Jan 2024 01:32:52 +0900 Subject: [PATCH 07/11] =?UTF-8?q?#121=20/=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=BD=9C=EB=B0=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/uni/presentation/IntroActivity.kt | 20 +++++++++++++------ .../presentation/home/UpdateDialogFragment.kt | 14 ++++++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt index 23a8ee1..0f072c0 100644 --- a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt @@ -21,7 +21,7 @@ import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint -class IntroActivity : AppCompatActivity() { +class IntroActivity : AppCompatActivity(), UpdateDialogFragment.UpdateDialogListener { @Inject lateinit var shortGameRepository: ShortGameRepository @@ -52,15 +52,23 @@ class IntroActivity : AppCompatActivity() { } appUpdateInfoTask.addOnFailureListener { exception -> Timber.tag("inappUpdate").e("업데이트 체크 실패: ${exception.message}") - showUpdateDialog() + checkUserStatus() } } + override fun onDialogDismissed() { + checkUserStatus() + } + + override fun onUpdateComplete() { + checkUserStatus() + } + private fun showUpdateDialog() { - UpdateDialogFragment().show( - supportFragmentManager, - "UpdateDialog", - ) + val dialogFragment = UpdateDialogFragment().apply { + updateDialogListener = this@IntroActivity + } + dialogFragment.show(supportFragmentManager, "UpdateDialog") } private fun checkUserStatus() { diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index ec6c5c4..a7f6a04 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.os.Bundle import android.util.Log import android.view.View -import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import com.google.android.play.core.appupdate.AppUpdateManager import com.google.android.play.core.appupdate.AppUpdateOptions @@ -15,12 +14,15 @@ import sopt.uni.data.datasource.local.SparkleStorage import sopt.uni.databinding.TitleAction2DialogBinding import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener +import sopt.uni.util.extension.showSnackbar import javax.inject.Inject @AndroidEntryPoint class UpdateDialogFragment : BindingDialogFragment(R.layout.title_action2_dialog) { + lateinit var updateDialogListener: UpdateDialogListener + @Inject lateinit var appUpdateManager: AppUpdateManager @@ -34,6 +36,7 @@ class UpdateDialogFragment : btnRight.setText(getString(R.string.update_dialog_ok)) btnLeft.setOnSingleClickListener { dismiss() + updateDialogListener.onDialogDismissed() } btnRight.setOnSingleClickListener { updateSparkle() @@ -52,18 +55,23 @@ class UpdateDialogFragment : private val startForResult = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { if (it.resultCode != Activity.RESULT_OK) { - Toast.makeText(requireContext(), "업데이트에 실패했습니다. 다시 시도해주세요.", Toast.LENGTH_SHORT) - .show() + showSnackbar(binding.root, "업데이트에 실패했습니다. 다시 시도해주세요.") Log.e("update", it.resultCode.toString()) } else { SparkleStorage.setUpdateAvailableBoolean( IS_UPDATE_AVAILABLE, true, ) + updateDialogListener.onUpdateComplete() } } companion object { const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" } + + interface UpdateDialogListener { + fun onUpdateComplete() + fun onDialogDismissed() + } } From ad70662900207d120aa87690b6cfead3dfaf509c Mon Sep 17 00:00:00 2001 From: l2zh Date: Mon, 29 Jan 2024 22:55:00 +0900 Subject: [PATCH 08/11] =?UTF-8?q?#121=20/=20updateSparkle()=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 15 +++++++------- .../presentation/home/UpdateDialogFragment.kt | 20 ++++++++++++++----- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 4e2d52b..5acfade 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,10 +1,9 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index a7f6a04..ae07702 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -8,6 +8,7 @@ import androidx.activity.result.contract.ActivityResultContracts import com.google.android.play.core.appupdate.AppUpdateManager import com.google.android.play.core.appupdate.AppUpdateOptions import com.google.android.play.core.install.model.AppUpdateType +import com.google.android.play.core.install.model.UpdateAvailability import dagger.hilt.android.AndroidEntryPoint import sopt.uni.R import sopt.uni.data.datasource.local.SparkleStorage @@ -15,6 +16,7 @@ import sopt.uni.databinding.TitleAction2DialogBinding import sopt.uni.util.binding.BindingDialogFragment import sopt.uni.util.extension.setOnSingleClickListener import sopt.uni.util.extension.showSnackbar +import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint @@ -45,11 +47,19 @@ class UpdateDialogFragment : } private fun updateSparkle() { - appUpdateManager.startUpdateFlowForResult( - appUpdateManager.appUpdateInfo.result, - startForResult, - AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build(), - ) + appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> + if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && + appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) + ) { + appUpdateManager.startUpdateFlowForResult( + appUpdateInfo, + startForResult, + AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build(), + ) + } + }.addOnFailureListener { + Timber.tag("updateSparkleFail").e("업뎃실패ㅠ") + } } private val startForResult = From e35575a6b73562cb6cf6a725b449512c11cb8ed8 Mon Sep 17 00:00:00 2001 From: l2zh Date: Tue, 30 Jan 2024 10:18:43 +0900 Subject: [PATCH 09/11] =?UTF-8?q?#121=20/=20=EC=BD=9C=EB=B0=B1=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EB=9E=8C=EB=8B=A4=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/uni/presentation/IntroActivity.kt | 18 ++++++------------ .../presentation/home/UpdateDialogFragment.kt | 13 +++---------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt index 0f072c0..947741b 100644 --- a/app/src/main/java/sopt/uni/presentation/IntroActivity.kt +++ b/app/src/main/java/sopt/uni/presentation/IntroActivity.kt @@ -21,7 +21,7 @@ import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint -class IntroActivity : AppCompatActivity(), UpdateDialogFragment.UpdateDialogListener { +class IntroActivity : AppCompatActivity() { @Inject lateinit var shortGameRepository: ShortGameRepository @@ -56,18 +56,12 @@ class IntroActivity : AppCompatActivity(), UpdateDialogFragment.UpdateDialogList } } - override fun onDialogDismissed() { - checkUserStatus() - } - - override fun onUpdateComplete() { - checkUserStatus() - } - private fun showUpdateDialog() { - val dialogFragment = UpdateDialogFragment().apply { - updateDialogListener = this@IntroActivity - } + val dialogFragment = UpdateDialogFragment( + onDismissOrComplete = { + checkUserStatus() + }, + ) dialogFragment.show(supportFragmentManager, "UpdateDialog") } diff --git a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt index ae07702..87222f1 100644 --- a/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt +++ b/app/src/main/java/sopt/uni/presentation/home/UpdateDialogFragment.kt @@ -20,11 +20,9 @@ import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint -class UpdateDialogFragment : +class UpdateDialogFragment(private val onDismissOrComplete: () -> Unit) : BindingDialogFragment(R.layout.title_action2_dialog) { - lateinit var updateDialogListener: UpdateDialogListener - @Inject lateinit var appUpdateManager: AppUpdateManager @@ -38,7 +36,7 @@ class UpdateDialogFragment : btnRight.setText(getString(R.string.update_dialog_ok)) btnLeft.setOnSingleClickListener { dismiss() - updateDialogListener.onDialogDismissed() + onDismissOrComplete() } btnRight.setOnSingleClickListener { updateSparkle() @@ -72,16 +70,11 @@ class UpdateDialogFragment : IS_UPDATE_AVAILABLE, true, ) - updateDialogListener.onUpdateComplete() + onDismissOrComplete() } } companion object { const val IS_UPDATE_AVAILABLE = "IS_UPDATE_AVAILABLE" } - - interface UpdateDialogListener { - fun onUpdateComplete() - fun onDialogDismissed() - } } From 48463221991b4d1ca168a5d949f3e41d57fccca9 Mon Sep 17 00:00:00 2001 From: sub101 Date: Sat, 17 Feb 2024 23:31:20 +0900 Subject: [PATCH 10/11] =?UTF-8?q?#121=20/=20ui=20=EB=A7=88=EC=A7=84?= =?UTF-8?q?=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/title_action2_dialog.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/title_action2_dialog.xml b/app/src/main/res/layout/title_action2_dialog.xml index 73e347b..38f7a3b 100644 --- a/app/src/main/res/layout/title_action2_dialog.xml +++ b/app/src/main/res/layout/title_action2_dialog.xml @@ -47,7 +47,7 @@ android:layout_height="wrap_content" android:layout_marginTop="30dp" android:layout_marginEnd="10dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="45dp" android:paddingHorizontal="14dp" android:paddingVertical="7dp" android:text="@string/dialog_cancel_text" @@ -62,7 +62,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginHorizontal="10dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="45dp" android:paddingHorizontal="14dp" android:paddingVertical="7dp" android:text="@string/dialog_ok_text" From 710b7253852d3dee2164b51142934e8cfea10edc Mon Sep 17 00:00:00 2001 From: sub101 Date: Sun, 18 Feb 2024 22:13:53 +0900 Subject: [PATCH 11/11] =?UTF-8?q?#121/versionCode,=20versionName=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 3 ++- app/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 5acfade..9f71c83 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,7 @@ + - + diff --git a/app/build.gradle b/app/build.gradle index d3deb93..eea532b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { applicationId "sopt.uni" minSdk 28 targetSdk 33 - versionCode 3 - versionName "1.0.0" + versionCode 4 + versionName "1.0.1" buildConfigField "String", "BASE_URL", properties["BASE_URL"]