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; 22d90b5a84d8261a30db573de5a722722d6a37391eJim Millerimport android.app.admin.DevicePolicyManager; 23992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.ContentResolver; 24992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.content.Context; 256677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackbornimport android.content.res.Configuration; 268a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tateimport android.content.res.Resources; 2726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasaniimport android.database.ContentObserver; 28992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.Bundle; 2926a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasaniimport android.os.Handler; 30992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.os.RemoteException; 31cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brownimport android.os.ServiceManager; 32992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.CheckBoxPreference; 33992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.ListPreference; 34992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.Preference; 35992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.preference.PreferenceScreen; 36992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.provider.Settings; 37883d850ede03968018587781a8e20683398d98feAmith Yamasaniimport android.provider.Settings.SettingNotFoundException; 38992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasaniimport android.util.Log; 39cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brownimport android.view.IWindowManager; 40cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brownimport android.view.Surface; 41992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 42d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport java.util.ArrayList; 43d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani 44d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasanipublic class DisplaySettings extends SettingsPreferenceFragment implements 45992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani Preference.OnPreferenceChangeListener { 46992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String TAG = "DisplaySettings"; 47992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 48992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani /** If there is no setting in the provider, use this. */ 49992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; 50992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 51992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; 52992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private static final String KEY_ACCELEROMETER = "accelerometer"; 536677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn private static final String KEY_FONT_SIZE = "font_size"; 54883d850ede03968018587781a8e20683398d98feAmith Yamasani private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; 55992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 56992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani private CheckBoxPreference mAccelerometer; 576677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn private ListPreference mFontSizePref; 58883d850ede03968018587781a8e20683398d98feAmith Yamasani private CheckBoxPreference mNotificationPulse; 59992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 606677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn private final Configuration mCurConfig = new Configuration(); 616677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 629391b9545f9845eae15713357bc4081853451f4aJim Miller private ListPreference mScreenTimeoutPreference; 639391b9545f9845eae15713357bc4081853451f4aJim Miller 6426a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani private ContentObserver mAccelerometerRotationObserver = new ContentObserver(new Handler()) { 6526a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani @Override 6626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani public void onChange(boolean selfChange) { 6726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani updateAccelerometerRotationCheckbox(); 6826a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 6926a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani }; 7026a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 71992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 72d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 73992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani super.onCreate(savedInstanceState); 74d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani ContentResolver resolver = getActivity().getContentResolver(); 75992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 76992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani addPreferencesFromResource(R.xml.display_settings); 77992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 78992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); 79992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani mAccelerometer.setPersistent(false); 80992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 819391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT); 829391b9545f9845eae15713357bc4081853451f4aJim Miller final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT, 839391b9545f9845eae15713357bc4081853451f4aJim Miller FALLBACK_SCREEN_TIMEOUT_VALUE); 849391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout)); 859391b9545f9845eae15713357bc4081853451f4aJim Miller mScreenTimeoutPreference.setOnPreferenceChangeListener(this); 869391b9545f9845eae15713357bc4081853451f4aJim Miller disableUnusableTimeouts(mScreenTimeoutPreference); 87698c24fcf0577888116e60c52892318feadc836aGilles Debunne updateTimeoutPreferenceDescription(currentTimeout); 882943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler 896677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn mFontSizePref = (ListPreference) findPreference(KEY_FONT_SIZE); 906677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn mFontSizePref.setOnPreferenceChangeListener(this); 91883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_PULSE); 92883d850ede03968018587781a8e20683398d98feAmith Yamasani if (mNotificationPulse != null 93883d850ede03968018587781a8e20683398d98feAmith Yamasani && getResources().getBoolean( 94883d850ede03968018587781a8e20683398d98feAmith Yamasani com.android.internal.R.bool.config_intrusiveNotificationLed) == false) { 95883d850ede03968018587781a8e20683398d98feAmith Yamasani getPreferenceScreen().removePreference(mNotificationPulse); 96883d850ede03968018587781a8e20683398d98feAmith Yamasani } else { 97883d850ede03968018587781a8e20683398d98feAmith Yamasani try { 98883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse.setChecked(Settings.System.getInt(resolver, 99883d850ede03968018587781a8e20683398d98feAmith Yamasani Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); 100883d850ede03968018587781a8e20683398d98feAmith Yamasani mNotificationPulse.setOnPreferenceChangeListener(this); 101883d850ede03968018587781a8e20683398d98feAmith Yamasani } catch (SettingNotFoundException snfe) { 102883d850ede03968018587781a8e20683398d98feAmith Yamasani Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); 103883d850ede03968018587781a8e20683398d98feAmith Yamasani } 104883d850ede03968018587781a8e20683398d98feAmith Yamasani } 1059391b9545f9845eae15713357bc4081853451f4aJim Miller } 1069391b9545f9845eae15713357bc4081853451f4aJim Miller 107698c24fcf0577888116e60c52892318feadc836aGilles Debunne private void updateTimeoutPreferenceDescription(long currentTimeout) { 108698c24fcf0577888116e60c52892318feadc836aGilles Debunne ListPreference preference = mScreenTimeoutPreference; 1092943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler String summary; 110698c24fcf0577888116e60c52892318feadc836aGilles Debunne if (currentTimeout < 0) { 111698c24fcf0577888116e60c52892318feadc836aGilles Debunne // Unsupported value 112698c24fcf0577888116e60c52892318feadc836aGilles Debunne summary = ""; 1132943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler } else { 114698c24fcf0577888116e60c52892318feadc836aGilles Debunne final CharSequence[] entries = preference.getEntries(); 115698c24fcf0577888116e60c52892318feadc836aGilles Debunne final CharSequence[] values = preference.getEntryValues(); 1162943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler int best = 0; 1172943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler for (int i = 0; i < values.length; i++) { 118698c24fcf0577888116e60c52892318feadc836aGilles Debunne long timeout = Long.parseLong(values[i].toString()); 1192943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler if (currentTimeout >= timeout) { 1202943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler best = i; 1212943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler } 1229391b9545f9845eae15713357bc4081853451f4aJim Miller } 123698c24fcf0577888116e60c52892318feadc836aGilles Debunne summary = preference.getContext().getString(R.string.screen_timeout_summary, 124698c24fcf0577888116e60c52892318feadc836aGilles Debunne entries[best]); 1259391b9545f9845eae15713357bc4081853451f4aJim Miller } 126698c24fcf0577888116e60c52892318feadc836aGilles Debunne preference.setSummary(summary); 127d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 128992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 129d90b5a84d8261a30db573de5a722722d6a37391eJim Miller private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) { 130fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller final DevicePolicyManager dpm = 131d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani (DevicePolicyManager) getActivity().getSystemService( 132d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Context.DEVICE_POLICY_SERVICE); 133fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller final long maxTimeout = dpm != null ? dpm.getMaximumTimeToLock(null) : 0; 134d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (maxTimeout == 0) { 135d90b5a84d8261a30db573de5a722722d6a37391eJim Miller return; // policy not enforced 136d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 137d90b5a84d8261a30db573de5a722722d6a37391eJim Miller final CharSequence[] entries = screenTimeoutPreference.getEntries(); 138d90b5a84d8261a30db573de5a722722d6a37391eJim Miller final CharSequence[] values = screenTimeoutPreference.getEntryValues(); 139d90b5a84d8261a30db573de5a722722d6a37391eJim Miller ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>(); 140d90b5a84d8261a30db573de5a722722d6a37391eJim Miller ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>(); 141d90b5a84d8261a30db573de5a722722d6a37391eJim Miller for (int i = 0; i < values.length; i++) { 142698c24fcf0577888116e60c52892318feadc836aGilles Debunne long timeout = Long.parseLong(values[i].toString()); 143d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (timeout <= maxTimeout) { 144d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedEntries.add(entries[i]); 145d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedValues.add(values[i]); 146d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 147d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 148d90b5a84d8261a30db573de5a722722d6a37391eJim Miller if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) { 149d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEntries( 150d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedEntries.toArray(new CharSequence[revisedEntries.size()])); 151d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEntryValues( 152d90b5a84d8261a30db573de5a722722d6a37391eJim Miller revisedValues.toArray(new CharSequence[revisedValues.size()])); 153698c24fcf0577888116e60c52892318feadc836aGilles Debunne final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue()); 154fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller if (userPreference <= maxTimeout) { 155fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller screenTimeoutPreference.setValue(String.valueOf(userPreference)); 156fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller } else { 157fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // There will be no highlighted selection since nothing in the list matches 158fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // maxTimeout. The user can still select anything less than maxTimeout. 159fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller // TODO: maybe append maxTimeout to the list and mark selected. 160fc5a02225e8bca21f07543f55e1b51a33670c501Jim Miller } 161d90b5a84d8261a30db573de5a722722d6a37391eJim Miller } 162d90b5a84d8261a30db573de5a722722d6a37391eJim Miller screenTimeoutPreference.setEnabled(revisedEntries.size() > 0); 163992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 164992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 1658a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate int floatToIndex(float val) { 1668a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate String[] indices = getResources().getStringArray(R.array.entryvalues_font_size); 1676677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn float lastVal = Float.parseFloat(indices[0]); 1686677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn for (int i=1; i<indices.length; i++) { 1696677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn float thisVal = Float.parseFloat(indices[i]); 1706677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn if (val < (lastVal + (thisVal-lastVal)*.5f)) { 1716677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn return i-1; 1726677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 1736677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn lastVal = thisVal; 1746677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 1756677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn return indices.length-1; 1766677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 1776677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 1786677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn public void readFontSizePreference(ListPreference pref) { 1796677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn try { 180737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration()); 1816677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } catch (RemoteException e) { 182737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne Log.w(TAG, "Unable to retrieve font size"); 1836677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 1848a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate 1858a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate // mark the appropriate item in the preferences list 1868a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate int index = floatToIndex(mCurConfig.fontScale); 1878a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate pref.setValueIndex(index); 1888a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate 1898a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate // report the current size in the summary text 1908a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate final Resources res = getResources(); 1918a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate String[] fontSizeNames = res.getStringArray(R.array.entries_font_size); 1928a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate pref.setSummary(String.format(res.getString(R.string.summary_font_size), 1938a510c57dca097a1c437a0ff51ff5d677eeec6e4Christopher Tate fontSizeNames[index])); 1946677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 1956677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn 196992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 197d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 198992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani super.onResume(); 199992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 200737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne updateState(); 20126a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani getContentResolver().registerContentObserver( 20226a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), true, 20326a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani mAccelerometerRotationObserver); 20426a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 20526a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 20626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani @Override 20726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani public void onPause() { 20826a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani super.onPause(); 20926a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 21026a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani getContentResolver().unregisterContentObserver(mAccelerometerRotationObserver); 211992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 212992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 213737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne private void updateState() { 21426a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani updateAccelerometerRotationCheckbox(); 2156677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn readFontSizePreference(mFontSizePref); 21626a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani } 21726a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani 21826a1f898e04ca68dc8d1a58d15e9f901b09c90e2Amith Yamasani private void updateAccelerometerRotationCheckbox() { 219992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani mAccelerometer.setChecked(Settings.System.getInt( 220992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani getContentResolver(), 221992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani Settings.System.ACCELEROMETER_ROTATION, 0) != 0); 222992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 223992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 2246677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn public void writeFontSizePreference(Object objValue) { 2256677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn try { 2266677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn mCurConfig.fontScale = Float.parseFloat(objValue.toString()); 22792c8ebacc118f23df94431f531075a8837394829Dianne Hackborn ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig); 2286677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } catch (RemoteException e) { 229737c81c775b24ca36c5325e45678f6df80bbaa43Gilles Debunne Log.w(TAG, "Unable to save font size"); 2306677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 2316677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 232883d850ede03968018587781a8e20683398d98feAmith Yamasani 233992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani @Override 234992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 235992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani if (preference == mAccelerometer) { 236cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown try { 237cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown IWindowManager wm = IWindowManager.Stub.asInterface( 238cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown ServiceManager.getService(Context.WINDOW_SERVICE)); 239cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown if (mAccelerometer.isChecked()) { 240cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown wm.thawRotation(); 241cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown } else { 242cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown wm.freezeRotation(Surface.ROTATION_0); 243cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown } 244cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown } catch (RemoteException exc) { 245cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown Log.w(TAG, "Unable to save auto-rotate setting"); 246cbf312ec2984dcc42bc39b01f4b126b0901740cfJeff Brown } 247883d850ede03968018587781a8e20683398d98feAmith Yamasani } else if (preference == mNotificationPulse) { 248883d850ede03968018587781a8e20683398d98feAmith Yamasani boolean value = mNotificationPulse.isChecked(); 249883d850ede03968018587781a8e20683398d98feAmith Yamasani Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE, 250883d850ede03968018587781a8e20683398d98feAmith Yamasani value ? 1 : 0); 251883d850ede03968018587781a8e20683398d98feAmith Yamasani return true; 252992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 2532943cfa60670c1fc0d11d3cb4d0b67ec87e4181bDaniel Sandler return super.onPreferenceTreeClick(preferenceScreen, preference); 254992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 255992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 256992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani public boolean onPreferenceChange(Preference preference, Object objValue) { 257992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani final String key = preference.getKey(); 258992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani if (KEY_SCREEN_TIMEOUT.equals(key)) { 259992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani int value = Integer.parseInt((String) objValue); 260992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani try { 261698c24fcf0577888116e60c52892318feadc836aGilles Debunne Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value); 262698c24fcf0577888116e60c52892318feadc836aGilles Debunne updateTimeoutPreferenceDescription(value); 263992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } catch (NumberFormatException e) { 264992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani Log.e(TAG, "could not persist screen timeout setting", e); 265992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 266992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 2676677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn if (KEY_FONT_SIZE.equals(key)) { 2686677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn writeFontSizePreference(objValue); 2696677e56f45c8e7b922efc4cc28d11529097b8ea6Dianne Hackborn } 270992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani 271992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani return true; 272992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani } 273992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani} 274