Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Permissions: If a permission has not been determined shouldShowRationale is now false, if it has been denied shouldShowRationale is now true. #244

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -45,4 +49,4 @@ internal class AVCapturePermissionHelper(
private fun getCurrentAuthorizationStatus(): AVAuthorizationStatus {
return AVCaptureDevice.authorizationStatusForMediaType(type)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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)
}
Expand All @@ -75,4 +79,4 @@ private class LocationManagerDelegate(
onPermissionResult(false)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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))
}
}
}
Expand Down