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.app.ActivityManager; 20 import android.database.ContentObserver; 21 import android.os.Handler; 22 23 import com.android.systemui.statusbar.policy.Listenable; 24 import com.android.systemui.util.settings.SecureSettings; 25 26 /** Helper for managing a secure setting. **/ 27 public abstract class SecureSetting extends ContentObserver implements Listenable { 28 private final SecureSettings mSecureSettings; 29 private final String mSettingName; 30 private final int mDefaultValue; 31 32 private boolean mListening; 33 private int mUserId; 34 private int mObservedValue; 35 handleValueChanged(int value, boolean observedChange)36 protected abstract void handleValueChanged(int value, boolean observedChange); 37 SecureSetting(SecureSettings secureSettings, Handler handler, String settingName, int userId)38 public SecureSetting(SecureSettings secureSettings, Handler handler, String settingName, 39 int userId) { 40 this(secureSettings, handler, settingName, userId, 0); 41 } 42 SecureSetting(SecureSettings secureSetting, Handler handler, String settingName)43 public SecureSetting(SecureSettings secureSetting, Handler handler, String settingName) { 44 this(secureSetting, handler, settingName, ActivityManager.getCurrentUser()); 45 } 46 SecureSetting(SecureSettings secureSettings, Handler handler, String settingName, int userId, int defaultValue)47 public SecureSetting(SecureSettings secureSettings, Handler handler, String settingName, 48 int userId, int defaultValue) { 49 super(handler); 50 mSecureSettings = secureSettings; 51 mSettingName = settingName; 52 mObservedValue = mDefaultValue = defaultValue; 53 mUserId = userId; 54 } 55 getValue()56 public int getValue() { 57 return mListening ? mObservedValue : getValueFromProvider(); 58 } 59 setValue(int value)60 public void setValue(int value) { 61 mSecureSettings.putIntForUser(mSettingName, value, mUserId); 62 } 63 getValueFromProvider()64 private int getValueFromProvider() { 65 return mSecureSettings.getIntForUser(mSettingName, mDefaultValue, mUserId); 66 } 67 68 @Override setListening(boolean listening)69 public void setListening(boolean listening) { 70 if (listening == mListening) return; 71 mListening = listening; 72 if (listening) { 73 mObservedValue = getValueFromProvider(); 74 mSecureSettings.registerContentObserverForUser( 75 mSecureSettings.getUriFor(mSettingName), false, this, mUserId); 76 } else { 77 mSecureSettings.unregisterContentObserver(this); 78 mObservedValue = mDefaultValue; 79 } 80 } 81 82 @Override onChange(boolean selfChange)83 public void onChange(boolean selfChange) { 84 final int value = getValueFromProvider(); 85 final boolean changed = value != mObservedValue; 86 mObservedValue = value; 87 handleValueChanged(value, changed); 88 } 89 setUserId(int userId)90 public void setUserId(int userId) { 91 mUserId = userId; 92 if (mListening) { 93 setListening(false); 94 setListening(true); 95 } 96 } 97 getCurrentUser()98 public int getCurrentUser() { 99 return mUserId; 100 } 101 getKey()102 public String getKey() { 103 return mSettingName; 104 } 105 isListening()106 public boolean isListening() { 107 return mListening; 108 } 109 } 110