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 19992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; 20992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 216677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackbornimport android.app.ActivityManagerNative; 229627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.app.Dialog; 23d90b5a84d8261a30db573de5a722722d6a37391eJim Millerimport android.app.admin.DevicePolicyManager; 249e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.content.BroadcastReceiver; 25992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.ContentResolver; 26992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.Context; 279e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.content.Intent; 289e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.content.IntentFilter; 296677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackbornimport android.content.res.Configuration; 308a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tateimport android.content.res.Resources; 319e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.hardware.display.DisplayManager; 329e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.hardware.display.WifiDisplay; 339e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brownimport android.hardware.display.WifiDisplayStatus; 34992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.Bundle; 35992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.RemoteException; 36992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.CheckBoxPreference; 37992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.ListPreference; 38992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.Preference; 399627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.preference.Preference.OnPreferenceClickListener; 40992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.PreferenceScreen; 41992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.provider.Settings; 42883d850ede03968018587781a8e20683398d98feAmith Yamasaniimport android.provider.Settings.SettingNotFoundException; 439627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.util.AttributeSet; 44992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.util.Log; 45992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 4610fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brownimport com.android.internal.view.RotationPolicy; 476f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandlerimport com.android.settings.DreamSettings; 486f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler 49d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport java.util.ArrayList; 50d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani 51d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasanipublic class DisplaySettings extends SettingsPreferenceFragment implements 529627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani Preference.OnPreferenceChangeListener, OnPreferenceClickListener { 53992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String TAG = "DisplaySettings"; 54992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 55992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani /** If there is no setting in the provider, use this. */ 56992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; 57992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 58992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; 59992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String KEY_ACCELEROMETER = "accelerometer"; 606677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn private static final String KEY_FONT_SIZE = "font_size"; 61883d850ede03968018587781a8e20683398d98feAmith Yamasani private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; 626f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler private static final String KEY_SCREEN_SAVER = "screensaver"; 639e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private static final String KEY_WIFI_DISPLAY = "wifi_display"; 649e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 659627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final int DLG_GLOBAL_CHANGE_WARNING = 1; 669627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 679e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private DisplayManager mDisplayManager; 68992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 6956c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown private CheckBoxPreference mAccelerometer; 709627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private WarnedListPreference mFontSizePref; 71883d850ede03968018587781a8e20683398d98feAmith Yamasani private CheckBoxPreference mNotificationPulse; 72992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 736677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn private final Configuration mCurConfig = new Configuration(); 746677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 759391b9545f9845eae15713357bc4081853451f4aJim Miller private ListPreference mScreenTimeoutPreference; 766f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler private Preference mScreenSaverPreference; 779391b9545f9845eae15713357bc4081853451f4aJim Miller 789e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private WifiDisplayStatus mWifiDisplayStatus; 799e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private Preference mWifiDisplayPreference; 809e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 8110fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown private final RotationPolicy.RotationPolicyListener mRotationPolicyListener = 8210fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown new RotationPolicy.RotationPolicyListener() { 8326a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani @Override 8410fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown public void onChange() { 8556c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown updateAccelerometerRotationCheckbox(); 8626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 8726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani }; 8826a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 89992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 90d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 91992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani super.onCreate(savedInstanceState); 92d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani ContentResolver resolver = getActivity().getContentResolver(); 93992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 94992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani addPreferencesFromResource(R.xml.display_settings); 95992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 9656c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); 9756c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown mAccelerometer.setPersistent(false); 9810fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown if (RotationPolicy.isRotationLockToggleSupported(getActivity())) { 9910fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown // If rotation lock is supported, then we do not provide this option in 10010fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown // Display settings. However, is still available in Accessibility settings. 10110fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown getPreferenceScreen().removePreference(mAccelerometer); 10210fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown } 103992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 1046f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER); 10547c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler if (mScreenSaverPreference != null 10647c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler && getResources().getBoolean( 107d983e1d1a52af2ab85d10f1a15c8387a6b6a3ba9John Spurlock com.android.internal.R.bool.config_dreamsSupported) == false) { 10847c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler getPreferenceScreen().removePreference(mScreenSaverPreference); 10947c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler } 11047c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler 1119391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT); 1129391b9545f9845eae15713357bc4081853451f4aJim Miller final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT, 1139391b9545f9845eae15713357bc4081853451f4aJim Miller FALLBACK_SCREEN_TIMEOUT_VALUE); 1149391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout)); 1159391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference.setOnPreferenceChangeListener(this); 1169391b9545f9845eae15713357bc4081853451f4aJim Miller disableUnusableTimeouts(mScreenTimeoutPreference); 117698c24fcf0577888116e60c52892318feadc836aGilles Debunne updateTimeoutPreferenceDescription(currentTimeout); 1182943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler 1199627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mFontSizePref = (WarnedListPreference) findPreference(KEY_FONT_SIZE); 1206677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn mFontSizePref.setOnPreferenceChangeListener(this); 1219627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mFontSizePref.setOnPreferenceClickListener(this); 122883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_PULSE); 123883d850ede03968018587781a8e20683398d98feAmith Yamasani if (mNotificationPulse != null 124883d850ede03968018587781a8e20683398d98feAmith Yamasani && getResources().getBoolean( 125883d850ede03968018587781a8e20683398d98feAmith Yamasani com.android.internal.R.bool.config_intrusiveNotificationLed) == false) { 126883d850ede03968018587781a8e20683398d98feAmith Yamasani getPreferenceScreen().removePreference(mNotificationPulse); 127883d850ede03968018587781a8e20683398d98feAmith Yamasani } else { 128883d850ede03968018587781a8e20683398d98feAmith Yamasani try { 129883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse.setChecked(Settings.System.getInt(resolver, 130883d850ede03968018587781a8e20683398d98feAmith Yamasani Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); 131883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse.setOnPreferenceChangeListener(this); 132883d850ede03968018587781a8e20683398d98feAmith Yamasani } catch (SettingNotFoundException snfe) { 133883d850ede03968018587781a8e20683398d98feAmith Yamasani Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); 134883d850ede03968018587781a8e20683398d98feAmith Yamasani } 135883d850ede03968018587781a8e20683398d98feAmith Yamasani } 13647c991f78cc9a2b24de1a7c616cd85053dddf671Daniel Sandler 1379e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mDisplayManager = (DisplayManager)getActivity().getSystemService( 1389e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown Context.DISPLAY_SERVICE); 1399e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayStatus = mDisplayManager.getWifiDisplayStatus(); 1409e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayPreference = (Preference)findPreference(KEY_WIFI_DISPLAY); 1419e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown if (mWifiDisplayStatus.getFeatureState() 1429e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown == WifiDisplayStatus.FEATURE_STATE_UNAVAILABLE) { 1439e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown getPreferenceScreen().removePreference(mWifiDisplayPreference); 1449e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayPreference = null; 1459e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 1469391b9545f9845eae15713357bc4081853451f4aJim Miller } 1479391b9545f9845eae15713357bc4081853451f4aJim Miller 148698c24fcf0577888116e60c52892318feadc836aGilles Debunne private void updateTimeoutPreferenceDescription(long currentTimeout) { 149698c24fcf0577888116e60c52892318feadc836aGilles Debunne ListPreference preference = mScreenTimeoutPreference; 1502943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler String summary; 151698c24fcf0577888116e60c52892318feadc836aGilles Debunne if (currentTimeout < 0) { 152698c24fcf0577888116e60c52892318feadc836aGilles Debunne // Unsupported value 153698c24fcf0577888116e60c52892318feadc836aGilles Debunne summary = ""; 1542943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler } else { 155698c24fcf0577888116e60c52892318feadc836aGilles Debunne final CharSequence[] entries = preference.getEntries(); 156698c24fcf0577888116e60c52892318feadc836aGilles Debunne final CharSequence[] values = preference.getEntryValues(); 15764516a191f03a777896798f79792d39cde9592d7Amith Yamasani if (entries == null || entries.length == 0) { 15864516a191f03a777896798f79792d39cde9592d7Amith Yamasani summary = ""; 15964516a191f03a777896798f79792d39cde9592d7Amith Yamasani } else { 16064516a191f03a777896798f79792d39cde9592d7Amith Yamasani int best = 0; 16164516a191f03a777896798f79792d39cde9592d7Amith Yamasani for (int i = 0; i < values.length; i++) { 16264516a191f03a777896798f79792d39cde9592d7Amith Yamasani long timeout = Long.parseLong(values[i].toString()); 16364516a191f03a777896798f79792d39cde9592d7Amith Yamasani if (currentTimeout >= timeout) { 16464516a191f03a777896798f79792d39cde9592d7Amith Yamasani best = i; 16564516a191f03a777896798f79792d39cde9592d7Amith Yamasani } 1662943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler } 16764516a191f03a777896798f79792d39cde9592d7Amith Yamasani summary = preference.getContext().getString(R.string.screen_timeout_summary, 16864516a191f03a777896798f79792d39cde9592d7Amith Yamasani entries[best]); 1699391b9545f9845eae15713357bc4081853451f4aJim Miller } 1709391b9545f9845eae15713357bc4081853451f4aJim Miller } 171698c24fcf0577888116e60c52892318feadc836aGilles Debunne preference.setSummary(summary); 172d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 173992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 174d90b5a84d8261a30db573de5a722722d6a37391eJim Miller private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) { 175fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller final DevicePolicyManager dpm = 176d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani (DevicePolicyManager) getActivity().getSystemService( 177d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Context.DEVICE_POLICY_SERVICE); 178fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller final long maxTimeout = dpm != null ? dpm.getMaximumTimeToLock(null) : 0; 179d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (maxTimeout == 0) { 180d90b5a84d8261a30db573de5a722722d6a37391eJim Miller return; // policy not enforced 181d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 182d90b5a84d8261a30db573de5a722722d6a37391eJim Miller final CharSequence[] entries = screenTimeoutPreference.getEntries(); 183d90b5a84d8261a30db573de5a722722d6a37391eJim Miller final CharSequence[] values = screenTimeoutPreference.getEntryValues(); 184d90b5a84d8261a30db573de5a722722d6a37391eJim Miller ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>(); 185d90b5a84d8261a30db573de5a722722d6a37391eJim Miller ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>(); 186d90b5a84d8261a30db573de5a722722d6a37391eJim Miller for (int i = 0; i < values.length; i++) { 187698c24fcf0577888116e60c52892318feadc836aGilles Debunne long timeout = Long.parseLong(values[i].toString()); 188d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (timeout <= maxTimeout) { 189d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedEntries.add(entries[i]); 190d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedValues.add(values[i]); 191d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 192d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 193d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) { 194d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEntries( 195d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedEntries.toArray(new CharSequence[revisedEntries.size()])); 196d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEntryValues( 197d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedValues.toArray(new CharSequence[revisedValues.size()])); 198698c24fcf0577888116e60c52892318feadc836aGilles Debunne final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue()); 199fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller if (userPreference <= maxTimeout) { 200fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller screenTimeoutPreference.setValue(String.valueOf(userPreference)); 201fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller } else { 202fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // There will be no highlighted selection since nothing in the list matches 203fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // maxTimeout. The user can still select anything less than maxTimeout. 204fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // TODO: maybe append maxTimeout to the list and mark selected. 205fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller } 206d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 207d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEnabled(revisedEntries.size() > 0); 208992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 209992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 2108a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate int floatToIndex(float val) { 2118a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate String[] indices = getResources().getStringArray(R.array.entryvalues_font_size); 2126677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn float lastVal = Float.parseFloat(indices[0]); 2136677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn for (int i=1; i<indices.length; i++) { 2146677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn float thisVal = Float.parseFloat(indices[i]); 2156677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn if (val < (lastVal + (thisVal-lastVal)*.5f)) { 2166677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn return i-1; 2176677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2186677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn lastVal = thisVal; 2196677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2206677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn return indices.length-1; 2216677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2226677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 2236677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn public void readFontSizePreference(ListPreference pref) { 2246677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn try { 225737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration()); 2266677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } catch (RemoteException e) { 227737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne Log.w(TAG, "Unable to retrieve font size"); 2286677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2298a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate 2308a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate // mark the appropriate item in the preferences list 2318a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate int index = floatToIndex(mCurConfig.fontScale); 2328a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate pref.setValueIndex(index); 2338a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate 2348a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate // report the current size in the summary text 2358a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate final Resources res = getResources(); 2368a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate String[] fontSizeNames = res.getStringArray(R.array.entries_font_size); 2378a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate pref.setSummary(String.format(res.getString(R.string.summary_font_size), 2388a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate fontSizeNames[index])); 2396677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2406677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 241992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 242d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 243992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani super.onResume(); 244992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 24510fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown RotationPolicy.registerRotationPolicyListener(getActivity(), 24610fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown mRotationPolicyListener); 2479e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 2489e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown if (mWifiDisplayPreference != null) { 2499e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown getActivity().registerReceiver(mReceiver, new IntentFilter( 2509e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)); 2519e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayStatus = mDisplayManager.getWifiDisplayStatus(); 2529e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 2539e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 2549e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown updateState(); 25526a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 25626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 25726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani @Override 25826a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani public void onPause() { 25926a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani super.onPause(); 26026a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 26110fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown RotationPolicy.unregisterRotationPolicyListener(getActivity(), 26210fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown mRotationPolicyListener); 2639e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 2649e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown if (mWifiDisplayPreference != null) { 2659e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown getActivity().unregisterReceiver(mReceiver); 2669e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 267992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 268992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 2699627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 2709627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public Dialog onCreateDialog(int dialogId) { 2719627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (dialogId == DLG_GLOBAL_CHANGE_WARNING) { 2729627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return Utils.buildGlobalChangeWarningDialog(getActivity(), 2739627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani R.string.global_font_change_title, 2749627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani new Runnable() { 2759627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void run() { 2769627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mFontSizePref.click(); 2779627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 2789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani }); 2799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 2809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return null; 2819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 2829627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 283737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne private void updateState() { 28456c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown updateAccelerometerRotationCheckbox(); 2856677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn readFontSizePreference(mFontSizePref); 2866f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler updateScreenSaverSummary(); 2879e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown updateWifiDisplaySummary(); 2886f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler } 2896f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler 2906f0ea441e465a0af646f8952f820a92f6902c8d9Daniel Sandler private void updateScreenSaverSummary() { 291c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler if (mScreenSaverPreference != null) { 292c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler mScreenSaverPreference.setSummary( 293c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler DreamSettings.getSummaryTextWithDreamName(getActivity())); 294c825bc8e17cb60cae88397ab77d1e2711c086624Daniel Sandler } 29526a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 29626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 2979e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private void updateWifiDisplaySummary() { 2989e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown if (mWifiDisplayPreference != null) { 2999e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown switch (mWifiDisplayStatus.getFeatureState()) { 3009e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown case WifiDisplayStatus.FEATURE_STATE_OFF: 3019e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayPreference.setSummary(R.string.wifi_display_summary_off); 3029e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown break; 3039e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown case WifiDisplayStatus.FEATURE_STATE_ON: 3049e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayPreference.setSummary(R.string.wifi_display_summary_on); 3059e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown break; 3069e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown case WifiDisplayStatus.FEATURE_STATE_DISABLED: 3079e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown default: 3089e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayPreference.setSummary(R.string.wifi_display_summary_disabled); 3099e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown break; 3109e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 3119e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 3129e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 3139e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 31456c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown private void updateAccelerometerRotationCheckbox() { 315980a6c3c4be59550db5140366096ea0640c99651Amith Yamasani if (getActivity() == null) return; 31610fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown 31710fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown mAccelerometer.setChecked(!RotationPolicy.isRotationLocked(getActivity())); 318992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 319992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 3206677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn public void writeFontSizePreference(Object objValue) { 3216677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn try { 3226677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn mCurConfig.fontScale = Float.parseFloat(objValue.toString()); 32392c8ebacc118f23df94431f531075a8837394829Dianne Hackborn ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig); 3246677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } catch (RemoteException e) { 325737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne Log.w(TAG, "Unable to save font size"); 3266677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 3276677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 328883d850ede03968018587781a8e20683398d98feAmith Yamasani 329992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 330992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 33156c58d5aef8186a0114be206a2f81216f8c19cf3Jeff Brown if (preference == mAccelerometer) { 33210fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown RotationPolicy.setRotationLockForAccessibility( 33310fbf52ccb5c6657eef3bbe520c71ff7f729bad3Jeff Brown getActivity(), !mAccelerometer.isChecked()); 334883d850ede03968018587781a8e20683398d98feAmith Yamasani } else if (preference == mNotificationPulse) { 335883d850ede03968018587781a8e20683398d98feAmith Yamasani boolean value = mNotificationPulse.isChecked(); 336883d850ede03968018587781a8e20683398d98feAmith Yamasani Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE, 337883d850ede03968018587781a8e20683398d98feAmith Yamasani value ? 1 : 0); 338883d850ede03968018587781a8e20683398d98feAmith Yamasani return true; 339992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 3402943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler return super.onPreferenceTreeClick(preferenceScreen, preference); 341992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 342992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 343992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani public boolean onPreferenceChange(Preference preference, Object objValue) { 344992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani final String key = preference.getKey(); 345992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani if (KEY_SCREEN_TIMEOUT.equals(key)) { 346992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani int value = Integer.parseInt((String) objValue); 347992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani try { 348698c24fcf0577888116e60c52892318feadc836aGilles Debunne Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value); 349698c24fcf0577888116e60c52892318feadc836aGilles Debunne updateTimeoutPreferenceDescription(value); 350992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } catch (NumberFormatException e) { 351992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani Log.e(TAG, "could not persist screen timeout setting", e); 352992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 353992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 3546677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn if (KEY_FONT_SIZE.equals(key)) { 3556677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn writeFontSizePreference(objValue); 3566677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 357992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 358992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani return true; 359992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 3609e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown 3619e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 3629e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown @Override 3639e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown public void onReceive(Context context, Intent intent) { 3649e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown if (intent.getAction().equals(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)) { 3659e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown mWifiDisplayStatus = (WifiDisplayStatus)intent.getParcelableExtra( 3669e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); 3679e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown updateWifiDisplaySummary(); 3689e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 3699e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown } 3709e143f5e9d836d2d3dd0b2f59f7d14327ade0193Jeff Brown }; 3719627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 3729627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 3739627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public boolean onPreferenceClick(Preference preference) { 3749627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (preference == mFontSizePref) { 3759627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (Utils.hasMultipleUsers(getActivity())) { 3769627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani showDialog(DLG_GLOBAL_CHANGE_WARNING); 3779627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return true; 3789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } else { 3799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mFontSizePref.click(); 3809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 3819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 3829627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return false; 3839627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 384992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani} 385