Add Spinner & AppListSwitchItem to App List
These will be used by Notifications App settings. Bug: 235727273 Test: Manual with Test App Change-Id: Idd61043b59b65cf7bfb1fc58faa2344fea0e3644
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user