blob: 36312bc0602e2a6bfd87fdc3d9e0a78ee0c049c2 [file] [log] [blame]
Joe Onorato7277e822011-04-06 14:04:39 -07001/* //device/apps/Settings/src/com/android/settings/Keyguard.java
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18package com.android.spare_parts;
19
20import android.app.ActivityManagerNative;
21import android.content.Context;
22import android.content.Intent;
23import android.content.SharedPreferences;
24import android.content.pm.ApplicationInfo;
25import android.content.pm.PackageManager;
26import android.content.pm.ResolveInfo;
27import android.content.pm.PackageManager.NameNotFoundException;
28import android.content.res.Configuration;
29import android.os.RemoteException;
30import android.os.ServiceManager;
31import android.preference.CheckBoxPreference;
32import android.preference.ListPreference;
33import android.preference.Preference;
34import android.preference.PreferenceActivity;
35import android.preference.PreferenceGroup;
36import android.preference.PreferenceScreen;
37import android.provider.Settings;
38import android.provider.Settings.SettingNotFoundException;
39import android.os.Bundle;
40import android.util.Log;
41import android.view.IWindowManager;
42
43import java.util.List;
44
45public class SpareParts extends PreferenceActivity
46 implements Preference.OnPreferenceChangeListener,
47 SharedPreferences.OnSharedPreferenceChangeListener {
48 private static final String TAG = "SpareParts";
49
50 private static final String BATTERY_HISTORY_PREF = "battery_history_settings";
51 private static final String BATTERY_INFORMATION_PREF = "battery_information_settings";
52 private static final String USAGE_STATISTICS_PREF = "usage_statistics_settings";
53
54 private static final String WINDOW_ANIMATIONS_PREF = "window_animations";
55 private static final String TRANSITION_ANIMATIONS_PREF = "transition_animations";
56 private static final String FANCY_IME_ANIMATIONS_PREF = "fancy_ime_animations";
57 private static final String HAPTIC_FEEDBACK_PREF = "haptic_feedback";
58 private static final String FONT_SIZE_PREF = "font_size";
59 private static final String END_BUTTON_PREF = "end_button";
60 private static final String KEY_COMPATIBILITY_MODE = "compatibility_mode";
61
62 private final Configuration mCurConfig = new Configuration();
63
64 private ListPreference mWindowAnimationsPref;
65 private ListPreference mTransitionAnimationsPref;
66 private CheckBoxPreference mFancyImeAnimationsPref;
67 private CheckBoxPreference mHapticFeedbackPref;
68 private ListPreference mFontSizePref;
69 private ListPreference mEndButtonPref;
70 private CheckBoxPreference mCompatibilityMode;
71
72 private IWindowManager mWindowManager;
73
74 public static boolean updatePreferenceToSpecificActivityOrRemove(Context context,
75 PreferenceGroup parentPreferenceGroup, String preferenceKey, int flags) {
76
77 Preference preference = parentPreferenceGroup.findPreference(preferenceKey);
78 if (preference == null) {
79 return false;
80 }
81
82 Intent intent = preference.getIntent();
83 if (intent != null) {
84 // Find the activity that is in the system image
85 PackageManager pm = context.getPackageManager();
86 List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
87 int listSize = list.size();
88 for (int i = 0; i < listSize; i++) {
89 ResolveInfo resolveInfo = list.get(i);
90 if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
91 != 0) {
92
93 // Replace the intent with this specific activity
94 preference.setIntent(new Intent().setClassName(
95 resolveInfo.activityInfo.packageName,
96 resolveInfo.activityInfo.name));
97
98 return true;
99 }
100 }
101 }
102
103 // Did not find a matching activity, so remove the preference
104 parentPreferenceGroup.removePreference(preference);
105
106 return true;
107 }
108
109 @Override
110 public void onCreate(Bundle icicle) {
111 super.onCreate(icicle);
112 addPreferencesFromResource(R.xml.spare_parts);
113
114 PreferenceScreen prefSet = getPreferenceScreen();
115
116 mWindowAnimationsPref = (ListPreference) prefSet.findPreference(WINDOW_ANIMATIONS_PREF);
117 mWindowAnimationsPref.setOnPreferenceChangeListener(this);
118 mTransitionAnimationsPref = (ListPreference) prefSet.findPreference(TRANSITION_ANIMATIONS_PREF);
119 mTransitionAnimationsPref.setOnPreferenceChangeListener(this);
120 mFancyImeAnimationsPref = (CheckBoxPreference) prefSet.findPreference(FANCY_IME_ANIMATIONS_PREF);
121 mHapticFeedbackPref = (CheckBoxPreference) prefSet.findPreference(HAPTIC_FEEDBACK_PREF);
122 mFontSizePref = (ListPreference) prefSet.findPreference(FONT_SIZE_PREF);
123 mFontSizePref.setOnPreferenceChangeListener(this);
124 mEndButtonPref = (ListPreference) prefSet.findPreference(END_BUTTON_PREF);
125 mEndButtonPref.setOnPreferenceChangeListener(this);
126 mCompatibilityMode = (CheckBoxPreference) findPreference(KEY_COMPATIBILITY_MODE);
127 mCompatibilityMode.setPersistent(false);
Jeff Sharkey4db99782012-10-01 13:52:41 -0700128 mCompatibilityMode.setChecked(Settings.Global.getInt(getContentResolver(),
129 Settings.Global.COMPATIBILITY_MODE, 1) != 0);
Joe Onorato7277e822011-04-06 14:04:39 -0700130
131 mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
132
133 final PreferenceGroup parentPreference = getPreferenceScreen();
134 updatePreferenceToSpecificActivityOrRemove(this, parentPreference,
135 BATTERY_HISTORY_PREF, 0);
136 updatePreferenceToSpecificActivityOrRemove(this, parentPreference,
137 BATTERY_INFORMATION_PREF, 0);
138 updatePreferenceToSpecificActivityOrRemove(this, parentPreference,
139 USAGE_STATISTICS_PREF, 0);
140
141 parentPreference.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
142 }
143
144 private void updateToggles() {
Jeff Sharkey4db99782012-10-01 13:52:41 -0700145 mFancyImeAnimationsPref.setChecked(Settings.Global.getInt(
Joe Onorato7277e822011-04-06 14:04:39 -0700146 getContentResolver(),
Jeff Sharkey4db99782012-10-01 13:52:41 -0700147 Settings.Global.FANCY_IME_ANIMATIONS, 0) != 0);
Joe Onorato7277e822011-04-06 14:04:39 -0700148 mHapticFeedbackPref.setChecked(Settings.System.getInt(
149 getContentResolver(),
150 Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) != 0);
151 }
152
153 public boolean onPreferenceChange(Preference preference, Object objValue) {
154 if (preference == mWindowAnimationsPref) {
155 writeAnimationPreference(0, objValue);
156 } else if (preference == mTransitionAnimationsPref) {
157 writeAnimationPreference(1, objValue);
158 } else if (preference == mFontSizePref) {
159 writeFontSizePreference(objValue);
160 } else if (preference == mEndButtonPref) {
161 writeEndButtonPreference(objValue);
162 }
163 // always let the preference setting proceed.
164 return true;
165 }
166
167 @Override
168 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
169 if (preference == mCompatibilityMode) {
Jeff Sharkey4db99782012-10-01 13:52:41 -0700170 Settings.Global.putInt(getContentResolver(),
171 Settings.Global.COMPATIBILITY_MODE,
Joe Onorato7277e822011-04-06 14:04:39 -0700172 mCompatibilityMode.isChecked() ? 1 : 0);
173 return true;
174 }
175 return false;
176 }
177
178 public void writeAnimationPreference(int which, Object objValue) {
179 try {
180 float val = Float.parseFloat(objValue.toString());
181 mWindowManager.setAnimationScale(which, val);
182 } catch (NumberFormatException e) {
183 } catch (RemoteException e) {
184 }
185 }
186
187 public void writeFontSizePreference(Object objValue) {
188 try {
189 mCurConfig.fontScale = Float.parseFloat(objValue.toString());
190 ActivityManagerNative.getDefault().updateConfiguration(mCurConfig);
191 } catch (RemoteException e) {
192 }
193 }
194
195 public void writeEndButtonPreference(Object objValue) {
196 try {
197 int val = Integer.parseInt(objValue.toString());
198 Settings.System.putInt(getContentResolver(),
199 Settings.System.END_BUTTON_BEHAVIOR, val);
200 } catch (NumberFormatException e) {
201 }
202 }
203
204 int floatToIndex(float val, int resid) {
205 String[] indices = getResources().getStringArray(resid);
206 float lastVal = Float.parseFloat(indices[0]);
207 for (int i=1; i<indices.length; i++) {
208 float thisVal = Float.parseFloat(indices[i]);
209 if (val < (lastVal + (thisVal-lastVal)*.5f)) {
210 return i-1;
211 }
212 lastVal = thisVal;
213 }
214 return indices.length-1;
215 }
216
217 public void readAnimationPreference(int which, ListPreference pref) {
218 try {
219 float scale = mWindowManager.getAnimationScale(which);
220 pref.setValueIndex(floatToIndex(scale,
221 R.array.entryvalues_animations));
222 } catch (RemoteException e) {
223 }
224 }
225
226 public void readFontSizePreference(ListPreference pref) {
227 try {
228 mCurConfig.updateFrom(
229 ActivityManagerNative.getDefault().getConfiguration());
230 } catch (RemoteException e) {
231 }
232 pref.setValueIndex(floatToIndex(mCurConfig.fontScale,
233 R.array.entryvalues_font_size));
234 }
235
236 public void readEndButtonPreference(ListPreference pref) {
237 try {
238 pref.setValueIndex(Settings.System.getInt(getContentResolver(),
239 Settings.System.END_BUTTON_BEHAVIOR));
240 } catch (SettingNotFoundException e) {
241 }
242 }
243
244 public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
245 if (FANCY_IME_ANIMATIONS_PREF.equals(key)) {
Jeff Sharkey4db99782012-10-01 13:52:41 -0700246 Settings.Global.putInt(getContentResolver(),
247 Settings.Global.FANCY_IME_ANIMATIONS,
Joe Onorato7277e822011-04-06 14:04:39 -0700248 mFancyImeAnimationsPref.isChecked() ? 1 : 0);
249 } else if (HAPTIC_FEEDBACK_PREF.equals(key)) {
250 Settings.System.putInt(getContentResolver(),
251 Settings.System.HAPTIC_FEEDBACK_ENABLED,
252 mHapticFeedbackPref.isChecked() ? 1 : 0);
253 }
254 }
255
256 @Override
257 public void onResume() {
258 super.onResume();
259 readAnimationPreference(0, mWindowAnimationsPref);
260 readAnimationPreference(1, mTransitionAnimationsPref);
261 readFontSizePreference(mFontSizePref);
262 readEndButtonPreference(mEndButtonPref);
263 updateToggles();
264 }
265}