Merge "Add Spinner & AppListSwitchItem to App List"

This commit is contained in:
Chaohui Wang
2022-09-05 01:08:36 +00:00
committed by Android (Google) Code Review
4 changed files with 66 additions and 11 deletions

View File

@@ -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 =

View File

@@ -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
}
}

View File

@@ -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,
)
}
}
}
}

View File

@@ -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,
)
}