@@ -19,8 +19,8 @@ import com.google.android.play.core.install.model.UpdateAvailability
1919import com.threegap.bitnagil.presentation.BuildConfig
2020import kotlinx.coroutines.delay
2121import kotlinx.coroutines.launch
22+ import kotlinx.coroutines.suspendCancellableCoroutine
2223import kotlin.coroutines.resume
23- import kotlin.coroutines.suspendCoroutine
2424import kotlin.system.exitProcess
2525
2626private const val PACKAGE_NAME = BuildConfig .APPLICATION_ID
@@ -95,19 +95,25 @@ fun updateAvailable(): UpdateAvailableState {
9595 return isUpdateAvailable
9696}
9797
98- private suspend fun Context.checkForUpdateAvailability (): UpdateAvailableState = suspendCoroutine { continuation ->
98+ private suspend fun Context.checkForUpdateAvailability (): UpdateAvailableState = suspendCancellableCoroutine { continuation ->
9999 val appUpdateManager = AppUpdateManagerFactory .create(this )
100100 val appUpdateInfoTask = appUpdateManager.appUpdateInfo
101101
102102 appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
103- val isAvailable = appUpdateInfo.updateAvailability() == UpdateAvailability .UPDATE_AVAILABLE &&
104- appUpdateInfo.isUpdateTypeAllowed(AppUpdateType .IMMEDIATE )
103+ if (! continuation.isActive) return @addOnSuccessListener
105104
106- val state = if (isAvailable) UpdateAvailableState .NEED_UPDATE else UpdateAvailableState .Latest
105+ val isAvailable = appUpdateInfo.updateAvailability() == UpdateAvailability .UPDATE_AVAILABLE
106+
107+ val isAllowed = appUpdateInfo.isUpdateTypeAllowed(AppUpdateType .IMMEDIATE ) ||
108+ appUpdateInfo.isUpdateTypeAllowed(AppUpdateType .FLEXIBLE )
109+
110+ val state = if (isAvailable && isAllowed) UpdateAvailableState .NEED_UPDATE else UpdateAvailableState .Latest
107111 continuation.resume(state)
108112 }
109113
110114 appUpdateInfoTask.addOnFailureListener {
111- continuation.resume(UpdateAvailableState .NONE )
115+ if (continuation.isActive) {
116+ continuation.resume(UpdateAvailableState .NONE )
117+ }
112118 }
113119}
0 commit comments