120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler/*
220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * Copyright (C) 2015 The Android Open Source Project
320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler *
420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * you may not use this file except in compliance with the License.
620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * You may obtain a copy of the License at
720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler *
820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler *
1020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * Unless required by applicable law or agreed to in writing, software
1120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
1220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * See the License for the specific language governing permissions and
1420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler * limitations under the License
1520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler */
1620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
1720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerpackage com.android.tv.quicksettings;
1820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
1920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.app.AlertDialog;
2020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.DialogInterface;
2120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.Intent;
2220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.SharedPreferences;
2320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.res.Resources;
2420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.os.Bundle;
2514c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantlerimport android.support.v17.preference.LeanbackPreferenceFragment;
2614c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantlerimport android.support.v7.preference.ListPreference;
2714c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantlerimport android.support.v7.preference.Preference;
2820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
2920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport java.util.Arrays;
3020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport java.util.List;
3120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
3214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantlerpublic class QuickSettingsPreferenceFragment extends LeanbackPreferenceFragment implements
3320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener {
3420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
3520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private ListPreference mPresetPref;
3620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mBacklightPref;
3720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mContrastPref;
3820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mBrightnessPref;
3920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mSharpnessPref;
4020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mColorPref;
4120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private Preference mTintPref;
4220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
4320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private PresetSettingsListener mPresetSettingsListener;
4420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
4520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
4620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    public void onCreate(Bundle savedInstanceState) {
4720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        super.onCreate(savedInstanceState);
4820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
4920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPresetSettingsListener = new PresetSettingsListener(getActivity());
5014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    }
5120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
5214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    @Override
5314c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    public void onCreatePreferences(Bundle savedInstanceState, String key) {
5414c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        setPreferencesFromResource(R.xml.quick_settings, key);
5520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
5620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPresetPref = (ListPreference) findPreference("preset");
5720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPresetPref.setOnPreferenceClickListener(this);
5820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
5920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBacklightPref = findPreference("backlight");
6020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBacklightPref.setOnPreferenceClickListener(this);
6120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
6220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mContrastPref = findPreference("contrast");
6320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mContrastPref.setOnPreferenceClickListener(this);
6420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
6520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBrightnessPref = findPreference("brightness");
6620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBrightnessPref.setOnPreferenceClickListener(this);
6720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
6820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharpnessPref = findPreference("sharpness");
6920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharpnessPref.setOnPreferenceClickListener(this);
7020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
7120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mColorPref = findPreference("color");
7220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mColorPref.setOnPreferenceClickListener(this);
7320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
7420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mTintPref = findPreference("tint");
7520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mTintPref.setOnPreferenceClickListener(this);
7620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
7720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final Preference resetPreference = findPreference("reset");
7820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        resetPreference.setOnPreferenceClickListener(this);
7920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
8020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
8120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
8220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    public void onResume() {
8320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        super.onResume();
8420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
8520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
8620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        sharedPreferences.registerOnSharedPreferenceChangeListener(this);
8720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        sharedPreferences.registerOnSharedPreferenceChangeListener(mPresetSettingsListener);
8820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
8920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        updateDescriptions(sharedPreferences);
9020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
9120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
9220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
9320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
9420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    public void onPause() {
9520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        super.onPause();
9620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
9720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
9820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
9920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        sharedPreferences.unregisterOnSharedPreferenceChangeListener(mPresetSettingsListener);
10020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
10120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
10220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private void updateDescriptions(SharedPreferences sharedPreferences) {
10320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final Resources res = getResources();
10420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPresetPref.setSummary(mPresetPref.getEntry());
10520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBacklightPref.setSummary(String.format("%d", sharedPreferences.getInt("backlight",
10620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_backlight))));
10720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mContrastPref.setSummary(String.format("%d", sharedPreferences.getInt("contrast",
10820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_contrast))));
10920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mBrightnessPref.setSummary(String.format("%d", sharedPreferences.getInt("brightness",
11020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_brightness))));
11120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharpnessPref.setSummary(String.format("%d", sharedPreferences.getInt("sharpness",
11220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_sharpness))));
11320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mColorPref.setSummary(String.format("%d", sharedPreferences.getInt("color",
11420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_color))));
11520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mTintPref.setSummary(String.format("%d", sharedPreferences.getInt("tint",
11620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                res.getInteger(R.integer.standard_setting_tint))));
11720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
11820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
11920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
12020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
12120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        switch (key) {
12220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "preset":
12320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "backlight":
12420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "contrast":
12520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "brightness":
12620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "sharpness":
12720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "color":
12820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "tint":
12920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                updateDescriptions(sharedPreferences);
13020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        }
13120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
13220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
13320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private void launchSettingsDialog(int initialPos) {
13420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final Intent intent = new Intent(getActivity(), SettingsDialog.class);
13520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        intent.putExtra(SettingsDialog.EXTRA_START_POS, initialPos);
13620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        startActivity(intent);
13720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
13820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
13920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
14020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    public boolean onPreferenceClick(Preference preference) {
14120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final String key = preference.getKey();
14220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final List<String> keys =
14320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                Arrays.asList(getResources().getStringArray(R.array.setting_keys));
14420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        final int pos = keys.indexOf(key);
14520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        switch (key) {
14620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "preset":
14720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "backlight":
14820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "contrast":
14920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "brightness":
15020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "sharpness":
15120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "color":
15220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "tint":
15320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                launchSettingsDialog(pos);
15420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                return true;
15520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            case "reset":
15620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                new AlertDialog.Builder(getActivity()).setPositiveButton(
15720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                        android.R.string.ok, new DialogInterface.OnClickListener() {
15820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            @Override
15920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            public void onClick(DialogInterface dialog, int id) {
16020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                                // User clicked OK button
16120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                                getPreferenceManager().getSharedPreferences().edit()
16220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                                        .putString("preset", "standard")
16320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                                        .commit();
16420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            }
16520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                        }).setNegativeButton(android.R.string.cancel,
16620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                        new DialogInterface.OnClickListener() {
16720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            @Override
16820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            public void onClick(DialogInterface dialog, int id) {
16920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                                // User cancelled the dialog - do nothing
17020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            }
17120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                        }).setTitle(R.string.reset_dialog_message).create().show();
17220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                return true;
17320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        }
17420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        return false;
17520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
17614c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler
17714c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    @Override
17814c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    public void onDisplayPreferenceDialog(Preference preference) {
17914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        // Do nothing
18014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    }
18120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler}
182