Merge "Add summary for auto on toggle in settings." into main
diff --git a/res/values/styles_preference_expressive.xml b/res/values/styles_preference_expressive.xml
new file mode 100644
index 0000000..a6fe2f1
--- /dev/null
+++ b/res/values/styles_preference_expressive.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2024 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.
+ -->
+
+<!-- This file only contains custom attribute and style definition for preferences -->
+<!-- Things unrelated to preference framework UI customization should go to other styles files -->
+<resources>
+
+ <style name="SettingsPreferenceTheme.Expressive" parent="@style/PreferenceTheme.SettingsLib.Expressive">
+ <item name="apnPreferenceStyle">@style/ApnPreference</item>
+ <item name="cardPreferenceStyle">@style/CardPreference</item>
+ <item name="slicePreferenceStyle">@style/SlicePreference</item>
+ <item name="seekBarPreferenceStyle">@style/SettingsSeekBarPreference</item>
+ <item name="twoStateButtonPreferenceStyle">@style/TwoStateButtonPreference</item>
+ <item name="preferenceFragmentCompatStyle">@style/SettingsPreferenceFragmentStyle</item>
+ </style>
+</resources>
diff --git a/res/values/themes_expressive.xml b/res/values/themes_expressive.xml
new file mode 100644
index 0000000..8342fe0
--- /dev/null
+++ b/res/values/themes_expressive.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2024 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.
+-->
+
+<resources
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
+ <style name="Theme.Settings.Expressive" parent="Theme.SettingsBase.Expressive">
+ <item name="android:clipToPadding">false</item>
+ <item name="android:clipChildren">false</item>
+ <item name="preferenceTheme">@style/SettingsPreferenceTheme.Expressive</item>
+ <item name="android:listPreferredItemHeight">72dip</item>
+ <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ <item name="android:datePickerDialogTheme">@style/PickerDialogTheme.Settings</item>
+
+ <item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
+ <item name="face_layout_theme">@style/FaceLayoutTheme</item>
+ <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
+
+ <!-- For edge-to-edge -->
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+
+ <!-- For wifi icon -->
+ <item name="wifi_signal">@drawable/wifi_signal</item>
+ <item name="wifi_signal_color">?android:attr/colorAccent</item>
+ <item name="wifi_friction">@drawable/wifi_friction</item>
+
+ <item name="side_margin">0dp</item>
+ <item name="sudListItemIconColor">?android:attr/colorAccent</item>
+
+ <!-- Redefine the ActionBar style for contentInsetStart -->
+ <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
+
+ <item name="preferenceBackgroundColor">@drawable/preference_background</item>
+
+ <!-- For AndroidX AlertDialog -->
+ <item name="alertDialogTheme">@style/Theme.AlertDialog</item>
+
+ <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
+
+ <!-- For AppBarLayout -->
+ <item name="colorPrimary">@*android:color/primary_device_default_settings_light</item>
+ <item name="colorPrimaryVariant">@android:color/white</item>
+
+ <!-- For slice view in settings -->
+ <item name="sliceViewStyle">@style/Widget.SliceView.Settings</item>
+
+ <item name="notification_importance_button_background_color_unselected">@android:color/transparent</item>
+ <item name="notification_importance_button_border_color_unselected">?androidprv:attr/materialColorOutlineVariant</item>
+ <item name="notification_importance_button_foreground_color_unselected">?androidprv:attr/materialColorOnSurfaceVariant</item>
+
+ <item name="notification_importance_button_background_color_selected">?androidprv:attr/materialColorSecondaryContainer</item>
+ <item name="notification_importance_button_border_color_selected">?androidprv:attr/materialColorOnSecondaryContainer</item>
+ <item name="notification_importance_button_foreground_color_selected">?androidprv:attr/materialColorOnSecondaryContainer</item>
+
+ <!-- For AppCompat widgets, e.g. TextInputLayout -->
+ <item name="colorAccent">?android:attr/colorAccent</item>
+ </style>
+
+ <style name="Theme.Settings.Expressive.NoActionBar">
+ <item name="android:windowActionBar">false</item>
+ <item name="android:windowNoTitle">true</item>
+ <item name="colorSurface">@color/settingslib_colorSurface</item>
+ </style>
+
+ <style name="Theme.SubSettings.Expressive.Base" parent="Theme.Settings.Expressive.NoActionBar">
+ <!-- Redefine the ActionBar style for contentInsetStart -->
+ <item name="android:actionBarStyle">@style/Widget.ActionBar.SubSettings</item>
+
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ </style>
+
+ <style name="Theme.SubSettings.Expressive" parent="Theme.SubSettings.Expressive.Base"/>
+</resources>
diff --git a/res/xml/accessibility_autoclick_settings.xml b/res/xml/accessibility_autoclick_settings.xml
index 7a19928..3a1bcd3 100644
--- a/res/xml/accessibility_autoclick_settings.xml
+++ b/res/xml/accessibility_autoclick_settings.xml
@@ -21,7 +21,8 @@
<com.android.settingslib.widget.TopIntroPreference
android:key="accessibility_autoclick_intro"
- android:title="@string/accessibility_autoclick_intro_text"/>
+ android:title="@string/accessibility_autoclick_intro_text"
+ settings:searchable="false"/>
<com.android.settingslib.widget.IllustrationPreference
android:key="accessibility_autoclick_banner"
@@ -29,32 +30,42 @@
settings:searchable="false"
settings:lottie_rawRes="@drawable/accessibility_dwell"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_default"
android:title="@string/accessibility_autoclick_default_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_200ms"
android:title="@string/accessibility_autoclick_short_title"
android:summary="@string/accessibility_autoclick_short_summary"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_600ms"
android:title="@string/accessibility_autoclick_medium_title"
android:summary="@string/accessibility_autoclick_medium_summary"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_1sec"
android:title="@string/accessibility_autoclick_long_title"
android:summary="@string/accessibility_autoclick_long_summary"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_custom"
android:title="@string/accessibility_autoclick_custom_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<com.android.settingslib.widget.LayoutPreference
@@ -62,6 +73,7 @@
android:layout="@layout/accessibility_autoclick_custom_seekbar"
android:selectable="false"
android:visibility="gone"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickCustomSeekbarController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference
diff --git a/res/xml/accessibility_control_timeout_settings.xml b/res/xml/accessibility_control_timeout_settings.xml
index 4f1c2b3..4c65d89 100644
--- a/res/xml/accessibility_control_timeout_settings.xml
+++ b/res/xml/accessibility_control_timeout_settings.xml
@@ -22,35 +22,46 @@
<com.android.settingslib.widget.TopIntroPreference
android:key="accessibility_control_timeout_intro"
- android:title="@string/accessibility_control_timeout_preference_intro_text"/>
+ android:title="@string/accessibility_control_timeout_preference_intro_text"
+ settings:searchable="false"/>
<com.android.settingslib.widget.IllustrationPreference
android:key="accessibility_control_timeout_banner"
settings:lottie_rawRes="@raw/a11y_timeout_banner"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_default"
android:title="@string/accessibility_timeout_default"
- settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
+ settings:searchable="false"
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController" />
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_10secs"
android:title="@string/accessibility_timeout_10secs"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_30secs"
android:title="@string/accessibility_timeout_30secs"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_1min"
android:title="@string/accessibility_timeout_1min"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
+ <!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_2mins"
android:title="@string/accessibility_timeout_2mins"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index a79ba80..cc6bafb 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -73,6 +73,7 @@
import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.core.instrumentation.SharedPreferencesLogger;
import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.widget.SettingsThemeHelper;
import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -169,6 +170,9 @@
private static final String EXTRA_UI_OPTIONS = "settings:ui_options";
+ private static final int EXPRESSIVE_BACK_ICON =
+ com.android.settingslib.collapsingtoolbar.R.drawable.settingslib_expressive_icon_back;
+
private String mFragmentClass;
private String mHighlightMenuKey;
@@ -301,7 +305,9 @@
// If this is in setup flow, don't apply theme. Because light theme needs to be applied
// in SettingsBaseActivity#onCreate().
if (isSubSettings(intent) && !WizardManagerHelper.isAnySetupWizard(getIntent())) {
- setTheme(R.style.Theme_SubSettings);
+ int themeId = SettingsThemeHelper.isExpressiveTheme(this)
+ ? R.style.Theme_SubSettings_Expressive : R.style.Theme_SubSettings;
+ setTheme(themeId);
}
setContentView(R.layout.settings_main_prefs);
@@ -388,6 +394,9 @@
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(isActionBarButtonEnabled);
actionBar.setHomeButtonEnabled(isActionBarButtonEnabled);
+ if (SettingsThemeHelper.isExpressiveTheme(this)) {
+ actionBar.setHomeAsUpIndicator(EXPRESSIVE_BACK_ICON);
+ }
actionBar.setDisplayShowTitleEnabled(true);
}
}
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index c9530ab..491ca5c 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -46,6 +46,7 @@
import com.android.settings.core.CategoryMixin.CategoryHandler;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+import com.android.settingslib.widget.SettingsThemeHelper;
import com.android.window.flags.Flags;
import com.google.android.material.appbar.AppBarLayout;
@@ -68,6 +69,12 @@
private static final int DEFAULT_REQUEST = -1;
private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f;
+ private static final int EXPRESSIVE_LAYOUT_ID =
+ com.android.settingslib.collapsingtoolbar.R.layout.settingslib_expressive_collapsing_toolbar_base_layout;
+ private static final int COLLAPSING_LAYOUT_ID =
+ com.android.settingslib.collapsingtoolbar.R.layout.collapsing_toolbar_base_layout;
+
+
protected CategoryMixin mCategoryMixin;
protected CollapsingToolbarLayout mCollapsingToolbarLayout;
protected AppBarLayout mAppBarLayout;
@@ -116,8 +123,9 @@
}
if (isToolbarEnabled() && !isAnySetupWizard) {
- super.setContentView(
- com.android.settingslib.collapsingtoolbar.R.layout.collapsing_toolbar_base_layout);
+ int resId = SettingsThemeHelper.isExpressiveTheme(getApplicationContext())
+ ? EXPRESSIVE_LAYOUT_ID : COLLAPSING_LAYOUT_ID;
+ super.setContentView(resId);
mCollapsingToolbarLayout =
findViewById(com.android.settingslib.collapsingtoolbar.R.id.collapsing_toolbar);
mAppBarLayout = findViewById(R.id.app_bar);
diff --git a/src/com/android/settings/datetime/timezone/BaseTimeZonePicker.java b/src/com/android/settings/datetime/timezone/BaseTimeZonePicker.java
index adbedee..120d8ca 100644
--- a/src/com/android/settings/datetime/timezone/BaseTimeZonePicker.java
+++ b/src/com/android/settings/datetime/timezone/BaseTimeZonePicker.java
@@ -164,7 +164,9 @@
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// To prevent a large space on tool bar.
- mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+ if (mAppBarLayout != null) {
+ mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+ }
// To prevent user can expand the collapsing tool bar view.
ViewCompat.setNestedScrollingEnabled(mRecyclerView, false);
return true;
@@ -173,7 +175,9 @@
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// We keep the collapsed status after user cancel the search function.
- mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+ if (mAppBarLayout != null) {
+ mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+ }
ViewCompat.setNestedScrollingEnabled(mRecyclerView, true);
return true;
}
@@ -196,6 +200,10 @@
}
private void autoSetCollapsingToolbarLayoutScrolling() {
+ if (mAppBarLayout == null) {
+ return;
+ }
+
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt
index b1a822d..5435ae2 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.preference.PreferenceScreenCreator
@ProvidePreferenceScreen
-class DisplayScreen :
+open class DisplayScreen :
PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider {
override val key: String
get() = KEY