diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
index b42f4cf..f072300 100644
--- a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
+++ b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
@@ -1,6 +1,7 @@
package im.angry.openeuicc.ui
import android.annotation.SuppressLint
+import android.app.AlertDialog
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@@ -15,7 +16,9 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.ProgressBar
+import android.widget.Toast
import androidx.activity.enableEdgeToEdge
+import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter
@@ -125,16 +128,23 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
}
}
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
private fun ensureNotificationPermissions() {
- val needsNotificationPerms = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU;
- val notificationPermsGranted =
- needsNotificationPerms && checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
- if (needsNotificationPerms && !notificationPermsGranted) {
- requestPermissions(
- arrayOf(android.Manifest.permission.POST_NOTIFICATIONS),
- PERMISSION_REQUEST_CODE
- )
+ val permission = android.Manifest.permission.POST_NOTIFICATIONS
+ if (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) return
+ if (!shouldShowRequestPermissionRationale(permission)) {
+ requestPermissions(arrayOf(permission), PERMISSION_REQUEST_CODE)
+ return
}
+ AlertDialog.Builder(this)
+ .setTitle(R.string.notification_permission_request_rationale_title)
+ .setMessage(R.string.notification_permission_request_rationale_message)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ requestPermissions(arrayOf(permission), PERMISSION_REQUEST_CODE)
+ }
+ .create()
+ .show()
}
private suspend fun init(fromUsbEvent: Boolean = false) {
@@ -209,7 +219,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
viewPager.currentItem = 0
}
- if (pages.size > 0) {
+ if (pages.isNotEmpty() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ensureNotificationPermissions()
}
diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml
index e09da9f..13e22b1 100644
--- a/app-common/src/main/res/values/strings.xml
+++ b/app-common/src/main/res/values/strings.xml
@@ -5,6 +5,9 @@
Help
+ Notification Permission Required
+ During the download process, notification permissions are required so that the app does not need to stay in the foreground
+
Reload Slots
Unknown