diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/SecureSetting.java | 15 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java | 6 |
2 files changed, 15 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SecureSetting.java b/packages/SystemUI/src/com/android/systemui/qs/SecureSetting.java index 0ab6626..4f812bc 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/SecureSetting.java +++ b/packages/SystemUI/src/com/android/systemui/qs/SecureSetting.java @@ -26,24 +26,26 @@ import com.android.systemui.statusbar.policy.Listenable; /** Helper for managing a secure setting. **/ public abstract class SecureSetting extends ContentObserver implements Listenable { + private static final int DEFAULT = 0; + private final Context mContext; private final String mSettingName; private boolean mListening; private int mUserId; + private int mObservedValue = DEFAULT; - protected abstract void handleValueChanged(int value); + protected abstract void handleValueChanged(int value, boolean observedChange); public SecureSetting(Context context, Handler handler, String settingName) { super(handler); mContext = context; mSettingName = settingName; mUserId = ActivityManager.getCurrentUser(); - setListening(true); } public int getValue() { - return Secure.getIntForUser(mContext.getContentResolver(), mSettingName, 0, mUserId); + return Secure.getIntForUser(mContext.getContentResolver(), mSettingName, DEFAULT, mUserId); } public void setValue(int value) { @@ -52,18 +54,23 @@ public abstract class SecureSetting extends ContentObserver implements Listenabl @Override public void setListening(boolean listening) { + if (listening == mListening) return; mListening = listening; if (listening) { + mObservedValue = getValue(); mContext.getContentResolver().registerContentObserver( Secure.getUriFor(mSettingName), false, this, mUserId); } else { mContext.getContentResolver().unregisterContentObserver(this); + mObservedValue = DEFAULT; } } @Override public void onChange(boolean selfChange) { - handleValueChanged(getValue()); + final int value = getValue(); + handleValueChanged(value, value != mObservedValue); + mObservedValue = value; } public void setUserId(int userId) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java index b565afa..5963a45 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java @@ -41,8 +41,10 @@ public class ColorInversionTile extends QSTile<QSTile.BooleanState> { mSetting = new SecureSetting(mContext, mHandler, Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) { @Override - protected void handleValueChanged(int value) { - mUsageTracker.trackUsage(); + protected void handleValueChanged(int value, boolean observedChange) { + if (value != 0 || observedChange) { + mUsageTracker.trackUsage(); + } if (mListening) { handleRefreshState(value); } |