TunerFragment.java revision c0d7058b14c24cd07912f5629c26b39b7b4673d5
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 */
16package com.android.systemui.tuner;
17
18import android.app.AlertDialog;
19import android.app.Dialog;
20import android.app.DialogFragment;
21import android.content.DialogInterface;
22import android.database.ContentObserver;
23import android.net.Uri;
24import android.os.Bundle;
25import android.os.Handler;
26import android.provider.Settings;
27import android.provider.Settings.System;
28import android.support.v14.preference.PreferenceFragment;
29import android.support.v14.preference.SwitchPreference;
30import android.support.v7.preference.Preference;
31import android.support.v7.preference.Preference.OnPreferenceChangeListener;
32import android.view.Menu;
33import android.view.MenuInflater;
34import android.view.MenuItem;
35
36import com.android.internal.logging.MetricsLogger;
37import com.android.internal.logging.MetricsProto.MetricsEvent;
38import com.android.systemui.R;
39
40import static com.android.systemui.BatteryMeterDrawable.SHOW_PERCENT_SETTING;
41
42public class TunerFragment extends PreferenceFragment {
43
44    private static final String TAG = "TunerFragment";
45
46    private static final String KEY_BATTERY_PCT = "battery_pct";
47
48    public static final String SETTING_SEEN_TUNER_WARNING = "seen_tuner_warning";
49
50    private static final String WARNING_TAG = "tuner_warning";
51
52    private static final int MENU_REMOVE = Menu.FIRST + 1;
53
54    private final SettingObserver mSettingObserver = new SettingObserver();
55
56    private SwitchPreference mBatteryPct;
57
58    @Override
59    public void onCreate(Bundle savedInstanceState) {
60        super.onCreate(savedInstanceState);
61
62        setHasOptionsMenu(true);
63    }
64
65    @Override
66    public void onActivityCreated(Bundle savedInstanceState) {
67        super.onActivityCreated(savedInstanceState);
68        getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
69    }
70
71    @Override
72    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
73        addPreferencesFromResource(R.xml.tuner_prefs);
74
75        mBatteryPct = (SwitchPreference) findPreference(KEY_BATTERY_PCT);
76        if (Settings.Secure.getInt(getContext().getContentResolver(), SETTING_SEEN_TUNER_WARNING,
77                0) == 0) {
78            if (getFragmentManager().findFragmentByTag(WARNING_TAG) == null) {
79                new TunerWarningFragment().show(getFragmentManager(), WARNING_TAG);
80            }
81        }
82    }
83
84    @Override
85    public void onResume() {
86        super.onResume();
87        getActivity().setTitle(R.string.system_ui_tuner);
88        updateBatteryPct();
89        getContext().getContentResolver().registerContentObserver(
90                System.getUriFor(SHOW_PERCENT_SETTING), false, mSettingObserver);
91
92        MetricsLogger.visibility(getContext(), MetricsEvent.TUNER, true);
93    }
94
95    @Override
96    public void onPause() {
97        super.onPause();
98        getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
99
100        MetricsLogger.visibility(getContext(), MetricsEvent.TUNER, false);
101    }
102
103    @Override
104    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
105        menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, R.string.remove_from_settings);
106    }
107
108    @Override
109    public boolean onOptionsItemSelected(MenuItem item) {
110        switch (item.getItemId()) {
111            case android.R.id.home:
112                getActivity().finish();
113                return true;
114            case MENU_REMOVE:
115                TunerService.showResetRequest(getContext(), new Runnable() {
116                    @Override
117                    public void run() {
118                        getActivity().finish();
119                    }
120                });
121                return true;
122        }
123        return super.onOptionsItemSelected(item);
124    }
125
126    private void updateBatteryPct() {
127        mBatteryPct.setOnPreferenceChangeListener(null);
128        mBatteryPct.setChecked(System.getInt(getContext().getContentResolver(),
129                SHOW_PERCENT_SETTING, 0) != 0);
130        mBatteryPct.setOnPreferenceChangeListener(mBatteryPctChange);
131    }
132
133    private final class SettingObserver extends ContentObserver {
134        public SettingObserver() {
135            super(new Handler());
136        }
137
138        @Override
139        public void onChange(boolean selfChange, Uri uri, int userId) {
140            super.onChange(selfChange, uri, userId);
141            updateBatteryPct();
142        }
143    }
144
145    private final OnPreferenceChangeListener mBatteryPctChange = new OnPreferenceChangeListener() {
146        @Override
147        public boolean onPreferenceChange(Preference preference, Object newValue) {
148            final boolean v = (Boolean) newValue;
149            MetricsLogger.action(getContext(), MetricsEvent.TUNER_BATTERY_PERCENTAGE, v);
150            System.putInt(getContext().getContentResolver(), SHOW_PERCENT_SETTING, v ? 1 : 0);
151            return true;
152        }
153    };
154
155    public static class TunerWarningFragment extends DialogFragment {
156        @Override
157        public Dialog onCreateDialog(Bundle savedInstanceState) {
158            return new AlertDialog.Builder(getContext())
159                    .setTitle(R.string.tuner_warning_title)
160                    .setMessage(R.string.tuner_warning)
161                    .setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
162                        @Override
163                        public void onClick(DialogInterface dialog, int which) {
164                            Settings.Secure.putInt(getContext().getContentResolver(),
165                                    SETTING_SEEN_TUNER_WARNING, 1);
166                        }
167                    }).show();
168        }
169    }
170}
171