From c544ca53aa5875deb67b2fee7e0243cbe5fb48dd Mon Sep 17 00:00:00 2001 From: menghanli Date: Thu, 26 Mar 2020 10:54:06 +0800 Subject: [PATCH 01/15] Revise Q behavior migration of accessibility edit dialog Bug: 152455216 Test: manual test Change-Id: Iacb73b23f72d9d58c858f8d7dc6abc472140985c --- res/values/strings.xml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 46d75e82680..59c4f0bfca8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4935,17 +4935,11 @@ Tap accessibility button - Tap the accessibility button %s at the bottom of your screen + Tap the accessibility button %s at the bottom of your screen.\n\nTo switch between features, touch & hold the accessibility button. - Swipe up from the bottom of the screen with 2 fingers + Swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold. - Swipe up from the bottom of the screen with 3 fingers - - Tap the accessibility button %s at the bottom of your screen.\n\nTo switch between features, touch & hold the accessibility button. - - Swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold. - - Swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold. + Swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold. Hold volume keys From fd3360d28b88fb2056b8d3a277415a814746ebd1 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Mon, 30 Mar 2020 15:47:57 +0800 Subject: [PATCH 02/15] [Wi-Fi] Index Wi-Fi preferences. This is a WifiTracker2 version of partial part of ag/9980423 - Disable the "Saved network" if the access points is empty. - Disable the "Wifi data usage" if there is no wifi radio. Bug: 146823365 Test: manual Search 'Saved networks' when there is a saved Wi-Fi network and when there is no saved Wi-Fi network. Search 'data usage' on the device which supports Wi-Fi and on the device which does not supports Wi-Fi. Change-Id: If46e65585f1b272401666f78fd5e3a4cf49bef6e --- .../android/settings/wifi/WifiSettings.java | 4 +--- .../android/settings/wifi/WifiSettings2.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index bba90016bb2..581f202b170 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -1304,9 +1304,7 @@ public class WifiSettings extends RestrictedSettingsFragment final List keys = super.getNonIndexableKeys(context); final WifiManager wifiManager = context.getSystemService(WifiManager.class); - final List accessPoints = WifiSavedConfigUtils.getAllConfigs( - context, wifiManager); - if (accessPoints == null || accessPoints.size() <= 0) { + if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) { keys.add(PREF_KEY_SAVED_NETWORKS); } diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java index 13ccdc3695b..5dec521b818 100644 --- a/src/com/android/settings/wifi/WifiSettings2.java +++ b/src/com/android/settings/wifi/WifiSettings2.java @@ -76,6 +76,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.search.Indexable; import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.wifi.LongPressWifiEntryPreference; +import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; import com.android.wifitrackerlib.WifiPickerTracker; @@ -1008,7 +1009,22 @@ public class WifiSettings2 extends RestrictedSettingsFragment }; public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.wifi_settings2); + new BaseSearchIndexProvider(R.xml.wifi_settings2) { + @Override + public List getNonIndexableKeys(Context context) { + final List keys = super.getNonIndexableKeys(context); + + final WifiManager wifiManager = context.getSystemService(WifiManager.class); + if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) { + keys.add(PREF_KEY_SAVED_NETWORKS); + } + + if (!DataUsageUtils.hasWifiRadio(context)) { + keys.add(PREF_KEY_DATA_USAGE); + } + return keys; + } + }; private class WifiEntryConnectCallback implements ConnectCallback { final WifiEntry mConnectWifiEntry; From 9e1bb0def18c8ed5335e776c30d10cdb466af767 Mon Sep 17 00:00:00 2001 From: ChenJean Date: Fri, 21 Feb 2020 15:46:49 +0800 Subject: [PATCH 03/15] Support autoclick secondary action (8/n) Modify options description logic from 5 types to 3 types. Bug: 149884746 Test: manual Merged-In: I714db2a450e34d33e5728cf355136d26bef77e11 Change-Id: I714db2a450e34d33e5728cf355136d26bef77e11 (cherry picked from commit b6d6d9da46a31892b96702dac99968fb674eed33) --- res/values/strings.xml | 28 ++++++------------- .../ToggleAutoclickPreferenceFragment.java | 14 ++++------ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index b5cdcf6edcb..03fa3c6b477 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5144,30 +5144,20 @@ Blue-yellow - - - Extremely short delay (%1$s second) - Extremely short delay (%1$s seconds) - - - - Very short delay (%1$s second) - Very short delay (%1$s seconds) - - Short delay (%1$s second) - Short delay (%1$s seconds) + Short (%1$s second) + Short (%1$s seconds) + + + + Medium (%1$s second) + Medium (%1$s seconds) - Long delay (%1$s second) - Long delay (%1$s seconds) - - - - Very long delay (%1$s second) - Very long delay (%1$s seconds) + Long (%1$s second) + Long (%1$s seconds) diff --git a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java index 5e09b2a78c1..6624457ad98 100644 --- a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java @@ -64,12 +64,10 @@ public class ToggleAutoclickPreferenceFragment extends DashboardFragment * Resource ids from which autoclick preference summaries should be derived. The strings have * placeholder for integer delay value. */ - private static final int[] mAutoclickPreferenceSummaries = { - R.plurals.accessibilty_autoclick_preference_subtitle_extremely_short_delay, - R.plurals.accessibilty_autoclick_preference_subtitle_very_short_delay, + private static final int[] AUTOCLICK_PREFERENCE_SUMMARIES = { R.plurals.accessibilty_autoclick_preference_subtitle_short_delay, - R.plurals.accessibilty_autoclick_preference_subtitle_long_delay, - R.plurals.accessibilty_autoclick_preference_subtitle_very_long_delay + R.plurals.accessibilty_autoclick_preference_subtitle_medium_delay, + R.plurals.accessibilty_autoclick_preference_subtitle_long_delay }; /** @@ -86,7 +84,7 @@ public class ToggleAutoclickPreferenceFragment extends DashboardFragment // Only show integer when delay time is 1. final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f"; - return resources.getQuantityString(mAutoclickPreferenceSummaries[summaryIndex], + return resources.getQuantityString(AUTOCLICK_PREFERENCE_SUMMARIES[summaryIndex], quantity, String.format(decimalFormat, delaySecond)); } @@ -98,10 +96,10 @@ public class ToggleAutoclickPreferenceFragment extends DashboardFragment return 0; } if (delay >= MAX_AUTOCLICK_DELAY_MS) { - return mAutoclickPreferenceSummaries.length - 1; + return AUTOCLICK_PREFERENCE_SUMMARIES.length - 1; } int delayRange = MAX_AUTOCLICK_DELAY_MS - MIN_AUTOCLICK_DELAY_MS; - int rangeSize = (delayRange) / (mAutoclickPreferenceSummaries.length - 1); + int rangeSize = (delayRange) / (AUTOCLICK_PREFERENCE_SUMMARIES.length - 1); return (delay - MIN_AUTOCLICK_DELAY_MS) / rangeSize; } From aa87e024d59576c48734f6a7c716347c6ed67a63 Mon Sep 17 00:00:00 2001 From: ChenJean Date: Fri, 21 Feb 2020 17:59:37 +0800 Subject: [PATCH 04/15] Support caption second UI structure (5/n) Update constants Bug: 143502915 Test: manual Merged-In: I7d27bc255f4f5fa8d8a34e6ced533b61ea827ef1 Change-Id: I7d27bc255f4f5fa8d8a34e6ced533b61ea827ef1 (cherry picked from commit ba7eb47823c1567f41b800143befef3b1ee15e1f) --- .../settings/accessibility/CaptionAppearanceFragment.java | 2 +- .../settings/accessibility/CaptionMoreOptionsFragment.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java index 394f50ab787..6c2b593c471 100644 --- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java +++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java @@ -105,7 +105,7 @@ public class CaptionAppearanceFragment extends SettingsPreferenceFragment @Override public int getMetricsCategory() { - return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES; + return SettingsEnums.ACCESSIBILITY_CAPTION_APPEARANCE; } @Override diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java index 8e5c003189b..d3fd407436a 100644 --- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java +++ b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java @@ -44,7 +44,7 @@ public class CaptionMoreOptionsFragment extends SettingsPreferenceFragment @Override public int getMetricsCategory() { - return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES; + return SettingsEnums.ACCESSIBILITY_CAPTION_MORE_OPTIONS; } @Override From ae9060246ba2621314030cfe103b23008fabd100 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Thu, 2 Apr 2020 12:45:50 -0400 Subject: [PATCH 05/15] Add a developer setting for conversation enforcement Test: Robo tests Fixes: 152907434 Change-Id: I4e16faf817349993a98955601829d1ad22fa3921 --- res/xml/development_settings.xml | 5 + .../DevelopmentSettingsDashboardFragment.java | 1 + ...ersationShortcutsPreferenceController.java | 68 ++++++++++++ ...tionShortcutsPreferenceControllerTest.java | 103 ++++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 src/com/android/settings/development/EnforceConversationShortcutsPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/development/EnforceConversationShortcutsPreferenceControllerTest.java diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index c134763d82a..def0075ed7b 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -577,6 +577,11 @@ android:title="@string/show_notification_channel_warnings" android:summary="@string/show_notification_channel_warnings_summary" /> + + Date: Wed, 25 Mar 2020 13:33:45 -0700 Subject: [PATCH 06/15] Fix advanced preferences behavior in AllInOneTetherSettings In AllInOneTetherSettings, advanced preferences should not be hidden again after user have expanded them. Bug: 151954343 Test: CodeInspectionTest; AllInOneTetherSettingsTest; manually test oberved advanced preferences won't be hidden. Change-Id: If2c7d99b7dcac4149f065eca73022a582924c90b --- .../settings/AllInOneTetherSettings.java | 20 ++++------- .../settings/AllInOneTetherSettingsTest.java | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java index c562faee1d7..22453a39725 100644 --- a/src/com/android/settings/AllInOneTetherSettings.java +++ b/src/com/android/settings/AllInOneTetherSettings.java @@ -91,8 +91,12 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment private static final String KEY_DATA_SAVER_FOOTER = "disabled_on_data_saver" + DEDUP_POSTFIX; private static final String KEY_WIFI_TETHER_GROUP = "wifi_tether_settings_group"; - private static final int EXPANDED_CHILD_COUNT_WITH_SECURITY_NON = 2; - private static final int EXPANDED_CHILD_COUNT_DEFAULT = 3; + @VisibleForTesting + static final int EXPANDED_CHILD_COUNT_DEFAULT = 3; + @VisibleForTesting + static final int EXPANDED_CHILD_COUNT_WITH_SECURITY_NON = 2; + @VisibleForTesting + static final int EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG = 3; private static final String TAG = "AllInOneTetherSettings"; private boolean mUnavailable; @@ -120,7 +124,6 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment mUsbTethering = TetherEnabler.isUsbTethering(state); mWifiTethering = TetherEnabler.isWifiTethering(state); mWifiTetherGroup.setVisible(shouldShowWifiConfig()); - reConfigInitialExpandedChildCount(); }; private final BroadcastReceiver mTetherChangeReceiver = new BroadcastReceiver() { @@ -354,10 +357,6 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment mRestartWifiApAfterConfigChange = true; mTetherEnabler.stopTethering(TETHERING_WIFI); } - - if (controller instanceof WifiTetherSecurityPreferenceController) { - reConfigInitialExpandedChildCount(); - } } private SoftApConfiguration buildNewConfig() { @@ -384,15 +383,10 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment return mWifiTethering || (!mBluetoothTethering && !mUsbTethering); } - private void reConfigInitialExpandedChildCount() { - getPreferenceScreen().setInitialExpandedChildrenCount(getInitialExpandedChildCount()); - } - @Override public int getInitialExpandedChildCount() { if (!shouldShowWifiConfig()) { - // Expand all preferences in the screen. - return getPreferenceScreen().getPreferenceCount(); + return EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG; } if (mSecurityPreferenceController == null) { diff --git a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java b/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java index 55486d26a15..f966e3c5e75 100644 --- a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java @@ -16,6 +16,9 @@ package com.android.settings; +import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_DEFAULT; +import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG; +import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_WITH_SECURITY_NON; import static com.android.settings.network.TetherEnabler.BLUETOOTH_TETHER_KEY; import static com.android.settings.network.TetherEnabler.USB_TETHER_KEY; import static com.android.settings.network.TetherEnabler.WIFI_TETHER_DISABLE_KEY; @@ -29,6 +32,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.net.ConnectivityManager; +import android.net.wifi.SoftApConfiguration; import android.os.UserHandle; import android.os.UserManager; import android.util.FeatureFlagUtils; @@ -36,6 +40,7 @@ import android.util.FeatureFlagUtils; import com.android.settings.core.FeatureFlags; import com.android.settings.testutils.shadow.ShadowWifiManager; import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController; +import com.android.settings.wifi.tether.WifiTetherSecurityPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -65,6 +70,8 @@ public class AllInOneTetherSettingsTest { private ConnectivityManager mConnectivityManager; @Mock private UserManager mUserManager; + @Mock + private WifiTetherSecurityPreferenceController mSecurityPreferenceController; @Before public void setUp() { @@ -82,6 +89,8 @@ public class AllInOneTetherSettingsTest { mAllInOneTetherSettings = new AllInOneTetherSettings(); ReflectionHelpers.setField(mAllInOneTetherSettings, "mLifecycle", mock(Lifecycle.class)); + ReflectionHelpers.setField(mAllInOneTetherSettings, "mSecurityPreferenceController", + mSecurityPreferenceController); } @Test @@ -157,6 +166,32 @@ public class AllInOneTetherSettingsTest { .isEqualTo(1); } + @Test + public void getInitialExpandedChildCount_shouldShowWifiConfigWithSecurity() { + ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", true); + when(mSecurityPreferenceController.getSecurityType()) + .thenReturn(SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); + assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) + .isEqualTo(EXPANDED_CHILD_COUNT_DEFAULT); + } + + @Test + public void getInitialExpandedChildCount_shouldShowWifiConfigWithoutSecurity() { + ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", true); + when(mSecurityPreferenceController.getSecurityType()) + .thenReturn(SoftApConfiguration.SECURITY_TYPE_OPEN); + assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) + .isEqualTo(EXPANDED_CHILD_COUNT_WITH_SECURITY_NON); + } + + @Test + public void getInitialExpandedChildCount_shouldNotShowWifiConfig() { + ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", false); + ReflectionHelpers.setField(mAllInOneTetherSettings, "mBluetoothTethering", true); + assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount()) + .isEqualTo(EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG); + } + private void setupIsTetherAvailable(boolean returnValue) { when(mConnectivityManager.isTetheringSupported()).thenReturn(true); From 94ad6a19596e885b2c9ac4e6675d47a20e89f01c Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Mon, 6 Apr 2020 14:10:15 -0400 Subject: [PATCH 07/15] Adjust tap targets in history - Fix a crash if an app couldn't be launched - Fix the height of tap targets and overlap of text Fixes: 152977855 Fixes: 153199215 Change-Id: Id623f942c7663c977c61df3d1188fe498cab8acc --- res/layout/notification_history_log_row.xml | 99 +++++++++---------- res/layout/notification_sbn_log_row.xml | 25 +++-- .../history/NotificationSbnViewHolder.java | 11 ++- 3 files changed, 65 insertions(+), 70 deletions(-) diff --git a/res/layout/notification_history_log_row.xml b/res/layout/notification_history_log_row.xml index d2d7cd60e6e..b1357e9cc9e 100644 --- a/res/layout/notification_history_log_row.xml +++ b/res/layout/notification_history_log_row.xml @@ -16,6 +16,7 @@ - - - - - - - - + android:layout_height="@*android:dimen/status_bar_icon_size" + android:gravity="center_vertical"> + android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title" + android:layout_toStartOf="@id/alerted_icon" + android:textAlignment="viewStart"/> + + + + + diff --git a/res/layout/notification_sbn_log_row.xml b/res/layout/notification_sbn_log_row.xml index 3eb6796ed3f..3b731ac4f8f 100644 --- a/res/layout/notification_sbn_log_row.xml +++ b/res/layout/notification_sbn_log_row.xml @@ -16,44 +16,44 @@ - + android:minHeight="@*android:dimen/status_bar_icon_size" + android:paddingBottom="6dp"> @@ -66,7 +66,6 @@ android:paddingTop="1dp" android:scaleType="fitCenter" android:visibility="gone" - android:layout_toEndOf="@id/pkgname" android:tint="?android:attr/textColorSecondary" android:src="@drawable/ic_notifications_alert" /> @@ -87,8 +86,7 @@ android:id="@+id/timestamp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingTop="13dp" - android:paddingBottom="13dp" + android:minHeight="@*android:dimen/status_bar_icon_size" android:layout_alignBottom="@android:id/widget_frame" android:layout_alignParentEnd="true" android:layout_alignTop="@android:id/widget_frame" @@ -98,13 +96,12 @@ android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification" android:textAlignment="viewEnd" /> - + diff --git a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java index 27b4b73d09c..dabf3f3dd46 100644 --- a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java +++ b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java @@ -17,6 +17,7 @@ package com.android.settings.notification.history; import android.app.PendingIntent; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.UserHandle; @@ -91,10 +92,14 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder { Slog.e(TAG, "Could not launch", e); } } else { - Intent appIntent = new Intent(Intent.ACTION_MAIN) - .setPackage(pkg); + Intent appIntent = itemView.getContext().getPackageManager() + .getLaunchIntentForPackage(pkg); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId)); + try { + itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId)); + } catch (ActivityNotFoundException e) { + Slog.e(TAG, "no launch activity", e); + } } }); ViewCompat.setAccessibilityDelegate(itemView, new AccessibilityDelegateCompat() { From 7c073c4c400cb16cd42298acf389c2bf6b2c9dc8 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Fri, 3 Apr 2020 00:44:36 +0800 Subject: [PATCH 08/15] Add accessibility color inversion help resources to link to existing help page. Bug: 151604096 Bug: 150873532 Test: manual test Change-Id: Ie042d822de3ff5017548b8d92c74b208ee1f3a02 --- res/values/strings.xml | 2 ++ .../ToggleColorInversionPreferenceFragment.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8a642ac1fa9..aca212dc3fa 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7187,6 +7187,8 @@ + + diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index c0ad2ac235a..833c9f181ea 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -113,6 +113,11 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere super.onPause(); } + @Override + public int getHelpResource() { + return R.string.help_url_color_inversion; + } + @Override public void onSettingsClicked(ShortcutPreference preference) { super.onSettingsClicked(preference); From b1c7e21066f76299f0921a97442e1127b490d340 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Mon, 6 Apr 2020 22:24:21 +0800 Subject: [PATCH 09/15] [Settings] Core refactor Remove empty lines, and maintain the comments. Bug: 150352656 Test: build pass Change-Id: If0552d7ce20de5941667aa64e682202aaf32c597 --- .../settings/network/telephony/TelephonyConstants.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/network/telephony/TelephonyConstants.java b/src/com/android/settings/network/telephony/TelephonyConstants.java index 2a2613cc497..78a177edccc 100644 --- a/src/com/android/settings/network/telephony/TelephonyConstants.java +++ b/src/com/android/settings/network/telephony/TelephonyConstants.java @@ -16,7 +16,6 @@ package com.android.settings.network.telephony; - import android.telephony.TelephonyManager; /** @@ -210,6 +209,12 @@ public class TelephonyConstants { * Copied from {@link android.telephony.RadioAccessFamily} */ public static class RadioAccessFamily { + /** + * TODO: get rid of RAF definition in RadioAccessFamily and + * use {@link TelephonyManager.NetworkTypeBitMask} + * TODO: public definition {@link TelephonyManager.NetworkTypeBitMask} is long. + * TODO: Convert from int * to long everywhere including HAL definitions. + */ // 2G public static final int RAF_UNKNOWN = (int) TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN; public static final int RAF_GSM = (int) TelephonyManager.NETWORK_TYPE_BITMASK_GSM; @@ -245,9 +250,7 @@ public class TelephonyConstants { public static final int WCDMA = HS | RAF_UMTS; // 4G public static final int LTE = RAF_LTE | RAF_LTE_CA; - // 5G public static final int NR = RAF_NR; - } } From 819abf7f87edf84a25b3ae677a039291cd6a9960 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Wed, 1 Apr 2020 15:40:47 +0800 Subject: [PATCH 10/15] Refine metrics log in infrastructure - Add interfaces to set/get metrics category in BasePreferenceController for descendants having a chance to get it. - Set metrics category in DashboardFragment - Automatically log metrics in onPreferenceChange of TogglePreferenceController - Add support for TwoStateButtonPreference in TogglePreferenceController to make the preference generic Bug: 137559984 Test: robotest Change-Id: Ia7e0d24a3db1991b18e0286d9894570fa71247a3 --- .../RecentAppsPreferenceController.java | 10 ++++------ .../DeviceAdminListPreferenceController.java | 4 +--- .../core/BasePreferenceController.java | 19 ++++++++++++++++++- .../core/TogglePreferenceController.java | 10 ++++++++++ .../settings/dashboard/DashboardFragment.java | 8 ++++++++ .../display/DarkUIPreferenceController.java | 6 ------ ...DisplayActivationPreferenceController.java | 4 +--- ...arkModeActivationPreferenceController.java | 4 +--- ...atterySaverButtonPreferenceController.java | 16 ---------------- .../core/BasePreferenceControllerTest.java | 10 ++++++++++ 10 files changed, 53 insertions(+), 38 deletions(-) diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index 28a88a200f1..69a68ef9e7e 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.applications; import android.app.Application; -import android.app.settings.SettingsEnums; import android.app.usage.UsageStats; import android.content.Context; import android.icu.text.RelativeDateTimeFormatter; @@ -98,12 +97,12 @@ public class RecentAppsPreferenceController extends BasePreferenceController .setHeaderTitleRes(R.string.recent_app_category_title) .setHeaderDetailsClickListener((View v) -> { mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference, - SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY); + getMetricsCategory()); new SubSettingLauncher(mContext) .setDestination(ManageApplications.class.getName()) .setArguments(null /* arguments */) .setTitleRes(R.string.application_info_label) - .setSourceMetricsCategory(SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY) + .setSourceMetricsCategory(getMetricsCategory()) .launch(); }); } @@ -166,11 +165,10 @@ public class RecentAppsPreferenceController extends BasePreferenceController RelativeDateTimeFormatter.Style.SHORT)) .setOnClickListener(v -> { mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference, - SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY); + getMetricsCategory()); AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class, R.string.application_info_label, pkgName, appEntry.info.uid, - mHost, 1001 /*RequestCode*/, - SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY); + mHost, 1001 /*RequestCode*/, getMetricsCategory()); }) .build(); } diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java index b5ccd73fef7..d8ec8489cd4 100644 --- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java @@ -46,7 +46,6 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.settings.core.BasePreferenceController; -import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -202,8 +201,7 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle pref.setSummary(item.getDescription()); pref.setEnabled(item.isEnabled()); pref.setOnPreferenceClickListener(preference -> { - mMetricsFeatureProvider.logClickedPreference(preference, - preference.getExtras().getInt(DashboardFragment.CATEGORY)); + mMetricsFeatureProvider.logClickedPreference(preference, getMetricsCategory()); final UserHandle user = item.getUser(); mContext.startActivityAsUser(item.getLaunchIntent(mContext), user); return true; diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java index 1985a998d85..c90fe48bc9c 100644 --- a/src/com/android/settings/core/BasePreferenceController.java +++ b/src/com/android/settings/core/BasePreferenceController.java @@ -124,6 +124,7 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl private boolean mIsForWork; @Nullable private UserHandle mWorkProfileUser; + private int mMetricsCategory; /** * Instantiate a controller as specified controller type and user-defined key. @@ -398,11 +399,27 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl * This won't block UI thread however has similar side effect. Please use it if you * want to avoid janky animation(i.e. new preference is added in the middle of page). * - * This music be used in {@link BasePreferenceController} + * This must be used in {@link BasePreferenceController} */ public interface UiBlocker { } + /** + * Set the metrics category of the parent fragment. + * + * Called by DashboardFragment#onAttach + */ + public void setMetricsCategory(int metricsCategory) { + mMetricsCategory = metricsCategory; + } + + /** + * @return the metrics category of the parent fragment. + */ + protected int getMetricsCategory() { + return mMetricsCategory; + } + /** * @return Non-{@code null} {@link UserHandle} when a work profile is enabled. * Otherwise {@code null}. diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java index 7abe6e09fca..5a2a8b70e5a 100644 --- a/src/com/android/settings/core/TogglePreferenceController.java +++ b/src/com/android/settings/core/TogglePreferenceController.java @@ -18,8 +18,10 @@ import android.content.Context; import androidx.preference.Preference; import androidx.preference.TwoStatePreference; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.slices.SliceData; import com.android.settings.widget.MasterSwitchPreference; +import com.android.settings.widget.TwoStateButtonPreference; /** * Abstract class that consolidates logic for updating toggle controllers. @@ -54,6 +56,8 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle ((TwoStatePreference) preference).setChecked(isChecked()); } else if (preference instanceof MasterSwitchPreference) { ((MasterSwitchPreference) preference).setChecked(isChecked()); + } else if (preference instanceof TwoStateButtonPreference) { + ((TwoStateButtonPreference) preference).setChecked(isChecked()); } else { refreshSummary(preference); } @@ -61,6 +65,12 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle @Override public final boolean onPreferenceChange(Preference preference, Object newValue) { + // TwoStatePreference is a regular preference and can be handled by DashboardFragment + if (preference instanceof MasterSwitchPreference + || preference instanceof TwoStateButtonPreference) { + FeatureFactory.getFactory(mContext).getMetricsFeatureProvider() + .logClickedPreference(preference, getMetricsCategory()); + } return setChecked((boolean) newValue); } diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index d1211953d68..c70d8419974 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -113,6 +113,14 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment } }); + // Set metrics category for BasePreferenceController. + final int metricCategory = getMetricsCategory(); + mControllers.forEach(controller -> { + if (controller instanceof BasePreferenceController) { + ((BasePreferenceController) controller).setMetricsCategory(metricCategory); + } + }); + mPlaceholderPreferenceController = new DashboardTilePlaceholderPreferenceController(context); mControllers.add(mPlaceholderPreferenceController); diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java index c2da56aaa8f..98d9a69ea7c 100644 --- a/src/com/android/settings/display/DarkUIPreferenceController.java +++ b/src/com/android/settings/display/DarkUIPreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.display; import android.app.UiModeManager; -import android.app.settings.SettingsEnums; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -33,8 +32,6 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; -import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -49,7 +46,6 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple @VisibleForTesting Preference mPreference; - private final MetricsFeatureProvider mMetricsFeatureProvider; private UiModeManager mUiModeManager; private PowerManager mPowerManager; private Context mContext; @@ -68,7 +64,6 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple mContext = context; mUiModeManager = context.getSystemService(UiModeManager.class); mPowerManager = context.getSystemService(PowerManager.class); - mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -91,7 +86,6 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple @Override public boolean setChecked(boolean isChecked) { - mMetricsFeatureProvider.logClickedPreference(mPreference, SettingsEnums.DISPLAY); final boolean dialogSeen = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.DARK_MODE_DIALOG_SEEN, 0) == DIALOG_SEEN; diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java index f68df503908..4b1e295445d 100644 --- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java @@ -16,7 +16,6 @@ package com.android.settings.display; -import android.app.settings.SettingsEnums; import android.content.Context; import android.hardware.display.ColorDisplayManager; import android.text.TextUtils; @@ -50,8 +49,7 @@ public class NightDisplayActivationPreferenceController extends TogglePreference @Override public void onClick(View v) { mButtonTriggered = true; - mMetricsFeatureProvider.logClickedPreference(mPreference, - SettingsEnums.NIGHT_DISPLAY_SETTINGS); + mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory()); mColorDisplayManager.setNightDisplayActivated( !mColorDisplayManager.isNightDisplayActivated()); updateStateInternal(); diff --git a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java index 622f2e2cf45..74b029fc3b0 100644 --- a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java +++ b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java @@ -16,7 +16,6 @@ package com.android.settings.display.darkmode; import android.app.UiModeManager; -import android.app.settings.SettingsEnums; import android.content.Context; import android.content.res.Configuration; import android.os.PowerManager; @@ -136,8 +135,7 @@ public class DarkModeActivationPreferenceController extends BasePreferenceContro private final View.OnClickListener mListener = new View.OnClickListener() { @Override public void onClick(View v) { - mMetricsFeatureProvider.logClickedPreference(mPreference, - SettingsEnums.DARK_UI_SETTINGS); + mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory()); final boolean active = (mContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) != 0; mUiModeManager.setNightModeActivated(!active); diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java index fff6523a395..a089abc8c25 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java @@ -16,21 +16,17 @@ package com.android.settings.fuelgauge.batterysaver; -import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; import android.net.Uri; import android.os.PowerManager; import android.provider.SettingsSlicesContract; -import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.core.TogglePreferenceController; import com.android.settings.fuelgauge.BatterySaverReceiver; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.TwoStateButtonPreference; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -45,13 +41,11 @@ public class BatterySaverButtonPreferenceController extends private final BatterySaverReceiver mBatterySaverReceiver; private final PowerManager mPowerManager; - private final MetricsFeatureProvider mMetricsFeatureProvider; private TwoStateButtonPreference mPreference; public BatterySaverButtonPreferenceController(Context context, String key) { super(context, key); - mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mBatterySaverReceiver = new BatterySaverReceiver(context); mBatterySaverReceiver.setBatterySaverListener(this); @@ -100,21 +94,11 @@ public class BatterySaverButtonPreferenceController extends @Override public boolean setChecked(boolean stateOn) { - mMetricsFeatureProvider.logClickedPreference(mPreference, - SettingsEnums.FUELGAUGE_BATTERY_SAVER); // This screen already shows a warning, so we don't need another warning. return BatterySaverUtils.setPowerSaveMode(mContext, stateOn, false /* needFirstTimeWarning */); } - @Override - public void updateState(Preference preference) { - super.updateState(preference); - if (mPreference != null) { - mPreference.setChecked(isChecked()); - } - } - @Override public void onPowerSaveModeChanged() { final boolean isChecked = isChecked(); diff --git a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java index fc18f6008ad..0707c2cabc3 100644 --- a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java @@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.app.settings.SettingsEnums; import android.content.Context; import androidx.preference.Preference; @@ -205,6 +206,15 @@ public class BasePreferenceControllerTest { assertThat(keys).isEmpty(); } + @Test + public void getMetricsCategory_metricsCategoryIsSet_shouldReturnTheSameCategory() { + mPreferenceController.setMetricsCategory(SettingsEnums.DISPLAY); + + final int category = mPreferenceController.getMetricsCategory(); + + assertThat(category).isEqualTo(SettingsEnums.DISPLAY); + } + private class FakeBasePreferenceController extends BasePreferenceController { private int mAvailable; From 73c2a8b76f3a970ca41b2b9e1fe1edaf53e73d51 Mon Sep 17 00:00:00 2001 From: Tsung-Mao Fang Date: Tue, 7 Apr 2020 16:39:29 +0800 Subject: [PATCH 11/15] Add keywords for system naviagtion setting Fix: 152979084 Test: Open setting search, see system navigation when I typed "swipe" Change-Id: I2937276f9eb7e9534aa61e2c4b256ce218b99140 --- res/values/strings.xml | 2 +- res/xml/gestures.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8a642ac1fa9..c5af2e05b2d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10667,7 +10667,7 @@ Go back, Home, and switch apps with buttons at the bottom of your screen. - system navigation, 2 button navigation, 3 button navigation, gesture navigation + system navigation, 2 button navigation, 3 button navigation, gesture navigation, swipe Not supported by your default home app, %s diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml index a523ec629b5..c505fc95cba 100644 --- a/res/xml/gestures.xml +++ b/res/xml/gestures.xml @@ -51,7 +51,8 @@ android:key="gesture_system_navigation_input_summary" android:title="@string/system_navigation_title" android:fragment="com.android.settings.gestures.SystemNavigationGestureSettings" - settings:controller="com.android.settings.gestures.SystemNavigationPreferenceController" /> + settings:controller="com.android.settings.gestures.SystemNavigationPreferenceController" + settings:keywords="@string/keywords_system_navigation" /> Date: Tue, 7 Apr 2020 15:40:02 +0800 Subject: [PATCH 12/15] The text on toast should be changed when remains 1 time for SIM lock input This cl was cherry-picked from aosp/585306 The behavior of getQuantityString() is different according to language, it gets both "other" and "one" string if English is system language. But it always gets "other" string if non-English, then the "other" string of wrong_pin_code is shown even if remains 1 time of SIM lock input. In order to change the string in any language, we add new string for remains 1 time. Test: Rebuild rom Fix: 71783850 Change-Id: If4b53bbbc6b51582bc0837abf4497d9a75ebbaad --- res/values/strings.xml | 4 ++++ src/com/android/settings/IccLockSettings.java | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8a642ac1fa9..cd738c3f732 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3017,6 +3017,10 @@ Incorrect SIM PIN code, you have %d remaining attempt before you must contact your carrier to unlock your device. Incorrect SIM PIN code, you have %d remaining attempts. + + + Incorrect SIM PIN code, you have 1 remaining attempt before you must contact your carrier to unlock your device. SIM PIN operation failed! diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java index 4340039cf3e..8c48e65dd77 100644 --- a/src/com/android/settings/IccLockSettings.java +++ b/src/com/android/settings/IccLockSettings.java @@ -639,7 +639,9 @@ public class IccLockSettings extends SettingsPreferenceFragment if (attemptsRemaining == 0) { displayMessage = mRes.getString(R.string.wrong_pin_code_pukked); - } else if (attemptsRemaining > 0) { + } else if (attemptsRemaining == 1) { + displayMessage = mRes.getString(R.string.wrong_pin_code_one, attemptsRemaining); + } else if (attemptsRemaining > 1) { displayMessage = mRes .getQuantityString(R.plurals.wrong_pin_code, attemptsRemaining, attemptsRemaining); From 2a85924977cdff6a71f4c4579e2608b56915daba Mon Sep 17 00:00:00 2001 From: Joshua Duong Date: Wed, 1 Apr 2020 13:52:17 -0700 Subject: [PATCH 13/15] [a11y] Set focus on "Pairing device" text once QR code is scanned. Bug: 152462657 Test: Manual. Enable TalkBack in Settings > Accessibility. Navigate to Developer options > Wireless debugging > Pairing device with QR code. Scan a valid QR code, which should change to "Pairing device..." and screen reader should say "Pairing device". Change-Id: If467b56f787bda765fce1e5d46f8ab3c6210dc76 (cherry picked from commit 07ad841e2d0133b39e65eb0395431e0be68779e3) Exempt-From-Owner-Approval: cherry-pick --- res/layout/adb_qrcode_scanner_fragment.xml | 4 +++- .../settings/development/AdbQrcodeScannerFragment.java | 4 ++++ src/com/android/settings/wifi/dpp/AdbQrCode.java | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/res/layout/adb_qrcode_scanner_fragment.xml b/res/layout/adb_qrcode_scanner_fragment.xml index 975256d18aa..f37c9a6ff4c 100644 --- a/res/layout/adb_qrcode_scanner_fragment.xml +++ b/res/layout/adb_qrcode_scanner_fragment.xml @@ -99,10 +99,12 @@ android:layout_height="wrap_content"/> + android:text="@string/adb_wireless_verifying_qrcode_text" + android:accessibilityLiveRegion="polite"/> diff --git a/src/com/android/settings/development/AdbQrcodeScannerFragment.java b/src/com/android/settings/development/AdbQrcodeScannerFragment.java index 066cf156030..d4c079744a0 100644 --- a/src/com/android/settings/development/AdbQrcodeScannerFragment.java +++ b/src/com/android/settings/development/AdbQrcodeScannerFragment.java @@ -73,6 +73,7 @@ public class AdbQrcodeScannerFragment extends WifiDppQrCodeBaseFragment implemen private QrDecorateView mDecorateView; private View mQrCameraView; private View mVerifyingView; + private TextView mVerifyingTextView; private TextView mErrorMessage; /** QR code data scanned by camera */ @@ -168,6 +169,7 @@ public class AdbQrcodeScannerFragment extends WifiDppQrCodeBaseFragment implemen mQrCameraView = view.findViewById(R.id.camera_layout); mVerifyingView = view.findViewById(R.id.verifying_layout); + mVerifyingTextView = view.findViewById(R.id.verifying_textview); setHeaderTitle(R.string.wifi_dpp_scan_qr_code); mSummary.setText(R.string.adb_wireless_qrcode_pairing_description); @@ -264,6 +266,8 @@ public class AdbQrcodeScannerFragment extends WifiDppQrCodeBaseFragment implemen mDecorateView.setFocused(true); mQrCameraView.setVisibility(View.GONE); mVerifyingView.setVisibility(View.VISIBLE); + AdbQrCode.triggerVibrationForQrCodeRecognition(getContext()); + mVerifyingTextView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); try { mAdbManager.enablePairingByQrCode(mAdbConfig.getSsid(), mAdbConfig.getPreSharedKey()); diff --git a/src/com/android/settings/wifi/dpp/AdbQrCode.java b/src/com/android/settings/wifi/dpp/AdbQrCode.java index fb63e0a5384..65577874e20 100644 --- a/src/com/android/settings/wifi/dpp/AdbQrCode.java +++ b/src/com/android/settings/wifi/dpp/AdbQrCode.java @@ -15,6 +15,7 @@ */ package com.android.settings.wifi.dpp; +import android.content.Context; import android.text.TextUtils; /** @@ -53,4 +54,13 @@ public class AdbQrCode extends WifiQrCode { public WifiNetworkConfig getAdbNetworkConfig() { return mAdbConfig; } + + /** + * Triggers a vibration to notify of a valid QR code. + * + * @param context The context to use + */ + public static void triggerVibrationForQrCodeRecognition(Context context) { + WifiDppUtils.triggerVibrationForQrCodeRecognition(context); + } } From 5866463e162bcfc23ef7d0b1519d0d0ccb90ccf1 Mon Sep 17 00:00:00 2001 From: Joshua Duong Date: Wed, 1 Apr 2020 00:07:11 -0700 Subject: [PATCH 14/15] [a11y] Fix TalkBack readback on adb qrcode fragment. TalkBack was picking up the text in the action bar, so if we hide it, it will read the first body of text it encounters which would be "Scan QR code. Pair device over Wi-Fi by scanning a QR code." Bug: 152461605 Test: Manual. Enable TalkBack in Settings > Accessibility > TalkBack. Navigate to Developer options > Wireless debugging > Pair by QR code. When QR code scanner fragment opens, it should say "Scan QR code. Pair device over Wi-Fi by scanning a QR code." Change-Id: Ia91bf4ea215e6a377335f2b9dcf2acf10afd268e (cherry picked from commit bfd73c0d78f9fc20b98fd42b481d61cbd702adab) Exempt-From-Owner-Approval: cherry-pick --- .../settings/development/AdbQrcodeScannerFragment.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/android/settings/development/AdbQrcodeScannerFragment.java b/src/com/android/settings/development/AdbQrcodeScannerFragment.java index 066cf156030..0a02c954289 100644 --- a/src/com/android/settings/development/AdbQrcodeScannerFragment.java +++ b/src/com/android/settings/development/AdbQrcodeScannerFragment.java @@ -207,6 +207,15 @@ public class AdbQrcodeScannerFragment extends WifiDppQrCodeBaseFragment implemen super.onAttach(context); } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + getActivity().getActionBar().hide(); + // setTitle for TalkBack + getActivity().setTitle(R.string.wifi_dpp_scan_qr_code); + } + @Override public int getMetricsCategory() { return 0; From ea107980f0fcbed2ce2dd790bc4439215fcfcb78 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 7 Apr 2020 14:14:15 -0700 Subject: [PATCH 15/15] Import translations. DO NOT MERGE Auto-generated-cl: translation import Change-Id: Iac2e8d8906fd2900b3ef81c68135ba8b95b06590 --- res/values-es/arrays.xml | 4 ++-- res/values-fi/arrays.xml | 6 +++--- res/values-gu/arrays.xml | 4 ++-- res/values-it/arrays.xml | 2 +- res/values-kk/arrays.xml | 4 ++-- res/values-ky/arrays.xml | 6 +++--- res/values-nl/arrays.xml | 2 +- res/values-pl/arrays.xml | 4 ++-- res/values-sl/arrays.xml | 12 ++++++------ res/values-uk/arrays.xml | 2 +- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml index 056d9f88a59..e2e027b006a 100644 --- a/res/values-es/arrays.xml +++ b/res/values-es/arrays.xml @@ -74,7 +74,7 @@ "Estableciendo conexión..." "Autenticando..." "Obteniendo dirección IP…" - "Conexión establecida" + "Conectado" "Suspendida" "Desconectando..." "Desconectado" @@ -176,7 +176,7 @@ "Ninguno" "Manual" - "Proxy autoconfigurado" + "Proxy configurado automáticamente" "Ninguno" diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml index dd8219f2123..21c432e5e10 100644 --- a/res/values-fi/arrays.xml +++ b/res/values-fi/arrays.xml @@ -482,13 +482,13 @@ "0" - "Tunnista automaattisesti." + "Tunnista automaattisesti" "Merkitse maksulliseksi" "Merkitse maksuttomaksi" - "Käytä satunnaistettua MAC-osoitetta (oletus)." - "Käytä laitteen MAC-osoitetta." + "Käytä satunnaistettua MAC-osoitetta (oletus)" + "Käytä laitteen MAC-osoitetta" "Ei" diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml index f53ee72856c..009bc9e2f45 100644 --- a/res/values-gu/arrays.xml +++ b/res/values-gu/arrays.xml @@ -253,7 +253,7 @@ "સેટિંગ્સ સંશોધિત કરો" "શીર્ષ પર ખેંચો" "ઍક્સેસ સૂચનાઓ" - "કૅમેરો" + "કૅમેરા" "ઑડિઓ રેકોર્ડ કરો" "ઑડિઓ ચલાવો" "ક્લિપબોર્ડ વાંચો" @@ -320,7 +320,7 @@ "સેટિંગ્સ સંશોધિત કરો" "શીર્ષ પર ખેંચો" "સૂચનાઓ ઍક્સેસ કરો" - "કૅમેરો" + "કૅમેરા" "ઑડિઓ રેકોર્ડ કરો" "ઑડિઓ ચલાવો" "ક્લિપબોર્ડ વાંચો" diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml index 374e3461b67..682b00d8ace 100644 --- a/res/values-it/arrays.xml +++ b/res/values-it/arrays.xml @@ -487,7 +487,7 @@ "Considera non a consumo" - "Usa MAC casuale (opzione predefinita)" + "Usa MAC casuale (predefinito)" "Usa MAC del dispositivo" diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml index 562720e762a..67744d45dfa 100644 --- a/res/values-kk/arrays.xml +++ b/res/values-kk/arrays.xml @@ -74,7 +74,7 @@ "Қосылуда..." "Растауда…" "IP мекенжайына қол жеткізуде…" - "Қосылған" + "Жалғанған" "Уақытша тоқтатылды" "Ажыратуда…" "Ажыратылған" @@ -424,7 +424,7 @@ "Ажыратылған" "Бастауда…" "Қосылуда..." - "Қосылған" + "Жалғанған" "Мерзімі аяқталды" "Сәтсіз" diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml index e8c3a793aa4..4023df73ffe 100644 --- a/res/values-ky/arrays.xml +++ b/res/values-ky/arrays.xml @@ -175,7 +175,7 @@ "Жок" - "Нускама" + "Кол менен" "Прокси авто-конфигурац." @@ -418,7 +418,7 @@ "Жок" - "Нускама" + "Кол менен" "Ажыратылган" @@ -487,7 +487,7 @@ "Ченелбейт" - "Демейки (туш келди MAC дарегин колдонуу)" + "Туш келди MAC дарек колдонулат (демейки)" "MAC түзмөгүн колдонуу" diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml index eaf353ab380..a8264f5180d 100644 --- a/res/values-nl/arrays.xml +++ b/res/values-nl/arrays.xml @@ -176,7 +176,7 @@ "Geen" "Handmatig" - "Proxy auto-configuratie" + "Autom. proxyconfiguratie" "Geen" diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml index 87718ec39cc..05de3488fe8 100644 --- a/res/values-pl/arrays.xml +++ b/res/values-pl/arrays.xml @@ -482,13 +482,13 @@ "0" - "Wykryj automatycznie" + "Wykrywaj automatycznie" "Traktuj jako sieć z pomiarem użycia danych" "Traktuj jako sieć bez pomiaru użycia danych" "Używaj randomizowanego adresu MAC (domyślnie)" - "Użyj adresu MAC urządzenia" + "Używaj adresu MAC urządzenia" "Nie" diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml index 4270b21732b..e18d7413cf9 100644 --- a/res/values-sl/arrays.xml +++ b/res/values-sl/arrays.xml @@ -132,10 +132,10 @@ "Slaba" - "Šibko" - "Kar dobro" - "Dobro" - "Odlično" + "Šibka" + "Kar dobra" + "Dobra" + "Odlična" "Zadnjih 30 dni" @@ -483,8 +483,8 @@ "Zaznaj samodejno" - "Obravnavaj kot omrežje z omejenim prenosom podatkov" - "Obravnavaj kot omrežje z neomejenim prenosom podatkov" + "Obravnavaj kot: omejen prenos podatkov" + "Obravnavaj kot: neomejen prenos podatkov" "Uporaba naključno izbranega naslova MAC (privzeto)" diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml index 7ee6b9b2665..90515c5f9e5 100644 --- a/res/values-uk/arrays.xml +++ b/res/values-uk/arrays.xml @@ -134,7 +134,7 @@ "Слабкий" "Слабкий" "Задовільний" - "Добрий" + "Хороший" "Відмінний"