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