diff options
4 files changed, 66 insertions, 11 deletions
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppsRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppsRepository.kt index 6a6462098230..bb94b33bfa28 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppsRepository.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppsRepository.kt @@ -46,8 +46,7 @@ class AppsRepository(context: Context) { .toSet() } val flags = PackageManager.ApplicationInfoFlags.of( - ((if (userInfo.isAdmin) PackageManager.MATCH_ANY_USER else 0) or - PackageManager.MATCH_DISABLED_COMPONENTS or + (PackageManager.MATCH_DISABLED_COMPONENTS or PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS).toLong() ) val installedApplicationsAsUser = diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt index 0cc497a3e899..e521edd6b845 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt @@ -19,6 +19,9 @@ package com.android.settingslib.spaprivileged.model.app import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager +import android.util.Log + +private const val TAG = "PackageManagers" object PackageManagers { fun getPackageInfoAsUser(packageName: String, userId: Int): PackageInfo = @@ -26,4 +29,18 @@ object PackageManagers { fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo = PackageManager.getApplicationInfoAsUserCached(packageName, 0, userId) + + fun hasRequestPermission(app: ApplicationInfo, permission: String): Boolean { + val packageInfo = try { + PackageManager.getPackageInfoAsUserCached( + app.packageName, PackageManager.GET_PERMISSIONS.toLong(), app.userId + ) + } catch (e: PackageManager.NameNotFoundException) { + Log.w(TAG, "getPackageInfoAsUserCached() failed", e) + return false + } + return packageInfo?.requestedPermissions?.let { + permission in it + } ?: false + } } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt index dc30e796f64f..67fa27827843 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt @@ -16,7 +16,9 @@ package com.android.settingslib.spaprivileged.template.app +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 @@ -32,6 +34,7 @@ import androidx.compose.ui.res.stringResource import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.widget.scaffold.MoreOptionsAction import com.android.settingslib.spa.widget.scaffold.SettingsScaffold +import com.android.settingslib.spa.widget.ui.Spinner import com.android.settingslib.spaprivileged.R import com.android.settingslib.spaprivileged.model.app.AppListModel import com.android.settingslib.spaprivileged.model.app.AppRecord @@ -53,15 +56,19 @@ fun <T : AppRecord> AppListPage( ) { paddingValues -> Spacer(Modifier.padding(paddingValues)) WorkProfilePager { userInfo -> - // TODO: Add a Spinner here. - AppList( - userInfo = userInfo, - listModel = listModel, - showSystem = showSystem, - option = stateOf(0), - searchQuery = stateOf(""), - appItem = appItem, - ) + Column(Modifier.fillMaxSize()) { + val options = remember { listModel.getSpinnerOptions() } + val selectedOption = rememberSaveable { mutableStateOf(0) } + Spinner(options, selectedOption.value) { selectedOption.value = it } + AppList( + userInfo = userInfo, + listModel = listModel, + showSystem = showSystem, + option = selectedOption, + searchQuery = stateOf(""), + appItem = appItem, + ) + } } } } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt new file mode 100644 index 000000000000..5290bec0ef36 --- /dev/null +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt @@ -0,0 +1,32 @@ +package com.android.settingslib.spaprivileged.template.app + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.remember +import com.android.settingslib.spa.framework.theme.SettingsDimension +import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel +import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference +import com.android.settingslib.spaprivileged.model.app.AppRecord + +@Composable +fun <T : AppRecord> AppListSwitchItem( + itemModel: AppListItemModel<T>, + onClick: () -> Unit, + checked: State<Boolean?>, + changeable: State<Boolean>, + onCheckedChange: ((newChecked: Boolean) -> Unit)?, +) { + TwoTargetSwitchPreference( + model = remember { + object : SwitchPreferenceModel { + override val title = itemModel.label + override val summary = itemModel.summary + override val checked = checked + override val changeable = changeable + override val onCheckedChange = onCheckedChange + } + }, + icon = { AppIcon(itemModel.record.app, SettingsDimension.appIconItemSize) }, + onClick = onClick, + ) +} |