diff options
author | Joe Onorato <joeo@google.com> | 2011-04-06 14:04:39 -0700 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2011-04-06 18:26:53 -0700 |
commit | 7277e821713196510586cdf5fd334cdc012554b2 (patch) | |
tree | d9ea78f0e8300362880b96de1766d97b51845323 /src/com/android/spare_parts | |
parent | 856142f2f054bd6bf1567163e4ae0b7aa7495e7b (diff) | |
download | SpareParts-7277e821713196510586cdf5fd334cdc012554b2.tar.gz |
Move files from development project.
Change-Id: Ic09af183525d474b68b1d4a38264b76a2759d14c
Diffstat (limited to 'src/com/android/spare_parts')
-rw-r--r-- | src/com/android/spare_parts/SpareParts.java | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/src/com/android/spare_parts/SpareParts.java b/src/com/android/spare_parts/SpareParts.java new file mode 100644 index 0000000..099f27a --- /dev/null +++ b/src/com/android/spare_parts/SpareParts.java @@ -0,0 +1,265 @@ +/* //device/apps/Settings/src/com/android/settings/Keyguard.java +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package com.android.spare_parts; + +import android.app.ActivityManagerNative; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Configuration; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceGroup; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; +import android.os.Bundle; +import android.util.Log; +import android.view.IWindowManager; + +import java.util.List; + +public class SpareParts extends PreferenceActivity + implements Preference.OnPreferenceChangeListener, + SharedPreferences.OnSharedPreferenceChangeListener { + private static final String TAG = "SpareParts"; + + private static final String BATTERY_HISTORY_PREF = "battery_history_settings"; + private static final String BATTERY_INFORMATION_PREF = "battery_information_settings"; + private static final String USAGE_STATISTICS_PREF = "usage_statistics_settings"; + + private static final String WINDOW_ANIMATIONS_PREF = "window_animations"; + private static final String TRANSITION_ANIMATIONS_PREF = "transition_animations"; + private static final String FANCY_IME_ANIMATIONS_PREF = "fancy_ime_animations"; + private static final String HAPTIC_FEEDBACK_PREF = "haptic_feedback"; + private static final String FONT_SIZE_PREF = "font_size"; + private static final String END_BUTTON_PREF = "end_button"; + private static final String KEY_COMPATIBILITY_MODE = "compatibility_mode"; + + private final Configuration mCurConfig = new Configuration(); + + private ListPreference mWindowAnimationsPref; + private ListPreference mTransitionAnimationsPref; + private CheckBoxPreference mFancyImeAnimationsPref; + private CheckBoxPreference mHapticFeedbackPref; + private ListPreference mFontSizePref; + private ListPreference mEndButtonPref; + private CheckBoxPreference mCompatibilityMode; + + private IWindowManager mWindowManager; + + public static boolean updatePreferenceToSpecificActivityOrRemove(Context context, + PreferenceGroup parentPreferenceGroup, String preferenceKey, int flags) { + + Preference preference = parentPreferenceGroup.findPreference(preferenceKey); + if (preference == null) { + return false; + } + + Intent intent = preference.getIntent(); + if (intent != null) { + // Find the activity that is in the system image + PackageManager pm = context.getPackageManager(); + List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); + int listSize = list.size(); + for (int i = 0; i < listSize; i++) { + ResolveInfo resolveInfo = list.get(i); + if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) + != 0) { + + // Replace the intent with this specific activity + preference.setIntent(new Intent().setClassName( + resolveInfo.activityInfo.packageName, + resolveInfo.activityInfo.name)); + + return true; + } + } + } + + // Did not find a matching activity, so remove the preference + parentPreferenceGroup.removePreference(preference); + + return true; + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.spare_parts); + + PreferenceScreen prefSet = getPreferenceScreen(); + + mWindowAnimationsPref = (ListPreference) prefSet.findPreference(WINDOW_ANIMATIONS_PREF); + mWindowAnimationsPref.setOnPreferenceChangeListener(this); + mTransitionAnimationsPref = (ListPreference) prefSet.findPreference(TRANSITION_ANIMATIONS_PREF); + mTransitionAnimationsPref.setOnPreferenceChangeListener(this); + mFancyImeAnimationsPref = (CheckBoxPreference) prefSet.findPreference(FANCY_IME_ANIMATIONS_PREF); + mHapticFeedbackPref = (CheckBoxPreference) prefSet.findPreference(HAPTIC_FEEDBACK_PREF); + mFontSizePref = (ListPreference) prefSet.findPreference(FONT_SIZE_PREF); + mFontSizePref.setOnPreferenceChangeListener(this); + mEndButtonPref = (ListPreference) prefSet.findPreference(END_BUTTON_PREF); + mEndButtonPref.setOnPreferenceChangeListener(this); + mCompatibilityMode = (CheckBoxPreference) findPreference(KEY_COMPATIBILITY_MODE); + mCompatibilityMode.setPersistent(false); + mCompatibilityMode.setChecked(Settings.System.getInt(getContentResolver(), + Settings.System.COMPATIBILITY_MODE, 1) != 0); + + mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); + + final PreferenceGroup parentPreference = getPreferenceScreen(); + updatePreferenceToSpecificActivityOrRemove(this, parentPreference, + BATTERY_HISTORY_PREF, 0); + updatePreferenceToSpecificActivityOrRemove(this, parentPreference, + BATTERY_INFORMATION_PREF, 0); + updatePreferenceToSpecificActivityOrRemove(this, parentPreference, + USAGE_STATISTICS_PREF, 0); + + parentPreference.getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + } + + private void updateToggles() { + mFancyImeAnimationsPref.setChecked(Settings.System.getInt( + getContentResolver(), + Settings.System.FANCY_IME_ANIMATIONS, 0) != 0); + mHapticFeedbackPref.setChecked(Settings.System.getInt( + getContentResolver(), + Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) != 0); + } + + public boolean onPreferenceChange(Preference preference, Object objValue) { + if (preference == mWindowAnimationsPref) { + writeAnimationPreference(0, objValue); + } else if (preference == mTransitionAnimationsPref) { + writeAnimationPreference(1, objValue); + } else if (preference == mFontSizePref) { + writeFontSizePreference(objValue); + } else if (preference == mEndButtonPref) { + writeEndButtonPreference(objValue); + } + // always let the preference setting proceed. + return true; + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (preference == mCompatibilityMode) { + Settings.System.putInt(getContentResolver(), + Settings.System.COMPATIBILITY_MODE, + mCompatibilityMode.isChecked() ? 1 : 0); + return true; + } + return false; + } + + public void writeAnimationPreference(int which, Object objValue) { + try { + float val = Float.parseFloat(objValue.toString()); + mWindowManager.setAnimationScale(which, val); + } catch (NumberFormatException e) { + } catch (RemoteException e) { + } + } + + public void writeFontSizePreference(Object objValue) { + try { + mCurConfig.fontScale = Float.parseFloat(objValue.toString()); + ActivityManagerNative.getDefault().updateConfiguration(mCurConfig); + } catch (RemoteException e) { + } + } + + public void writeEndButtonPreference(Object objValue) { + try { + int val = Integer.parseInt(objValue.toString()); + Settings.System.putInt(getContentResolver(), + Settings.System.END_BUTTON_BEHAVIOR, val); + } catch (NumberFormatException e) { + } + } + + 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 readAnimationPreference(int which, ListPreference pref) { + try { + float scale = mWindowManager.getAnimationScale(which); + pref.setValueIndex(floatToIndex(scale, + R.array.entryvalues_animations)); + } catch (RemoteException e) { + } + } + + public void readFontSizePreference(ListPreference pref) { + try { + mCurConfig.updateFrom( + ActivityManagerNative.getDefault().getConfiguration()); + } catch (RemoteException e) { + } + pref.setValueIndex(floatToIndex(mCurConfig.fontScale, + R.array.entryvalues_font_size)); + } + + public void readEndButtonPreference(ListPreference pref) { + try { + pref.setValueIndex(Settings.System.getInt(getContentResolver(), + Settings.System.END_BUTTON_BEHAVIOR)); + } catch (SettingNotFoundException e) { + } + } + + public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { + if (FANCY_IME_ANIMATIONS_PREF.equals(key)) { + Settings.System.putInt(getContentResolver(), + Settings.System.FANCY_IME_ANIMATIONS, + mFancyImeAnimationsPref.isChecked() ? 1 : 0); + } else if (HAPTIC_FEEDBACK_PREF.equals(key)) { + Settings.System.putInt(getContentResolver(), + Settings.System.HAPTIC_FEEDBACK_ENABLED, + mHapticFeedbackPref.isChecked() ? 1 : 0); + } + } + + @Override + public void onResume() { + super.onResume(); + readAnimationPreference(0, mWindowAnimationsPref); + readAnimationPreference(1, mTransitionAnimationsPref); + readFontSizePreference(mFontSizePref); + readEndButtonPreference(mEndButtonPref); + updateToggles(); + } +} |