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 mSecureSettings.getIntForUser(mSettingName, mDefaultValue, mUserId); 58 } 59 setValue(int value)60 public void setValue(int value) { 61 mSecureSettings.putIntForUser(mSettingName, value, mUserId); 62 } 63 64 @Override setListening(boolean listening)65 public void setListening(boolean listening) { 66 if (listening == mListening) return; 67 mListening = listening; 68 if (listening) { 69 mObservedValue = getValue(); 70 mSecureSettings.registerContentObserverForUser( 71 mSecureSettings.getUriFor(mSettingName), false, this, mUserId); 72 } else { 73 mSecureSettings.unregisterContentObserver(this); 74 mObservedValue = mDefaultValue; 75 } 76 } 77 78 @Override onChange(boolean selfChange)79 public void onChange(boolean selfChange) { 80 final int value = getValue(); 81 handleValueChanged(value, value != mObservedValue); 82 mObservedValue = value; 83 } 84 setUserId(int userId)85 public void setUserId(int userId) { 86 mUserId = userId; 87 if (mListening) { 88 setListening(false); 89 setListening(true); 90 } 91 } 92 getCurrentUser()93 public int getCurrentUser() { 94 return mUserId; 95 } 96 getKey()97 public String getKey() { 98 return mSettingName; 99 } 100 isListening()101 public boolean isListening() { 102 return mListening; 103 } 104 } 105