Request notification permission for geofence alerts
This commit is contained in:
@@ -5,6 +5,7 @@ import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.provider.Settings
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
@@ -12,6 +13,8 @@ import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
private var pendingNotificationPermissionResult: MethodChannel.Result? = null
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
|
||||
@@ -67,9 +70,10 @@ class MainActivity : FlutterActivity() {
|
||||
}
|
||||
}
|
||||
"getNotificationPermissionStatus" -> {
|
||||
result.success(
|
||||
if (isNotificationPermissionEnabled()) "enabled" else "disabled",
|
||||
)
|
||||
result.success(getNotificationPermissionStatusValue())
|
||||
}
|
||||
"requestNotificationPermission" -> {
|
||||
requestNotificationPermission(result)
|
||||
}
|
||||
"openNotificationSettings" -> {
|
||||
val intent =
|
||||
@@ -85,6 +89,70 @@ class MainActivity : FlutterActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<out String>,
|
||||
grantResults: IntArray,
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
|
||||
if (requestCode != notificationPermissionRequestCode) {
|
||||
return
|
||||
}
|
||||
|
||||
pendingNotificationPermissionResult?.success(getNotificationPermissionStatusValue())
|
||||
pendingNotificationPermissionResult = null
|
||||
}
|
||||
|
||||
private fun requestNotificationPermission(result: MethodChannel.Result) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
result.success(getNotificationPermissionStatusValue())
|
||||
return
|
||||
}
|
||||
|
||||
if (pendingNotificationPermissionResult != null) {
|
||||
result.error(
|
||||
"request_in_progress",
|
||||
"Notification permission request is already in progress",
|
||||
null,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
|
||||
PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
result.success(getNotificationPermissionStatusValue())
|
||||
return
|
||||
}
|
||||
|
||||
pendingNotificationPermissionResult = result
|
||||
ActivityCompat.requestPermissions(
|
||||
this,
|
||||
arrayOf(Manifest.permission.POST_NOTIFICATIONS),
|
||||
notificationPermissionRequestCode,
|
||||
)
|
||||
}
|
||||
|
||||
private fun getNotificationPermissionStatusValue(): String {
|
||||
if (isNotificationPermissionEnabled()) {
|
||||
return "enabled"
|
||||
}
|
||||
|
||||
val runtimePermissionGranted =
|
||||
Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
|
||||
ContextCompat.checkSelfPermission(
|
||||
this,
|
||||
Manifest.permission.POST_NOTIFICATIONS,
|
||||
) == PackageManager.PERMISSION_GRANTED
|
||||
|
||||
return if (!runtimePermissionGranted) {
|
||||
"requestable"
|
||||
} else {
|
||||
"settings_required"
|
||||
}
|
||||
}
|
||||
|
||||
private fun isNotificationPermissionEnabled(): Boolean {
|
||||
val runtimePermissionGranted =
|
||||
Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
|
||||
@@ -95,4 +163,8 @@ class MainActivity : FlutterActivity() {
|
||||
return runtimePermissionGranted &&
|
||||
NotificationManagerCompat.from(this).areNotificationsEnabled()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val notificationPermissionRequestCode = 4102
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user