summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppsRepository.kt3
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/PackageManagers.kt17
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt25
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt32
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,
+ )
+}