DevelopmentSettings.java revision 87ca70172cc25ed2195d310b71d9c652a0757b88
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
1914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport java.util.ArrayList;
2014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
2114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.ActionBar;
2214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.Activity;
23eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.app.ActivityManagerNative;
24b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
26fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.app.backup.IBackupManager;
27ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver;
28fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.content.Context;
29b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
30eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.content.Intent;
319244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackbornimport android.content.pm.ApplicationInfo;
32498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.PackageManager;
3387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
35f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
37eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
38eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
39eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
40eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
41eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
42f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
4334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.os.Trace;
44f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
45f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
4634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.preference.MultiCheckPreference;
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
48ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment;
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
50f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.Preference.OnPreferenceChangeListener;
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
52eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
5387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.util.Log;
5414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.view.Gravity;
55c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.HardwareRenderer;
56eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
57c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
5814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.CompoundButton;
5914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
64ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
65f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
6614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
71f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
72f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
73fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
740c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
769244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
779244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
78eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
79eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
80f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
81eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
82e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
83eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
840c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
85c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
86c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
87c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
88eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
89eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
90b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
91eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
9234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private static final String ENABLE_TRACES_KEY = "enable_traces";
9334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
94eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
95eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
96eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
97eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
98d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
99d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
1009244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
1019244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
102eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
103fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
104eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
10514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Switch mEnabledSwitch;
10614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mLastEnabledState;
10734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
10887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
10914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
113fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
1169244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
1179244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private CheckBoxPreference mWaitForDebugger;
1189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
119eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
120eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
121f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
122eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
123e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private CheckBoxPreference mDisableOverlays;
124eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
1250c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
126c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mTrackFrameTime;
127c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mShowHwScreenUpdates;
128c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mDebugLayout;
129eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
130eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
131b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
13234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private MultiCheckPreference mEnableTracesPref;
133eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
134eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
136eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
137d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
138d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
13914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
14014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<CheckBoxPreference> mResetCbPrefs
14114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            = new ArrayList<CheckBoxPreference>();
142b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
14314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
14414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
14514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
14614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
14724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
149ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
152eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
153fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
154fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
155eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
158c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
159c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
160c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
161fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
16214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
163f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
1649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
1659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
166c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY);
167c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mStrictMode = findAndInitCheckboxPref(STRICT_MODE_KEY);
168c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mPointerLocation = findAndInitCheckboxPref(POINTER_LOCATION_KEY);
169c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowTouches = findAndInitCheckboxPref(SHOW_TOUCHES_KEY);
170c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
171c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
172c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
173c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
174c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
175c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
176c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
177eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
17814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mWindowAnimationScale);
17983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mWindowAnimationScale.setOnPreferenceChangeListener(this);
180eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
18114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mTransitionAnimationScale);
18283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mTransitionAnimationScale.setOnPreferenceChangeListener(this);
183b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
18414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAnimatorDurationScale);
185b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale.setOnPreferenceChangeListener(this);
18634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
18734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] traceValues = new String[Trace.TRACE_TAGS.length];
18834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
18934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            traceValues[i] = Integer.toString(1<<i);
19034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
19134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntries(Trace.TRACE_TAGS);
19234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntryValues(traceValues);
19334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mAllPrefs.add(mEnableTracesPref);
19434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setOnPreferenceChangeListener(this);
195eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
196eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
197eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
19814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
19914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mImmediatelyDestroyActivities);
200eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
20114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAppProcessLimit);
20283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mAppProcessLimit.setOnPreferenceChangeListener(this);
203eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
204d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
205d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
20614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
20714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mShowAllANRs);
208d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
20914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
21014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
21114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
21214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2134f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
214f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
215f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
216c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference findAndInitCheckboxPref(String key) {
217c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
218c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
219c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
220c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
221c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
222c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mResetCbPrefs.add(pref);
223c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
224c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
225c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
22614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
22714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
22814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
22914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
23014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
23114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch = new Switch(activity);
23214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
23314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final int padding = activity.getResources().getDimensionPixelSize(
23414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                R.dimen.action_bar_switch_padding);
23514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setPadding(0, 0, padding, 0);
23614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setOnCheckedChangeListener(this);
23714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
23814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
23914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
24014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStart() {
24114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStart();
24214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
24314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
24414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.DISPLAY_SHOW_CUSTOM);
24514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
24614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
24714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
24814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                Gravity.CENTER_VERTICAL | Gravity.RIGHT));
24914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
25014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
25114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
25214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStop() {
25314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStop();
25414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
25514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
25614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(null);
25714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
25814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
259f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
260f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
261f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
262f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
263f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
264f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
26514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAllPrefs.remove(hdcpChecking);
266f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
267f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
27014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
271c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
27214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.get(i).setEnabled(enabled);
27314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2749244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
27514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
27614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
278ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
28050cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
281ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
28214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mLastEnabledState = Settings.Secure.getInt(cr,
28314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
28414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setChecked(mLastEnabledState);
28514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        setPrefsEnabledState(mLastEnabledState);
28634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
28734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (mHaveDebugSettings && !mLastEnabledState) {
28834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
28934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
29034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
29134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
29234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
29334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
29434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mLastEnabledState = true;
29534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            setPrefsEnabledState(mLastEnabledState);
29634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
29734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
29834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
29934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
30034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        checkBox.setChecked(value);
30134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
30214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
30314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
30414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
30514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
30634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
30734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mEnableAdb, Settings.Secure.getInt(cr,
308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ADB_ENABLED, 0) != 0);
30934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mKeepScreenOn, Settings.System.getInt(cr,
310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
31134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
313f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
314fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
3159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
316eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
317eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
318f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
319eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
320eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
3210c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
322c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
323c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
324c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
325eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
32634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
327eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
328eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
329d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
330f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
331f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
33214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
33387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
33414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        for (int i=0; i<mResetCbPrefs.size(); i++) {
33514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            CheckBoxPreference cb = mResetCbPrefs.get(i);
33614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
33714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
33814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                onPreferenceTreeClick(null, cb);
33914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
34014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3419244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
34214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
34314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
34414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
34534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(0);
34614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
34734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
34814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
34987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
35087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
35114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
35214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
353f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
354f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
355f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
356f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
357f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
358f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
359f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
360f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
361f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
362f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
363f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
364f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
365f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
366f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
367f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
368f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
369f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
372fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
373fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
374fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
375fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
376fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
377fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
378fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
379fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
380fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
381fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
382fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
383fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
3849244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
3859244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
3869244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
3879244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp, mWaitForDebugger.isChecked(), true);
3889244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
3899244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
3909244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
3919244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
392c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
3939244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
3949244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
3959244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
3969244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
3979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
3989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
3999244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
4009244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
4019244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugApp = Settings.System.getString(
4029244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.DEBUG_APP);
40334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mWaitForDebugger, Settings.System.getInt(
4049244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.WAIT_FOR_DEBUGGER, 0) != 0);
4059244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
4069244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
4079244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
4089244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
4099244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
4109244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
4119244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
4129244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
4139244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
4149244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
4159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
4169244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
41734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
4189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
4199244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
4209244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
4219244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4229244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4239244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
424eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
425eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
426eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
427eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
428eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
429c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
430eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
431eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
432eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
433eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
434eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
435eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
436eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
437eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
438eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
439eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
440eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
441eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
442eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
443eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
444eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
445eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
44634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
447eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
448eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
449eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
450eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
451eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
452eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
453eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
454eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
45534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
456eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
457eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
458eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
459f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
460f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
461f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
462f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
463f40770096fe75180fba679ed349a63d195729c0cJeff Brown
464f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
46534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
466f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
467f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
468f40770096fe75180fba679ed349a63d195729c0cJeff Brown
469eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
470eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
471eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
472eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
473eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
474eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
475eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
476eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
477eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
478eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
479eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
480eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
481eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
482eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
48334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mShowScreenUpdates, showUpdates != 0);
484eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
485eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
486e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
48734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mDisableOverlays, disableOverlays != 0);
488eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
489eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
490eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
491eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
492eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
493eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
494eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
495e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
496eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
497eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
498eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
499eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
500eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
501e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
502e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
503eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
504eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
505eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
506eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
507eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
508eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
509eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
510eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
511eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
512e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
513e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
514e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
515e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
516e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
517e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
518e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
519e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
520e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
521e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
522e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
523e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
524e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
525e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
526e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
527e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
528e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
5290c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
53034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
5310c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
5320c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
5330c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
5340c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
53587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
5360c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
5370c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
538c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
53934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mTrackFrameTime,
540c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
541c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
542c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
543c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeTrackFrameTimeOptions() {
544c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
545c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mTrackFrameTime.isChecked() ? "true" : "false");
54687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
547c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
548c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
549c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
55034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowHwScreenUpdates,
551c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
552c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
553c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
554c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
555c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
556c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : "false");
55787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
558c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
559c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
560c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
56134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mDebugLayout,
562c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
563c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
564c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
565c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
566c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
567c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
56887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
569c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
570c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
571eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
57234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowCpuUsage, Settings.System.getInt(getActivity().getContentResolver(),
573eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, 0) != 0);
574eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
5750c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
576eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
577eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
578eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
579eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, value ? 1 : 0);
580eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
581c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
582eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
583eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
584eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
585eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
586eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
587eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
588eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
589eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
590eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
591eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
592eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
593eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
594eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
595eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
596eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
597eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
59834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mImmediatelyDestroyActivities, Settings.System.getInt(
599eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
600eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
601eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
602eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
603eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
604eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
60534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
60634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
60734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
608eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
609eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
610eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
611eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
612eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
61383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
614eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
615eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
616eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
617eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
61883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
619eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
620eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
621eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
622eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
623eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
624eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
625eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
626b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
627eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
628eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
62983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
630eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
63114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
632eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
633c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
634eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
635eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
636eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
637eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
638eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
639eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
640eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
641eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
642eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
643eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
644eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
64534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
64634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
64734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
648eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
64983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
650eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
651eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
652eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
653eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
65483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
655eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
656eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
657eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
658eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
65983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
660eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
66114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
662eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
663c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
664eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
665eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
666eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
667eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
668d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
669d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
670d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
671d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
672d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
673d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
674d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
67534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
676d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
677d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
678d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
67934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void updateEnableTracesOptions() {
68034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String strValue = SystemProperties.get(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS);
68134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long flags = SystemProperties.getLong(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS, 0);
68234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
68334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        int numSet = 0;
68434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
68534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            boolean set = (flags&(1<<i)) != 0;
68634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setValue(i-Trace.TRACE_FLAGS_START_BIT, set);
68734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (set) {
68834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                numSet++;
68934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
69034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
69134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (numSet == 0) {
69234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_none);
69334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (numSet == values.length) {
69434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
69534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_all);
69634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else {
69734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
69834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(getString(R.string.enable_traces_summary_num, numSet));
69934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
70034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
70134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
70234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions() {
70334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long value = 0;
70434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
70534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
70634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (mEnableTracesPref.getValue(i-Trace.TRACE_FLAGS_START_BIT)) {
70734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                value |= 1<<i;
70834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
70934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
71034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(value);
71134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        // Make sure summary is updated.
71234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
71334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
71434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
71534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions(long value) {
71634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        SystemProperties.set(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS,
71734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                "0x" + Long.toString(value, 16));
71887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
71934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
72034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
721afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
72214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
72314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (buttonView == mEnabledSwitch) {
72414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (isChecked != mLastEnabledState) {
72514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (isChecked) {
72614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mDialogClicked = false;
72714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    if (mEnableDialog != null) dismissDialogs();
72814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
72914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            getActivity().getResources().getString(
73014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                                    R.string.dev_settings_warning_message))
73114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setTitle(R.string.dev_settings_warning_title)
73214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setIcon(android.R.drawable.ic_dialog_alert)
73314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setPositiveButton(android.R.string.yes, this)
73414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setNegativeButton(android.R.string.no, this)
73514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .show();
73614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog.setOnDismissListener(this);
73714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                } else {
73814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    resetDangerousOptions();
73914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    Settings.Secure.putInt(getActivity().getContentResolver(),
74014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0);
74114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mLastEnabledState = isChecked;
74214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    setPrefsEnabledState(mLastEnabledState);
74314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                }
74414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
74514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
74614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
74714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
74814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
7499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
7509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
7519244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
7529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
7539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
7549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
7559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
7569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
7579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
7589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
7599244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
7609244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
7619244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
762afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
763afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
764a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
765afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
766afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
767afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
768afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
769b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
77014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
77114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
77214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
773ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
774b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
775b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setIcon(android.R.drawable.ic_dialog_alert)
776b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
777b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
77824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
77914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
780b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
781ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                Settings.Secure.putInt(getActivity().getContentResolver(),
782ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        Settings.Secure.ADB_ENABLED, 0);
783b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
784afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
785ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.System.putInt(getActivity().getContentResolver(),
786ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.System.STAY_ON_WHILE_PLUGGED_IN,
787afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
788afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
789afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
790ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
791ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
792afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
7939244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
7949244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            startActivityForResult(new Intent(getActivity(), AppPicker.class), RESULT_DEBUG_APP);
7959244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
7969244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
797eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
798eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
799eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
800eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
801f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
802f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
803eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
804e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
805e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
806e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
807eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
808eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
809eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
810eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
811d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
812d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
8130c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
8140c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
815c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mTrackFrameTime) {
816c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeTrackFrameTimeOptions();
817c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
818c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
819c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
820c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
821afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
82224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
823afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
824afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
825b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
82683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
82783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
82883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
82983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
83083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
83187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
83283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
83383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
83483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
83583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
83683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
83783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
838b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
839b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
840b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
84183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
84234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (preference == mEnableTracesPref) {
84334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            writeEnableTracesOptions();
84434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            return true;
84583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
84683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
84783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
84883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
84983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
85083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
85183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
85214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
85314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
85414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
85514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
85614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
85714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
85814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
85914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
86014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
86124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
86224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
863b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
86414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
86514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
86614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
86714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                Settings.Secure.putInt(getActivity().getContentResolver(),
86814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                        Settings.Secure.ADB_ENABLED, 1);
86914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
87014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
87114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
87214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
87314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
87414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
87514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
87614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                Settings.Secure.putInt(getActivity().getContentResolver(),
87714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                        Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
87814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mLastEnabledState = true;
87914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                setPrefsEnabledState(mLastEnabledState);
88014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
88114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
88214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
88314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
884b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
885b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
886b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
887b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
888b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
88914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
89014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
89114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
89214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
89314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
89414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
89514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
89614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
89714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
89814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
899b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
900b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
90124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
90224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
90324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
90414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
90524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
90624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
90787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
90887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
90987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
91087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
91187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
91287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
91387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
91487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
91587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
91687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
91787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            String[] services;
91887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            try {
91987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                services = ServiceManager.listServices();
92087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            } catch (RemoteException e) {
92187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                return null;
92287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
92387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
92487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
92587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
92687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
92787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
92887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
92987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
93087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
93187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
93287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
93387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
93487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
93587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
93687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
937afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
938