TP-00000 | Support for Permission Denied Again (#245)

This commit is contained in:
Sanjay P
2023-12-09 15:43:37 +05:30
committed by GitHub
parent 99da38fbf5
commit d1c676f06e
2 changed files with 20 additions and 1 deletions

View File

@@ -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<PermissionItemData>?
): 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()
}

View File

@@ -14,7 +14,8 @@ import com.navi.uitron.model.data.UiTronActionData
data class HandleMultiplePermissionsAction(
val data: List<PermissionItemData>? = 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