@@ -4,6 +4,7 @@ import android.app.Activity
44import android.content.pm.PackageManager
55import android.os.Build
66import android.os.Bundle
7+ import android.os.SystemClock
78import android.view.MotionEvent
89import android.view.ViewGroup
910import androidx.annotation.RequiresApi
@@ -16,9 +17,12 @@ internal class PushActivationActivity : Activity() {
1617
1718 private val mindboxNotificationManager by mindboxInject { mindboxNotificationManager }
1819 private val requestPermissionManager by mindboxInject { requestPermissionManager }
20+ private var shouldCheckDialogShowing = false
21+ private val resumeTimes = mutableListOf<Long >()
1922
2023 companion object {
2124 private const val PERMISSION_REQUEST_CODE = 125129
25+ private const val TIME_BETWEEN_RESUME = 350
2226 }
2327
2428 @RequiresApi(Build .VERSION_CODES .M )
@@ -39,27 +43,30 @@ internal class PushActivationActivity : Activity() {
3943 granted -> {
4044 mindboxLogI(" User clicked 'allow' in request permission" )
4145 Mindbox .updateNotificationPermissionStatus(this )
46+ finish()
4247 }
4348
4449 permissionDenied && ! shouldShowRationale -> {
4550 if (mindboxNotificationManager.shouldOpenSettings) {
4651 if (requestPermissionManager.getRequestCount() > 1 ) {
4752 mindboxLogI(" User already rejected permission two times, try open settings" )
4853 mindboxNotificationManager.openNotificationSettings(this )
54+ finish()
4955 } else {
50- requestPermissionManager.decreaseRequestCounter( )
51- mindboxLogI( " User dismissed request " )
56+ mindboxLogI( " Awaiting show dialog " )
57+ shouldCheckDialogShowing = true
5258 }
5359 } else {
5460 mindboxNotificationManager.shouldOpenSettings = true
61+ finish()
5562 }
5663 }
5764
5865 permissionDenied && shouldShowRationale -> {
5966 mindboxLogI(" User rejected first permission request" )
67+ finish()
6068 }
6169 }
62- finish()
6370 }
6471
6572 @RequiresApi(Build .VERSION_CODES .TIRAMISU )
@@ -74,6 +81,23 @@ internal class PushActivationActivity : Activity() {
7481 requestPermissions(arrayOf(Constants .POST_NOTIFICATION ), PERMISSION_REQUEST_CODE )
7582 }
7683
84+ override fun onResume () {
85+ resumeTimes.add(SystemClock .elapsedRealtime())
86+ if (shouldCheckDialogShowing) {
87+ if ((resumeTimes.last() - resumeTimes.first()) < TIME_BETWEEN_RESUME ) {
88+ resumeTimes.clear()
89+ mindboxLogI(" System dialog not shown -> open settings" )
90+ mindboxNotificationManager.openNotificationSettings(this )
91+ } else {
92+ mindboxLogI(" User dismiss permission request " )
93+ requestPermissionManager.decreaseRequestCounter()
94+ }
95+ shouldCheckDialogShowing = false
96+ finish()
97+ }
98+ super .onResume()
99+ }
100+
77101 override fun onTouchEvent (event : MotionEvent ): Boolean {
78102 if (event.action == MotionEvent .ACTION_DOWN ) {
79103 finish()
0 commit comments