- 
      
 - 
        
Save saikiran91/6788ad4d00edca30dad3f51aa47a4c5c to your computer and use it in GitHub Desktop.  
| import android.app.Activity | |
| import android.content.Intent | |
| import android.content.IntentSender | |
| import android.os.Bundle | |
| import android.widget.Toast | |
| import androidx.appcompat.app.AppCompatActivity | |
| import androidx.core.content.ContextCompat | |
| import com.google.android.material.snackbar.Snackbar | |
| import com.google.android.play.core.appupdate.AppUpdateManager | |
| import com.google.android.play.core.appupdate.AppUpdateManagerFactory | |
| import com.google.android.play.core.install.InstallState | |
| import com.google.android.play.core.install.InstallStateUpdatedListener | |
| import com.google.android.play.core.install.model.AppUpdateType | |
| import com.google.android.play.core.install.model.InstallStatus | |
| import com.google.android.play.core.install.model.UpdateAvailability | |
| import timber.log.Timber | |
| class BaseUpdateCheckActivity : AppCompatActivity() { | |
| private val appUpdateManager: AppUpdateManager by lazy { AppUpdateManagerFactory.create(this) } | |
| private val appUpdatedListener: InstallStateUpdatedListener by lazy { | |
| object : InstallStateUpdatedListener { | |
| override fun onStateUpdate(installState: InstallState) { | |
| when { | |
| installState.installStatus() == InstallStatus.DOWNLOADED -> popupSnackbarForCompleteUpdate() | |
| installState.installStatus() == InstallStatus.INSTALLED -> appUpdateManager.unregisterListener(this) | |
| else -> Timber.d("InstallStateUpdatedListener: state: %s", installState.installStatus()) | |
| } | |
| } | |
| } | |
| } | |
| override fun onCreate(savedInstanceState: Bundle?) { | |
| super.onCreate(savedInstanceState) | |
| setContentView(R.layout.main_ad_view) | |
| checkForAppUpdate() | |
| } | |
| private fun checkForAppUpdate() { | |
| // Returns an intent object that you use to check for an update. | |
| val appUpdateInfoTask = appUpdateManager.appUpdateInfo | |
| // Checks that the platform will allow the specified type of update. | |
| appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> | |
| if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { | |
| // Request the update. | |
| try { | |
| val installType = when { | |
| appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE) -> AppUpdateType.FLEXIBLE | |
| appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) -> AppUpdateType.IMMEDIATE | |
| else -> null | |
| } | |
| if (installType == AppUpdateType.FLEXIBLE) appUpdateManager.registerListener(appUpdatedListener) | |
| appUpdateManager.startUpdateFlowForResult( | |
| appUpdateInfo, | |
| installType!!, | |
| this, | |
| APP_UPDATE_REQUEST_CODE) | |
| } catch (e: IntentSender.SendIntentException) { | |
| e.printStackTrace() | |
| } | |
| } | |
| } | |
| } | |
| override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { | |
| super.onActivityResult(requestCode, resultCode, data) | |
| if (requestCode == APP_UPDATE_REQUEST_CODE) { | |
| if (resultCode != Activity.RESULT_OK) { | |
| Toast.makeText(this, | |
| "App Update failed, please try again on the next app launch.", | |
| Toast.LENGTH_SHORT) | |
| .show() | |
| } | |
| } | |
| } | |
| private fun popupSnackbarForCompleteUpdate() { | |
| val snackbar = Snackbar.make( | |
| findViewById(R.id.drawer_layout), | |
| "An update has just been downloaded.", | |
| Snackbar.LENGTH_INDEFINITE) | |
| snackbar.setAction("RESTART") { appUpdateManager.completeUpdate() } | |
| snackbar.setActionTextColor(ContextCompat.getColor(this, R.color.accent)) | |
| snackbar.show() | |
| } | |
| override fun onResume() { | |
| super.onResume() | |
| appUpdateManager | |
| .appUpdateInfo | |
| .addOnSuccessListener { appUpdateInfo -> | |
| // If the update is downloaded but not installed, | |
| // notify the user to complete the update. | |
| if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { | |
| popupSnackbarForCompleteUpdate() | |
| } | |
| //Check if Immediate update is required | |
| try { | |
| if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) { | |
| // If an in-app update is already running, resume the update. | |
| appUpdateManager.startUpdateFlowForResult( | |
| appUpdateInfo, | |
| AppUpdateType.IMMEDIATE, | |
| this, | |
| APP_UPDATE_REQUEST_CODE) | |
| } | |
| } catch (e: IntentSender.SendIntentException) { | |
| e.printStackTrace() | |
| } | |
| } | |
| } | |
| companion object { | |
| private const val APP_UPDATE_REQUEST_CODE = 1991 | |
| } | |
| } | 
Nice Demo thanks
Can u help me, how to import org.xxxxx.R. I'm get a error
e: C:\Users\app\MainActivity.kt: (14, 12): Unresolved reference: saisoft
e: C:\Users\app\MainActivity.kt: (40, 33): Unresolved reference: main_ad_view
e: C:\Users\app\MainActivity.kt: (86, 35): Unresolved reference: drawer_layout
e: C:\Users\app\MainActivity.kt: (90, 74): Unresolved reference: accent
Can u help me, how to import org.xxxxx.R. I'm get a error
e: C:\Users\app\MainActivity.kt: (14, 12): Unresolved reference: saisoft
e: C:\Users\app\MainActivity.kt: (40, 33): Unresolved reference: main_ad_view
e: C:\Users\app\MainActivity.kt: (86, 35): Unresolved reference: drawer_layout
e: C:\Users\app\MainActivity.kt: (90, 74): Unresolved reference: accent
Remove that import and import the R generated for your project
I am trying this piece of code in a fragment, I am not getting an update screen. Can you please help on this, Thanks!! Where activity references are present, there i am using this.activity.
Thanks for example!