From d1c676f06e0345bcf98f8dcaebf4da39f1ed0732 Mon Sep 17 00:00:00 2001 From: Sanjay P Date: Sat, 9 Dec 2023 15:43:37 +0530 Subject: [PATCH] TP-00000 | Support for Permission Denied Again (#245) --- .../uitron/helpers/PermissionActionHandler.kt | 18 ++++++++++++++++++ .../action/HandleMultiplePermissionsAction.kt | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/navi-uitron/src/main/java/com/navi/uitron/helpers/PermissionActionHandler.kt b/navi-uitron/src/main/java/com/navi/uitron/helpers/PermissionActionHandler.kt index b069614..9a51b80 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/helpers/PermissionActionHandler.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/helpers/PermissionActionHandler.kt @@ -1,11 +1,13 @@ package com.navi.uitron.helpers +import android.app.Activity import android.content.Context import android.content.pm.PackageManager import androidx.activity.compose.ManagedActivityResultLauncher import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.* +import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import com.navi.uitron.model.action.HandleMultiplePermissionsAction import com.navi.uitron.model.action.PermissionItemData @@ -92,6 +94,9 @@ private fun handlePermissionsStatus( } else { viewModel.handleActions(action.onFailure) } + if (askPermissionAttemptsExhausted(context, action.data)) { + viewModel.handleActions(action.onAskPermissionAttemptsExhausted) + } } private fun hasPermission(context: Context, permissionType: String): Boolean { @@ -106,3 +111,16 @@ private fun hasAllPermissions( return permissions?.filter { it.checkPermission.orTrue() }?.mapNotNull { it.permissionType } ?.toTypedArray()?.all { hasPermission(context, it) }.orTrue() } + +private fun askPermissionAttemptsExhausted( + context: Context, permissions: List? +): Boolean { + return permissions?.filter { it.checkPermission.orTrue() }?.mapNotNull { it.permissionType } + ?.any { isPermissionDeniedAgain(context as Activity, it) } + .orFalse() +} + +private fun isPermissionDeniedAgain(activity: Activity, permissionType: String): Boolean { + return !ActivityCompat.shouldShowRequestPermissionRationale(activity, permissionType) && + hasPermission(context = activity, permissionType = permissionType).not() +} diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/action/HandleMultiplePermissionsAction.kt b/navi-uitron/src/main/java/com/navi/uitron/model/action/HandleMultiplePermissionsAction.kt index af6f900..2322772 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/action/HandleMultiplePermissionsAction.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/action/HandleMultiplePermissionsAction.kt @@ -14,7 +14,8 @@ import com.navi.uitron.model.data.UiTronActionData data class HandleMultiplePermissionsAction( val data: List? = null, val onSuccess: UiTronActionData? = null, // on All Permission Success - val onFailure: UiTronActionData? = null // on Any Permission Failure + val onFailure: UiTronActionData? = null, // on Any Permission Failure + val onAskPermissionAttemptsExhausted: UiTronActionData? = null, // on Any Permission Denied Again ) : UiTronAction() { override suspend fun manageAction(actionDetails: ActionDetails) { val action = actionDetails.uiTronAction as HandleMultiplePermissionsAction