Guest User

Untitled

a guest
Sep 7th, 2021
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. class MainActivity : BaseActivity(){
  2.  
  3. companion object{
  4. private const val UPDATE_APP_REQUEST_CODE = 50
  5. }
  6.  
  7. private var appUpdateManager: AppUpdateManager? = null
  8.  
  9. override fun onCreate(icicle: Bundle?) {
  10. super.onCreate(icicle)
  11. setContentView(R.layout.activity_main)
  12.  
  13. prefser.get(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date::class.javaObjectType, null)
  14. .let{
  15. if (it == null || !TimeDateUtils.isSameDay(it, Date())) {
  16. appUpdateManager = AppUpdateManagerFactory.create(this)
  17. appUpdateManager!!.registerListener(listener)
  18. checkAppUpdate()
  19. }
  20. }
  21.  
  22. }
  23.  
  24. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { //По сути нужно заменить этот метод на не deprecated
  25. if (requestCode == UPDATE_APP_REQUEST_CODE) {
  26. when (resultCode) {
  27. Activity.RESULT_OK -> Timber.d("Update was approved by user. Good to go.")
  28. Activity.RESULT_CANCELED -> prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
  29. }
  30. }
  31. super.onActivityResult(requestCode, resultCode, data)
  32.  
  33. }
  34.  
  35. private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ //Моя реализация замены метода onActivityResult. Нужно при вызове только указать интент, чего к сожалению я не могу сделать так как не нашел где его можно взять
  36. if (it.resultCode == UPDATE_APP_REQUEST_CODE) {
  37. when (it.resultCode) {
  38. Activity.RESULT_OK -> Timber.d("Update was approved by user. Good to go.")
  39. Activity.RESULT_CANCELED -> prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
  40. }
  41. }
  42. }
  43.  
  44. private fun checkAppUpdate() {
  45. val task = appUpdateManager?.appUpdateInfo
  46.  
  47. task?.addOnSuccessListener {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
  48.  
  49. if (it.updateAvailability() == UPDATE_AVAILABLE) {
  50. if (it.isUpdateTypeAllowed(FLEXIBLE)) {
  51. appUpdateManager?.startUpdateFlowForResult(
  52. it,
  53. FLEXIBLE,
  54. this,
  55. UPDATE_APP_REQUEST_CODE //request code для интента, который вызывается методом startUpdateFlowForResult
  56. )
  57. } else if (it.isUpdateTypeAllowed(IMMEDIATE)) {
  58. appUpdateManager?.startUpdateFlowForResult(
  59. it,
  60. IMMEDIATE,
  61. this,
  62. UPDATE_APP_REQUEST_CODE
  63. )
  64. }
  65. }
  66. if (it.installStatus() == InstallStatus.DOWNLOADED) {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
  67. showDialog()
  68. }
  69. task.addOnFailureListener {//в этом listener не приходят события связанные с Activity.RESULT_CANCELED
  70. Timber.e(it)
  71. }
  72. }
  73. }
  74.  
  75. private val listener = InstallStateUpdatedListener { state -> //в этом listener не приходят события связанные с Activity.RESULT_CANCELED
  76. if (state.installStatus() == InstallStatus.DOWNLOADED) {
  77. showDialog()
  78. }
  79. }
  80.  
  81. private fun showDialog() {
  82. DialogUtils.showDialog(this, R.layout.dialog_in_app_update,
  83. resources.getString(R.string.yes_text), { updateApp() },
  84. getString(R.string.later), {},
  85. null, {})
  86. }
  87.  
  88. private fun updateApp() {
  89. appUpdateManager?.completeUpdate()
  90. prefser.put(PrefKey.CHECK_LAST_IN_APP_UPDATE, Date())
  91. }
  92.  
  93. private fun unregisterInAppUpdateListener() {
  94. appUpdateManager!!.unregisterListener(listener)
  95. }
  96.  
  97. override fun onDestroy() {
  98. super.onDestroy()
  99. unregisterInAppUpdateListener()
  100. }
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment