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
17package com.android.tv.quicksettings;
18
19import android.app.AlertDialog;
20import android.content.DialogInterface;
21import android.content.Intent;
22import android.content.SharedPreferences;
23import android.content.res.Resources;
24import android.os.Bundle;
25import android.support.v17.preference.LeanbackPreferenceFragment;
26import android.support.v7.preference.ListPreference;
27import android.support.v7.preference.Preference;
28
29import java.util.Arrays;
30import java.util.List;
31
32public class QuickSettingsPreferenceFragment extends LeanbackPreferenceFragment implements
33        SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener {
34
35    private ListPreference mPresetPref;
36    private Preference mBacklightPref;
37    private Preference mContrastPref;
38    private Preference mBrightnessPref;
39    private Preference mSharpnessPref;
40    private Preference mColorPref;
41    private Preference mTintPref;
42
43    private PresetSettingsListener mPresetSettingsListener;
44
45    @Override
46    public void onCreate(Bundle savedInstanceState) {
47        super.onCreate(savedInstanceState);
48
49        mPresetSettingsListener = new PresetSettingsListener(getActivity());
50    }
51
52    @Override
53    public void onCreatePreferences(Bundle savedInstanceState, String key) {
54        setPreferencesFromResource(R.xml.quick_settings, key);
55
56        mPresetPref = (ListPreference) findPreference("preset");
57        mPresetPref.setOnPreferenceClickListener(this);
58
59        mBacklightPref = findPreference("backlight");
60        mBacklightPref.setOnPreferenceClickListener(this);
61
62        mContrastPref = findPreference("contrast");
63        mContrastPref.setOnPreferenceClickListener(this);
64
65        mBrightnessPref = findPreference("brightness");
66        mBrightnessPref.setOnPreferenceClickListener(this);
67
68        mSharpnessPref = findPreference("sharpness");
69        mSharpnessPref.setOnPreferenceClickListener(this);
70
71        mColorPref = findPreference("color");
72        mColorPref.setOnPreferenceClickListener(this);
73
74        mTintPref = findPreference("tint");
75        mTintPref.setOnPreferenceClickListener(this);
76
77        final Preference resetPreference = findPreference("reset");
78        resetPreference.setOnPreferenceClickListener(this);
79    }
80
81    @Override
82    public void onResume() {
83        super.onResume();
84
85        final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
86        sharedPreferences.registerOnSharedPreferenceChangeListener(this);
87        sharedPreferences.registerOnSharedPreferenceChangeListener(mPresetSettingsListener);
88
89        updateDescriptions(sharedPreferences);
90    }
91
92
93    @Override
94    public void onPause() {
95        super.onPause();
96
97        final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
98        sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
99        sharedPreferences.unregisterOnSharedPreferenceChangeListener(mPresetSettingsListener);
100    }
101
102    private void updateDescriptions(SharedPreferences sharedPreferences) {
103        final Resources res = getResources();
104        mPresetPref.setSummary(mPresetPref.getEntry());
105        mBacklightPref.setSummary(String.format("%d", sharedPreferences.getInt("backlight",
106                res.getInteger(R.integer.standard_setting_backlight))));
107        mContrastPref.setSummary(String.format("%d", sharedPreferences.getInt("contrast",
108                res.getInteger(R.integer.standard_setting_contrast))));
109        mBrightnessPref.setSummary(String.format("%d", sharedPreferences.getInt("brightness",
110                res.getInteger(R.integer.standard_setting_brightness))));
111        mSharpnessPref.setSummary(String.format("%d", sharedPreferences.getInt("sharpness",
112                res.getInteger(R.integer.standard_setting_sharpness))));
113        mColorPref.setSummary(String.format("%d", sharedPreferences.getInt("color",
114                res.getInteger(R.integer.standard_setting_color))));
115        mTintPref.setSummary(String.format("%d", sharedPreferences.getInt("tint",
116                res.getInteger(R.integer.standard_setting_tint))));
117    }
118
119    @Override
120    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
121        switch (key) {
122            case "preset":
123            case "backlight":
124            case "contrast":
125            case "brightness":
126            case "sharpness":
127            case "color":
128            case "tint":
129                updateDescriptions(sharedPreferences);
130        }
131    }
132
133    private void launchSettingsDialog(int initialPos) {
134        final Intent intent = new Intent(getActivity(), SettingsDialog.class);
135        intent.putExtra(SettingsDialog.EXTRA_START_POS, initialPos);
136        startActivity(intent);
137    }
138
139    @Override
140    public boolean onPreferenceClick(Preference preference) {
141        final String key = preference.getKey();
142        final List<String> keys =
143                Arrays.asList(getResources().getStringArray(R.array.setting_keys));
144        final int pos = keys.indexOf(key);
145        switch (key) {
146            case "preset":
147            case "backlight":
148            case "contrast":
149            case "brightness":
150            case "sharpness":
151            case "color":
152            case "tint":
153                launchSettingsDialog(pos);
154                return true;
155            case "reset":
156                new AlertDialog.Builder(getActivity()).setPositiveButton(
157                        android.R.string.ok, new DialogInterface.OnClickListener() {
158                            @Override
159                            public void onClick(DialogInterface dialog, int id) {
160                                // User clicked OK button
161                                getPreferenceManager().getSharedPreferences().edit()
162                                        .putString("preset", "standard")
163                                        .commit();
164                            }
165                        }).setNegativeButton(android.R.string.cancel,
166                        new DialogInterface.OnClickListener() {
167                            @Override
168                            public void onClick(DialogInterface dialog, int id) {
169                                // User cancelled the dialog - do nothing
170                            }
171                        }).setTitle(R.string.reset_dialog_message).create().show();
172                return true;
173        }
174        return false;
175    }
176
177    @Override
178    public void onDisplayPreferenceDialog(Preference preference) {
179        // Do nothing
180    }
181}
182