From 3659711fe079d51fd02b0754d9c7516b2a090dfc Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Fri, 16 Sep 2022 19:25:49 +0800 Subject: [PATCH] Add AppSettings page Including the following features, - App icon - App label - Display over other apps item - Modify system settings item - Picture in picture item - Install unknown apps item - App version Bug: 236346018 Test: Manual with Settings App Change-Id: Ieabdd32fac1d0992ba5c22d459631b42a17ce32a --- .../ManageApplications.java | 2 +- .../android/settings/spa/SpaEnvironment.kt | 2 + .../spa/app/appsettings/AppSettings.kt | 84 +++++++++++++++++++ .../spa/app/specialaccess/SpecialAppAccess.kt | 34 +++----- 4 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 src/com/android/settings/spa/app/appsettings/AppSettings.kt diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 07388fd7422..8baac63c5dd 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -283,7 +283,7 @@ public class ManageApplications extends InstrumentedFragment final String className = getClassName(activity.getIntent(), getArguments()); if (className.equals(ManageExternalSourcesActivity.class.getName())) { SpaActivity.startSpaActivity( - context, InstallUnknownAppsListProvider.INSTANCE.getRoute()); + context, InstallUnknownAppsListProvider.INSTANCE.getAppListRoute()); activity.finish(); } } diff --git a/src/com/android/settings/spa/SpaEnvironment.kt b/src/com/android/settings/spa/SpaEnvironment.kt index ad9999ae9c9..eabf333a7c2 100644 --- a/src/com/android/settings/spa/SpaEnvironment.kt +++ b/src/com/android/settings/spa/SpaEnvironment.kt @@ -17,6 +17,7 @@ package com.android.settings.spa import com.android.settings.spa.app.AppsMainPageProvider +import com.android.settings.spa.app.appsettings.AppSettingsProvider import com.android.settings.spa.app.specialaccess.AllFilesAccessAppListProvider import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider @@ -50,6 +51,7 @@ object SpaEnvironment { allPageProviders = listOf( HomePageProvider, AppsMainPageProvider, + AppSettingsProvider, SpecialAppAccessPageProvider, NotificationMainPageProvider, AppListNotificationsPageProvider, diff --git a/src/com/android/settings/spa/app/appsettings/AppSettings.kt b/src/com/android/settings/spa/app/appsettings/AppSettings.kt new file mode 100644 index 00000000000..a4a577aebe5 --- /dev/null +++ b/src/com/android/settings/spa/app/appsettings/AppSettings.kt @@ -0,0 +1,84 @@ +/* + * 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.settings.spa.app.appsettings + +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.os.Bundle +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.res.stringResource +import androidx.navigation.NavType +import androidx.navigation.navArgument +import com.android.settings.R +import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider +import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider +import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider +import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider +import com.android.settingslib.spa.framework.common.SettingsPageProvider +import com.android.settingslib.spa.framework.compose.navigator +import com.android.settingslib.spa.widget.scaffold.RegularScaffold +import com.android.settingslib.spa.widget.ui.Category +import com.android.settingslib.spaprivileged.model.app.PackageManagers +import com.android.settingslib.spaprivileged.model.app.toRoute +import com.android.settingslib.spaprivileged.template.app.AppInfoProvider + +private const val PACKAGE_NAME = "packageName" +private const val USER_ID = "userId" + +object AppSettingsProvider : SettingsPageProvider { + override val name = "AppSettings" + + override val parameter = listOf( + navArgument(PACKAGE_NAME) { type = NavType.StringType }, + navArgument(USER_ID) { type = NavType.IntType }, + ) + + @Composable + override fun Page(arguments: Bundle?) { + val packageName = arguments!!.getString(PACKAGE_NAME)!! + val userId = arguments.getInt(USER_ID) + remember { PackageManagers.getPackageInfoAsUser(packageName, userId) }?.let { + AppSettings(it) + } + } + + @Composable + fun navigator(app: ApplicationInfo) = navigator(route = "$name/${app.toRoute()}") +} + +@Composable +private fun AppSettings(packageInfo: PackageInfo) { + RegularScaffold(title = stringResource(R.string.application_info_label)) { + val appInfoProvider = remember { AppInfoProvider(packageInfo) } + + appInfoProvider.AppInfo() + + Category(title = stringResource(R.string.advanced_apps)) { + val app = packageInfo.applicationInfo + DisplayOverOtherAppsAppListProvider.InfoPageEntryItem(app) + ModifySystemSettingsAppListProvider.InfoPageEntryItem(app) + PictureInPictureListProvider.InfoPageEntryItem(app) + InstallUnknownAppsListProvider.InfoPageEntryItem(app) + // TODO: interact_across_profiles + // TODO: alarms_and_reminders + } + + // TODO: app_installer + appInfoProvider.FooterAppVersion() + } +} diff --git a/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt b/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt index 7ab1db77750..11abdfc5818 100644 --- a/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt +++ b/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt @@ -34,7 +34,11 @@ object SpecialAppAccessPageProvider : SettingsPageProvider { @Composable override fun Page(arguments: Bundle?) { - SpecialAppAccessPage() + RegularScaffold(title = stringResource(R.string.special_access)) { + for (entry in buildEntry(arguments)) { + entry.UiLayout() + } + } } @Composable @@ -51,26 +55,12 @@ object SpecialAppAccessPageProvider : SettingsPageProvider { override fun buildEntry(arguments: Bundle?): List { val owner = SettingsPage.create(name, parameter, arguments) return listOf( - AllFilesAccessAppListProvider.buildInjectEntry().setLink(fromPage = owner).build(), - DisplayOverOtherAppsAppListProvider.buildInjectEntry() - .setLink(fromPage = owner).build(), - MediaManagementAppsAppListProvider.buildInjectEntry().setLink(fromPage = owner).build(), - ModifySystemSettingsAppListProvider.buildInjectEntry() - .setLink(fromPage = owner).build(), - PictureInPictureListProvider.buildInjectEntry().setLink(fromPage = owner).build(), - InstallUnknownAppsListProvider.buildInjectEntry().setLink(fromPage = owner).build(), - ) - } -} - -@Composable -private fun SpecialAppAccessPage() { - RegularScaffold(title = stringResource(R.string.special_access)) { - AllFilesAccessAppListProvider.EntryItem() - DisplayOverOtherAppsAppListProvider.EntryItem() - MediaManagementAppsAppListProvider.EntryItem() - ModifySystemSettingsAppListProvider.EntryItem() - PictureInPictureListProvider.EntryItem() - InstallUnknownAppsListProvider.EntryItem() + AllFilesAccessAppListProvider, + DisplayOverOtherAppsAppListProvider, + MediaManagementAppsAppListProvider, + ModifySystemSettingsAppListProvider, + PictureInPictureListProvider, + InstallUnknownAppsListProvider, + ).map { it.buildAppListInjectEntry().setLink(fromPage = owner).build() } } }