From d267d925cdbe44fabe558cd8f05355e88c59911c Mon Sep 17 00:00:00 2001 From: jnelle Date: Tue, 3 Dec 2024 16:32:41 +0100 Subject: [PATCH] feat: add calendar permissions --- .../permissions/PermissionsUtil.android.kt | 2 ++ .../permissions/PermissionState.kt | 4 ++- .../MutableMultiplePermissionsState.ios.kt | 22 +++++++++++++++- .../permissions/PermissionsUtil.ios.kt | 5 +++- .../helper/CalendarPermissionHelper.kt | 26 +++++++++++++++++++ 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/CalendarPermissionHelper.kt diff --git a/calf-permissions/src/androidMain/kotlin/com/mohamedrejeb/calf/permissions/PermissionsUtil.android.kt b/calf-permissions/src/androidMain/kotlin/com/mohamedrejeb/calf/permissions/PermissionsUtil.android.kt index b555dbd..a0aa58a 100644 --- a/calf-permissions/src/androidMain/kotlin/com/mohamedrejeb/calf/permissions/PermissionsUtil.android.kt +++ b/calf-permissions/src/androidMain/kotlin/com/mohamedrejeb/calf/permissions/PermissionsUtil.android.kt @@ -155,6 +155,8 @@ internal fun Permission.toAndroidPermission(): String { "" Permission.ReadContacts -> Manifest.permission.READ_CONTACTS + Permission.ReadCalendar -> Manifest.permission.READ_CALENDAR + Permission.WriteCalendar -> Manifest.permission.WRITE_CALENDAR } } diff --git a/calf-permissions/src/commonMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionState.kt b/calf-permissions/src/commonMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionState.kt index b18c63e..5e363c6 100644 --- a/calf-permissions/src/commonMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionState.kt +++ b/calf-permissions/src/commonMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionState.kt @@ -106,5 +106,7 @@ enum class Permission { BluetoothScan, BluetoothConnect, BluetoothAdvertise, - ReadContacts + ReadContacts, + ReadCalendar, + WriteCalendar } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/MutableMultiplePermissionsState.ios.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/MutableMultiplePermissionsState.ios.kt index 06e8230..6ed43bf 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/MutableMultiplePermissionsState.ios.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/MutableMultiplePermissionsState.ios.kt @@ -4,6 +4,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope /** * Creates a [MultiplePermissionsState] that is remembered across compositions. @@ -21,7 +23,25 @@ internal actual fun rememberMutableMultiplePermissionsState( permissions: List, onPermissionsResult: (Map) -> Unit ): MultiplePermissionsState { - TODO() + val scope = rememberCoroutineScope() + + val permissionStates = + remember(permissions) { + MutableMultiplePermissionsState( + mutablePermissions = permissions.map { + MutablePermissionStateImpl( + permission = it, + onPermissionResult = { isOk -> + onPermissionsResult(mapOf(it to isOk)) + }, + scope = scope, + ) + } + ) + } + + return permissionStates + } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionsUtil.ios.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionsUtil.ios.kt index e39c995..29930f0 100644 --- a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionsUtil.ios.kt +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/PermissionsUtil.ios.kt @@ -2,6 +2,7 @@ package com.mohamedrejeb.calf.permissions import com.mohamedrejeb.calf.permissions.helper.AVCapturePermissionHelper import com.mohamedrejeb.calf.permissions.helper.BluetoothPermissionHelper +import com.mohamedrejeb.calf.permissions.helper.CalendarPermissionHelper import com.mohamedrejeb.calf.permissions.helper.ContactPermissionHelper import com.mohamedrejeb.calf.permissions.helper.GalleryPermissionHelper import com.mohamedrejeb.calf.permissions.helper.GrantedPermissionHelper @@ -20,7 +21,7 @@ internal fun Permission.getPermissionDelegate(): PermissionHelper { Permission.Gallery, Permission.ReadImage, Permission.ReadVideo, - -> + -> GalleryPermissionHelper() Permission.ReadStorage, @@ -52,5 +53,7 @@ internal fun Permission.getPermissionDelegate(): PermissionHelper { BluetoothPermissionHelper() Permission.ReadContacts -> ContactPermissionHelper() + Permission.ReadCalendar -> CalendarPermissionHelper() + Permission.WriteCalendar -> CalendarPermissionHelper() } } diff --git a/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/CalendarPermissionHelper.kt b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/CalendarPermissionHelper.kt new file mode 100644 index 0000000..2ba9c27 --- /dev/null +++ b/calf-permissions/src/iosMain/kotlin/com.mohamedrejeb.calf/permissions/helper/CalendarPermissionHelper.kt @@ -0,0 +1,26 @@ +package com.mohamedrejeb.calf.permissions.helper + +import com.mohamedrejeb.calf.permissions.ExperimentalPermissionsApi +import com.mohamedrejeb.calf.permissions.PermissionStatus +import platform.EventKit.EKEventStore + +internal class CalendarPermissionHelper : PermissionHelper { + override fun launchPermissionRequest(onPermissionResult: (Boolean) -> Unit) { + handlePermissionRequest( + onPermissionResult = onPermissionResult, + launchPermissionRequest = { + EKEventStore().requestFullAccessToEventsWithCompletion { isOk, error -> + if (isOk && error == null) + onPermissionResult(true) + else + onPermissionResult(false) + } + } + ) + } + + @ExperimentalPermissionsApi + override fun getPermissionStatus(onPermissionResult: (PermissionStatus) -> Unit) { + onPermissionResult(PermissionStatus.Granted) + } +} \ No newline at end of file