From 0db26b3a872ca6b48be4d8c08ed45a21d60093e8 Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Fri, 8 Dec 2017 17:10:06 -0800 Subject: [PATCH] Add icons for color inversion and daltonizer For accessibilty settings, both on the main page and the shortcut picker. Also now observing settings that could be toggled by the shortcut, so changes can be reflected immediately in the settings ui. Bug: 34621067 Fixes: 70335904 Test: Observe icons in settings and shortcut picker. Toggling color inversion and color correction now changes the setting ui immediately. Change-Id: Id27b6471376059288ff971e5aea72d76078bef36 --- color-check-baseline.xml | 170 ++++++++++++++++-- res/drawable/ic_color_inversion.xml | 52 ++++++ res/drawable/ic_daltonizer.xml | 56 ++++++ res/xml/accessibility_settings.xml | 6 +- .../accessibility/AccessibilitySettings.java | 26 ++- .../SettingsContentObserver.java | 20 ++- .../ShortcutServicePickerFragment.java | 13 +- 7 files changed, 313 insertions(+), 30 deletions(-) create mode 100644 res/drawable/ic_color_inversion.xml create mode 100644 res/drawable/ic_daltonizer.xml diff --git a/color-check-baseline.xml b/color-check-baseline.xml index cbcdf48ddea..6fa20421e3d 100644 --- a/color-check-baseline.xml +++ b/color-check-baseline.xml @@ -1,6 +1,18 @@ + + + + @@ -1085,7 +1097,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1281,6 +1293,134 @@ column="17"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1933,7 +2073,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1949,7 +2089,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1965,7 +2105,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1981,7 +2121,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1997,7 +2137,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -2013,7 +2153,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -2029,7 +2169,7 @@ errorLine2=" ^"> @@ -2045,7 +2185,7 @@ errorLine2=" ^"> @@ -2061,7 +2201,7 @@ errorLine2=" ^"> @@ -2077,7 +2217,7 @@ errorLine2=" ^"> @@ -2093,7 +2233,7 @@ errorLine2=" ^"> @@ -2109,7 +2249,7 @@ errorLine2=" ^"> diff --git a/res/drawable/ic_color_inversion.xml b/res/drawable/ic_color_inversion.xml new file mode 100644 index 00000000000..aa59f5a0c4d --- /dev/null +++ b/res/drawable/ic_color_inversion.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/ic_daltonizer.xml b/res/drawable/ic_daltonizer.xml new file mode 100644 index 00000000000..04e397d52a4 --- /dev/null +++ b/res/drawable/ic_daltonizer.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml index 7728a078421..d7d2e02e4e1 100644 --- a/res/xml/accessibility_settings.xml +++ b/res/xml/accessibility_settings.xml @@ -118,12 +118,14 @@ + android:title="@string/accessibility_display_daltonizer_preference_title" + android:icon="@drawable/ic_daltonizer"/> + android:persistent="false" + android:icon="@drawable/ic_color_inversion"/> diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 0611b09302e..21614155029 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -42,6 +42,7 @@ import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.accessibility.AccessibilityManager; +import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.content.PackageMonitor; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.view.RotationPolicy; @@ -57,6 +58,7 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.accessibility.AccessibilityUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -172,13 +174,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } }; - private final SettingsContentObserver mSettingsContentObserver = - new SettingsContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange, Uri uri) { - updateServicePreferences(); - } - }; + private final SettingsContentObserver mSettingsContentObserver; private final RotationPolicyListener mRotationPolicyListener = new RotationPolicyListener() { @Override @@ -224,6 +220,22 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements .getBoolean(com.android.internal.R.bool.config_setColorTransformAccelerated); } + public AccessibilitySettings() { + // Observe changes to anything that the shortcut can toggle, so we can reflect updates + final Collection features = + AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values(); + final List shortcutFeatureKeys = new ArrayList<>(features.size()); + for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) { + shortcutFeatureKeys.add(feature.getSettingKey()); + } + mSettingsContentObserver = new SettingsContentObserver(mHandler, shortcutFeatureKeys) { + @Override + public void onChange(boolean selfChange, Uri uri) { + updateAllPreferences(); + } + }; + } + @Override public int getMetricsCategory() { return MetricsEvent.ACCESSIBILITY; diff --git a/src/com/android/settings/accessibility/SettingsContentObserver.java b/src/com/android/settings/accessibility/SettingsContentObserver.java index c3baec50382..de67f6c4e3d 100644 --- a/src/com/android/settings/accessibility/SettingsContentObserver.java +++ b/src/com/android/settings/accessibility/SettingsContentObserver.java @@ -22,16 +22,28 @@ import android.net.Uri; import android.os.Handler; import android.provider.Settings; +import java.util.ArrayList; +import java.util.List; + abstract class SettingsContentObserver extends ContentObserver { + private final List mKeysToObserve = new ArrayList<>(2); + public SettingsContentObserver(Handler handler) { super(handler); + mKeysToObserve.add(Settings.Secure.ACCESSIBILITY_ENABLED); + mKeysToObserve.add(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + } + + public SettingsContentObserver(Handler handler, List keysToObserve) { + this(handler); + mKeysToObserve.addAll(keysToObserve); } public void register(ContentResolver contentResolver) { - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ACCESSIBILITY_ENABLED), false, this); - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); + for (int i = 0; i < mKeysToObserve.size(); i++) { + contentResolver.registerContentObserver( + Settings.Secure.getUriFor(mKeysToObserve.get(i)), false, this); + } } public void unregister(ContentResolver contentResolver) { diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java index e0c41befa45..52c1a0d95a7 100644 --- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java +++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java @@ -16,6 +16,8 @@ package com.android.settings.accessibility; import static android.content.DialogInterface.BUTTON_POSITIVE; +import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; +import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import android.accessibilityservice.AccessibilityServiceInfo; import android.app.Activity; @@ -85,9 +87,16 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment { Map frameworkFeatureInfoMap = AccessibilityShortcutController.getFrameworkShortcutFeaturesMap(); for (ComponentName componentName : frameworkFeatureInfoMap.keySet()) { - // Lookup icon + final int iconId; + if (componentName.equals(COLOR_INVERSION_COMPONENT_NAME)) { + iconId = R.drawable.ic_color_inversion; + } else if (componentName.equals(DALTONIZER_COMPONENT_NAME)) { + iconId = R.drawable.ic_daltonizer; + } else { + iconId = R.drawable.empty_icon; + } candidates.add(new FrameworkCandidateInfo(frameworkFeatureInfoMap.get(componentName), - R.drawable.empty_icon, componentName.flattenToString())); + iconId, componentName.flattenToString())); } for (int i = 0; i < numInstalledServices; i++) { final AccessibilityServiceInfo installedServiceInfo = installedServices.get(i);