diff options
Diffstat (limited to 'src/com/android/settings/DisplaySettings.java')
-rw-r--r-- | src/com/android/settings/DisplaySettings.java | 103 |
1 files changed, 89 insertions, 14 deletions
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index cdb0147..682184e 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -18,9 +18,17 @@ package com.android.settings; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; +import android.app.ActivityManagerNative; import android.app.admin.DevicePolicyManager; import android.content.ContentResolver; import android.content.Context; +import android.content.res.Configuration; + +import android.app.ActivityManagerNative; +import android.app.admin.DevicePolicyManager; +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Configuration; import android.database.ContentObserver; import android.os.Bundle; import android.os.Handler; @@ -46,11 +54,15 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; private static final String KEY_ANIMATIONS = "animations"; private static final String KEY_ACCELEROMETER = "accelerometer"; + private static final String KEY_FONT_SIZE = "font_size"; private ListPreference mAnimations; private CheckBoxPreference mAccelerometer; private float[] mAnimationScales; + private ListPreference mFontSizePref; + private final Configuration mCurConfig = new Configuration(); + private IWindowManager mWindowManager; private ListPreference mScreenTimeoutPreference; @@ -70,6 +82,12 @@ public class DisplaySettings extends SettingsPreferenceFragment implements addPreferencesFromResource(R.xml.display_settings); + // Fetch this once before attaching a listener for changes. + try { + mAnimationScales = mWindowManager.getAnimationScales(); + } catch (RemoteException e) { + // Shouldn't happen and not much can be done anyway. + } mAnimations = (ListPreference) findPreference(KEY_ANIMATIONS); mAnimations.setOnPreferenceChangeListener(this); mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); @@ -81,22 +99,42 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout)); mScreenTimeoutPreference.setOnPreferenceChangeListener(this); disableUnusableTimeouts(mScreenTimeoutPreference); - updateTimeoutPreferenceDescription(resolver, currentTimeout); + updateTimeoutPreferenceDescription(resolver, mScreenTimeoutPreference, + R.string.screen_timeout_summary, currentTimeout); + + mFontSizePref = (ListPreference) findPreference(KEY_FONT_SIZE); + mFontSizePref.setOnPreferenceChangeListener(this); } - private void updateTimeoutPreferenceDescription(ContentResolver resolver, long currentTimeout) { - final CharSequence[] entries = mScreenTimeoutPreference.getEntries(); - final CharSequence[] values = mScreenTimeoutPreference.getEntryValues(); - int best = 0; - for (int i = 0; i < values.length; i++) { - long timeout = Long.valueOf(values[i].toString()); - if (currentTimeout >= timeout) { - best = i; + private void updateTimeoutPreferenceDescription( + ContentResolver resolver, + ListPreference pref, + int summaryStrings, + long currentTimeout) { + updateTimeoutPreferenceDescription(resolver, pref, summaryStrings, 0, currentTimeout); + } + private void updateTimeoutPreferenceDescription( + ContentResolver resolver, + ListPreference pref, + int summaryStrings, + int zeroString, + long currentTimeout) { + String summary; + if (currentTimeout == 0) { + summary = pref.getContext().getString(zeroString); + } else { + final CharSequence[] entries = pref.getEntries(); + final CharSequence[] values = pref.getEntryValues(); + int best = 0; + for (int i = 0; i < values.length; i++) { + long timeout = Long.valueOf(values[i].toString()); + if (currentTimeout >= timeout) { + best = i; + } } + summary = pref.getContext().getString(summaryStrings, entries[best]); } - String summary = mScreenTimeoutPreference.getContext() - .getString(R.string.screen_timeout_summary, entries[best]); - mScreenTimeoutPreference.setSummary(summary); + pref.setSummary(summary); } private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) { @@ -135,6 +173,29 @@ public class DisplaySettings extends SettingsPreferenceFragment implements screenTimeoutPreference.setEnabled(revisedEntries.size() > 0); } + int floatToIndex(float val, int resid) { + String[] indices = getResources().getStringArray(resid); + float lastVal = Float.parseFloat(indices[0]); + for (int i=1; i<indices.length; i++) { + float thisVal = Float.parseFloat(indices[i]); + if (val < (lastVal + (thisVal-lastVal)*.5f)) { + return i-1; + } + lastVal = thisVal; + } + return indices.length-1; + } + + public void readFontSizePreference(ListPreference pref) { + try { + mCurConfig.updateFrom( + ActivityManagerNative.getDefault().getConfiguration()); + } catch (RemoteException e) { + } + pref.setValueIndex(floatToIndex(mCurConfig.fontScale, + R.array.entryvalues_font_size)); + } + @Override public void onResume() { super.onResume(); @@ -157,6 +218,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements try { mAnimationScales = mWindowManager.getAnimationScales(); } catch (RemoteException e) { + // Shouldn't happen and not much can be done anyway. } if (mAnimationScales != null) { if (mAnimationScales.length >= 1) { @@ -179,6 +241,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mAnimations.setValueIndex(idx); updateAnimationsSummary(mAnimations.getValue()); updateAccelerometerRotationCheckbox(); + readFontSizePreference(mFontSizePref); } private void updateAccelerometerRotationCheckbox() { @@ -200,6 +263,14 @@ public class DisplaySettings extends SettingsPreferenceFragment implements } } + public void writeFontSizePreference(Object objValue) { + try { + mCurConfig.fontScale = Float.parseFloat(objValue.toString()); + ActivityManagerNative.getDefault().updateConfiguration(mCurConfig); + } catch (RemoteException e) { + } + } + @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mAccelerometer) { @@ -207,7 +278,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements Settings.System.ACCELEROMETER_ROTATION, mAccelerometer.isChecked() ? 1 : 0); } - return true; + return super.onPreferenceTreeClick(preferenceScreen, preference); } public boolean onPreferenceChange(Preference preference, Object objValue) { @@ -236,11 +307,15 @@ public class DisplaySettings extends SettingsPreferenceFragment implements try { Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value); - updateTimeoutPreferenceDescription(getContentResolver(), value); + updateTimeoutPreferenceDescription(getContentResolver(), mScreenTimeoutPreference, + R.string.screen_timeout_summary, value); } catch (NumberFormatException e) { Log.e(TAG, "could not persist screen timeout setting", e); } } + if (KEY_FONT_SIZE.equals(key)) { + writeFontSizePreference(objValue); + } return true; } |