1992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani/*
2992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * Copyright (C) 2010 The Android Open Source Project
3992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani *
4992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License");
5992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * you may not use this file except in compliance with the License.
6992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * You may obtain a copy of the License at
7992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani *
8992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani *      http://www.apache.org/licenses/LICENSE-2.0
9992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani *
10992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * Unless required by applicable law or agreed to in writing, software
11992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS,
12992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * See the License for the specific language governing permissions and
14992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani * limitations under the License.
15992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani */
16992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
17992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasanipackage com.android.settings;
18992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
19d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monkimport com.android.internal.view.RotationPolicy;
20d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monkimport com.android.settings.notification.DropDownPreference;
21d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monkimport com.android.settings.notification.DropDownPreference.Callback;
228ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roosimport com.android.settings.search.BaseSearchIndexProvider;
238ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roosimport com.android.settings.search.Indexable;
248ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
25911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlockimport static android.provider.Settings.Secure.DOZE_ENABLED;
26333efe90978beeed36a45df6b45a7d7119140bb4John Spurlockimport static android.provider.Settings.Secure.WAKE_GESTURE_ENABLED;
27244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roosimport static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
28244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roosimport static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
29244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roosimport static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
30992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
31992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
32d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monkimport android.app.Activity;
336677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackbornimport android.app.ActivityManagerNative;
349627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.app.Dialog;
35d90b5a84d8261a30db573de5a722722d6a37391eJim Millerimport android.app.admin.DevicePolicyManager;
36992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.ContentResolver;
37992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.Context;
386677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackbornimport android.content.res.Configuration;
398a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tateimport android.content.res.Resources;
40333efe90978beeed36a45df6b45a7d7119140bb4John Spurlockimport android.hardware.Sensor;
41333efe90978beeed36a45df6b45a7d7119140bb4John Spurlockimport android.hardware.SensorManager;
42911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlockimport android.os.Build;
43992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.Bundle;
44992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.RemoteException;
45911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlockimport android.os.SystemProperties;
46992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.ListPreference;
47992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.Preference;
489627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.preference.Preference.OnPreferenceClickListener;
49992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.PreferenceScreen;
50333efe90978beeed36a45df6b45a7d7119140bb4John Spurlockimport android.preference.SwitchPreference;
518ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roosimport android.provider.SearchIndexableResource;
52992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.provider.Settings;
53911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlockimport android.text.TextUtils;
54992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.util.Log;
55992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
56d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport java.util.ArrayList;
578ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roosimport java.util.List;
58d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani
59d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasanipublic class DisplaySettings extends SettingsPreferenceFragment implements
608ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos        Preference.OnPreferenceChangeListener, OnPreferenceClickListener, Indexable {
61992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    private static final String TAG = "DisplaySettings";
62992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
63992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    /** If there is no setting in the provider, use this. */
64992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
65992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
66992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
676677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    private static final String KEY_FONT_SIZE = "font_size";
686f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler    private static final String KEY_SCREEN_SAVER = "screensaver";
69333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock    private static final String KEY_LIFT_TO_WAKE = "lift_to_wake";
70911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock    private static final String KEY_DOZE = "doze";
71244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos    private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
72d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk    private static final String KEY_AUTO_ROTATE = "auto_rotate";
739e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown
749627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    private static final int DLG_GLOBAL_CHANGE_WARNING = 1;
759627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
769627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    private WarnedListPreference mFontSizePref;
77992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
786677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    private final Configuration mCurConfig = new Configuration();
797e7769989589df86ec970a87dff7fdd160f9ccb2Shuhrat Dehkanov
809391b9545f9845eae15713357bc4081853451f4aJim Miller    private ListPreference mScreenTimeoutPreference;
816f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler    private Preference mScreenSaverPreference;
82333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock    private SwitchPreference mLiftToWakePreference;
83911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock    private SwitchPreference mDozePreference;
84333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock    private SwitchPreference mAutoBrightnessPreference;
859391b9545f9845eae15713357bc4081853451f4aJim Miller
86992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    @Override
87d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onCreate(Bundle savedInstanceState) {
88992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        super.onCreate(savedInstanceState);
89d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        final Activity activity = getActivity();
90d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        final ContentResolver resolver = activity.getContentResolver();
91992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
92992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        addPreferencesFromResource(R.xml.display_settings);
93992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
946f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler        mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
9547c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler        if (mScreenSaverPreference != null
9647c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler                && getResources().getBoolean(
97d983e1d1a52af2ab85d10f1a15c8387a6b6a3ba9John Spurlock                        com.android.internal.R.bool.config_dreamsSupported) == false) {
9847c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler            getPreferenceScreen().removePreference(mScreenSaverPreference);
9947c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler        }
10078b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani
1019391b9545f9845eae15713357bc4081853451f4aJim Miller        mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
1029391b9545f9845eae15713357bc4081853451f4aJim Miller        final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT,
1039391b9545f9845eae15713357bc4081853451f4aJim Miller                FALLBACK_SCREEN_TIMEOUT_VALUE);
1049391b9545f9845eae15713357bc4081853451f4aJim Miller        mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout));
1059391b9545f9845eae15713357bc4081853451f4aJim Miller        mScreenTimeoutPreference.setOnPreferenceChangeListener(this);
1069391b9545f9845eae15713357bc4081853451f4aJim Miller        disableUnusableTimeouts(mScreenTimeoutPreference);
107698c24fcf0577888116e60c52892318feadc836aGilles Debunne        updateTimeoutPreferenceDescription(currentTimeout);
1082943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler
1099627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        mFontSizePref = (WarnedListPreference) findPreference(KEY_FONT_SIZE);
1106677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        mFontSizePref.setOnPreferenceChangeListener(this);
1119627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        mFontSizePref.setOnPreferenceClickListener(this);
112244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos
1138ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos        if (isAutomaticBrightnessAvailable(getResources())) {
114333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
115244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
116244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        } else {
117244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            removePreference(KEY_AUTO_BRIGHTNESS);
118244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        }
119333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock
120d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        if (isLiftToWakeAvailable(activity)) {
121333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
122333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            mLiftToWakePreference.setOnPreferenceChangeListener(this);
123333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        } else {
124333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            removePreference(KEY_LIFT_TO_WAKE);
125333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        }
126911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock
127d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        if (isDozeAvailable(activity)) {
128911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
129911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            mDozePreference.setOnPreferenceChangeListener(this);
130911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        } else {
131911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            removePreference(KEY_DOZE);
132911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        }
133d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk
134d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        if (RotationPolicy.isRotationLockToggleVisible(activity)) {
135d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            DropDownPreference rotatePreference =
136d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    (DropDownPreference) findPreference(KEY_AUTO_ROTATE);
137d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            rotatePreference.addItem(activity.getString(R.string.display_auto_rotate_rotate),
138d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    false);
139d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            int rotateLockedResourceId;
140d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            // The following block sets the string used when rotation is locked.
141d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            // If the device locks specifically to portrait or landscape (rather than current
142d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            // rotation), then we use a different string to include this information.
143d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            if (allowAllRotations(activity)) {
144d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                rotateLockedResourceId = R.string.display_auto_rotate_stay_in_current;
145d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            } else {
146d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                if (RotationPolicy.getRotationLockOrientation(activity)
147d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                        == Configuration.ORIENTATION_PORTRAIT) {
148d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    rotateLockedResourceId =
149d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                            R.string.display_auto_rotate_stay_in_portrait;
150d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                } else {
151d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    rotateLockedResourceId =
152d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                            R.string.display_auto_rotate_stay_in_landscape;
153d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                }
154d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            }
155d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            rotatePreference.addItem(activity.getString(rotateLockedResourceId), true);
156d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            rotatePreference.setSelectedItem(RotationPolicy.isRotationLocked(activity) ?
157d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    1 : 0);
158d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            rotatePreference.setCallback(new Callback() {
159d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                @Override
160d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                public boolean onItemSelected(int pos, Object value) {
161d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    RotationPolicy.setRotationLock(activity, (Boolean) value);
162d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    return true;
163d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                }
164d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            });
165d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        } else {
166d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk            removePreference(KEY_AUTO_ROTATE);
167d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        }
168d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk    }
169d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk
170d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk    private static boolean allowAllRotations(Context context) {
171d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk        return Resources.getSystem().getBoolean(
172d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                com.android.internal.R.bool.config_allowAllRotations);
173333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock    }
174333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock
175333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock    private static boolean isLiftToWakeAvailable(Context context) {
176333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        SensorManager sensors = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
177333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
1789391b9545f9845eae15713357bc4081853451f4aJim Miller    }
1799391b9545f9845eae15713357bc4081853451f4aJim Miller
180911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock    private static boolean isDozeAvailable(Context context) {
181911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null;
182911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        if (TextUtils.isEmpty(name)) {
183911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            name = context.getResources().getString(
184911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock                    com.android.internal.R.string.config_dozeComponent);
185911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        }
186911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        return !TextUtils.isEmpty(name);
187911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock    }
188911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock
1898ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos    private static boolean isAutomaticBrightnessAvailable(Resources res) {
1908ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos        return res.getBoolean(com.android.internal.R.bool.config_automatic_brightness_available);
1918ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos    }
1928ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
193698c24fcf0577888116e60c52892318feadc836aGilles Debunne    private void updateTimeoutPreferenceDescription(long currentTimeout) {
194698c24fcf0577888116e60c52892318feadc836aGilles Debunne        ListPreference preference = mScreenTimeoutPreference;
1952943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler        String summary;
196698c24fcf0577888116e60c52892318feadc836aGilles Debunne        if (currentTimeout < 0) {
197698c24fcf0577888116e60c52892318feadc836aGilles Debunne            // Unsupported value
198698c24fcf0577888116e60c52892318feadc836aGilles Debunne            summary = "";
1992943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler        } else {
200698c24fcf0577888116e60c52892318feadc836aGilles Debunne            final CharSequence[] entries = preference.getEntries();
201698c24fcf0577888116e60c52892318feadc836aGilles Debunne            final CharSequence[] values = preference.getEntryValues();
20264516a191f03a777896798f79792d39cde9592d7Amith Yamasani            if (entries == null || entries.length == 0) {
20364516a191f03a777896798f79792d39cde9592d7Amith Yamasani                summary = "";
20464516a191f03a777896798f79792d39cde9592d7Amith Yamasani            } else {
20564516a191f03a777896798f79792d39cde9592d7Amith Yamasani                int best = 0;
20664516a191f03a777896798f79792d39cde9592d7Amith Yamasani                for (int i = 0; i < values.length; i++) {
20764516a191f03a777896798f79792d39cde9592d7Amith Yamasani                    long timeout = Long.parseLong(values[i].toString());
20864516a191f03a777896798f79792d39cde9592d7Amith Yamasani                    if (currentTimeout >= timeout) {
20964516a191f03a777896798f79792d39cde9592d7Amith Yamasani                        best = i;
21064516a191f03a777896798f79792d39cde9592d7Amith Yamasani                    }
2112943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler                }
21264516a191f03a777896798f79792d39cde9592d7Amith Yamasani                summary = preference.getContext().getString(R.string.screen_timeout_summary,
21364516a191f03a777896798f79792d39cde9592d7Amith Yamasani                        entries[best]);
2149391b9545f9845eae15713357bc4081853451f4aJim Miller            }
2159391b9545f9845eae15713357bc4081853451f4aJim Miller        }
216698c24fcf0577888116e60c52892318feadc836aGilles Debunne        preference.setSummary(summary);
217d90b5a84d8261a30db573de5a722722d6a37391eJim Miller    }
218992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
219d90b5a84d8261a30db573de5a722722d6a37391eJim Miller    private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) {
220fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller        final DevicePolicyManager dpm =
221d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                (DevicePolicyManager) getActivity().getSystemService(
222d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                Context.DEVICE_POLICY_SERVICE);
223fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller        final long maxTimeout = dpm != null ? dpm.getMaximumTimeToLock(null) : 0;
224d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        if (maxTimeout == 0) {
225d90b5a84d8261a30db573de5a722722d6a37391eJim Miller            return; // policy not enforced
226d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        }
227d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        final CharSequence[] entries = screenTimeoutPreference.getEntries();
228d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        final CharSequence[] values = screenTimeoutPreference.getEntryValues();
229d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>();
230d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>();
231d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        for (int i = 0; i < values.length; i++) {
232698c24fcf0577888116e60c52892318feadc836aGilles Debunne            long timeout = Long.parseLong(values[i].toString());
233d90b5a84d8261a30db573de5a722722d6a37391eJim Miller            if (timeout <= maxTimeout) {
234d90b5a84d8261a30db573de5a722722d6a37391eJim Miller                revisedEntries.add(entries[i]);
235d90b5a84d8261a30db573de5a722722d6a37391eJim Miller                revisedValues.add(values[i]);
236d90b5a84d8261a30db573de5a722722d6a37391eJim Miller            }
237d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        }
238d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) {
23978b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani            final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue());
240d90b5a84d8261a30db573de5a722722d6a37391eJim Miller            screenTimeoutPreference.setEntries(
241d90b5a84d8261a30db573de5a722722d6a37391eJim Miller                    revisedEntries.toArray(new CharSequence[revisedEntries.size()]));
242d90b5a84d8261a30db573de5a722722d6a37391eJim Miller            screenTimeoutPreference.setEntryValues(
243d90b5a84d8261a30db573de5a722722d6a37391eJim Miller                    revisedValues.toArray(new CharSequence[revisedValues.size()]));
244fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller            if (userPreference <= maxTimeout) {
245fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller                screenTimeoutPreference.setValue(String.valueOf(userPreference));
24678b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani            } else if (revisedValues.size() > 0
24778b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani                    && Long.parseLong(revisedValues.get(revisedValues.size() - 1).toString())
24878b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani                    == maxTimeout) {
24978b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani                // If the last one happens to be the same as the max timeout, select that
25078b8265b17345398e24c229e4b10f87c9c05d73dAmith Yamasani                screenTimeoutPreference.setValue(String.valueOf(maxTimeout));
251fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller            } else {
252fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller                // There will be no highlighted selection since nothing in the list matches
253fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller                // maxTimeout. The user can still select anything less than maxTimeout.
254fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller                // TODO: maybe append maxTimeout to the list and mark selected.
255fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller            }
256d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        }
257d90b5a84d8261a30db573de5a722722d6a37391eJim Miller        screenTimeoutPreference.setEnabled(revisedEntries.size() > 0);
258992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    }
259992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
2608a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate    int floatToIndex(float val) {
2618a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        String[] indices = getResources().getStringArray(R.array.entryvalues_font_size);
2626677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        float lastVal = Float.parseFloat(indices[0]);
2636677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        for (int i=1; i<indices.length; i++) {
2646677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            float thisVal = Float.parseFloat(indices[i]);
2656677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            if (val < (lastVal + (thisVal-lastVal)*.5f)) {
2666677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn                return i-1;
2676677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            }
2686677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            lastVal = thisVal;
2696677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        }
2706677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        return indices.length-1;
2716677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    }
2727e7769989589df86ec970a87dff7fdd160f9ccb2Shuhrat Dehkanov
2736677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    public void readFontSizePreference(ListPreference pref) {
2746677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        try {
275737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne            mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
2766677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        } catch (RemoteException e) {
277737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne            Log.w(TAG, "Unable to retrieve font size");
2786677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        }
2798a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate
2808a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        // mark the appropriate item in the preferences list
2818a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        int index = floatToIndex(mCurConfig.fontScale);
2828a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        pref.setValueIndex(index);
2838a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate
2848a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        // report the current size in the summary text
2858a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        final Resources res = getResources();
2868a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        String[] fontSizeNames = res.getStringArray(R.array.entries_font_size);
2878a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate        pref.setSummary(String.format(res.getString(R.string.summary_font_size),
2888a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate                fontSizeNames[index]));
2896677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    }
2907e7769989589df86ec970a87dff7fdd160f9ccb2Shuhrat Dehkanov
291992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    @Override
292d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onResume() {
293992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        super.onResume();
2949e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown        updateState();
29526a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani    }
29626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani
29726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani    @Override
2989627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    public Dialog onCreateDialog(int dialogId) {
2999627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (dialogId == DLG_GLOBAL_CHANGE_WARNING) {
3009627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            return Utils.buildGlobalChangeWarningDialog(getActivity(),
3019627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                    R.string.global_font_change_title,
3029627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                    new Runnable() {
3039627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                        public void run() {
3049627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                            mFontSizePref.click();
3059627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                        }
3069627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                    });
3079627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
3089627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        return null;
3099627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
3109627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
311737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne    private void updateState() {
3126677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        readFontSizePreference(mFontSizePref);
3136f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler        updateScreenSaverSummary();
314244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos
315244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        // Update auto brightness if it is available.
316244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        if (mAutoBrightnessPreference != null) {
317244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            int brightnessMode = Settings.System.getInt(getContentResolver(),
318244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos                    SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
319244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            mAutoBrightnessPreference.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL);
320244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        }
321333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock
322333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        // Update lift-to-wake if it is available.
323333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        if (mLiftToWakePreference != null) {
324333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            int value = Settings.Secure.getInt(getContentResolver(), WAKE_GESTURE_ENABLED, 0);
325333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            mLiftToWakePreference.setChecked(value != 0);
326333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        }
327911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock
328911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        // Update doze if it is available.
329911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        if (mDozePreference != null) {
330911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
331911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            mDozePreference.setChecked(value != 0);
332911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        }
3336f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler    }
3346f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler
3356f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler    private void updateScreenSaverSummary() {
336c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler        if (mScreenSaverPreference != null) {
337c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler            mScreenSaverPreference.setSummary(
338c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler                    DreamSettings.getSummaryTextWithDreamName(getActivity()));
339c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler        }
34026a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani    }
34126a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani
3426677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    public void writeFontSizePreference(Object objValue) {
3436677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        try {
3446677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            mCurConfig.fontScale = Float.parseFloat(objValue.toString());
34592c8ebacc118f23df94431f531075a8837394829Dianne Hackborn            ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
3466677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        } catch (RemoteException e) {
347737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne            Log.w(TAG, "Unable to save font size");
3486677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        }
3496677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn    }
350883d850ede03968018587781a8e20683398d98feAmith Yamasani
351992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    @Override
352992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
3532943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler        return super.onPreferenceTreeClick(preferenceScreen, preference);
354992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    }
355992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani
3564e54c2a17765aed01ba23c9b0ec4d41e66c698b7Jeff Brown    @Override
357992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    public boolean onPreferenceChange(Preference preference, Object objValue) {
358992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        final String key = preference.getKey();
359992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        if (KEY_SCREEN_TIMEOUT.equals(key)) {
360992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani            try {
3617e7769989589df86ec970a87dff7fdd160f9ccb2Shuhrat Dehkanov                int value = Integer.parseInt((String) objValue);
362698c24fcf0577888116e60c52892318feadc836aGilles Debunne                Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
363698c24fcf0577888116e60c52892318feadc836aGilles Debunne                updateTimeoutPreferenceDescription(value);
364992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani            } catch (NumberFormatException e) {
365992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani                Log.e(TAG, "could not persist screen timeout setting", e);
366992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani            }
367992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        }
3686677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        if (KEY_FONT_SIZE.equals(key)) {
3696677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn            writeFontSizePreference(objValue);
3706677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn        }
371244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        if (preference == mAutoBrightnessPreference) {
372244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            boolean auto = (Boolean) objValue;
373244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos            Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
374244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos                    auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
375244e8ce7ab1a893f0e463c270aba111537a1f161Adrian Roos        }
376333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        if (preference == mLiftToWakePreference) {
377333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            boolean value = (Boolean) objValue;
378333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock            Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
379333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock        }
380911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        if (preference == mDozePreference) {
381911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            boolean value = (Boolean) objValue;
382911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock            Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
383911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock        }
384992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani        return true;
385992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani    }
3869e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown
3879627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    @Override
3889627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    public boolean onPreferenceClick(Preference preference) {
3899627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (preference == mFontSizePref) {
3909627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            if (Utils.hasMultipleUsers(getActivity())) {
3919627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                showDialog(DLG_GLOBAL_CHANGE_WARNING);
3929627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                return true;
3939627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            } else {
3949627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                mFontSizePref.click();
3959627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            }
3969627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
3979627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        return false;
3989627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
3998ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
4008ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
4018ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos            new BaseSearchIndexProvider() {
4028ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                @Override
4038ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
4048ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                        boolean enabled) {
405d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                    ArrayList<SearchIndexableResource> result =
406d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                            new ArrayList<SearchIndexableResource>();
4078ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
4088ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    SearchIndexableResource sir = new SearchIndexableResource(context);
4098ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    sir.xmlResId = R.xml.display_settings;
4108ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    result.add(sir);
4118ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
4128ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    return result;
4138ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                }
4148ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos
4158ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                @Override
4168ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                public List<String> getNonIndexableKeys(Context context) {
417d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                    ArrayList<String> result = new ArrayList<String>();
418d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                    if (!context.getResources().getBoolean(
419d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                            com.android.internal.R.bool.config_dreamsSupported)) {
420d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                        result.add(KEY_SCREEN_SAVER);
421d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                    }
4228ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    if (!isAutomaticBrightnessAvailable(context.getResources())) {
423d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                        result.add(KEY_AUTO_BRIGHTNESS);
4248ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                    }
425333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock                    if (!isLiftToWakeAvailable(context)) {
426333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock                        result.add(KEY_LIFT_TO_WAKE);
427333efe90978beeed36a45df6b45a7d7119140bb4John Spurlock                    }
428911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock                    if (!isDozeAvailable(context)) {
429911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock                        result.add(KEY_DOZE);
430911de7fa8520f919cda673ae70c25f86ae0edf98John Spurlock                    }
431d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    if (!RotationPolicy.isRotationLockToggleVisible(context)) {
432d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                        result.add(KEY_AUTO_ROTATE);
433d3232da75a711349060f45b61ed768c49ff6e3e4Jason Monk                    }
434d407f2a05c8f8a81d5ea7bf9ad34bd491dc2d742Fabrice Di Meglio                    return result;
4358ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos                }
4368ab0954a243f893eeb9f3a248acf0f4ee304050cAdrian Roos            };
437992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani}
438