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