From c1e4de9e451818b0e6e0c506822efc2984da6db6 Mon Sep 17 00:00:00 2001 From: Niklas Baudy Date: Sat, 11 Jan 2025 20:09:26 +0800 Subject: [PATCH] Permissions: If a permission has not been determined shouldShowRationale is now false, if it has been denied shouldShowRationale is now true. --- .../permissions/helper/AVCapturePermissionHelper.kt | 8 ++++++-- .../permissions/helper/BluetoothPermissionHelper.kt | 10 +++++++--- .../permissions/helper/ContactPermissionHelper.kt | 8 +++++++- .../permissions/helper/GalleryPermissionHelper.kt | 6 +++++- .../helper/LocalNotificationPermissionHelper.kt | 6 +++++- .../permissions/helper/LocationPermissionHelper.kt | 8 ++++++-- .../helper/RemoteNotificationPermissionHelper.kt | 6 +++++- 7 files changed, 41 insertions(+), 11 deletions(-) diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/AVCapturePermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/AVCapturePermissionHelper.kt index 75f669e..989183d 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/AVCapturePermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/AVCapturePermissionHelper.kt @@ -4,6 +4,7 @@ import com.mohamedrejeb.calf.permissions.ExperimentalPermissionsApi import com.mohamedrejeb.calf.permissions.PermissionStatus import platform.AVFoundation.AVAuthorizationStatus import platform.AVFoundation.AVAuthorizationStatusAuthorized +import platform.AVFoundation.AVAuthorizationStatusDenied import platform.AVFoundation.AVAuthorizationStatusNotDetermined import platform.AVFoundation.AVCaptureDevice import platform.AVFoundation.AVMediaType @@ -33,10 +34,13 @@ internal class AVCapturePermissionHelper( PermissionStatus.Granted AVAuthorizationStatusNotDetermined -> + PermissionStatus.Denied(shouldShowRationale = false) + + AVAuthorizationStatusDenied -> PermissionStatus.Denied(shouldShowRationale = true) else -> - PermissionStatus.Denied(shouldShowRationale = false) + PermissionStatus.Denied(shouldShowRationale = true) } onPermissionResult(permissionStatus) @@ -45,4 +49,4 @@ internal class AVCapturePermissionHelper( private fun getCurrentAuthorizationStatus(): AVAuthorizationStatus { return AVCaptureDevice.authorizationStatusForMediaType(type) } -} \ No newline at end of file +} diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/BluetoothPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/BluetoothPermissionHelper.kt index c1c4d3b..7daba4f 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/BluetoothPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/BluetoothPermissionHelper.kt @@ -8,6 +8,7 @@ import platform.CoreBluetooth.CBCentralManagerDelegateProtocol import platform.CoreBluetooth.CBManager import platform.CoreBluetooth.CBManagerAuthorization import platform.CoreBluetooth.CBManagerAuthorizationAllowedAlways +import platform.CoreBluetooth.CBManagerAuthorizationDenied import platform.CoreBluetooth.CBManagerAuthorizationNotDetermined import platform.CoreBluetooth.CBManagerStatePoweredOn import platform.CoreBluetooth.CBManagerStateUnknown @@ -39,10 +40,13 @@ internal class BluetoothPermissionHelper : PermissionHelper { onPermissionResult(PermissionStatus.Granted) CBManagerAuthorizationNotDetermined -> + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + + CBManagerAuthorizationDenied -> onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) else -> - onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) } } else { val state = CBCentralManager().state @@ -51,10 +55,10 @@ internal class BluetoothPermissionHelper : PermissionHelper { onPermissionResult(PermissionStatus.Granted) CBManagerStateUnknown -> - onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) else -> - onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) } } } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/ContactPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/ContactPermissionHelper.kt index 844c01a..e224ba6 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/ContactPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/ContactPermissionHelper.kt @@ -4,6 +4,7 @@ import com.mohamedrejeb.calf.permissions.ExperimentalPermissionsApi import com.mohamedrejeb.calf.permissions.PermissionStatus import platform.Contacts.CNAuthorizationStatus import platform.Contacts.CNAuthorizationStatusAuthorized +import platform.Contacts.CNAuthorizationStatusDenied import platform.Contacts.CNAuthorizationStatusNotDetermined import platform.Contacts.CNContactStore import platform.Contacts.CNEntityType @@ -24,9 +25,14 @@ internal class ContactPermissionHelper : PermissionHelper { override fun getPermissionStatus(onPermissionResult: (PermissionStatus) -> Unit) { val permissionStatus = when (getCurrentAuthorizationStatus()) { CNAuthorizationStatusAuthorized -> PermissionStatus.Granted + CNAuthorizationStatusNotDetermined -> + PermissionStatus.Denied(shouldShowRationale = false) + + CNAuthorizationStatusDenied -> PermissionStatus.Denied(shouldShowRationale = true) - else -> PermissionStatus.Denied(shouldShowRationale = false) + + else -> PermissionStatus.Denied(shouldShowRationale = true) } onPermissionResult(permissionStatus) } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/GalleryPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/GalleryPermissionHelper.kt index 143681b..5989316 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/GalleryPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/GalleryPermissionHelper.kt @@ -4,6 +4,7 @@ import com.mohamedrejeb.calf.permissions.ExperimentalPermissionsApi import com.mohamedrejeb.calf.permissions.PermissionStatus import platform.Photos.PHAuthorizationStatus import platform.Photos.PHAuthorizationStatusAuthorized +import platform.Photos.PHAuthorizationStatusDenied import platform.Photos.PHAuthorizationStatusNotDetermined import platform.Photos.PHPhotoLibrary @@ -28,10 +29,13 @@ internal class GalleryPermissionHelper : PermissionHelper { PermissionStatus.Granted PHAuthorizationStatusNotDetermined -> + PermissionStatus.Denied(shouldShowRationale = false) + + PHAuthorizationStatusDenied -> PermissionStatus.Denied(shouldShowRationale = true) else -> - PermissionStatus.Denied(shouldShowRationale = false) + PermissionStatus.Denied(shouldShowRationale = true) } onPermissionResult(permissionStatus) } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocalNotificationPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocalNotificationPermissionHelper.kt index 7d7c777..178037e 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocalNotificationPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocalNotificationPermissionHelper.kt @@ -6,6 +6,7 @@ import platform.UserNotifications.UNAuthorizationOptionAlert import platform.UserNotifications.UNAuthorizationOptionBadge import platform.UserNotifications.UNAuthorizationOptionSound import platform.UserNotifications.UNAuthorizationStatusAuthorized +import platform.UserNotifications.UNAuthorizationStatusDenied import platform.UserNotifications.UNAuthorizationStatusEphemeral import platform.UserNotifications.UNAuthorizationStatusNotDetermined import platform.UserNotifications.UNAuthorizationStatusProvisional @@ -45,10 +46,13 @@ internal class LocalNotificationPermissionHelper : PermissionHelper { onPermissionResult(PermissionStatus.Granted) UNAuthorizationStatusNotDetermined -> + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + + UNAuthorizationStatusDenied -> onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) else -> - onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) } } } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocationPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocationPermissionHelper.kt index 0d7cb1e..c48e0b4 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocationPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/LocationPermissionHelper.kt @@ -8,6 +8,7 @@ import platform.CoreLocation.CLLocationManagerDelegateProtocol import platform.CoreLocation.kCLAuthorizationStatusAuthorized import platform.CoreLocation.kCLAuthorizationStatusAuthorizedAlways import platform.CoreLocation.kCLAuthorizationStatusAuthorizedWhenInUse +import platform.CoreLocation.kCLAuthorizationStatusDenied import platform.CoreLocation.kCLAuthorizationStatusNotDetermined import platform.darwin.NSObject @@ -45,10 +46,13 @@ internal class LocationPermissionHelper : PermissionHelper { PermissionStatus.Granted kCLAuthorizationStatusNotDetermined -> + PermissionStatus.Denied(shouldShowRationale = false) + + kCLAuthorizationStatusDenied -> PermissionStatus.Denied(shouldShowRationale = true) else -> - PermissionStatus.Denied(shouldShowRationale = false) + PermissionStatus.Denied(shouldShowRationale = true) } onPermissionResult(permissionStatus) } @@ -75,4 +79,4 @@ private class LocationManagerDelegate( onPermissionResult(false) } } -} \ No newline at end of file +} diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/RemoteNotificationPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/RemoteNotificationPermissionHelper.kt index a945ed1..823f817 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/RemoteNotificationPermissionHelper.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/RemoteNotificationPermissionHelper.kt @@ -8,6 +8,7 @@ import platform.UserNotifications.UNAuthorizationOptionSound import platform.UserNotifications.UNAuthorizationStatusAuthorized import platform.UserNotifications.UNAuthorizationStatusEphemeral import platform.UserNotifications.UNAuthorizationStatusNotDetermined +import platform.UserNotifications.UNAuthorizationStatusDenied import platform.UserNotifications.UNAuthorizationStatusProvisional import platform.UserNotifications.UNUserNotificationCenter @@ -45,10 +46,13 @@ internal class RemoteNotificationPermissionHelper : PermissionHelper { onPermissionResult(PermissionStatus.Granted) UNAuthorizationStatusNotDetermined -> + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + + UNAuthorizationStatusDenied -> onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) else -> - onPermissionResult(PermissionStatus.Denied(shouldShowRationale = false)) + onPermissionResult(PermissionStatus.Denied(shouldShowRationale = true)) } } }