/* //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.ActivityManager; 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 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.Global.getInt(getContentResolver(), Settings.Global.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.Global.getInt( getContentResolver(), Settings.Global.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.Global.putInt(getContentResolver(), Settings.Global.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()); ActivityManager.getService().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