DevelopmentSettings.java revision 0c9c14b7864fddc7d5822d5db866ef0cc7a6d08a
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.app.ActivityManagerNative;
20b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
22fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.app.backup.IBackupManager;
23ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver;
24fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.content.Context;
25b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
26eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.content.Intent;
27498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.PackageManager;
28498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.VerifierDeviceIdentity;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
30f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
32eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
33eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
34eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
35eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
36eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
37f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
38f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
39f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
41ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment;
42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
43f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.Preference.OnPreferenceChangeListener;
44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
45eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
46eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
51ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
52f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
53f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                OnPreferenceChangeListener {
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
56498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root
57498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root    private static final String VERIFIER_DEVICE_IDENTIFIER = "verifier_device_identifier";
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
60f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
61f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
62fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
630c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
65eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
66eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
67f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
68eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
69eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
700c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
71eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
72eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
73eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
74eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
75eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
76eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
77eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
78d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
79d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
80eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
81fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
82eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
86fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
88eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
89eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
90f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
91eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
92eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
930c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
94eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
95eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
96eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
97eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
98eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
99eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
100d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
101d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
102b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    // To track whether Yes was clicked in the adb warning dialog
103b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    private boolean mOkClicked;
104b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
10524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    private Dialog mOkDialog;
10624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
108ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
111eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
112fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
113fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
114eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
120fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
121f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
122eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mStrictMode = (CheckBoxPreference) findPreference(STRICT_MODE_KEY);
123eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mPointerLocation = (CheckBoxPreference) findPreference(POINTER_LOCATION_KEY);
124f40770096fe75180fba679ed349a63d195729c0cJeff Brown        mShowTouches = (CheckBoxPreference) findPreference(SHOW_TOUCHES_KEY);
125eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mShowScreenUpdates = (CheckBoxPreference) findPreference(SHOW_SCREEN_UPDATES_KEY);
126eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mShowCpuUsage = (CheckBoxPreference) findPreference(SHOW_CPU_USAGE_KEY);
1270c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        mForceHardwareUi = (CheckBoxPreference) findPreference(FORCE_HARDWARE_UI_KEY);
128eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
12983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mWindowAnimationScale.setOnPreferenceChangeListener(this);
130eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
13183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mTransitionAnimationScale.setOnPreferenceChangeListener(this);
132eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
133eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
134eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
13683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mAppProcessLimit.setOnPreferenceChangeListener(this);
137eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
138d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
139d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
140d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
141498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root        final Preference verifierDeviceIdentifier = findPreference(VERIFIER_DEVICE_IDENTIFIER);
142498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root        final PackageManager pm = getActivity().getPackageManager();
143498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root        final VerifierDeviceIdentity verifierIndentity = pm.getVerifierDeviceIdentity();
144498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root        if (verifierIndentity != null) {
145498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root            verifierDeviceIdentifier.setSummary(verifierIndentity.toString());
146498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root        }
147498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Root
1484f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
149f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
150f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
151f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
152f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
153f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
154f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
155f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
156f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
157f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
158f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
162ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
16450cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
165ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
166ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        mEnableAdb.setChecked(Settings.Secure.getInt(cr,
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ADB_ENABLED, 0) != 0);
168ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        mKeepScreenOn.setChecked(Settings.System.getInt(cr,
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
170ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        mAllowMockLocation.setChecked(Settings.Secure.getInt(cr,
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
172f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
173fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
174eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
175eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
176f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
177eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
178eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
1790c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
180eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
181eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
182eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
183d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
184f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
185f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
186f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
187f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
188f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
189f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
190f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
191f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
192f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
193f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
194f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
195f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
196f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
197f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
198f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
199f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
200f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
201f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
202f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
205fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
206fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
207fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
208fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
209fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
210fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
211fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
212fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
213fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
214fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
215fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
216fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
217eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
218eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
219eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
220eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
221eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
222eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private int currentStrictModeActiveIndex() {
223eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
224eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
225eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
226eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
227eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
228eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
229eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
230eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
231eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
232eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
233eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
234eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
235eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
236eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
237eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
238eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
239eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mStrictMode.setChecked(currentStrictModeActiveIndex() == 1);
240eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
241eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
242eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
243eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
244eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
245eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
246eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
247eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
248eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mPointerLocation.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
249eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
250eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
251eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
252f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
253f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
254f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
255f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
256f40770096fe75180fba679ed349a63d195729c0cJeff Brown
257f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
258f40770096fe75180fba679ed349a63d195729c0cJeff Brown        mShowTouches.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
259f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
260f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
261f40770096fe75180fba679ed349a63d195729c0cJeff Brown
262eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
263eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
264eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
265eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
266eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
267eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
268eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
269eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
270eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
271eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
272eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
273eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
274eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
275eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
276eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                mShowScreenUpdates.setChecked(showUpdates != 0);
277eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
278eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
279eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
280eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
281eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
282eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
283eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
284eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
285eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
286eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeFlingerOptions() {
287eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
288eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
289eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
290eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
291eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
292eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInt(mShowScreenUpdates.isChecked() ? 1 : 0);
293eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
294eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
295eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
296eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
297eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
298eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
299eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
300eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
301eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
3020c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
3030c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        mForceHardwareUi.setChecked(SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
3040c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
3050c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
3060c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
3070c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
3080c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
3090c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
310eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
311eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mShowCpuUsage.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
312eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, 0) != 0);
313eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
3140c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
315eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
316eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
317eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
318eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, value ? 1 : 0);
319eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
320c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
321eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
322eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
323eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
324eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
325eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
326eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
327eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
328eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
329eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
330eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
331eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
332eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
333eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
334eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
335eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
336eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
337eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities.setChecked(Settings.System.getInt(
338eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
339eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
340eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
341eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
342eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
343eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
344eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
345eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
346eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
347eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
348eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
34983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
350eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
351eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
352eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
353eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
35483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
355eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
356eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
357eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
358eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
359eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
360eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
361eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
362eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
363eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
36483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
365eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
36683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            float scale = Float.parseFloat(newValue.toString());
367eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
368c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
369eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
370eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
371eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
372eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
373eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
374eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
375eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
376eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
377eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
378eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
379eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
380eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
38183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
382eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
383eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
384eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
385eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
38683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
387eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
388eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
389eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
390eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
39183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
392eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
39383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            int limit = Integer.parseInt(newValue.toString());
394eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
395c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
396eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
397eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
398eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
399eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
400d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
401d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
402d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
403d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
404d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
405d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
406d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
407d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs.setChecked(Settings.Secure.getInt(
408d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
409d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
410d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
414a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
415afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
416afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
419b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
420b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                mOkClicked = false;
42124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                if (mOkDialog != null) dismissDialog();
422ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                mOkDialog = new AlertDialog.Builder(getActivity()).setMessage(
423ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
424b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
425b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setIcon(android.R.drawable.ic_dialog_alert)
426b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
427b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
42824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
42924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                mOkDialog.setOnDismissListener(this);
430b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
431ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                Settings.Secure.putInt(getActivity().getContentResolver(),
432ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        Settings.Secure.ADB_ENABLED, 0);
433b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
435ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.System.putInt(getActivity().getContentResolver(),
436ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.System.STAY_ON_WHILE_PLUGGED_IN,
437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
440ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
441ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
442afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
443eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
444eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
445eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
446eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
447f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
448f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
449eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
450eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeFlingerOptions();
451eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
452eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
453eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
454eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
455d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
456d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
4570c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
4580c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
459afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
46024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
461afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
463b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
46483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
46583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
46683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
46783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
46883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
46983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
47083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
47183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
47283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
47383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
47483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
47583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
47683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
47783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
47883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
47983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
48083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
48183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
48283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
48324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    private void dismissDialog() {
4848ccb9e0d33dcba1bd9f26e54d7066397e47a74a9Amith Yamasani        if (mOkDialog == null) return;
48524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        mOkDialog.dismiss();
48624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        mOkDialog = null;
48724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
48824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
489b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
490b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        if (which == DialogInterface.BUTTON_POSITIVE) {
491b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mOkClicked = true;
492ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
493ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ADB_ENABLED, 1);
494b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        } else {
495b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            // Reset the toggle
496b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mEnableAdb.setChecked(false);
497b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
498b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
499b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
500b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
501b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
502b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        if (!mOkClicked) {
503b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mEnableAdb.setChecked(false);
504b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
505b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
50624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
50724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
50824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
50924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        dismissDialog();
51024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
51124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
512afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
513