SecureSetting.java revision ccb6b9a90f228cc4e31a9442ed28756ff474c080
1af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/* 2af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Copyright (C) 2014 The Android Open Source Project 3af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 4af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * you may not use this file except in compliance with the License. 6af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * You may obtain a copy of the License at 7af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 8af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 10af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Unless required by applicable law or agreed to in writing, software 11af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * See the License for the specific language governing permissions and 14af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * limitations under the License. 15af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 16af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 17af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpackage com.android.systemui.qs; 18af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 19af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Context; 20af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.database.ContentObserver; 21af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.Handler; 22af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.provider.Settings.Secure; 23af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 24ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlockimport com.android.systemui.statusbar.policy.Listenable; 25af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 26af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/** Helper for managing a secure setting. **/ 27ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlockpublic abstract class SecureSetting extends ContentObserver implements Listenable { 28af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final Context mContext; 29af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final String mSettingName; 30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 31af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected abstract void handleValueChanged(int value); 32af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 33af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public SecureSetting(Context context, Handler handler, String settingName) { 34af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock super(handler); 35af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContext = context; 36af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSettingName = settingName; 37af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock rebindForCurrentUser(); 38af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 39af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 40af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void rebindForCurrentUser() { 41ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock setListening(true); 42af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 43af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 44af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public int getValue() { 45af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return Secure.getInt(mContext.getContentResolver(), mSettingName, 0); 46af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 47af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 48af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void setValue(int value) { 49af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Secure.putInt(mContext.getContentResolver(), mSettingName, value); 50af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 51af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 52af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 53ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock public void setListening(boolean listening) { 54ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (listening) { 55ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock mContext.getContentResolver().registerContentObserver( 56ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock Secure.getUriFor(mSettingName), false, this); 57ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } else { 58ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock mContext.getContentResolver().unregisterContentObserver(this); 59ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 60af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 61af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 62af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 63af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onChange(boolean selfChange) { 64af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock handleValueChanged(getValue()); 65af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 66af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock} 67