From 1f81c0542e7850695c65309227f740fc4140469c Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Mon, 8 Oct 2012 15:54:09 -0700 Subject: [PATCH] Accessibility settings should update after gesture to enable accessibility. 1. We have added a global gesture to enable accessibility which is long press on power follower by a long press with two fingers. If this gesture is performed when accessibility settings are on the screen, accessibility and the screen-reader are enabled while the UI does not reflect that and the user may try to enable the already enabled screen-reader which will show two irrelevant warning dialogs - one for enabling the screen-reader and one for enabling explore by touch (assuming the screen-reader requests it). This change adds a simple content observer for the relevant accessibility settings which upon a change calls the functions to refresh the settings UI. bug:7309127 Change-Id: I45851d7789e24e9e0a5bc5aaac39db9a12b60e0c --- .../settings/AccessibilitySettings.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java index d64a092c198..d055345926b 100644 --- a/src/com/android/settings/AccessibilitySettings.java +++ b/src/com/android/settings/AccessibilitySettings.java @@ -30,6 +30,7 @@ import android.content.SharedPreferences; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.Configuration; +import android.database.ContentObserver; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -150,6 +151,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } }; + private final SettingsContentObserver mSettingsContentObserver = + new SettingsContentObserver(mHandler); + private final RotationPolicy.RotationPolicyListener mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() { @Override @@ -190,6 +194,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements offerInstallAccessibilitySerivceOnce(); mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); + mSettingsContentObserver.register(); RotationPolicy.registerRotationPolicyListener(getActivity(), mRotationPolicyListener); } @@ -199,6 +204,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements mSettingsPackageMonitor.unregister(); RotationPolicy.unregisterRotationPolicyListener(getActivity(), mRotationPolicyListener); + mSettingsContentObserver.unregister(); super.onPause(); } @@ -1009,4 +1015,28 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements mSummaryPreference.setSummary(summary); } } + + private final class SettingsContentObserver extends ContentObserver { + + public SettingsContentObserver(Handler handler) { + super(handler); + } + + public void register() { + getContentResolver().registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_ENABLED), false, this); + getContentResolver().registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); + } + + public void unregister() { + getContentResolver().unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + loadInstalledServices(); + updateServicesPreferences(); + } + } }