diff options
4 files changed, 104 insertions, 1 deletions
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt index 0a41a1a95936..c9602543b364 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt @@ -18,6 +18,7 @@ package com.android.settingslib.spa.widget.scaffold import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowBack +import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable @@ -44,3 +45,15 @@ private fun BackAction(contentDescription: String, onClick: () -> Unit) { ) } } + +@Composable +fun MoreOptionsAction(onClick: () -> Unit) { + IconButton(onClick) { + Icon( + imageVector = Icons.Outlined.MoreVert, + contentDescription = stringResource( + id = androidx.appcompat.R.string.abc_action_menu_overflow_description, + ) + ) + } +} diff --git a/packages/SettingsLib/SpaPrivileged/res/values/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values/strings.xml index 8f8dd2b01ecd..0adde0fdf8dc 100644 --- a/packages/SettingsLib/SpaPrivileged/res/values/strings.xml +++ b/packages/SettingsLib/SpaPrivileged/res/values/strings.xml @@ -17,4 +17,8 @@ <resources> <!-- [CHAR LIMIT=25] Text shown when there are no applications to display. --> <string name="no_applications">No apps.</string> + <!-- [CHAR LIMIT=NONE] Menu for manage apps to control whether system processes are shown --> + <string name="menu_show_system">Show system</string> + <!-- [CHAR LIMIT=NONE] Menu for manage apps to control whether system processes are hidden --> + <string name="menu_hide_system">Hide system</string> </resources> diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt index c60976ddea4d..f8a624e3dc1d 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt @@ -42,7 +42,7 @@ import kotlinx.coroutines.Dispatchers private const val TAG = "AppList" @Composable -fun <T : AppRecord> AppList( +internal fun <T : AppRecord> AppList( userInfo: UserInfo, listModel: AppListModel<T>, showSystem: State<Boolean>, 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 new file mode 100644 index 000000000000..dc30e796f64f --- /dev/null +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.spaprivileged.template.app + +import androidx.compose.foundation.layout.Spacer +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 +import com.android.settingslib.spa.widget.scaffold.MoreOptionsAction +import com.android.settingslib.spa.widget.scaffold.SettingsScaffold +import com.android.settingslib.spaprivileged.R +import com.android.settingslib.spaprivileged.model.app.AppListModel +import com.android.settingslib.spaprivileged.model.app.AppRecord +import com.android.settingslib.spaprivileged.template.common.WorkProfilePager + +@Composable +fun <T : AppRecord> AppListPage( + title: String, + listModel: AppListModel<T>, + appItem: @Composable (itemState: AppListItemModel<T>) -> Unit, +) { + val showSystem = rememberSaveable { mutableStateOf(false) } + // TODO: Use SearchScaffold here. + SettingsScaffold( + title = title, + actions = { + ShowSystemAction(showSystem.value) { showSystem.value = it } + }, + ) { 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, + ) + } + } +} + +@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 }, + ) { + val menuText = if (showSystem) R.string.menu_hide_system else R.string.menu_show_system + DropdownMenuItem( + text = { Text(stringResource(menuText)) }, + onClick = { + expanded = false + setShowSystem(!showSystem) + }, + ) + } +} |