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