feat: improve notification permission request #210

Open
septs wants to merge 4 commits from septs/OpenEUICC:notification-request into master
2 changed files with 22 additions and 9 deletions

View file

@ -1,6 +1,7 @@
package im.angry.openeuicc.ui package im.angry.openeuicc.ui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -15,7 +16,9 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.Toast
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
@ -125,16 +128,23 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
} }
} }
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private fun ensureNotificationPermissions() { private fun ensureNotificationPermissions() {
val needsNotificationPerms = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU; val permission = android.Manifest.permission.POST_NOTIFICATIONS
val notificationPermsGranted = if (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) return
needsNotificationPerms && checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED if (!shouldShowRequestPermissionRationale(permission)) {
if (needsNotificationPerms && !notificationPermsGranted) { requestPermissions(arrayOf(permission), PERMISSION_REQUEST_CODE)
requestPermissions( return
arrayOf(android.Manifest.permission.POST_NOTIFICATIONS),
PERMISSION_REQUEST_CODE
)
} }
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) { private suspend fun init(fromUsbEvent: Boolean = false) {
@ -209,7 +219,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
viewPager.currentItem = 0 viewPager.currentItem = 0
} }
if (pages.size > 0) { if (pages.isNotEmpty() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ensureNotificationPermissions() ensureNotificationPermissions()
} }

View file

@ -5,6 +5,9 @@
<string name="notification_help">Help</string> <string name="notification_help">Help</string>
<string name="notification_permission_request_rationale_title">Notification Permission Required</string>
<string name="notification_permission_request_rationale_message">During the download process, notification permissions are required so that the app does not need to stay in the foreground</string>
<string name="profile_reload_slots">Reload Slots</string> <string name="profile_reload_slots">Reload Slots</string>
<string name="profile_no_enabled_profile">Unknown</string> <string name="profile_no_enabled_profile">Unknown</string>