diff options
Diffstat (limited to 'src/com/android/settings/DisplaySettings.java')
-rw-r--r-- | src/com/android/settings/DisplaySettings.java | 156 |
1 files changed, 75 insertions, 81 deletions
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index cdb0147..6ab88d0 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -18,21 +18,21 @@ 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.database.ContentObserver; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; -import android.os.ServiceManager; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceScreen; import android.provider.Settings; import android.util.Log; -import android.view.IWindowManager; import java.util.ArrayList; @@ -44,15 +44,14 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; 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 IWindowManager mWindowManager; + private ListPreference mFontSizePref; + private final Configuration mCurConfig = new Configuration(); + private ListPreference mScreenTimeoutPreference; private ContentObserver mAccelerometerRotationObserver = new ContentObserver(new Handler()) { @@ -66,12 +65,9 @@ public class DisplaySettings extends SettingsPreferenceFragment implements public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ContentResolver resolver = getActivity().getContentResolver(); - mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); addPreferencesFromResource(R.xml.display_settings); - mAnimations = (ListPreference) findPreference(KEY_ANIMATIONS); - mAnimations.setOnPreferenceChangeListener(this); mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); mAccelerometer.setPersistent(false); @@ -81,22 +77,41 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout)); mScreenTimeoutPreference.setOnPreferenceChangeListener(this); disableUnusableTimeouts(mScreenTimeoutPreference); - updateTimeoutPreferenceDescription(resolver, currentTimeout); + updateTimeoutPreferenceDescription(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( + ListPreference pref, + int summaryStrings, + long currentTimeout) { + updateTimeoutPreferenceDescription(pref, summaryStrings, 0, currentTimeout); + } + + private void updateTimeoutPreferenceDescription( + 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,11 +150,33 @@ 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) { + Log.w(TAG, "Unable to retrieve font size"); + } + pref.setValueIndex(floatToIndex(mCurConfig.fontScale, R.array.entryvalues_font_size)); + } + @Override public void onResume() { super.onResume(); - updateState(true); + updateState(); getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), true, mAccelerometerRotationObserver); @@ -152,33 +189,9 @@ public class DisplaySettings extends SettingsPreferenceFragment implements getContentResolver().unregisterContentObserver(mAccelerometerRotationObserver); } - private void updateState(boolean force) { - int animations = 0; - try { - mAnimationScales = mWindowManager.getAnimationScales(); - } catch (RemoteException e) { - } - if (mAnimationScales != null) { - if (mAnimationScales.length >= 1) { - animations = ((int)(mAnimationScales[0]+.5f)) % 10; - } - if (mAnimationScales.length >= 2) { - animations += (((int)(mAnimationScales[1]+.5f)) & 0x7) * 10; - } - } - int idx = 0; - int best = 0; - CharSequence[] aents = mAnimations.getEntryValues(); - for (int i=0; i<aents.length; i++) { - int val = Integer.parseInt(aents[i].toString()); - if (val <= animations && val > best) { - best = val; - idx = i; - } - } - mAnimations.setValueIndex(idx); - updateAnimationsSummary(mAnimations.getValue()); + private void updateState() { updateAccelerometerRotationCheckbox(); + readFontSizePreference(mFontSizePref); } private void updateAccelerometerRotationCheckbox() { @@ -187,19 +200,15 @@ public class DisplaySettings extends SettingsPreferenceFragment implements Settings.System.ACCELEROMETER_ROTATION, 0) != 0); } - private void updateAnimationsSummary(Object value) { - CharSequence[] summaries = getResources().getTextArray(R.array.animations_summaries); - CharSequence[] values = mAnimations.getEntryValues(); - for (int i=0; i<values.length; i++) { - //Log.i("foo", "Comparing entry "+ values[i] + " to current " - // + mAnimations.getValue()); - if (values[i].equals(value)) { - mAnimations.setSummary(summaries[i]); - break; - } + public void writeFontSizePreference(Object objValue) { + try { + mCurConfig.fontScale = Float.parseFloat(objValue.toString()); + ActivityManagerNative.getDefault().updateConfiguration(mCurConfig); + } catch (RemoteException e) { + Log.w(TAG, "Unable to save font size"); } } - + @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mAccelerometer) { @@ -207,40 +216,25 @@ 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) { final String key = preference.getKey(); - if (KEY_ANIMATIONS.equals(key)) { - try { - int value = Integer.parseInt((String) objValue); - if (mAnimationScales.length >= 1) { - mAnimationScales[0] = value%10; - } - if (mAnimationScales.length >= 2) { - mAnimationScales[1] = (value/10)%10; - } - try { - mWindowManager.setAnimationScales(mAnimationScales); - } catch (RemoteException e) { - } - updateAnimationsSummary(objValue); - } catch (NumberFormatException e) { - Log.e(TAG, "could not persist animation setting", e); - } - - } if (KEY_SCREEN_TIMEOUT.equals(key)) { int value = Integer.parseInt((String) objValue); try { Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value); - updateTimeoutPreferenceDescription(getContentResolver(), value); + updateTimeoutPreferenceDescription(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; } |