QS: Inversion tile: Don't consider initial 0 setting trackable.

For usage tracking purposes, seeing a setting value of 1 is always
considered trackable.

However, only consider a setting value of 0 as trackable if we've
observed a change (from 1).  Avoids tracking a db update from null
to 0 (via settings cmd or a restore).

Bug: 18062541
Change-Id: Ic8413b1770040f9ef28041bbadb4e5fb62d1c014
This commit is contained in:
John Spurlock
2014-11-19 20:33:40 -05:00
parent 70273e05b2
commit 18764bf551
2 changed files with 15 additions and 6 deletions

View File

@@ -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) {

View File

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