TP-00000 | Support for Permission Denied Again (#245)
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user