Merge "Define menu keys for highlighting the menu entry on 2-pane UI" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-09-07 07:27:05 +00:00
committed by Android (Google) Code Review
8 changed files with 99 additions and 11 deletions

View File

@@ -72,6 +72,8 @@
<attr name="unavailableSliceSubtitle" format="string" />
<!-- Whether or not the preference is for work profile, by default it's false. -->
<attr name="forWork" format="boolean" />
<!-- Identifier for highlighting the menu preference on 2-pane -->
<attr name="highlightableMenuKey" format="string" />
</declare-styleable>
<declare-styleable name="PreferenceScreen">

38
res/values/menu_keys.xml Executable file
View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="menu_key_network" translatable="false">top_level_network</string>
<string name="menu_key_connected_devices" translatable="false">top_level_connected_devices</string>
<string name="menu_key_apps" translatable="false">top_level_apps</string>
<string name="menu_key_notifications" translatable="false">top_level_notifications</string>
<string name="menu_key_battery" translatable="false">top_level_battery</string>
<string name="menu_key_storage" translatable="false">top_level_storage</string>
<string name="menu_key_sound" translatable="false">top_level_sound</string>
<string name="menu_key_display" translatable="false">top_level_display</string>
<string name="menu_key_wallpaper" translatable="false">top_level_wallpaper</string>
<string name="menu_key_accessibility" translatable="false">top_level_accessibility</string>
<string name="menu_key_security" translatable="false">top_level_security</string>
<string name="menu_key_privacy" translatable="false">top_level_privacy</string>
<string name="menu_key_location" translatable="false">top_level_location</string>
<string name="menu_key_emergency" translatable="false">top_level_emergency</string>
<string name="menu_key_accounts" translatable="false">top_level_accounts</string>
<string name="menu_key_system" translatable="false">top_level_system</string>
<string name="menu_key_about_device" translatable="false">top_level_about_device</string>
<string name="menu_key_support" translatable="false">top_level_support</string>
</resources>

View File

@@ -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"/>
<Preference
@@ -36,6 +37,7 @@
android:order="-140"
android:title="@string/connected_devices_dashboard_title"
android:summary="@string/connected_devices_dashboard_default_summary"
settings:highlightableMenuKey="@string/menu_key_connected_devices"
settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/>
<Preference
@@ -44,15 +46,17 @@
android:key="top_level_apps"
android:order="-130"
android:title="@string/apps_dashboard_title"
android:summary="@string/app_and_notification_dashboard_summary"/>
android:summary="@string/app_and_notification_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_apps"/>
<Preference
android:fragment="com.android.settings.notification.ConfigureNotificationSettings"
android:icon="@drawable/ic_notifications"
android:key="top_level_notification"
android:key="top_level_notifications"
android:order="-120"
android:title="@string/configure_notification_settings"
android:summary="@string/notification_dashboard_summary"/>
android:summary="@string/notification_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_notifications"/>
<Preference
android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
@@ -61,6 +65,7 @@
android:order="-110"
android:title="@string/power_usage_summary_title"
android:summary="@string/summary_placeholder"
settings:highlightableMenuKey="@string/menu_key_battery"
settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>
<Preference
@@ -70,6 +75,7 @@
android:order="-100"
android:title="@string/storage_settings"
android:summary="@string/summary_placeholder"
settings:highlightableMenuKey="@string/menu_key_storage"
settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/>
<Preference
@@ -78,7 +84,8 @@
android:key="top_level_sound"
android:order="-90"
android:title="@string/sound_settings"
android:summary="@string/sound_dashboard_summary"/>
android:summary="@string/sound_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_sound"/>
<Preference
android:fragment="com.android.settings.DisplaySettings"
@@ -87,6 +94,7 @@
android:order="-80"
android:title="@string/display_settings"
android:summary="@string/display_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_display"
settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/>
<com.android.settingslib.RestrictedTopLevelPreference
@@ -95,6 +103,7 @@
android:order="-70"
android:title="@string/wallpaper_settings_title"
android:summary="@string/wallpaper_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_wallpaper"
settings:controller="com.android.settings.display.TopLevelWallpaperPreferenceController"/>
<Preference
@@ -104,6 +113,7 @@
android:order="-60"
android:title="@string/accessibility_settings"
android:summary="@string/accessibility_settings_summary"
settings:highlightableMenuKey="@string/menu_key_accessibility"
settings:controller="com.android.settings.accessibility.TopLevelAccessibilityPreferenceController"/>
<Preference
@@ -113,6 +123,7 @@
android:order="-50"
android:title="@string/security_settings_title"
android:summary="@string/security_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_security"
settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>
<Preference
@@ -121,7 +132,8 @@
android:key="top_level_privacy"
android:order="-40"
android:title="@string/privacy_dashboard_title"
android:summary="@string/privacy_dashboard_summary"/>
android:summary="@string/privacy_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_privacy"/>
<Preference
android:fragment="com.android.settings.location.LocationSettings"
@@ -130,6 +142,7 @@
android:order="-30"
android:title="@string/location_settings_title"
android:summary="@string/location_settings_loading_app_permission_stats"
settings:highlightableMenuKey="@string/menu_key_location"
settings:controller="com.android.settings.location.TopLevelLocationPreferenceController"/>
<Preference
@@ -138,7 +151,8 @@
android:summary="@string/emergency_dashboard_summary"
android:icon="@drawable/ic_settings_emergency"
android:order="-20"
android:fragment="com.android.settings.emergency.EmergencyDashboardFragment"/>
android:fragment="com.android.settings.emergency.EmergencyDashboardFragment"
settings:highlightableMenuKey="@string/menu_key_emergency"/>
<Preference
android:fragment="com.android.settings.accounts.AccountDashboardFragment"
@@ -147,6 +161,7 @@
android:order="-10"
android:title="@string/account_dashboard_title"
android:summary="@string/summary_placeholder"
settings:highlightableMenuKey="@string/menu_key_accounts"
settings:controller="com.android.settings.accounts.TopLevelAccountEntryPreferenceController"/>
<Preference
@@ -155,7 +170,8 @@
android:key="top_level_system"
android:order="10"
android:title="@string/header_category_system"
android:summary="@string/system_dashboard_summary"/>
android:summary="@string/system_dashboard_summary"
settings:highlightableMenuKey="@string/menu_key_system"/>
<Preference
android:fragment="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment"
@@ -164,6 +180,7 @@
android:order="20"
android:title="@string/about_settings"
android:summary="@string/summary_placeholder"
settings:highlightableMenuKey="@string/menu_key_about_device"
settings:controller="com.android.settings.deviceinfo.aboutphone.TopLevelAboutDevicePreferenceController"/>
<Preference
@@ -172,6 +189,7 @@
android:order="100"
android:title="@string/page_tab_title_support"
android:summary="@string/support_summary"
settings:highlightableMenuKey="@string/menu_key_support"
settings:controller="com.android.settings.support.SupportPreferenceController"/>
</PreferenceScreen>

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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"/>

View File

@@ -174,18 +174,36 @@ public class PreferenceXmlParserUtilsTest {
assertThat(entries).isNull();
}
@Test
public void extractHomepageMetadata_shouldContainKeyAndHighlightableMenuKey()
throws IOException, XmlPullParserException {
List<Bundle> 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<Bundle> 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();
}
}