From ce713f8cd39dd8a0b292b7d7c63c3a143fa28746 Mon Sep 17 00:00:00 2001 From: Riley Jones Date: Thu, 31 Oct 2024 19:26:03 +0000 Subject: [PATCH 1/8] Fixes searchability for autoclick settings page Bug: 352643805 Test: Manually install & veryfy conditions described in above bug Flag: EXEMPT xml-only change Change-Id: I6f20bc926ba9420b0f94ec41c5f32c49b26adc4c --- res/xml/accessibility_autoclick_settings.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/res/xml/accessibility_autoclick_settings.xml b/res/xml/accessibility_autoclick_settings.xml index 7a199285bb7..3a1bcd3aa05 100644 --- a/res/xml/accessibility_autoclick_settings.xml +++ b/res/xml/accessibility_autoclick_settings.xml @@ -21,7 +21,8 @@ + android:title="@string/accessibility_autoclick_intro_text" + settings:searchable="false"/> + + + + + Date: Fri, 1 Nov 2024 09:58:27 +0800 Subject: [PATCH 2/8] Export App storage screen Fix: 375299013 Test: manual Flag: EXEMPT only export activity Change-Id: Id45b0639e00330eda85a61af31a2c307a14e85ff --- AndroidManifest.xml | 14 ++++++++++++++ src/com/android/settings/Settings.java | 1 + .../settings/core/gateway/SettingsGateway.java | 3 +++ 3 files changed, 18 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index cdd95355962..df5cb923a28 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1930,6 +1930,20 @@ android:value="@string/menu_key_apps"/> + + + + + + + + + + diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index b04f3af095e..618591a9be4 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -111,6 +111,7 @@ public class Settings extends SettingsActivity { public static class ModuleLicensesActivity extends SettingsActivity { /* empty */ } public static class ApplicationSettingsActivity extends SettingsActivity { /* empty */ } public static class ManageApplicationsActivity extends SettingsActivity { /* empty */ } + public static class AppStorageSettingsActivity extends SettingsActivity { /* empty */ } public static class ManageAssistActivity extends SettingsActivity { /* empty */ } public static class HighPowerApplicationsActivity extends SettingsActivity { /* empty */ } public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 117364f2e9f..25f38e464d4 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -44,6 +44,7 @@ import com.android.settings.accounts.AccountSyncSettings; import com.android.settings.accounts.ChooseAccountFragment; import com.android.settings.accounts.ManagedProfileSettings; import com.android.settings.applications.AppDashboardFragment; +import com.android.settings.applications.AppStorageSettings; import com.android.settings.applications.ProcessStatsSummary; import com.android.settings.applications.ProcessStatsUi; import com.android.settings.applications.UsageAccessDetails; @@ -244,6 +245,7 @@ public class SettingsGateway { MyDeviceInfoFragment.class.getName(), ModuleLicensesDashboard.class.getName(), ManageApplications.class.getName(), + AppStorageSettings.class.getName(), FirmwareVersionSettings.class.getName(), ManageAssist.class.getName(), ProcessStatsUi.class.getName(), @@ -434,6 +436,7 @@ public class SettingsGateway { Settings.UserSettingsActivity.class.getName(), Settings.ConfigureNotificationSettingsActivity.class.getName(), Settings.ManageApplicationsActivity.class.getName(), + Settings.AppStorageSettingsActivity.class.getName(), Settings.PaymentSettingsActivity.class.getName(), // Home page > Display Settings.AdaptiveBrightnessActivity.class.getName(), From d655faf9405e89238edf001944a86eb72263c803 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Mon, 4 Nov 2024 04:00:53 +0800 Subject: [PATCH 3/8] Enable AutoBrightnessScreenTest NO_IFTTT=Enable test Bug: 374712065 Flag: EXEMPT test Test: atest Change-Id: I1402bbf37644cb9b22aca6b9cae06306524a3b8f --- .../display/AutoBrightnessScreenTest.kt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt b/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt index 6dd9708b478..d05b258574d 100644 --- a/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt +++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt @@ -15,7 +15,8 @@ */ package com.android.settings.display -import android.content.Context +import android.content.ContextWrapper +import android.content.res.Resources import android.provider.Settings import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL @@ -23,26 +24,30 @@ import android.view.LayoutInflater import androidx.preference.PreferenceViewHolder import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.testutils.shadow.SettingsShadowResources import com.android.settingslib.PrimarySwitchPreference +import com.android.settingslib.preference.PreferenceDataStoreAdapter import com.android.settingslib.widget.SettingsThemeHelper.isExpressiveTheme import com.android.settingslib.widget.theme.R import com.google.common.truth.Truth.assertThat -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith -import org.robolectric.annotation.Config +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock // LINT.IfChange @RunWith(AndroidJUnit4::class) -@Config(shadows = [SettingsShadowResources::class]) -@Ignore("robolectric runtime") class AutoBrightnessScreenTest { - private val context: Context = ApplicationProvider.getApplicationContext() - private val preferenceScreenCreator = AutoBrightnessScreen() + private var mockResources: Resources? = null + + private val context = + object : ContextWrapper(ApplicationProvider.getApplicationContext()) { + override fun getResources(): Resources = mockResources ?: super.getResources() + } + @Test fun switchClick_defaultScreenBrightnessModeTurnOffAuto_returnTrue() { setScreenBrightnessMode(SCREEN_BRIGHTNESS_MODE_MANUAL) @@ -100,20 +105,14 @@ class AutoBrightnessScreenTest { @Test fun isAvailable_configTrueSet_shouldReturnTrue() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_automatic_brightness_available, - true, - ) + mockResources = mock { on { getBoolean(any()) } doReturn true } assertThat(preferenceScreenCreator.isAvailable(context)).isTrue() } @Test fun isAvailable_configFalseSet_shouldReturnFalse() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_automatic_brightness_available, - false, - ) + mockResources = mock { on { getBoolean(any()) } doReturn false } assertThat(preferenceScreenCreator.isAvailable(context)).isFalse() } @@ -121,6 +120,7 @@ class AutoBrightnessScreenTest { private fun getPrimarySwitchPreference(): PrimarySwitchPreference = preferenceScreenCreator.run { val preference = createWidget(context) + preference.preferenceDataStore = PreferenceDataStoreAdapter(storage(context)) bind(preference, this) val holder = PreferenceViewHolder.createInstanceForTests( From dbcdbe85e76843e49be8aa984875de2d067b43c5 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Mon, 4 Nov 2024 04:06:20 +0800 Subject: [PATCH 4/8] [Catalyst] Provide launch intent for Sound settings Bug: 360015496 Flag: com.android.settings.flags.catalyst_sound_screen Test: devtool Change-Id: Ifaf0a14d0b94682615400b2aec4f9c7cebc7794f --- src/com/android/settings/notification/SoundScreen.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/android/settings/notification/SoundScreen.kt b/src/com/android/settings/notification/SoundScreen.kt index e074301ca6c..c0694b9a7ca 100644 --- a/src/com/android/settings/notification/SoundScreen.kt +++ b/src/com/android/settings/notification/SoundScreen.kt @@ -18,8 +18,11 @@ package com.android.settings.notification import android.content.Context import androidx.fragment.app.Fragment import com.android.settings.R +import com.android.settings.Settings.SoundSettingsActivity import com.android.settings.flags.Flags +import com.android.settings.utils.makeLaunchIntent import com.android.settingslib.metadata.PreferenceIconProvider +import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator @@ -55,6 +58,9 @@ class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider { +DialPadTonePreference() order -50 } + override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) = + makeLaunchIntent(context, SoundSettingsActivity::class.java, metadata?.key) + companion object { const val KEY = "sound_screen" } From 5329552b7497f61dc85be12781bbb379f3aa04e0 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Mon, 4 Nov 2024 04:09:50 +0800 Subject: [PATCH 5/8] [Catalyst] Allow external SET for Display/Sound settings NO_IFTTT=Catalyst only Bug: 360015496 Bug: 368359268 Flag: com.android.settings.flags.catalyst Test: devtool Change-Id: I61b2b4b78eba1ca41aa3e5cbfea41c0be9474d0b --- .../android/settings/display/AutoBrightnessScreen.kt | 4 ++++ .../display/PeakRefreshRateSwitchPreference.kt | 4 ++++ .../settings/display/darkmode/DarkModeScreen.kt | 4 ++++ .../settings/notification/CallVolumePreference.kt | 4 ++++ .../settings/notification/MediaVolumePreference.kt | 11 ++++++++++- .../notification/SeparateRingVolumePreference.kt | 4 ++++ 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/display/AutoBrightnessScreen.kt b/src/com/android/settings/display/AutoBrightnessScreen.kt index 2e8c7088ae9..0e682ff92df 100644 --- a/src/com/android/settings/display/AutoBrightnessScreen.kt +++ b/src/com/android/settings/display/AutoBrightnessScreen.kt @@ -37,6 +37,7 @@ import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.ProvidePreferenceScreen +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenCreator @@ -66,6 +67,9 @@ class AutoBrightnessScreen : override fun storage(context: Context): KeyValueStore = AutoBrightnessDataStore(SettingsSystemStore.get(context)) + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun isAvailable(context: Context) = context.resources.getBoolean( com.android.internal.R.bool.config_automatic_brightness_available diff --git a/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt index 5302fce5451..e60a4c71ce0 100644 --- a/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt +++ b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt @@ -33,6 +33,7 @@ import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceSummaryProvider +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SwitchPreference import kotlin.math.roundToInt @@ -48,6 +49,9 @@ class PeakRefreshRateSwitchPreference : override fun storage(context: Context): KeyValueStore = PeakRefreshRateStore(context, SettingsSystemStore.get(context)) + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun isAvailable(context: Context) = context.resources.getBoolean(R.bool.config_show_smooth_display) && context.peakRefreshRate > DEFAULT_REFRESH_RATE diff --git a/src/com/android/settings/display/darkmode/DarkModeScreen.kt b/src/com/android/settings/display/darkmode/DarkModeScreen.kt index 263958cd335..1124b3abcb2 100644 --- a/src/com/android/settings/display/darkmode/DarkModeScreen.kt +++ b/src/com/android/settings/display/darkmode/DarkModeScreen.kt @@ -36,6 +36,7 @@ import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.ProvidePreferenceScreen +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenCreator @@ -69,6 +70,9 @@ class DarkModeScreen : override val keywords: Int get() = R.string.keywords_dark_ui_mode + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun isFlagEnabled(context: Context) = Flags.catalystDarkUiMode() override fun fragmentClass() = DarkModeSettingsFragment::class.java diff --git a/src/com/android/settings/notification/CallVolumePreference.kt b/src/com/android/settings/notification/CallVolumePreference.kt index 0126e139d44..3c14ae4fafb 100644 --- a/src/com/android/settings/notification/CallVolumePreference.kt +++ b/src/com/android/settings/notification/CallVolumePreference.kt @@ -33,6 +33,7 @@ import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.RangeValue +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.preference.PreferenceBinding // LINT.IfChange @@ -82,6 +83,9 @@ open class CallVolumePreference : } } + override fun getWritePermit(context: Context, value: Int?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun getMinValue(context: Context) = createAudioHelper(context).getMinVolume(getAudioStream(context)) diff --git a/src/com/android/settings/notification/MediaVolumePreference.kt b/src/com/android/settings/notification/MediaVolumePreference.kt index 13fd0297540..acb8f8d3af1 100644 --- a/src/com/android/settings/notification/MediaVolumePreference.kt +++ b/src/com/android/settings/notification/MediaVolumePreference.kt @@ -25,7 +25,13 @@ import com.android.settings.R import com.android.settingslib.RestrictedLockUtilsInternal import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable -import com.android.settingslib.metadata.* +import com.android.settingslib.metadata.PersistentPreference +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.PreferenceIconProvider +import com.android.settingslib.metadata.PreferenceMetadata +import com.android.settingslib.metadata.PreferenceRestrictionProvider +import com.android.settingslib.metadata.RangeValue +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.preference.PreferenceBinding // LINT.IfChange @@ -79,6 +85,9 @@ open class MediaVolumePreference : } } + override fun getWritePermit(context: Context, value: Int?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun getMinValue(context: Context) = createAudioHelper(context).getMinVolume(STREAM_MUSIC) diff --git a/src/com/android/settings/notification/SeparateRingVolumePreference.kt b/src/com/android/settings/notification/SeparateRingVolumePreference.kt index 2f696b1c0f9..6831daad683 100644 --- a/src/com/android/settings/notification/SeparateRingVolumePreference.kt +++ b/src/com/android/settings/notification/SeparateRingVolumePreference.kt @@ -40,6 +40,7 @@ import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.RangeValue +import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.preference.PreferenceBinding // LINT.IfChange @@ -94,6 +95,9 @@ open class SeparateRingVolumePreference : } } + override fun getWritePermit(context: Context, value: Int?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun getMinValue(context: Context) = createAudioHelper(context).getMinVolume(STREAM_RING) From 96aa9b27f1a37b859ac1122d1d9652adbffc04f3 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Mon, 4 Nov 2024 06:30:36 +0800 Subject: [PATCH 6/8] Fix catalyst settings test failure NO_IFTTT=Catalyst only Bug: 332201912 Flag: EXEMPT test Test: atest Change-Id: I064a63dfe075374fbbe7bee293d8efe70a91e473 --- .../network/AdaptiveConnectivityTogglePreferenceTest.kt | 7 ++----- .../settings/notification/DialPadTonePreferenceTest.kt | 8 ++------ 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt index 913adf6d7ad..d85980efe67 100644 --- a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt +++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt @@ -22,6 +22,7 @@ import android.platform.test.flag.junit.SetFlagsRule import android.provider.Settings import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.settingslib.preference.createAndBindWidget import com.android.settingslib.widget.MainSwitchPreference import com.google.common.truth.Truth.assertThat import org.junit.Before @@ -78,10 +79,6 @@ class AdaptiveConnectivityTogglePreferenceTest { } private fun getMainSwitchPreferenceCompat(): MainSwitchPreference = - adaptiveConnectivityTogglePreference.run { - val preference = createWidget(appContext) - bind(preference, this) - preference as MainSwitchPreference - } + adaptiveConnectivityTogglePreference.createAndBindWidget(appContext) } // LINT.ThenChange(AdaptiveConnectivityTogglePreferenceControllerTest.java) diff --git a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt index 63e8e3d53ef..ef14166dd64 100644 --- a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt +++ b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt @@ -23,7 +23,7 @@ import androidx.preference.SwitchPreferenceCompat import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.datastore.SettingsSystemStore -import com.android.settingslib.preference.DefaultPreferenceBindingFactory +import com.android.settingslib.preference.createAndBindWidget import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith @@ -93,11 +93,7 @@ class DialPadTonePreferenceTest { } private fun getSwitchPreference(): SwitchPreferenceCompat = - DefaultPreferenceBindingFactory.getPreferenceBinding(dialPadTonePreference).run { - val preference = createWidget(context) - bind(preference, dialPadTonePreference) - preference as SwitchPreferenceCompat - } + dialPadTonePreference.createAndBindWidget(context) private fun enableDialPadTone(enabled: Boolean) = SettingsSystemStore.get(context).setBoolean(DTMF_TONE_WHEN_DIALING, enabled) From f0e88a2b8599e21af1a023ad1d0acad5de914e29 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 4 Nov 2024 17:32:59 +0800 Subject: [PATCH 7/8] Migrate overlaid DisplayGoogleScreen Test: atest DisplayScreenTest Bug: 368359268 Flag: com.android.settings.flags.catalyst_display_settings_screen Change-Id: I5c456676f02e68bcb619f2a15138536968e1be5d --- src/com/android/settings/display/DisplayScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt index b1a822d8932..5435ae25228 100644 --- a/src/com/android/settings/display/DisplayScreen.kt +++ b/src/com/android/settings/display/DisplayScreen.kt @@ -30,7 +30,7 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator @ProvidePreferenceScreen -class DisplayScreen : +open class DisplayScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { override val key: String get() = KEY From b2ada5df6562eca90b44e01d678962e44a65a7d6 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Mon, 4 Nov 2024 13:44:43 +0000 Subject: [PATCH 8/8] [Expressive design] Apply expressive design to Settings - update collapsingtoolbar layout - apply expressive theme Bug: 355687551 Test: visual Flag: EXEMPT flag by System prop Change-Id: Ia6c405d8675e2f088f5ce2a804c9219f28dec398 --- res/values/styles_preference_expressive.xml | 30 +++++++ res/values/themes_expressive.xml | 88 +++++++++++++++++++ .../android/settings/SettingsActivity.java | 11 ++- .../settings/core/SettingsBaseActivity.java | 12 ++- 4 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 res/values/styles_preference_expressive.xml create mode 100644 res/values/themes_expressive.xml diff --git a/res/values/styles_preference_expressive.xml b/res/values/styles_preference_expressive.xml new file mode 100644 index 00000000000..a6fe2f18068 --- /dev/null +++ b/res/values/styles_preference_expressive.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/res/values/themes_expressive.xml b/res/values/themes_expressive.xml new file mode 100644 index 00000000000..8342fe0c9e0 --- /dev/null +++ b/res/values/themes_expressive.xml @@ -0,0 +1,88 @@ + + + + + + + + + + +