1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.qs; 18 19 import android.content.BroadcastReceiver; 20 import android.content.Context; 21 import android.content.DialogInterface; 22 import android.content.Intent; 23 import android.content.IntentFilter; 24 import android.content.SharedPreferences; 25 26 import com.android.systemui.R; 27 import com.android.systemui.statusbar.phone.SystemUIDialog; 28 import com.android.systemui.statusbar.policy.Listenable; 29 30 public class UsageTracker implements Listenable { 31 private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24; 32 33 private final Context mContext; 34 private final long mTimeToShowTile; 35 private final String mPrefKey; 36 private final String mResetAction; 37 38 private boolean mRegistered; 39 UsageTracker(Context context, Class<?> tile, int timeoutResource)40 public UsageTracker(Context context, Class<?> tile, int timeoutResource) { 41 mContext = context; 42 mPrefKey = tile.getSimpleName() + "LastUsed"; 43 mTimeToShowTile = MILLIS_PER_DAY * mContext.getResources().getInteger(timeoutResource); 44 mResetAction = "com.android.systemui.qs." + tile.getSimpleName() + ".usage_reset"; 45 } 46 47 @Override setListening(boolean listen)48 public void setListening(boolean listen) { 49 if (listen && !mRegistered) { 50 mContext.registerReceiver(mReceiver, new IntentFilter(mResetAction)); 51 mRegistered = true; 52 } else if (!listen && mRegistered) { 53 mContext.unregisterReceiver(mReceiver); 54 mRegistered = false; 55 } 56 } 57 isRecentlyUsed()58 public boolean isRecentlyUsed() { 59 long lastUsed = getSharedPrefs().getLong(mPrefKey, 0); 60 return (System.currentTimeMillis() - lastUsed) < mTimeToShowTile; 61 } 62 trackUsage()63 public void trackUsage() { 64 getSharedPrefs().edit().putLong(mPrefKey, System.currentTimeMillis()).commit(); 65 } 66 reset()67 public void reset() { 68 getSharedPrefs().edit().remove(mPrefKey).commit(); 69 } 70 showResetConfirmation(String title, final Runnable onConfirmed)71 public void showResetConfirmation(String title, final Runnable onConfirmed) { 72 final SystemUIDialog d = new SystemUIDialog(mContext); 73 d.setTitle(title); 74 d.setMessage(mContext.getString(R.string.quick_settings_reset_confirmation_message)); 75 d.setNegativeButton(android.R.string.cancel, null); 76 d.setPositiveButton(R.string.quick_settings_reset_confirmation_button, 77 new DialogInterface.OnClickListener() { 78 @Override 79 public void onClick(DialogInterface dialog, int which) { 80 reset(); 81 if (onConfirmed != null) { 82 onConfirmed.run(); 83 } 84 } 85 }); 86 d.setCanceledOnTouchOutside(true); 87 d.show(); 88 } 89 getSharedPrefs()90 private SharedPreferences getSharedPrefs() { 91 return mContext.getSharedPreferences(mContext.getPackageName(), 0); 92 } 93 94 private BroadcastReceiver mReceiver = new BroadcastReceiver() { 95 @Override 96 public void onReceive(Context context, Intent intent) { 97 if (mResetAction.equals(intent.getAction())) { 98 reset(); 99 } 100 } 101 }; 102 } 103