Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MainActivity : BaseActivity(){
- companion object{
- private const val UPDATE_APP_REQUEST_CODE = 50
- }
- private var appUpdateManager: AppUpdateManager? = null
- override fun onCreate(icicle: Bundle?) {
- super.onCreate(icicle)
- setContentView(R.layout.activity_main)
- prefser.get(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date::class.javaObjectType, null)
- .let{
- if (it == null || !TimeDateUtils.isSameDay(it, Date())) {
- appUpdateManager = AppUpdateManagerFactory.create(this)
- appUpdateManager!!.registerListener(listener)
- checkAppUpdate()
- }
- }
- }
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { //По сути нужно заменить этот метод на не deprecated
- if (requestCode == UPDATE_APP_REQUEST_CODE) {
- when (resultCode) {
- Activity.RESULT_OK -> Timber.d("Update was approved by user. Good to go.")
- Activity.RESULT_CANCELED -> prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
- }
- }
- super.onActivityResult(requestCode, resultCode, data)
- }
- private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ //Моя реализация замены метода onActivityResult. Нужно при вызове только указать интент, чего к сожалению я не могу сделать так как не нашел где его можно взять
- if (it.resultCode == UPDATE_APP_REQUEST_CODE) {
- when (it.resultCode) {
- Activity.RESULT_OK -> Timber.d("Update was approved by user. Good to go.")
- Activity.RESULT_CANCELED -> prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
- }
- }
- }
- private fun checkAppUpdate() {
- val task = appUpdateManager?.appUpdateInfo
- task?.addOnSuccessListener {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
- if (it.updateAvailability() == UPDATE_AVAILABLE) {
- if (it.isUpdateTypeAllowed(FLEXIBLE)) {
- appUpdateManager?.startUpdateFlowForResult(
- it,
- FLEXIBLE,
- this,
- UPDATE_APP_REQUEST_CODE //request code для интента, который вызывается методом startUpdateFlowForResult
- )
- } else if (it.isUpdateTypeAllowed(IMMEDIATE)) {
- appUpdateManager?.startUpdateFlowForResult(
- it,
- IMMEDIATE,
- this,
- UPDATE_APP_REQUEST_CODE
- )
- }
- }
- if (it.installStatus() == InstallStatus.DOWNLOADED) {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
- showDialog()
- }
- task.addOnFailureListener {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
- Timber.e(it)
- }
- }
- }
- private val listener = InstallStateUpdatedListener { state -> //в этом listener не приходят события связанные с Activity.RESULT_CANCELED
- if (state.installStatus() == InstallStatus.DOWNLOADED) {
- showDialog()
- }
- }
- private fun showDialog() {
- DialogUtils.showDialog(this, R.layout.dialog_in_app_update,
- resources.getString(R.string.yes_text), { updateApp() },
- getString(R.string.later), {},
- null, {})
- }
- private fun updateApp() {
- appUpdateManager?.completeUpdate()
- prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
- }
- private fun unregisterInAppUpdateListener() {
- appUpdateManager!!.unregisterListener(listener)
- }
- override fun onDestroy() {
- super.onDestroy()
- unregisterInAppUpdateListener()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment