diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index a4576bb9dc5b0..e05a8970133fc 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -177,7 +177,7 @@
200
-
- 30
+
+ 30
diff --git a/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java b/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java
new file mode 100644
index 0000000000000..e72d3a9b98343
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+
+import com.android.systemui.R;
+
+public class UsageTracker {
+ private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
+
+ private final Context mContext;
+ private final long mTimeToShowTile;
+ private final String mPrefKey;
+ private final String mResetAction;
+
+ private BroadcastReceiver mReceiver;
+
+ public UsageTracker(Context context, Class> tile) {
+ mContext = context;
+ mPrefKey = tile.getSimpleName() + "LastUsed";
+ mTimeToShowTile = MILLIS_PER_DAY * mContext.getResources()
+ .getInteger(R.integer.days_to_show_timeout_tiles);
+ mResetAction = "com.android.systemui.qs." + tile.getSimpleName() + ".usage_reset";
+ }
+
+ public void listenForReset() {
+ if (mReceiver != null) {
+ mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mResetAction.equals(intent.getAction())) {
+ reset();
+ }
+ }
+ };
+ mContext.registerReceiver(mReceiver, new IntentFilter(mResetAction));
+ }
+ }
+
+ public boolean isRecentlyUsed() {
+ long lastUsed = getSharedPrefs().getLong(mPrefKey, 0);
+ return (System.currentTimeMillis() - lastUsed) < mTimeToShowTile;
+ }
+
+ public void trackUsage() {
+ getSharedPrefs().edit().putLong(mPrefKey, System.currentTimeMillis()).commit();
+ }
+
+ public void reset() {
+ getSharedPrefs().edit().remove(mPrefKey).commit();
+ }
+
+ private SharedPreferences getSharedPrefs() {
+ return mContext.getSharedPreferences(mContext.getPackageName(), 0);
+ }
+}
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 7c2c7c301bbf3..9c8846697363b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -21,13 +21,13 @@ import android.provider.Settings.Secure;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.SecureSetting;
+import com.android.systemui.qs.UsageTracker;
/** Quick settings tile: Invert colors **/
public class ColorInversionTile extends QSTile {
private final SecureSetting mSetting;
-
- private boolean mVisible;
+ private final UsageTracker mUsageTracker;
public ColorInversionTile(Host host) {
super(host);
@@ -37,8 +37,11 @@ public class ColorInversionTile extends QSTile {
@Override
protected void handleValueChanged(int value) {
handleRefreshState(value);
+ mUsageTracker.trackUsage();
}
};
+ mUsageTracker = new UsageTracker(host.getContext(), ColorInversionTile.class);
+ mUsageTracker.listenForReset();
}
@Override
@@ -65,10 +68,7 @@ public class ColorInversionTile extends QSTile {
protected void handleUpdateState(BooleanState state, Object arg) {
final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
final boolean enabled = value != 0;
- if (enabled) {
- mVisible = true;
- }
- state.visible = mVisible;
+ state.visible = enabled || mUsageTracker.isRecentlyUsed();
state.value = enabled;
state.label = mContext.getString(R.string.quick_settings_inversion_label);
state.iconId = enabled ? R.drawable.ic_qs_inversion_on : R.drawable.ic_qs_inversion_off;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index e0b465ed009cc..ff26b542b5338 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -19,27 +19,23 @@ package com.android.systemui.qs.tiles;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import com.android.systemui.R;
+import com.android.systemui.qs.UsageTracker;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.HotspotController;
/** Quick settings tile: Hotspot **/
public class HotspotTile extends QSTile {
- private static final String KEY_LAST_USED_DATE = "lastUsedDate";
- private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
-
private final HotspotController mController;
private final Callback mCallback = new Callback();
- private final long mTimeToShowTile;
+ private final UsageTracker mUsageTracker;
public HotspotTile(Host host) {
super(host);
mController = host.getHotspotController();
-
- mTimeToShowTile = MILLIS_PER_DAY
- * mContext.getResources().getInteger(R.integer.days_to_show_hotspot);
+ mUsageTracker = new UsageTracker(host.getContext(), HotspotTile.class);
+ mUsageTracker.listenForReset();
}
@Override
@@ -64,7 +60,7 @@ public class HotspotTile extends QSTile {
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
- state.visible = mController.isHotspotSupported() && isHotspotRecentlyUsed();
+ state.visible = mController.isHotspotSupported() && mUsageTracker.isRecentlyUsed();
state.label = mContext.getString(R.string.quick_settings_hotspot_label);
state.value = mController.isHotspotEnabled();
@@ -72,15 +68,6 @@ public class HotspotTile extends QSTile {
: R.drawable.ic_qs_hotspot_off;
}
- private boolean isHotspotRecentlyUsed() {
- long lastDay = getSharedPrefs(mContext).getLong(KEY_LAST_USED_DATE, 0);
- return (System.currentTimeMillis() - lastDay) < mTimeToShowTile;
- }
-
- private static SharedPreferences getSharedPrefs(Context context) {
- return context.getSharedPreferences(context.getPackageName(), 0);
- }
-
private final class Callback implements HotspotController.Callback {
@Override
public void onHotspotChanged(boolean enabled) {
@@ -93,10 +80,14 @@ public class HotspotTile extends QSTile {
* the hotspot tile for a number of days after use.
*/
public static class APChangedReceiver extends BroadcastReceiver {
+ private UsageTracker mUsageTracker;
+
@Override
public void onReceive(Context context, Intent intent) {
- long currentTime = System.currentTimeMillis();
- getSharedPrefs(context).edit().putLong(KEY_LAST_USED_DATE, currentTime).commit();
+ if (mUsageTracker == null) {
+ mUsageTracker = new UsageTracker(context, HotspotTile.class);
+ }
+ mUsageTracker.trackUsage();
}
}
}