• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 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 package com.android.systemui.tuner;
17 
18 import static com.android.systemui.BatteryMeterView.SHOW_PERCENT_SETTING;
19 
20 import android.app.AlertDialog;
21 import android.app.FragmentTransaction;
22 import android.content.DialogInterface;
23 import android.content.DialogInterface.OnClickListener;
24 import android.database.ContentObserver;
25 import android.net.Uri;
26 import android.os.Bundle;
27 import android.os.Handler;
28 import android.preference.Preference;
29 import android.preference.Preference.OnPreferenceChangeListener;
30 import android.preference.Preference.OnPreferenceClickListener;
31 import android.preference.PreferenceFragment;
32 import android.preference.PreferenceGroup;
33 import android.preference.SwitchPreference;
34 import android.provider.Settings;
35 import android.provider.Settings.System;
36 import android.view.Menu;
37 import android.view.MenuInflater;
38 import android.view.MenuItem;
39 
40 import com.android.internal.logging.MetricsLogger;
41 import com.android.systemui.R;
42 import com.android.systemui.statusbar.phone.StatusBarIconController;
43 import com.android.systemui.tuner.TunerService.Tunable;
44 
45 public class TunerFragment extends PreferenceFragment {
46 
47     private static final String TAG = "TunerFragment";
48 
49     private static final String KEY_QS_TUNER = "qs_tuner";
50     private static final String KEY_DEMO_MODE = "demo_mode";
51     private static final String KEY_BATTERY_PCT = "battery_pct";
52 
53     public static final String SETTING_SEEN_TUNER_WARNING = "seen_tuner_warning";
54 
55     private static final int MENU_REMOVE = Menu.FIRST + 1;
56 
57     private final SettingObserver mSettingObserver = new SettingObserver();
58 
59     private SwitchPreference mBatteryPct;
60 
onCreate(Bundle savedInstanceState)61     public void onCreate(Bundle savedInstanceState) {
62         super.onCreate(savedInstanceState);
63 
64         addPreferencesFromResource(R.xml.tuner_prefs);
65         getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
66         setHasOptionsMenu(true);
67 
68         findPreference(KEY_QS_TUNER).setOnPreferenceClickListener(new OnPreferenceClickListener() {
69             @Override
70             public boolean onPreferenceClick(Preference preference) {
71                 FragmentTransaction ft = getFragmentManager().beginTransaction();
72                 ft.replace(android.R.id.content, new QsTuner(), "QsTuner");
73                 ft.addToBackStack(null);
74                 ft.commit();
75                 return true;
76             }
77         });
78         findPreference(KEY_DEMO_MODE).setOnPreferenceClickListener(new OnPreferenceClickListener() {
79             @Override
80             public boolean onPreferenceClick(Preference preference) {
81                 FragmentTransaction ft = getFragmentManager().beginTransaction();
82                 ft.replace(android.R.id.content, new DemoModeFragment(), "DemoMode");
83                 ft.addToBackStack(null);
84                 ft.commit();
85                 return true;
86             }
87         });
88         mBatteryPct = (SwitchPreference) findPreference(KEY_BATTERY_PCT);
89         if (Settings.Secure.getInt(getContext().getContentResolver(), SETTING_SEEN_TUNER_WARNING,
90                 0) == 0) {
91             new AlertDialog.Builder(getContext())
92                     .setTitle(R.string.tuner_warning_title)
93                     .setMessage(R.string.tuner_warning)
94                     .setPositiveButton(R.string.got_it, new OnClickListener() {
95                         @Override
96                         public void onClick(DialogInterface dialog, int which) {
97                             Settings.Secure.putInt(getContext().getContentResolver(),
98                                     SETTING_SEEN_TUNER_WARNING, 1);
99                         }
100                     }).show();
101         }
102     }
103 
104     @Override
onResume()105     public void onResume() {
106         super.onResume();
107         updateBatteryPct();
108         getContext().getContentResolver().registerContentObserver(
109                 System.getUriFor(SHOW_PERCENT_SETTING), false, mSettingObserver);
110 
111         registerPrefs(getPreferenceScreen());
112         MetricsLogger.visibility(getContext(), MetricsLogger.TUNER, true);
113     }
114 
115     @Override
onPause()116     public void onPause() {
117         super.onPause();
118         getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
119 
120         unregisterPrefs(getPreferenceScreen());
121         MetricsLogger.visibility(getContext(), MetricsLogger.TUNER, false);
122     }
123 
registerPrefs(PreferenceGroup group)124     private void registerPrefs(PreferenceGroup group) {
125         TunerService tunerService = TunerService.get(getContext());
126         final int N = group.getPreferenceCount();
127         for (int i = 0; i < N; i++) {
128             Preference pref = group.getPreference(i);
129             if (pref instanceof StatusBarSwitch) {
130                 tunerService.addTunable((Tunable) pref, StatusBarIconController.ICON_BLACKLIST);
131             } else if (pref instanceof PreferenceGroup) {
132                 registerPrefs((PreferenceGroup) pref);
133             }
134         }
135     }
136 
unregisterPrefs(PreferenceGroup group)137     private void unregisterPrefs(PreferenceGroup group) {
138         TunerService tunerService = TunerService.get(getContext());
139         final int N = group.getPreferenceCount();
140         for (int i = 0; i < N; i++) {
141             Preference pref = group.getPreference(i);
142             if (pref instanceof Tunable) {
143                 tunerService.removeTunable((Tunable) pref);
144             } else if (pref instanceof PreferenceGroup) {
145                 registerPrefs((PreferenceGroup) pref);
146             }
147         }
148     }
149 
150     @Override
onCreateOptionsMenu(Menu menu, MenuInflater inflater)151     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
152         menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, R.string.remove_from_settings);
153     }
154 
155     @Override
onOptionsItemSelected(MenuItem item)156     public boolean onOptionsItemSelected(MenuItem item) {
157         switch (item.getItemId()) {
158             case android.R.id.home:
159                 getActivity().finish();
160                 return true;
161             case MENU_REMOVE:
162                 TunerService.showResetRequest(getContext(), new Runnable() {
163                     @Override
164                     public void run() {
165                         getActivity().finish();
166                     }
167                 });
168                 return true;
169         }
170         return super.onOptionsItemSelected(item);
171     }
172 
updateBatteryPct()173     private void updateBatteryPct() {
174         mBatteryPct.setOnPreferenceChangeListener(null);
175         mBatteryPct.setChecked(System.getInt(getContext().getContentResolver(),
176                 SHOW_PERCENT_SETTING, 0) != 0);
177         mBatteryPct.setOnPreferenceChangeListener(mBatteryPctChange);
178     }
179 
180     private final class SettingObserver extends ContentObserver {
SettingObserver()181         public SettingObserver() {
182             super(new Handler());
183         }
184 
185         @Override
onChange(boolean selfChange, Uri uri, int userId)186         public void onChange(boolean selfChange, Uri uri, int userId) {
187             super.onChange(selfChange, uri, userId);
188             updateBatteryPct();
189         }
190     }
191 
192     private final OnPreferenceChangeListener mBatteryPctChange = new OnPreferenceChangeListener() {
193         @Override
194         public boolean onPreferenceChange(Preference preference, Object newValue) {
195             final boolean v = (Boolean) newValue;
196             MetricsLogger.action(getContext(), MetricsLogger.TUNER_BATTERY_PERCENTAGE, v);
197             System.putInt(getContext().getContentResolver(), SHOW_PERCENT_SETTING, v ? 1 : 0);
198             return true;
199         }
200     };
201 }
202