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