DevelopmentSettings.java revision 075cb30d4ce12805f43ae71cee27b8f0cdbc0149
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
19caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport static android.Manifest.permission.READ_EXTERNAL_STORAGE;
2014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
2114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.ActionBar;
2214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.Activity;
23eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.app.ActivityManagerNative;
24caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.app.ActivityThread;
25b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
27caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.app.DialogFragment;
28f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport android.app.admin.DevicePolicyManager;
29fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.app.backup.IBackupManager;
30ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver;
31fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.content.Context;
32b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
33caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.content.DialogInterface.OnClickListener;
34eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.content.Intent;
359244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackbornimport android.content.pm.ApplicationInfo;
36498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.PackageManager;
3787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
39f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
41eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
42eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
43eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
44eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
45eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
46f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
4734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.os.Trace;
48f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
49f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
5034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.preference.MultiCheckPreference;
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
52caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.preference.Preference.OnPreferenceChangeListener;
53ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment;
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
56eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
5714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.view.Gravity;
58c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.HardwareRenderer;
59eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
60c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
6114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.CompoundButton;
6214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
64caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport java.util.ArrayList;
65f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport java.util.HashSet;
66caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
70ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
71f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
7214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
77f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
78f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
79caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
80fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
810c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
822d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
849244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
859244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
86eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
87eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
88f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
89eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
90e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
91eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
920c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
93c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
94c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
95cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
96098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw";
97c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
98eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
99eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
100b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
101b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
102eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
10334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private static final String ENABLE_TRACES_KEY = "enable_traces";
10434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
105eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
106eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
107eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
108eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
109d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
110d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
111caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
112caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1139244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
1149244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
115eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
116fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
117f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private DevicePolicyManager mDpm;
118eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
11914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Switch mEnabledSwitch;
12014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mLastEnabledState;
12134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
12287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
12314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
1252d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private CheckBoxPreference mBugreportInPower;
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
127caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private CheckBoxPreference mEnforceReadExternal;
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
129fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1319244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
1329244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
1339244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private CheckBoxPreference mWaitForDebugger;
1349244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
136eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
137f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
138eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
139e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private CheckBoxPreference mDisableOverlays;
140eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
1410c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
142c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mTrackFrameTime;
143c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mShowHwScreenUpdates;
144cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private CheckBoxPreference mShowHwLayersUpdates;
145098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private CheckBoxPreference mShowHwOverdraw;
146c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mDebugLayout;
147eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
148eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
149b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
150b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private ListPreference mOverlayDisplayDevices;
15134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private MultiCheckPreference mEnableTracesPref;
152eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
153eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
154eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
155eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
156d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
157d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
15814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
15914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<CheckBoxPreference> mResetCbPrefs
16014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            = new ArrayList<CheckBoxPreference>();
161b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
162f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
163f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
16414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
16514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
16614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
16714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
16824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
170ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
173eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
174fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
175fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
176f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
177eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
180c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
1812d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY);
182c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
183caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
184c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
185fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
18614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
187f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
1889244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
1899244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
190c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY);
191c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mStrictMode = findAndInitCheckboxPref(STRICT_MODE_KEY);
192c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mPointerLocation = findAndInitCheckboxPref(POINTER_LOCATION_KEY);
193c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowTouches = findAndInitCheckboxPref(SHOW_TOUCHES_KEY);
194c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
195c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
196c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
197c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
198c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
199c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
200cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
201098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
202c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
203eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
20414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mWindowAnimationScale);
20583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mWindowAnimationScale.setOnPreferenceChangeListener(this);
206eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
20714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mTransitionAnimationScale);
20883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mTransitionAnimationScale.setOnPreferenceChangeListener(this);
209b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
21014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAnimatorDurationScale);
211b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale.setOnPreferenceChangeListener(this);
212b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices = (ListPreference) findPreference(OVERLAY_DISPLAY_DEVICES_KEY);
213b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mAllPrefs.add(mOverlayDisplayDevices);
214b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setOnPreferenceChangeListener(this);
21534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
21634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] traceValues = new String[Trace.TRACE_TAGS.length];
21734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
21834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            traceValues[i] = Integer.toString(1<<i);
21934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
22034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntries(Trace.TRACE_TAGS);
22134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntryValues(traceValues);
22234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mAllPrefs.add(mEnableTracesPref);
22334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setOnPreferenceChangeListener(this);
224eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
225eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
226eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
22714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
22814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mImmediatelyDestroyActivities);
229eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
23014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAppProcessLimit);
23183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mAppProcessLimit.setOnPreferenceChangeListener(this);
232eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
233d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
234d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
23514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
23614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mShowAllANRs);
237d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
23814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
23914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
24014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
24114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2424f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
243f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
244f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
245c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference findAndInitCheckboxPref(String key) {
246c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
247c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
248c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
249c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
250c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
251c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mResetCbPrefs.add(pref);
252c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
253c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
254c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
25514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
25614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
25714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
25814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
25914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
26014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch = new Switch(activity);
26114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
26214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final int padding = activity.getResources().getDimensionPixelSize(
26314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                R.dimen.action_bar_switch_padding);
26414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setPadding(0, 0, padding, 0);
26514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setOnCheckedChangeListener(this);
26614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
26714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
26814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
26914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStart() {
27014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStart();
27114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
27214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
27314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.DISPLAY_SHOW_CUSTOM);
27414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
27514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
27614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
27779d8e80a304922c34a6bd344f1fa49dd7dfd106dFabrice Di Meglio                Gravity.CENTER_VERTICAL | Gravity.END));
27814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
27914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
28014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
28114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStop() {
28214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStop();
28314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
28414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
28514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(null);
28614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
28714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
288f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
289f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
290f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
291f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
292f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
293f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
29414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAllPrefs.remove(hdcpChecking);
295f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
296f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
29914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
300c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
301f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            Preference pref = mAllPrefs.get(i);
302f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
30314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3049244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
30514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
30614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
308ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
31050cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
311f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        if (mDpm.getMaximumTimeToLock(null) > 0) {
312f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // A DeviceAdmin has specified a maximum time until the device
313f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // will lock...  in this case we can't allow the user to turn
314f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // on "stay awake when plugged in" because that would defeat the
315f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // restriction.
316f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.add(mKeepScreenOn);
317f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        } else {
318f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.remove(mKeepScreenOn);
319f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        }
320f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
321ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
3225a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        mLastEnabledState = Settings.Global.getInt(cr,
3235a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
32414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setChecked(mLastEnabledState);
32514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        setPrefsEnabledState(mLastEnabledState);
32634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
32734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (mHaveDebugSettings && !mLastEnabledState) {
32834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
32934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
33034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
33134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
3325a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
3335a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
33434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mLastEnabledState = true;
33534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            setPrefsEnabledState(mLastEnabledState);
33634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
33734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
33834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
33934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
34034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        checkBox.setChecked(value);
34134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
34214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
34314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
34414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
345caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final Context context = getActivity();
346caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final ContentResolver cr = context.getContentResolver();
34734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
3485a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mEnableAdb, Settings.Global.getInt(cr,
3495a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.ADB_ENABLED, 0) != 0);
3502d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr,
3512d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0);
3525a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr,
3535a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
354cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE));
35534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
357f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
358fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
3599244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
360eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
361eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
362f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
363eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
364eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
3650c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
366c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
367c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
368cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateShowHwLayersUpdatesOptions();
369098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateShowHwOverdrawOptions();
370c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
371eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
372b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
37334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
374eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
375eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
376d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
377f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
378f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
37914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
38087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
38114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        for (int i=0; i<mResetCbPrefs.size(); i++) {
38214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            CheckBoxPreference cb = mResetCbPrefs.get(i);
38314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
38414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
38514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                onPreferenceTreeClick(null, cb);
38614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
38714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3889244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
38914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
39014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
39114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
392b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        writeOverlayDisplayDevicesOptions(null);
39334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(0);
39414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
39534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
39614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
39787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
39887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
39914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
40014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
401f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
402f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
403f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
404f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
405f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
406f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
407f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
408f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
409f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
410f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
411f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
412f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
413f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
414f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
415f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
416f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
417f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
420fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
421fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
422fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
423fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
424fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
425fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
426fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
427fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
428fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
429fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
430fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
431fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
4329244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
4339244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
4349244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
4359244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp, mWaitForDebugger.isChecked(), true);
4369244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
4379244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4389244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
440c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
4419244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
4429244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
4439244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
4449244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
4459244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4469244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4479244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
4489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
4499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugApp = Settings.System.getString(
4509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.DEBUG_APP);
45134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mWaitForDebugger, Settings.System.getInt(
4529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.WAIT_FOR_DEBUGGER, 0) != 0);
4539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
4549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
4559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
4569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
4579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
4589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
4599244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
4609244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
4619244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
4629244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
4639244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
4649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
46534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
4669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
4679244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
4689244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
4699244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4709244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4719244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
472eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
473eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
474eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
475eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
476eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
477c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
478eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
479eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
480eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
481eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
482eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
483eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
484eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
485eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
486eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
487eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
488eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
489eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
490eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
491eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
492eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
493eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
49434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
495eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
496eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
497eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
498eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
499eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
500eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
501eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
502eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
50334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
504eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
505eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
506eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
507f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
508f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
509f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
510f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
511f40770096fe75180fba679ed349a63d195729c0cJeff Brown
512f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
51334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
514f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
515f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
516f40770096fe75180fba679ed349a63d195729c0cJeff Brown
517eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
518eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
519eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
520eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
521eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
522eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
523eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
524eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
525eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
526eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
527eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
528eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
529eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
530eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
53134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mShowScreenUpdates, showUpdates != 0);
532eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
533eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
534e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
53534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mDisableOverlays, disableOverlays != 0);
536eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
537eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
538eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
539eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
540eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
541eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
542eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
543e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
544eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
545eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
546eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
547eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
548eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
549e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
550e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
551eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
552eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
553eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
554eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
555eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
556eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
557eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
558eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
559eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
560e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
561e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
562e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
563e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
564e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
565e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
566e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
567e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
568e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
569e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
570e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
571e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
572e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
573e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
574e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
575e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
576e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
5770c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
57834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
5790c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
5800c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
5810c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
5820c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
58387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
5840c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
5850c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
586c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
58734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mTrackFrameTime,
588c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
589c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
590c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
591c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeTrackFrameTimeOptions() {
592c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
593c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mTrackFrameTime.isChecked() ? "true" : "false");
59487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
595c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
596c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
597c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
59834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowHwScreenUpdates,
599c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
600c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
601c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
602c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
603c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
604cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : null);
605cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        pokeSystemProperties();
606cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
607cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
608cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void updateShowHwLayersUpdatesOptions() {
609cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mShowHwLayersUpdates, SystemProperties.getBoolean(
610cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
611cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
612cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
613cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void writeShowHwLayersUpdatesOptions() {
614cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
615cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwLayersUpdates.isChecked() ? "true" : null);
61687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
617c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
618c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
619098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void updateShowHwOverdrawOptions() {
620098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean(
621098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false));
622098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
623098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
624098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void writeShowHwOverdrawOptions() {
625098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY,
626098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                mShowHwOverdraw.isChecked() ? "true" : null);
627098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        pokeSystemProperties();
628098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
629098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
630c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
63134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mDebugLayout,
632c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
633c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
634c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
635c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
636c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
637c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
63887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
639c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
640c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
641eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
64234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowCpuUsage, Settings.System.getInt(getActivity().getContentResolver(),
643eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, 0) != 0);
644eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
6450c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
646eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
647eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
648eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
649eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, value ? 1 : 0);
650eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
651c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
652eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
653eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
654eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
655eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
656eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
657eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
658eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
659eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
660eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
661eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
662eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
663eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
664eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
665eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
666eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
667eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
66834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mImmediatelyDestroyActivities, Settings.System.getInt(
669eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
670eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
671eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
672eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
673eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
674eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
67534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
67634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
67734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
678eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
679eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
680eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
681eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
682eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
68383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
684eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
685eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
686eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
687eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
68883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
689eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
690eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
691eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
692eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
693eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
694eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
695eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
696b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
697eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
698eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
69983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
700eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
70114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
702eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
703c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
704eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
705eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
706eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
707eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
708b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void updateOverlayDisplayDevicesOptions() {
709075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        String value = Settings.Global.getString(getActivity().getContentResolver(),
710075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES);
711b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        if (value == null) {
712b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            value = "";
713b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
714b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
715b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
716b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        for (int i = 0; i < values.length; i++) {
717b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            if (value.contentEquals(values[i])) {
718b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setValueIndex(i);
719b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
720b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                return;
721b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            }
722b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
723b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setValueIndex(0);
724b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
725b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
726b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
727b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void writeOverlayDisplayDevicesOptions(Object newValue) {
728075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        Settings.Global.putString(getActivity().getContentResolver(),
729075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES, (String)newValue);
730b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
731b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
732b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
733eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
734eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
735eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
736eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
737eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
738eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
739eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
74034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
74134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
74234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
743eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
74483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
745eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
746eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
747eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
748eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
74983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
750eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
751eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
752eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
753eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
75483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
755eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
75614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
757eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
758c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
759eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
760eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
761eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
762eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
763d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
764d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
765d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
766d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
767d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
768d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
769d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
77034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
771d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
772d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
773d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
77434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void updateEnableTracesOptions() {
77534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long flags = SystemProperties.getLong(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS, 0);
77634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
77734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        int numSet = 0;
77834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
77934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            boolean set = (flags&(1<<i)) != 0;
78034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setValue(i-Trace.TRACE_FLAGS_START_BIT, set);
78134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (set) {
78234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                numSet++;
78334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
78434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
78534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (numSet == 0) {
78634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_none);
78734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (numSet == values.length) {
78834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
78934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_all);
79034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else {
79134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
79234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(getString(R.string.enable_traces_summary_num, numSet));
79334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
79434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
79534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
79634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions() {
79734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long value = 0;
79834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
79934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
80034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (mEnableTracesPref.getValue(i-Trace.TRACE_FLAGS_START_BIT)) {
80134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                value |= 1<<i;
80234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
80334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
80434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(value);
80534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        // Make sure summary is updated.
80634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
80734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
80834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
80934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions(long value) {
81034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        SystemProperties.set(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS,
81134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                "0x" + Long.toString(value, 16));
81287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
81334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
81434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
815afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
81614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
81714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (buttonView == mEnabledSwitch) {
81814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (isChecked != mLastEnabledState) {
81914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (isChecked) {
82014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mDialogClicked = false;
82114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    if (mEnableDialog != null) dismissDialogs();
82214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
82314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            getActivity().getResources().getString(
82414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                                    R.string.dev_settings_warning_message))
82514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setTitle(R.string.dev_settings_warning_title)
826c8272b075275f81ddfb9cef2f92514b7ce3365deBjörn Lundén                            .setIconAttribute(android.R.attr.alertDialogIcon)
82714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setPositiveButton(android.R.string.yes, this)
82814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setNegativeButton(android.R.string.no, this)
82914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .show();
83014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog.setOnDismissListener(this);
83114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                } else {
83214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    resetDangerousOptions();
8335a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.putInt(getActivity().getContentResolver(),
8345a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
83514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mLastEnabledState = isChecked;
83614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    setPrefsEnabledState(mLastEnabledState);
83714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                }
83814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
83914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
84014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
84114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
84214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
8439244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
8449244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
8459244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
8469244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
8479244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
8489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
8499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
8509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
8519244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
8529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
8539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
8549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
8559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
856afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
857afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
858a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
859afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
860afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
861afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
862afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
863b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
86414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
86514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
86614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
867ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
868b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
869e7c53b1c9e48c6f997c47a0ca9a2f190ecbbf586Björn Lundén                        .setIconAttribute(android.R.attr.alertDialogIcon)
870b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
871b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
87224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
87314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
874b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
8755a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
8765a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 0);
877b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
8782d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        } else if (preference == mBugreportInPower) {
8792d803a3931797891a30158c1a912ce775049f974Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
8802d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    Settings.Secure.BUGREPORT_IN_POWER_MENU,
8812d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    mBugreportInPower.isChecked() ? 1 : 0);
882afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
8835a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
8845a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
885afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
886afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
887caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } else if (preference == mEnforceReadExternal) {
888caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            if (mEnforceReadExternal.isChecked()) {
889caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                ConfirmEnforceFragment.show(this);
890caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            } else {
891caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
892caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            }
893afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
894ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
895ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
896afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
8979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
8989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            startActivityForResult(new Intent(getActivity(), AppPicker.class), RESULT_DEBUG_APP);
8999244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
9009244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
901eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
902eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
903eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
904eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
905f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
906f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
907eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
908e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
909e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
910e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
911eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
912eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
913eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
914eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
915d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
916d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
9170c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
9180c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
919c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mTrackFrameTime) {
920c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeTrackFrameTimeOptions();
921c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
922c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
923cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        } else if (preference == mShowHwLayersUpdates) {
924cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            writeShowHwLayersUpdatesOptions();
925098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        } else if (preference == mShowHwOverdraw) {
926098f493dba656dea272dc7015363321dbb32f3a8Romain Guy            writeShowHwOverdrawOptions();
927c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
928c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
929afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
93024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
931afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
932afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
933b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
93483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
93583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
93683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
93783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
93883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
93987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
94083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
94183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
94283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
94383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
94483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
94583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
946b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
947b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
948b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
94983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
950b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        } else if (preference == mOverlayDisplayDevices) {
951b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            writeOverlayDisplayDevicesOptions(newValue);
952b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            return true;
95334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (preference == mEnableTracesPref) {
95434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            writeEnableTracesOptions();
95534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            return true;
95683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
95783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
95883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
95983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
96083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
96183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
96283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
96314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
96414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
96514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
96614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
96714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
96814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
96914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
97014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
97114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
97224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
97324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
974b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
97514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
97614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
97714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
9785a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
9795a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 1);
98014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
98114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
98214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
98314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
98414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
98514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
98614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
9875a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
9885a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
98914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mLastEnabledState = true;
99014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                setPrefsEnabledState(mLastEnabledState);
99114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
99214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
99314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
99414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
995b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
996b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
997b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
998b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
999b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
100014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
100114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
100214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
100314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
100414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
100514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
100614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
100714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
100814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
100914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
1010b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1011b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
101224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
101324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
101424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
101514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
101624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
101724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
101887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
101987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
102087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
1021cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            //noinspection unchecked
102287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
102387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
102487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
102587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
102687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
102787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
102887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
102987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            String[] services;
103087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            try {
103187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                services = ServiceManager.listServices();
103287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            } catch (RemoteException e) {
103387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                return null;
103487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
103587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
103687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
103787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
103887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
103987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
104087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
104187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
104287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
104387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
104487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
104587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
104687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
104787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
104887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
1049caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1050caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    /**
1051cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy     * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}.
1052caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey     */
1053caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    public static class ConfirmEnforceFragment extends DialogFragment {
1054caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public static void show(DevelopmentSettings parent) {
1055caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
1056caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.setTargetFragment(parent, 0);
1057caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
1058caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1059caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1060caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        @Override
1061caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public Dialog onCreateDialog(Bundle savedInstanceState) {
1062caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final Context context = getActivity();
1063caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1064caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
1065caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setTitle(R.string.enforce_read_external_confirm_title);
1066caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setMessage(R.string.enforce_read_external_confirm_message);
1067caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1068caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
1069caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1070caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1071caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
1072caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1073caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1074caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1075caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
1076caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1077caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1078caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1079caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1080caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1081caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1082caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            return builder.create();
1083caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1084caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1085caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1086cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static boolean isPermissionEnforced(String permission) {
1087caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1088cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            return ActivityThread.getPackageManager().isPermissionEnforced(permission);
1089caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1090caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1091caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1092caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1093caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1094caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static void setPermissionEnforced(
1095caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            Context context, String permission, boolean enforced) {
1096caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1097caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            // TODO: offload to background thread
1098caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            ActivityThread.getPackageManager()
1099caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
1100caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1101caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1102caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1103caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1105