From 7426ab7b9fc2c3306b1dd418de05cf46388c6f1f Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Mon, 6 Sep 2021 15:39:17 +0800 Subject: [PATCH] Define menu keys for highlighting the menu entry on 2-pane UI - Define an attribute for highlightable menu keys - List the keys for Settings menu entries - Support parsing the attribute Bug: 199017944 Test: robotest Change-Id: I5759bff591c79d498fffb8b2c2b57f2cb66c4421 --- ...lor.xml => preference_highlight_color.xml} | 0 res/values/attrs.xml | 2 + res/values/menu_keys.xml | 38 +++++++++++++++++++ res/xml/top_level_settings.xml | 32 ++++++++++++---- .../core/PreferenceXmlParserUtils.java | 13 ++++++- .../HighlightablePreferenceGroupAdapter.java | 2 +- .../res/xml-mcc999/location_settings.xml | 1 + .../core/PreferenceXmlParserUtilsTest.java | 22 ++++++++++- 8 files changed, 99 insertions(+), 11 deletions(-) rename res/color/{preference_highligh_color.xml => preference_highlight_color.xml} (100%) create mode 100755 res/values/menu_keys.xml diff --git a/res/color/preference_highligh_color.xml b/res/color/preference_highlight_color.xml similarity index 100% rename from res/color/preference_highligh_color.xml rename to res/color/preference_highlight_color.xml diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 573d906b166..579ac35e46b 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -72,6 +72,8 @@ + + diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml new file mode 100755 index 00000000000..e69664a3408 --- /dev/null +++ b/res/values/menu_keys.xml @@ -0,0 +1,38 @@ + + + + + + top_level_network + top_level_connected_devices + top_level_apps + top_level_notifications + top_level_battery + top_level_storage + top_level_sound + top_level_display + top_level_wallpaper + top_level_accessibility + top_level_security + top_level_privacy + top_level_location + top_level_emergency + top_level_accounts + top_level_system + top_level_about_device + top_level_support + + diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml index 1b949e97e26..e2cb1736fcf 100644 --- a/res/xml/top_level_settings.xml +++ b/res/xml/top_level_settings.xml @@ -27,6 +27,7 @@ android:order="-150" android:title="@string/network_dashboard_title" android:summary="@string/summary_placeholder" + settings:highlightableMenuKey="@string/menu_key_network" settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/> + android:summary="@string/app_and_notification_dashboard_summary" + settings:highlightableMenuKey="@string/menu_key_apps"/> + android:summary="@string/notification_dashboard_summary" + settings:highlightableMenuKey="@string/menu_key_notifications"/> + android:summary="@string/sound_dashboard_summary" + settings:highlightableMenuKey="@string/menu_key_sound"/> + android:summary="@string/privacy_dashboard_summary" + settings:highlightableMenuKey="@string/menu_key_privacy"/> + android:fragment="com.android.settings.emergency.EmergencyDashboardFragment" + settings:highlightableMenuKey="@string/menu_key_emergency"/> + android:summary="@string/system_dashboard_summary" + settings:highlightableMenuKey="@string/menu_key_system"/> diff --git a/src/com/android/settings/core/PreferenceXmlParserUtils.java b/src/com/android/settings/core/PreferenceXmlParserUtils.java index 240426d69d9..a1a8d6731a7 100644 --- a/src/com/android/settings/core/PreferenceXmlParserUtils.java +++ b/src/com/android/settings/core/PreferenceXmlParserUtils.java @@ -73,7 +73,8 @@ public class PreferenceXmlParserUtils { MetadataFlag.FLAG_NEED_PREF_ICON, MetadataFlag.FLAG_NEED_SEARCHABLE, MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE, - MetadataFlag.FLAG_FOR_WORK}) + MetadataFlag.FLAG_FOR_WORK, + MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY}) @Retention(RetentionPolicy.SOURCE) public @interface MetadataFlag { @@ -89,6 +90,7 @@ public class PreferenceXmlParserUtils { int FLAG_NEED_PREF_APPEND = 1 << 10; int FLAG_UNAVAILABLE_SLICE_SUBTITLE = 1 << 11; int FLAG_FOR_WORK = 1 << 12; + int FLAG_NEED_HIGHLIGHTABLE_MENU_KEY = 1 << 13; } public static final String METADATA_PREF_TYPE = "type"; @@ -102,6 +104,7 @@ public class PreferenceXmlParserUtils { public static final String METADATA_APPEND = "staticPreferenceLocation"; public static final String METADATA_UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle"; public static final String METADATA_FOR_WORK = "for_work"; + public static final String METADATA_HIGHLIGHTABLE_MENU_KEY = "highlightable_menu_key"; private static final String ENTRIES_SEPARATOR = "|"; @@ -250,6 +253,10 @@ public class PreferenceXmlParserUtils { preferenceMetadata.putBoolean(METADATA_FOR_WORK, isForWork(preferenceAttributes)); } + if (hasFlag(flags, MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY)) { + preferenceMetadata.putString(METADATA_HIGHLIGHTABLE_MENU_KEY, + getHighlightableMenuKey(preferenceAttributes)); + } metadata.add(preferenceMetadata); preferenceAttributes.recycle(); @@ -314,6 +321,10 @@ public class PreferenceXmlParserUtils { return styledAttributes.getString(R.styleable.Preference_controller); } + private static String getHighlightableMenuKey(TypedArray styledAttributes) { + return styledAttributes.getString(R.styleable.Preference_highlightableMenuKey); + } + private static int getIcon(TypedArray styledAttributes) { return styledAttributes.getResourceId(com.android.internal.R.styleable.Icon_icon, 0); } diff --git a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java index 6e73382915e..9009b32be9e 100644 --- a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java +++ b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java @@ -105,7 +105,7 @@ public class HighlightablePreferenceGroupAdapter extends PreferenceGroupAdapter context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true /* resolveRefs */); mNormalBackgroundRes = outValue.resourceId; - mHighlightColor = context.getColor(R.color.preference_highligh_color); + mHighlightColor = context.getColor(R.color.preference_highlight_color); } @Override diff --git a/tests/robotests/res/xml-mcc999/location_settings.xml b/tests/robotests/res/xml-mcc999/location_settings.xml index d2dc132be43..b2a67ab2f9e 100644 --- a/tests/robotests/res/xml-mcc999/location_settings.xml +++ b/tests/robotests/res/xml-mcc999/location_settings.xml @@ -24,6 +24,7 @@ android:title="title" android:icon="@drawable/ic_android" android:summary="summary" + settings:highlightableMenuKey="menu_key" settings:controller="com.android.settings.slices.FakePreferenceController" settings:keywords="a, b, c" settings:unavailableSliceSubtitle="subtitleOfUnavailableSlice"/> diff --git a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java index 4cde04b94b4..23ade9d14ab 100644 --- a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java +++ b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java @@ -174,18 +174,36 @@ public class PreferenceXmlParserUtilsTest { assertThat(entries).isNull(); } + @Test + public void extractHomepageMetadata_shouldContainKeyAndHighlightableMenuKey() + throws IOException, XmlPullParserException { + List metadata = PreferenceXmlParserUtils.extractMetadata(mContext, + R.xml.top_level_settings, + MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY); + + assertThat(metadata).isNotEmpty(); + for (Bundle bundle : metadata) { + assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_KEY)).isNotNull(); + assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_HIGHLIGHTABLE_MENU_KEY)) + .isNotNull(); + } + } + @Test @Config(qualifiers = "mcc999") - public void extractMetadata_shouldContainKeyAndControllerName() + public void extractMetadata_shouldContainKeyAndControllerNameAndHighlightableMenuKey() throws IOException, XmlPullParserException { List metadata = PreferenceXmlParserUtils.extractMetadata(mContext, R.xml.location_settings, - MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER); + MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER + | MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY); assertThat(metadata).isNotEmpty(); for (Bundle bundle : metadata) { assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_KEY)).isNotNull(); assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_CONTROLLER)).isNotNull(); + assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_HIGHLIGHTABLE_MENU_KEY)) + .isNotNull(); } }