compose: details: Only request required permissions
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ package com.aurora.store.compose.navigation
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.navigation3.runtime.NavKey
|
||||
import com.aurora.store.data.model.PermissionType
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -34,5 +35,5 @@ sealed class Screen : NavKey, Parcelable {
|
||||
data object Search : Screen()
|
||||
|
||||
@Serializable
|
||||
data object Permissions : Screen()
|
||||
data class Permissions(val requiredPermissions: Set<PermissionType> = emptySet()) : Screen()
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ import com.aurora.Constants.SHARE_URL
|
||||
import com.aurora.extensions.appInfo
|
||||
import com.aurora.extensions.browse
|
||||
import com.aurora.extensions.requiresGMS
|
||||
import com.aurora.extensions.requiresObbDir
|
||||
import com.aurora.extensions.share
|
||||
import com.aurora.extensions.toast
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
@@ -80,6 +81,7 @@ import com.aurora.store.compose.ui.dev.DevProfileScreen
|
||||
import com.aurora.store.compose.ui.onboarding.PermissionsScreen
|
||||
import com.aurora.store.data.installer.AppInstaller
|
||||
import com.aurora.store.data.model.AppState
|
||||
import com.aurora.store.data.model.PermissionType
|
||||
import com.aurora.store.data.model.Report
|
||||
import com.aurora.store.data.model.Scores
|
||||
import com.aurora.store.data.providers.PermissionProvider.Companion.isPermittedToInstall
|
||||
@@ -244,8 +246,12 @@ private fun ScreenContentApp(
|
||||
onDownload()
|
||||
onNavigateBack()
|
||||
} else {
|
||||
context.toast(R.string.permissions_denied)
|
||||
showExtraPane(Screen.Permissions)
|
||||
val requiredPermissions = setOfNotNull(
|
||||
PermissionType.INSTALL_UNKNOWN_APPS,
|
||||
if (app.fileList.requiresObbDir()) PermissionType.STORAGE_MANAGER else null,
|
||||
if (app.fileList.requiresObbDir()) PermissionType.EXTERNAL_STORAGE else null
|
||||
)
|
||||
showExtraPane(Screen.Permissions(requiredPermissions = requiredPermissions))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,6 +496,7 @@ private fun ScreenContentApp(
|
||||
|
||||
is Screen.Permissions -> PermissionsScreen(
|
||||
onNavigateUp = ::onNavigateBack,
|
||||
requiredPermissions = screen.requiredPermissions,
|
||||
onPermissionCallback = { onInstall() }
|
||||
)
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ private const val TAG = "PermissionsScreen"
|
||||
@Composable
|
||||
fun PermissionsScreen(
|
||||
isOnboarding: Boolean = false,
|
||||
requiredPermissions: Set<PermissionType> = emptySet(),
|
||||
onNavigateUp: () -> Unit,
|
||||
onPermissionCallback: (type: PermissionType) -> Unit = {},
|
||||
viewModel: PermissionsViewModel = hiltViewModel()
|
||||
@@ -63,7 +64,11 @@ fun PermissionsScreen(
|
||||
|
||||
ScreenContent(
|
||||
isOnboarding = isOnboarding,
|
||||
permissions = permissions,
|
||||
permissions = when {
|
||||
requiredPermissions.isEmpty() -> permissions
|
||||
else -> permissions.filter { it.type in requiredPermissions }
|
||||
.map { permission -> permission.copy(optional = false) }
|
||||
},
|
||||
onNavigateUp = onNavigateUp,
|
||||
onPermissionCallback = { type ->
|
||||
viewModel.refreshPermissionsList()
|
||||
@@ -97,9 +102,16 @@ private fun ScreenContent(
|
||||
)
|
||||
)
|
||||
|
||||
fun onResult() {
|
||||
permissionRequested?.let {
|
||||
if (!isGranted(context, it)) context.toast(R.string.permissions_denied)
|
||||
onPermissionCallback(it)
|
||||
}
|
||||
}
|
||||
|
||||
val intentLauncher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.StartActivityForResult(),
|
||||
onResult = { permissionRequested?.let { onPermissionCallback(it) } }
|
||||
onResult = { onResult() }
|
||||
)
|
||||
val permissionLauncher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.RequestPermission(),
|
||||
@@ -109,7 +121,7 @@ private fun ScreenContent(
|
||||
intentLauncher.launch(intentMap[PermissionType.STORAGE_MANAGER]!!)
|
||||
}
|
||||
|
||||
else -> permissionRequested?.let { onPermissionCallback(it) }
|
||||
else -> onResult()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user