13b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk/*
23b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * Copyright (C) 2015 The Android Open Source Project
33b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk *
43b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
53b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * you may not use this file except in compliance with the License.
63b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * You may obtain a copy of the License at
73b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk *
83b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
93b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk *
103b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * Unless required by applicable law or agreed to in writing, software
113b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
123b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * See the License for the specific language governing permissions and
143b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk * limitations under the License
153b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk */
163b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkpackage com.android.systemui.tuner;
173b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
185e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monkimport android.app.ActivityManager;
193b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport android.content.ContentResolver;
203b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport android.content.Context;
213b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport android.provider.Settings;
2287ccd55e8a90ff5d1c30f852941d523a83ab735aJason Monkimport android.support.v14.preference.SwitchPreference;
233b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport android.text.TextUtils;
243b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport android.util.AttributeSet;
253b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
26a403159a3bb693088c127e4ee5955fa940e75950Jason Monkimport com.android.internal.logging.MetricsLogger;
27383db5ebcc3a4a615faf249bf4f126f42e80b82eTamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
28de850bbcaa61c1874b803f2086443febbafd81a4Jason Monkimport com.android.systemui.Dependency;
293b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport com.android.systemui.statusbar.phone.StatusBarIconController;
305e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monkimport com.android.systemui.tuner.TunerService.Tunable;
313b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
323b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monkimport java.util.Set;
333b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
345e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monkpublic class StatusBarSwitch extends SwitchPreference implements Tunable {
355e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk
365e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk    private Set<String> mBlacklist;
373b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
383b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    public StatusBarSwitch(Context context, AttributeSet attrs) {
393b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        super(context, attrs);
405e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk    }
415e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk
425e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk    @Override
4387ccd55e8a90ff5d1c30f852941d523a83ab735aJason Monk    public void onAttached() {
4487ccd55e8a90ff5d1c30f852941d523a83ab735aJason Monk        super.onAttached();
45de850bbcaa61c1874b803f2086443febbafd81a4Jason Monk        Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
46fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk    }
47fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk
48fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk    @Override
4987ccd55e8a90ff5d1c30f852941d523a83ab735aJason Monk    public void onDetached() {
50de850bbcaa61c1874b803f2086443febbafd81a4Jason Monk        Dependency.get(TunerService.class).removeTunable(this);
5187ccd55e8a90ff5d1c30f852941d523a83ab735aJason Monk        super.onDetached();
52fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk    }
53fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk
54fe7c91bb6031622ca576454926db875c0c8ac0d8Jason Monk    @Override
555e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk    public void onTuningChanged(String key, String newValue) {
565e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk        if (!StatusBarIconController.ICON_BLACKLIST.equals(key)) {
575e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk            return;
585e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk        }
595e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk        mBlacklist = StatusBarIconController.getIconBlacklist(newValue);
605e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk        setChecked(!mBlacklist.contains(getKey()));
613b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    }
623b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
633b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    @Override
643b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    protected boolean persistBoolean(boolean value) {
653b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        if (!value) {
663b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk            // If not enabled add to blacklist.
675e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk            if (!mBlacklist.contains(getKey())) {
68f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren                MetricsLogger.action(getContext(), MetricsEvent.TUNER_STATUS_BAR_DISABLE,
69a403159a3bb693088c127e4ee5955fa940e75950Jason Monk                        getKey());
705e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk                mBlacklist.add(getKey());
715e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk                setList(mBlacklist);
723b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk            }
733b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        } else {
745e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk            if (mBlacklist.remove(getKey())) {
75f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren                MetricsLogger.action(getContext(), MetricsEvent.TUNER_STATUS_BAR_ENABLE, getKey());
765e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk                setList(mBlacklist);
773b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk            }
783b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        }
793b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        return true;
803b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    }
813b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk
823b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    private void setList(Set<String> blacklist) {
833b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk        ContentResolver contentResolver = getContext().getContentResolver();
845e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk        Settings.Secure.putStringForUser(contentResolver, StatusBarIconController.ICON_BLACKLIST,
855e745172d93fcd4a90e0c8b216941a10a9994de8Jason Monk                TextUtils.join(",", blacklist), ActivityManager.getCurrentUser());
863b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk    }
873b230077dc53c1f83aa6e9b70585148d8193dd82Jason Monk}
88