From 20f1083d14e226c517449d684eb4b91c7ad62ffa Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 2 Aug 2023 12:00:03 +0800 Subject: [PATCH] Fix references to resources for Spa Bug: 293810334 Test: m Settings Change-Id: Id9e7ad5bb4dc2731545c35696ecaa842d4281323 --- packages/SettingsLib/Spa/spa/Android.bp | 3 +- packages/SettingsLib/Spa/testutils/Android.bp | 2 +- packages/SettingsLib/SpaPrivileged/Android.bp | 3 +- .../framework/compose/StringResources.kt | 29 +++++++++++++++++++ .../spaprivileged/model/app/AppRepository.kt | 6 ++-- .../model/enterprise/EnterpriseRepository.kt | 2 +- .../model/enterprise/RestrictionsProvider.kt | 10 +++++-- .../spaprivileged/template/app/AppInfo.kt | 2 +- .../template/app/AppStorageSize.kt | 5 ++-- .../app/TogglePermissionAppListPage.kt | 3 +- .../preference/RestrictedSwitchPreference.kt | 9 ++++-- .../model/app/AppRepositoryTest.kt | 4 +-- .../template/app/AppListPageTest.kt | 2 +- .../app/TogglePermissionAppListPageTest.kt | 5 ++-- 14 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt diff --git a/packages/SettingsLib/Spa/spa/Android.bp b/packages/SettingsLib/Spa/spa/Android.bp index 79f8c463b5aef..7f5948c36e8d4 100644 --- a/packages/SettingsLib/Spa/spa/Android.bp +++ b/packages/SettingsLib/Spa/spa/Android.bp @@ -22,7 +22,7 @@ android_library { name: "SpaLib", srcs: ["src/**/*.kt"], - + use_resource_processor: true, static_libs: [ "androidx.slice_slice-builders", "androidx.slice_slice-core", @@ -50,5 +50,6 @@ android_library { // Expose the srcs to tests, so the tests can access the internal classes. filegroup { name: "SpaLib_srcs", + visibility: ["//frameworks/base/packages/SettingsLib/Spa/tests"], srcs: ["src/**/*.kt"], } diff --git a/packages/SettingsLib/Spa/testutils/Android.bp b/packages/SettingsLib/Spa/testutils/Android.bp index e4d56cc4f2a08..65f5d34bd8d15 100644 --- a/packages/SettingsLib/Spa/testutils/Android.bp +++ b/packages/SettingsLib/Spa/testutils/Android.bp @@ -22,7 +22,7 @@ android_library { name: "SpaLibTestUtils", srcs: ["src/**/*.kt"], - + use_resource_processor: true, static_libs: [ "SpaLib", "androidx.arch.core_core-testing", diff --git a/packages/SettingsLib/SpaPrivileged/Android.bp b/packages/SettingsLib/SpaPrivileged/Android.bp index 4a7418fd101d0..eaeda3c67545c 100644 --- a/packages/SettingsLib/SpaPrivileged/Android.bp +++ b/packages/SettingsLib/SpaPrivileged/Android.bp @@ -22,7 +22,7 @@ android_library { name: "SpaPrivilegedLib", srcs: ["src/**/*.kt"], - + use_resource_processor: true, static_libs: [ "SpaLib", "SettingsLib", @@ -45,5 +45,6 @@ java_defaults { // Expose the srcs to tests, so the tests can access the internal classes. filegroup { name: "SpaPrivilegedLib_srcs", + visibility: [":__subpackages__"], srcs: ["src/**/*.kt"], } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt new file mode 100644 index 0000000000000..05cb1b1497041 --- /dev/null +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt @@ -0,0 +1,29 @@ +/* + * 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.settingslib.spaprivileged.framework.compose + +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import com.android.settingslib.R + +/** An empty placer holder string. */ +@Composable +fun placeholder() = stringResource(R.string.summary_placeholder) + +/** Gets an empty placer holder string. */ +fun Context.getPlaceholder(): String = getString(R.string.summary_placeholder) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt index 1a7d8968f232a..de2cf1f5fdf6f 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt @@ -23,11 +23,11 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.produceState import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import com.android.settingslib.Utils import com.android.settingslib.spa.framework.compose.rememberContext import com.android.settingslib.spaprivileged.R import com.android.settingslib.spaprivileged.framework.common.userManager +import com.android.settingslib.spaprivileged.framework.compose.placeholder import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -40,7 +40,7 @@ interface AppRepository { @Composable fun produceLabel(app: ApplicationInfo, isClonedAppPage: Boolean = false): State { val context = LocalContext.current - return produceState(initialValue = stringResource(R.string.summary_placeholder), app) { + return produceState(initialValue = placeholder(), app) { withContext(Dispatchers.IO) { value = if (isClonedAppPage || isCloneApp(context, app)) { context.getString(R.string.cloned_app_info_label, loadLabel(app)) @@ -82,7 +82,7 @@ internal class AppRepositoryImpl(private val context: Context) : AppRepository { withContext(Dispatchers.IO) { value = when { context.userManager.isManagedProfile(app.userId) -> { - context.getString(R.string.category_work) + context.getString(com.android.settingslib.R.string.category_work) } else -> null diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt index fab3ae8e510b8..cc3584b6fb115 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt @@ -20,7 +20,7 @@ import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER import android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER import android.content.Context -import com.android.settingslib.spaprivileged.R +import com.android.settingslib.R class EnterpriseRepository(private val context: Context) { private val resources by lazy { diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt index ae362c894e6db..e2ff7b0bc2f86 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt @@ -27,7 +27,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.settingslib.RestrictedLockUtils import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin import com.android.settingslib.RestrictedLockUtilsInternal -import com.android.settingslib.spaprivileged.R +import com.android.settingslib.widget.R import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn @@ -56,11 +56,15 @@ private data class BlockedByAdminImpl( override fun getSummary(checked: Boolean?) = when (checked) { true -> enterpriseRepository.getEnterpriseString( - Settings.ENABLED_BY_ADMIN_SWITCH_SUMMARY, R.string.enabled_by_admin + updatableStringId = Settings.ENABLED_BY_ADMIN_SWITCH_SUMMARY, + resId = R.string.enabled_by_admin, ) + false -> enterpriseRepository.getEnterpriseString( - Settings.DISABLED_BY_ADMIN_SWITCH_SUMMARY, R.string.disabled_by_admin + updatableStringId = Settings.DISABLED_BY_ADMIN_SWITCH_SUMMARY, + resId = R.string.disabled_by_admin, ) + else -> "" } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt index b43210f0c3e46..cee750e186e02 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt @@ -72,7 +72,7 @@ class AppInfoProvider(private val packageInfo: PackageInfo) { private fun InstallType(app: ApplicationInfo) { if (!app.isInstantApp) return Spacer(modifier = Modifier.height(4.dp)) - SettingsBody(stringResource(R.string.install_type_instant)) + SettingsBody(stringResource(com.android.settingslib.widget.R.string.install_type_instant)) } @Composable diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt index 3e96994c2de67..5fc1972fc878f 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt @@ -24,9 +24,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.produceState import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import com.android.settingslib.spaprivileged.R import com.android.settingslib.spaprivileged.framework.common.storageStatsManager +import com.android.settingslib.spaprivileged.framework.compose.placeholder import com.android.settingslib.spaprivileged.model.app.userHandle import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -36,7 +35,7 @@ private const val TAG = "AppStorageSize" @Composable fun ApplicationInfo.getStorageSize(): State { val context = LocalContext.current - return produceState(initialValue = stringResource(R.string.summary_placeholder)) { + return produceState(initialValue = placeholder()) { withContext(Dispatchers.IO) { val sizeBytes = calculateSizeBytes(context) value = if (sizeBytes != null) Formatter.formatFileSize(context, sizeBytes) else "" diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt index cbc4822f2896a..1fa854a4c09ec 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt @@ -38,6 +38,7 @@ import com.android.settingslib.spa.framework.util.getStringArg import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spaprivileged.R +import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import com.android.settingslib.spaprivileged.model.app.AppListModel import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.userId @@ -173,7 +174,7 @@ internal class TogglePermissionInternalAppListModel( when (allowed.value) { true -> context.getString(R.string.app_permission_summary_allowed) false -> context.getString(R.string.app_permission_summary_not_allowed) - null -> context.getString(R.string.summary_placeholder) + null -> context.getPlaceholder() } } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt index b08b6dfa67a6d..e77dcd4d9cc4d 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.state.ToggleableState import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.widget.preference.SwitchPreference import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel -import com.android.settingslib.spaprivileged.R +import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import com.android.settingslib.spaprivileged.model.enterprise.BaseUserRestricted import com.android.settingslib.spaprivileged.model.enterprise.BlockedByAdmin import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted @@ -72,9 +72,12 @@ internal object RestrictedSwitchPreference { checked: State, ): State = when (restrictedMode) { is NoRestricted -> summaryIfNoRestricted - is BaseUserRestricted -> stateOf(context.getString(R.string.disabled)) + is BaseUserRestricted -> stateOf( + context.getString(com.android.settingslib.R.string.disabled) + ) + is BlockedByAdmin -> derivedStateOf { restrictedMode.getSummary(checked.value) } - null -> stateOf(context.getString(R.string.summary_placeholder)) + null -> stateOf(context.getPlaceholder()) } } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt index 26caa01192c5e..d11e63ae048fe 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt @@ -25,7 +25,6 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.testutils.delay -import com.android.settingslib.spaprivileged.R import com.android.settingslib.spaprivileged.framework.common.userManager import com.google.common.truth.Truth.assertThat import org.junit.Before @@ -66,7 +65,8 @@ class AppRepositoryTest { val contentDescription = produceIconContentDescription() - assertThat(contentDescription.value).isEqualTo(context.getString(R.string.category_work)) + assertThat(contentDescription.value) + .isEqualTo(context.getString(com.android.settingslib.R.string.category_work)) } @Test diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt index f6f48891030a6..82fbee9a8c43f 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt @@ -116,7 +116,7 @@ class AppListPageTest { private fun onMoreOptions() = composeTestRule.onNodeWithContentDescription( - context.getString(R.string.abc_action_menu_overflow_description) + context.getString(androidx.appcompat.R.string.abc_action_menu_overflow_description) ) private companion object { diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt index 961ec10cccd9c..457b810f2dec3 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt @@ -30,6 +30,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.testutils.FakeNavControllerWrapper import com.android.settingslib.spaprivileged.R +import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider import com.android.settingslib.spaprivileged.tests.testutils.TestAppRecord @@ -95,9 +96,7 @@ class TogglePermissionAppListPageTest { val summaryState = getSummary(listModel) - assertThat(summaryState.value).isEqualTo( - context.getString(R.string.summary_placeholder) - ) + assertThat(summaryState.value).isEqualTo(context.getPlaceholder()) } @Test