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