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