Merge "[3/n] Add aspect ratio app info page" into udc-qpr-dev am: 386b02e906 am: e5e57a8d9e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23819685 Change-Id: I0a880774214c804f2c22fb7aa876c39349e71b62 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.appcompat
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.ApplicationInfo
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.android.settings.R
|
||||
import com.android.settings.applications.appcompat.UserAspectRatioDetails
|
||||
import com.android.settings.applications.appcompat.UserAspectRatioManager
|
||||
import com.android.settings.applications.appinfo.AppInfoDashboardFragment
|
||||
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
|
||||
import com.android.settingslib.spa.widget.preference.Preference
|
||||
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
|
||||
@OptIn(ExperimentalLifecycleComposeApi::class)
|
||||
@Composable
|
||||
fun UserAspectRatioAppPreference(app: ApplicationInfo) {
|
||||
val context = LocalContext.current
|
||||
val presenter = remember { UserAspectRatioAppPresenter(context, app) }
|
||||
if (!presenter.isAvailableFlow.collectAsStateWithLifecycle(initialValue = false).value) return
|
||||
|
||||
Preference(object : PreferenceModel {
|
||||
override val title = stringResource(R.string.aspect_ratio_title)
|
||||
override val summary = presenter.summaryFlow.collectAsStateWithLifecycle(
|
||||
initialValue = stringResource(R.string.summary_placeholder),
|
||||
)
|
||||
override val onClick = presenter::startActivity
|
||||
})
|
||||
}
|
||||
|
||||
class UserAspectRatioAppPresenter(
|
||||
private val context: Context,
|
||||
private val app: ApplicationInfo,
|
||||
) {
|
||||
private val manager = UserAspectRatioManager(context)
|
||||
|
||||
val isAvailableFlow = flow {
|
||||
emit(UserAspectRatioManager.isFeatureEnabled(context)
|
||||
&& manager.canDisplayAspectRatioUi(app))
|
||||
}.flowOn(Dispatchers.IO)
|
||||
|
||||
fun startActivity() =
|
||||
navigateToAppAspectRatioSettings(context, app)
|
||||
|
||||
val summaryFlow = flow {
|
||||
emit(manager.getUserMinAspectRatioEntry(app.packageName, context.userId))
|
||||
}.flowOn(Dispatchers.IO)
|
||||
}
|
||||
|
||||
fun navigateToAppAspectRatioSettings(context: Context, app: ApplicationInfo) {
|
||||
AppInfoDashboardFragment.startAppInfoFragment(
|
||||
UserAspectRatioDetails::class.java,
|
||||
app,
|
||||
context,
|
||||
AppInfoSettingsProvider.METRICS_CATEGORY,
|
||||
)
|
||||
}
|
||||
@@ -36,7 +36,6 @@ import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.android.settings.R
|
||||
import com.android.settings.applications.appcompat.UserAspectRatioManager
|
||||
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
|
||||
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
|
||||
import com.android.settingslib.spa.framework.common.SettingsPageProvider
|
||||
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
|
||||
@@ -81,7 +80,7 @@ object UserAspectRatioAppsPageProvider : SettingsPageProvider {
|
||||
@VisibleForTesting
|
||||
fun EntryItem() =
|
||||
Preference(object : PreferenceModel {
|
||||
override val title = stringResource(R.string.screen_size_title)
|
||||
override val title = stringResource(R.string.aspect_ratio_title)
|
||||
override val summary = getSummary().toState()
|
||||
override val onClick = navigator(name)
|
||||
})
|
||||
@@ -94,7 +93,7 @@ object UserAspectRatioAppsPageProvider : SettingsPageProvider {
|
||||
|
||||
@Composable
|
||||
@VisibleForTesting
|
||||
fun getSummary(): String = stringResource(R.string.screen_size_summary, Build.MODEL)
|
||||
fun getSummary(): String = stringResource(R.string.aspect_ratio_summary, Build.MODEL)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -103,7 +102,7 @@ fun UserAspectRatioAppList(
|
||||
= { AppList() },
|
||||
) {
|
||||
AppListPage(
|
||||
title = stringResource(R.string.screen_size_title),
|
||||
title = stringResource(R.string.aspect_ratio_title),
|
||||
listModel = rememberContext(::UserAspectRatioAppListModel),
|
||||
appList = appList,
|
||||
header = {
|
||||
@@ -148,7 +147,7 @@ class UserAspectRatioAppListModel(private val context: Context)
|
||||
override fun AppListItemModel<UserAspectRatioAppListItemModel>.AppItem() {
|
||||
val app = record.app
|
||||
AppListItem(
|
||||
onClick = AppInfoSettingsProvider.navigator(app)
|
||||
onClick = { navigateToAppAspectRatioSettings(context, app) }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.android.settings.R
|
||||
import com.android.settings.applications.AppInfoBase
|
||||
import com.android.settings.applications.appinfo.AppInfoDashboardFragment
|
||||
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
|
||||
import com.android.settings.spa.app.appcompat.UserAspectRatioAppPreference
|
||||
import com.android.settings.spa.app.specialaccess.AlarmsAndRemindersAppListProvider
|
||||
import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider
|
||||
import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
|
||||
@@ -150,6 +151,7 @@ private fun AppInfoSettings(packageInfoPresenter: PackageInfoPresenter) {
|
||||
}
|
||||
|
||||
Category(title = stringResource(R.string.advanced_apps)) {
|
||||
UserAspectRatioAppPreference(app)
|
||||
DisplayOverOtherAppsAppListProvider.InfoPageEntryItem(app)
|
||||
ModifySystemSettingsAppListProvider.InfoPageEntryItem(app)
|
||||
PictureInPictureListProvider.InfoPageEntryItem(app)
|
||||
|
||||
Reference in New Issue
Block a user