Merge "Fix references to resources for Spa" into main
This commit is contained in:
@@ -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"],
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ android_library {
|
||||
name: "SpaLibTestUtils",
|
||||
|
||||
srcs: ["src/**/*.kt"],
|
||||
|
||||
use_resource_processor: true,
|
||||
static_libs: [
|
||||
"SpaLib",
|
||||
"androidx.arch.core_core-testing",
|
||||
|
||||
@@ -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"],
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
@@ -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<String> {
|
||||
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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 -> ""
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<String> {
|
||||
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 ""
|
||||
|
||||
@@ -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<T : AppRecord>(
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Boolean?>,
|
||||
): State<String> = 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())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user