Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt +21 −1 Original line number Diff line number Diff line Loading @@ -16,12 +16,18 @@ package com.android.settingslib.spa.widget.scaffold import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.DropdownMenu import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.settingslib.spa.framework.compose.LocalNavController Loading @@ -47,7 +53,21 @@ private fun BackAction(contentDescription: String, onClick: () -> Unit) { } @Composable fun MoreOptionsAction(onClick: () -> Unit) { fun MoreOptionsAction( content: @Composable ColumnScope.(onDismissRequest: () -> Unit) -> Unit, ) { var expanded by rememberSaveable { mutableStateOf(false) } MoreOptionsActionButton { expanded = true } val onDismissRequest = { expanded = false } DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, content = { content(onDismissRequest) }, ) } @Composable private fun MoreOptionsActionButton(onClick: () -> Unit) { IconButton(onClick) { Icon( imageVector = Icons.Outlined.MoreVert, Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/common/Contexts.kt 0 → 100644 +11 −0 Original line number Diff line number Diff line package com.android.settingslib.spaprivileged.framework.common import android.app.admin.DevicePolicyManager import android.content.Context import android.os.UserManager /** The [UserManager] instance. */ val Context.userManager get() = getSystemService(UserManager::class.java)!! /** The [DevicePolicyManager] instance. */ val Context.devicePolicyManager get() = getSystemService(DevicePolicyManager::class.java)!! packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/ApplicationInfos.kt +12 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,13 @@ package com.android.settingslib.spaprivileged.model.app import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.os.UserHandle import android.os.UserManager import com.android.settingslib.spaprivileged.framework.common.devicePolicyManager import com.android.settingslib.spaprivileged.framework.common.userManager /** The user id for a given application. */ val ApplicationInfo.userId: Int Loading @@ -35,5 +39,13 @@ fun ApplicationInfo.hasFlag(flag: Int): Boolean = (flags and flag) > 0 val ApplicationInfo.isDisabledUntilUsed: Boolean get() = enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED /** Checks whether the application is disallowed control. */ fun ApplicationInfo.isDisallowControl(context: Context) = context.userManager.hasBaseUserRestriction(UserManager.DISALLOW_APPS_CONTROL, userHandle) /** Checks whether the application is an active admin. */ fun ApplicationInfo.isActiveAdmin(context: Context): Boolean = context.devicePolicyManager.packageHasActiveAdmins(packageName, userId) /** Converts to the route string which used in navigation. */ fun ApplicationInfo.toRoute() = "$packageName/$userId" packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt +6 −1 Original line number Diff line number Diff line Loading @@ -32,9 +32,14 @@ object PackageManagers { fun getPackageInfoAsUser(packageName: String, userId: Int): PackageInfo? = getPackageInfoAsUser(packageName, 0, userId) fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo = fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo? = PackageManager.getApplicationInfoAsUserCached(packageName, 0, userId) /** Checks whether a package is installed for a given user. */ fun isPackageInstalledAsUser(packageName: String, userId: Int): Boolean = getApplicationInfoAsUser(packageName, userId)?.hasFlag(ApplicationInfo.FLAG_INSTALLED) ?: false fun ApplicationInfo.hasRequestPermission(permission: String): Boolean { val packageInfo = getPackageInfoAsUser(packageName, PackageManager.GET_PERMISSIONS, userId) return packageInfo?.requestedPermissions?.let { Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt +2 −10 Original line number Diff line number Diff line Loading @@ -20,15 +20,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.settingslib.spa.framework.compose.stateOf Loading Loading @@ -84,17 +81,12 @@ fun <T : AppRecord> AppListPage( @Composable private fun ShowSystemAction(showSystem: Boolean, setShowSystem: (showSystem: Boolean) -> Unit) { var expanded by remember { mutableStateOf(false) } MoreOptionsAction { expanded = true } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { MoreOptionsAction { onDismissRequest -> val menuText = if (showSystem) R.string.menu_hide_system else R.string.menu_show_system DropdownMenuItem( text = { Text(stringResource(menuText)) }, onClick = { expanded = false onDismissRequest() setShowSystem(!showSystem) }, ) Loading Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt +21 −1 Original line number Diff line number Diff line Loading @@ -16,12 +16,18 @@ package com.android.settingslib.spa.widget.scaffold import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.DropdownMenu import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.settingslib.spa.framework.compose.LocalNavController Loading @@ -47,7 +53,21 @@ private fun BackAction(contentDescription: String, onClick: () -> Unit) { } @Composable fun MoreOptionsAction(onClick: () -> Unit) { fun MoreOptionsAction( content: @Composable ColumnScope.(onDismissRequest: () -> Unit) -> Unit, ) { var expanded by rememberSaveable { mutableStateOf(false) } MoreOptionsActionButton { expanded = true } val onDismissRequest = { expanded = false } DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, content = { content(onDismissRequest) }, ) } @Composable private fun MoreOptionsActionButton(onClick: () -> Unit) { IconButton(onClick) { Icon( imageVector = Icons.Outlined.MoreVert, Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/common/Contexts.kt 0 → 100644 +11 −0 Original line number Diff line number Diff line package com.android.settingslib.spaprivileged.framework.common import android.app.admin.DevicePolicyManager import android.content.Context import android.os.UserManager /** The [UserManager] instance. */ val Context.userManager get() = getSystemService(UserManager::class.java)!! /** The [DevicePolicyManager] instance. */ val Context.devicePolicyManager get() = getSystemService(DevicePolicyManager::class.java)!!
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/ApplicationInfos.kt +12 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,13 @@ package com.android.settingslib.spaprivileged.model.app import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.os.UserHandle import android.os.UserManager import com.android.settingslib.spaprivileged.framework.common.devicePolicyManager import com.android.settingslib.spaprivileged.framework.common.userManager /** The user id for a given application. */ val ApplicationInfo.userId: Int Loading @@ -35,5 +39,13 @@ fun ApplicationInfo.hasFlag(flag: Int): Boolean = (flags and flag) > 0 val ApplicationInfo.isDisabledUntilUsed: Boolean get() = enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED /** Checks whether the application is disallowed control. */ fun ApplicationInfo.isDisallowControl(context: Context) = context.userManager.hasBaseUserRestriction(UserManager.DISALLOW_APPS_CONTROL, userHandle) /** Checks whether the application is an active admin. */ fun ApplicationInfo.isActiveAdmin(context: Context): Boolean = context.devicePolicyManager.packageHasActiveAdmins(packageName, userId) /** Converts to the route string which used in navigation. */ fun ApplicationInfo.toRoute() = "$packageName/$userId"
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt +6 −1 Original line number Diff line number Diff line Loading @@ -32,9 +32,14 @@ object PackageManagers { fun getPackageInfoAsUser(packageName: String, userId: Int): PackageInfo? = getPackageInfoAsUser(packageName, 0, userId) fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo = fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo? = PackageManager.getApplicationInfoAsUserCached(packageName, 0, userId) /** Checks whether a package is installed for a given user. */ fun isPackageInstalledAsUser(packageName: String, userId: Int): Boolean = getApplicationInfoAsUser(packageName, userId)?.hasFlag(ApplicationInfo.FLAG_INSTALLED) ?: false fun ApplicationInfo.hasRequestPermission(permission: String): Boolean { val packageInfo = getPackageInfoAsUser(packageName, PackageManager.GET_PERMISSIONS, userId) return packageInfo?.requestedPermissions?.let { Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt +2 −10 Original line number Diff line number Diff line Loading @@ -20,15 +20,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.settingslib.spa.framework.compose.stateOf Loading Loading @@ -84,17 +81,12 @@ fun <T : AppRecord> AppListPage( @Composable private fun ShowSystemAction(showSystem: Boolean, setShowSystem: (showSystem: Boolean) -> Unit) { var expanded by remember { mutableStateOf(false) } MoreOptionsAction { expanded = true } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { MoreOptionsAction { onDismissRequest -> val menuText = if (showSystem) R.string.menu_hide_system else R.string.menu_show_system DropdownMenuItem( text = { Text(stringResource(menuText)) }, onClick = { expanded = false onDismissRequest() setShowSystem(!showSystem) }, ) Loading