DevelopmentSettings.java revision 70618480d95b0c0b9a8a55d47f9233b2111b4c6f
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;
37f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport android.content.pm.ResolveInfo;
3887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
40f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
42eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
43eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
44eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
45eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
46eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
47f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
4834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.os.Trace;
4948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasaniimport android.os.UserHandle;
50f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
51f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
5234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.preference.MultiCheckPreference;
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
54caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.preference.Preference.OnPreferenceChangeListener;
55ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment;
56f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport android.preference.PreferenceGroup;
57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
59eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
60d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackbornimport android.util.Log;
6114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.view.Gravity;
62c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.HardwareRenderer;
63eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
64c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
6514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.CompoundButton;
6614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
68caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport java.util.ArrayList;
69f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport java.util.HashSet;
70f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport java.util.List;
71caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
75ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
76f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
7714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
79caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
80caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Preference file were development settings prefs are stored.
81caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
82caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_FILE = "development";
83caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
84caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
85caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Whether to show the development settings to the user.  Default is false.
86caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
87caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_SHOW = "show";
88caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
92f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
93f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
94caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
95fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
960c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
976a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
982817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private static final String BUGREPORT = "bugreport";
992d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
100025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1029244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
1039244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
104f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String VERIFY_APPS_OVER_USB_KEY = "verify_apps_over_usb";
105eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
106eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
107f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
108eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
109e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
110eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
1110c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
1126a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String FORCE_MSAA_KEY = "force_msaa";
113c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
114c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
115cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
116098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw";
117c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
118eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
119eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
120b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
121b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
122f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
123025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private static final String OPENGL_TRACES_KEY = "enable_opengl_traces";
124eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
12534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private static final String ENABLE_TRACES_KEY = "enable_traces";
12634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
127eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
128eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
129eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
130eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
131d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
132d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
133caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
134caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
135f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
136f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
1379244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
1389244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
139eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
140fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
141f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private DevicePolicyManager mDpm;
142eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
14314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Switch mEnabledSwitch;
14414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mLastEnabledState;
14534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
14687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
14714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
1492817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private Preference mBugreport;
1502d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private CheckBoxPreference mBugreportInPower;
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
152caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private CheckBoxPreference mEnforceReadExternal;
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
154fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
1579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
1589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private CheckBoxPreference mWaitForDebugger;
159f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private CheckBoxPreference mVerifyAppsOverUsb;
1609244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
161eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
162eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
163f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
164eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
165e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private CheckBoxPreference mDisableOverlays;
166eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
1670c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
1686a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private CheckBoxPreference mForceMsaa;
169c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mShowHwScreenUpdates;
170cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private CheckBoxPreference mShowHwLayersUpdates;
171098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private CheckBoxPreference mShowHwOverdraw;
172c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mDebugLayout;
17370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private ListPreference mTrackFrameTime;
174eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
175eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
176b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
177b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private ListPreference mOverlayDisplayDevices;
178025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private ListPreference mOpenGLTraces;
17934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private MultiCheckPreference mEnableTracesPref;
180eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
181eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
182eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
183eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
184d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
185d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
18614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
18714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<CheckBoxPreference> mResetCbPrefs
18814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            = new ArrayList<CheckBoxPreference>();
189b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
190f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
191f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
19214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
19314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
19414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
19514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
19624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
198ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
201eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
202fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
203fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
204f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
205eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
208c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
2092817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        mBugreport = findPreference(BUGREPORT);
2102d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY);
211c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
212caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
213c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
214fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
21514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
216f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
21748d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        if (!android.os.Process.myUserHandle().equals(UserHandle.OWNER)) {
21848d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mEnableAdb);
21948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mPassword);
22048d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
22148d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
2229244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
2239244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
224c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY);
225f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb = findAndInitCheckboxPref(VERIFY_APPS_OVER_USB_KEY);
226f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (!showVerifierSetting()) {
227f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
228f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                    findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
229f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (debugDebuggingCategory != null) {
230f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                debugDebuggingCategory.removePreference(mVerifyAppsOverUsb);
231f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            } else {
232f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
233f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
234f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
235c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mStrictMode = findAndInitCheckboxPref(STRICT_MODE_KEY);
236c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mPointerLocation = findAndInitCheckboxPref(POINTER_LOCATION_KEY);
237c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowTouches = findAndInitCheckboxPref(SHOW_TOUCHES_KEY);
238c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
239c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
240c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
241c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
2426a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY);
24370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime = (ListPreference) findPreference(TRACK_FRAME_TIME_KEY);
24470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mAllPrefs.add(mTrackFrameTime);
24570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setOnPreferenceChangeListener(this);
246c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
247cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
248098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
249c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
250eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
25114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mWindowAnimationScale);
25283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mWindowAnimationScale.setOnPreferenceChangeListener(this);
253eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
25414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mTransitionAnimationScale);
25583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mTransitionAnimationScale.setOnPreferenceChangeListener(this);
256b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
25714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAnimatorDurationScale);
258b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale.setOnPreferenceChangeListener(this);
259b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices = (ListPreference) findPreference(OVERLAY_DISPLAY_DEVICES_KEY);
260b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mAllPrefs.add(mOverlayDisplayDevices);
261b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setOnPreferenceChangeListener(this);
262025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces = (ListPreference) findPreference(OPENGL_TRACES_KEY);
263025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mAllPrefs.add(mOpenGLTraces);
264025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces.setOnPreferenceChangeListener(this);
26534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
26634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] traceValues = new String[Trace.TRACE_TAGS.length];
26734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
26834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            traceValues[i] = Integer.toString(1<<i);
26934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
27034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntries(Trace.TRACE_TAGS);
27134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntryValues(traceValues);
27234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mAllPrefs.add(mEnableTracesPref);
27334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setOnPreferenceChangeListener(this);
274eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
275eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
276eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
27714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
27814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mImmediatelyDestroyActivities);
279eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
28014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAppProcessLimit);
28183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mAppProcessLimit.setOnPreferenceChangeListener(this);
282eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
283d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
284d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
28514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
28614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mShowAllANRs);
287d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
28814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
28914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
29014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
29114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2924f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
293f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
294f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
29548d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    private void disableForUser(Preference pref) {
29648d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        if (pref != null) {
29748d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            pref.setEnabled(false);
29848d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            mDisabledPrefs.add(pref);
29948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
30048d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    }
30148d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
302c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference findAndInitCheckboxPref(String key) {
303c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
304c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
305c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
306c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
307c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
308c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mResetCbPrefs.add(pref);
309c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
310c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
311c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
31214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
31314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
31414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
31514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
31614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
31714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch = new Switch(activity);
31814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
31914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final int padding = activity.getResources().getDimensionPixelSize(
32014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                R.dimen.action_bar_switch_padding);
32114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setPadding(0, 0, padding, 0);
32214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setOnCheckedChangeListener(this);
32314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
32414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
32514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
32614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStart() {
32714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStart();
32814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
32914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
33014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.DISPLAY_SHOW_CUSTOM);
33114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
33214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
33314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
33479d8e80a304922c34a6bd344f1fa49dd7dfd106dFabrice Di Meglio                Gravity.CENTER_VERTICAL | Gravity.END));
33514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
33614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
33714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
33814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStop() {
33914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStop();
34014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
34114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
34214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(null);
34314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
34414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
345f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
346f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
347f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
348f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
349f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
350f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
35114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAllPrefs.remove(hdcpChecking);
352f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
353f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
35614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
357c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
358f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            Preference pref = mAllPrefs.get(i);
359f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
36014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3619244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
36214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
36314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
365ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
36750cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
368f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        if (mDpm.getMaximumTimeToLock(null) > 0) {
369f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // A DeviceAdmin has specified a maximum time until the device
370f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // will lock...  in this case we can't allow the user to turn
371f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // on "stay awake when plugged in" because that would defeat the
372f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // restriction.
373f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.add(mKeepScreenOn);
374f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        } else {
375f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.remove(mKeepScreenOn);
376f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        }
377f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
378ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
3795a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        mLastEnabledState = Settings.Global.getInt(cr,
3805a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
38114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setChecked(mLastEnabledState);
38214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        setPrefsEnabledState(mLastEnabledState);
38334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
38434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (mHaveDebugSettings && !mLastEnabledState) {
38534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
38634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
38734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
38834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
3895a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
3905a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
39134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mLastEnabledState = true;
392caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn            mEnabledSwitch.setChecked(mLastEnabledState);
39334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            setPrefsEnabledState(mLastEnabledState);
39434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
39534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
39634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
39734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
39834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        checkBox.setChecked(value);
39934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
40014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
40114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
40214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
403caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final Context context = getActivity();
404caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final ContentResolver cr = context.getContentResolver();
40534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
4065a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mEnableAdb, Settings.Global.getInt(cr,
4075a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.ADB_ENABLED, 0) != 0);
4082d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr,
4092d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0);
4105a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr,
4115a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
412cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE));
41334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
415f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
416fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
4179244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
418eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
419eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
420f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
421eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
422eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
4230c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
4246a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        updateMsaaOptions();
425c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
426c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
427cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateShowHwLayersUpdatesOptions();
428098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateShowHwOverdrawOptions();
429c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
430eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
431b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
432025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        updateOpenGLTracesOptions();
43334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
434eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
435eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
436d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
437f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateVerifyAppsOverUsbOptions();
4382817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        updateBugreportOptions();
439f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
440f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
44114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
44287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
44314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        for (int i=0; i<mResetCbPrefs.size(); i++) {
44414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            CheckBoxPreference cb = mResetCbPrefs.get(i);
44514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
44614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
44714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                onPreferenceTreeClick(null, cb);
44814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
44914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
4509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
45114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
45214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
45314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
454b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        writeOverlayDisplayDevicesOptions(null);
45534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(0);
45614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
45734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
45814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
45987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
46087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
46114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
46214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
463f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
464f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
465f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
466f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
467f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
468f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
469f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
470f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
471f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
472f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
473f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
474f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
475f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
476f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
477f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
478f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
479f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
480afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
481afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
482fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
483fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
484fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
485fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
486fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
487fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
488fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
489fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
490fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
491fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
492fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
493fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
4949244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
4959244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
4969244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
4979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp, mWaitForDebugger.isChecked(), true);
4989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
4999244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5009244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5019244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
502c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
5039244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
5049244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
5059244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
5069244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
5079244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5089244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5099244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
5109244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
511860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        mDebugApp = Settings.Global.getString(
512860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.DEBUG_APP);
513860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mWaitForDebugger, Settings.Global.getInt(
514860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.WAIT_FOR_DEBUGGER, 0) != 0);
5159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
5169244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
5179244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
5189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
5199244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
5209244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
5219244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
5229244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
5239244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
5249244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
5259244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
5269244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
52734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
5289244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
5299244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
5309244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
5319244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5329244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5339244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
534f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void updateVerifyAppsOverUsbOptions() {
535f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateCheckBox(mVerifyAppsOverUsb, Settings.Global.getInt(getActivity().getContentResolver(),
536f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) != 0);
537f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb.setEnabled(enableVerifierSetting());
538f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
539f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
540f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void writeVerifyAppsOverUsbOptions() {
541f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        Settings.Global.putInt(getActivity().getContentResolver(),
542f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings              Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, mVerifyAppsOverUsb.isChecked() ? 1 : 0);
543f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
544f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
545f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean enableVerifierSetting() {
546f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        final ContentResolver cr = getActivity().getContentResolver();
547f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
548f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
549f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
550f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 0) {
551f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
552f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else {
553f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final PackageManager pm = getActivity().getPackageManager();
554f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
555f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.setType(PACKAGE_MIME_TYPE);
556f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
557f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final List<ResolveInfo> receivers = pm.queryBroadcastReceivers(verification, 0);
558f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (receivers.size() == 0) {
559f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                return false;
560f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
561f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
562f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return true;
563f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
564f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
565f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean showVerifierSetting() {
566f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return Settings.Global.getInt(getActivity().getContentResolver(),
567f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
568f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
569f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
5702817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private void updateBugreportOptions() {
5712817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        if ("user".equals(Build.TYPE)) {
5722817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            final ContentResolver resolver = getActivity().getContentResolver();
5732817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            final boolean adbEnabled = Settings.Global.getInt(
5742817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                    resolver, Settings.Global.ADB_ENABLED, 0) != 0;
5752817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            if (adbEnabled) {
5762817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreport.setEnabled(true);
5772817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setEnabled(true);
5782817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            } else {
5792817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreport.setEnabled(false);
5802817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setEnabled(false);
5812817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setChecked(false);
5822817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                Settings.Secure.putInt(resolver, Settings.Secure.BUGREPORT_IN_POWER_MENU, 0);
5832817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            }
5842817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        } else {
5852817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            mBugreportInPower.setEnabled(true);
5862817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        }
5872817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    }
5882817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey
589eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
590eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
591eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
592eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
593eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
594c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
595eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
596eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
597eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
598eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
599eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
600eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
601eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
602eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
603eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
604eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
605eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
606eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
607eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
608eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
609eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
610eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
61134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
612eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
613eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
614eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
615eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
616eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
617eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
618eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
619eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
62034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
621eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
622eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
623eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
624f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
625f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
626f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
627f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
628f40770096fe75180fba679ed349a63d195729c0cJeff Brown
629f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
63034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
631f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
632f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
633f40770096fe75180fba679ed349a63d195729c0cJeff Brown
634eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
635eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
636eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
637eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
638eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
639eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
640eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
641eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
642eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
643eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
644eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
645eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
646eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
647eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
64834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mShowScreenUpdates, showUpdates != 0);
649eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
650eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
651e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
65234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mDisableOverlays, disableOverlays != 0);
653eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
654eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
655eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
656eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
657eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
658eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
659eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
660e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
661eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
662eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
663eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
664eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
665eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
666e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
667e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
668eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
669eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
670eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
671eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
672eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
673eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
674eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
675eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
676eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
677e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
678e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
679e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
680e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
681e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
682e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
683e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
684e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
685e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
686e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
687e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
688e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
689e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
690e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
691e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
692e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
693e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
6940c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
69534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
6960c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
6970c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
6980c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
6990c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
70087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
7010c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
7020c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
7036a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void updateMsaaOptions() {
7046a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        updateCheckBox(mForceMsaa, SystemProperties.getBoolean(MSAA_PROPERTY, false));
7056a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
7066a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
7076a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void writeMsaaOptions() {
7086a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        SystemProperties.set(MSAA_PROPERTY, mForceMsaa.isChecked() ? "true" : "false");
7096a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        pokeSystemProperties();
7106a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
7116a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
712c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
71370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        String value = SystemProperties.get(HardwareRenderer.PROFILE_PROPERTY);
71470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        if (value == null) {
71570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            value = "";
71670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
71770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy
71870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        CharSequence[] values = mTrackFrameTime.getEntryValues();
71970618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        for (int i = 0; i < values.length; i++) {
72070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            if (value.contentEquals(values[i])) {
72170618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setValueIndex(i);
72270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
72370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                return;
72470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            }
72570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
72670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setValueIndex(0);
72770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
728c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
729c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
73070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private void writeTrackFrameTimeOptions(Object newValue) {
731c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
73270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                newValue == null ? "" : newValue.toString());
73387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
73470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        updateTrackFrameTimeOptions();
735c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
736c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
737c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
73834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowHwScreenUpdates,
739c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
740c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
741c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
742c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
743c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
744cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : null);
745cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        pokeSystemProperties();
746cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
747cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
748cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void updateShowHwLayersUpdatesOptions() {
749cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mShowHwLayersUpdates, SystemProperties.getBoolean(
750cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
751cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
752cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
753cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void writeShowHwLayersUpdatesOptions() {
754cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
755cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwLayersUpdates.isChecked() ? "true" : null);
75687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
757c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
758c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
759098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void updateShowHwOverdrawOptions() {
760098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean(
761098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false));
762098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
763098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
764098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void writeShowHwOverdrawOptions() {
765098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY,
766098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                mShowHwOverdraw.isChecked() ? "true" : null);
767098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        pokeSystemProperties();
768098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
769098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
770c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
77134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mDebugLayout,
772c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
773c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
774c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
775c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
776c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
777c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
77887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
779c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
780c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
781eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
782860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(),
783860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                Settings.Global.SHOW_PROCESSES, 0) != 0);
784eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
7850c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
786eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
787eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
788860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        Settings.Global.putInt(getActivity().getContentResolver(),
789860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                Settings.Global.SHOW_PROCESSES, value ? 1 : 0);
790eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
791c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
792eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
793eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
794eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
795eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
796eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
797eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
798eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
799eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
800eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
801eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
802eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
803eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
804eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
805eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
806eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
807eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
808860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mImmediatelyDestroyActivities, Settings.Global.getInt(
809860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey            getActivity().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
810eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
811eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
812eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
813eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
814eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
81534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
81634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
81734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
818eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
819eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
820eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
821eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
822eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
82383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
824eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
825eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
826eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
827eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
82883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
829eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
830eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
831eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
832eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
833eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
834eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
835eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
836b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
837eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
838eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
83983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
840eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
84114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
842eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
843c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
844eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
845eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
846eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
847eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
848b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void updateOverlayDisplayDevicesOptions() {
849075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        String value = Settings.Global.getString(getActivity().getContentResolver(),
850075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES);
851b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        if (value == null) {
852b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            value = "";
853b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
854b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
855b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
856b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        for (int i = 0; i < values.length; i++) {
857b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            if (value.contentEquals(values[i])) {
858b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setValueIndex(i);
859b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
860b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                return;
861b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            }
862b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
863b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setValueIndex(0);
864b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
865b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
866b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
867b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void writeOverlayDisplayDevicesOptions(Object newValue) {
868075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        Settings.Global.putString(getActivity().getContentResolver(),
869075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES, (String)newValue);
870b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
871b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
872b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
873025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private void updateOpenGLTracesOptions() {
874025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        String value = SystemProperties.get(OPENGL_TRACES_PROPERTY);
875025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        if (value == null) {
876025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            value = "";
877025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        }
878025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
879025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        CharSequence[] values = mOpenGLTraces.getEntryValues();
880025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        for (int i = 0; i < values.length; i++) {
881025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            if (value.contentEquals(values[i])) {
882025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                mOpenGLTraces.setValueIndex(i);
883025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[i]);
884025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                return;
885025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            }
886025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        }
887025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces.setValueIndex(0);
888025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[0]);
889025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    }
890025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
891025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private void writeOpenGLTracesOptions(Object newValue) {
892025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        SystemProperties.set(OPENGL_TRACES_PROPERTY, newValue == null ? "" : newValue.toString());
893025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        pokeSystemProperties();
894025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        updateOpenGLTracesOptions();
895025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    }
896025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
897eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
898eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
899eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
900eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
901eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
902eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
903eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
90434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
90534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
90634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
907eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
90883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
909eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
910eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
911eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
912eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
91383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
914eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
915eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
916eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
917eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
91883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
919eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
92014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
921eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
922c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
923eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
924eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
925eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
926eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
927d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
928d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
929d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
930d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
931d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
932d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
933d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
93434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
935d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
936d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
937d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
93834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void updateEnableTracesOptions() {
93934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long flags = SystemProperties.getLong(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS, 0);
94034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
94134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        int numSet = 0;
94234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
94334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            boolean set = (flags&(1<<i)) != 0;
94434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setValue(i-Trace.TRACE_FLAGS_START_BIT, set);
94534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (set) {
94634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                numSet++;
94734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
94834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
94934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (numSet == 0) {
95034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_none);
95134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (numSet == values.length) {
95234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
95334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_all);
95434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else {
95534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
95634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(getString(R.string.enable_traces_summary_num, numSet));
95734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
95834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
95934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
96034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions() {
96134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long value = 0;
96234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
96334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
96434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (mEnableTracesPref.getValue(i-Trace.TRACE_FLAGS_START_BIT)) {
96534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                value |= 1<<i;
96634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
96734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
96834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(value);
96934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        // Make sure summary is updated.
97034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
97134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
97234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
97334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions(long value) {
97434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        SystemProperties.set(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS,
97534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                "0x" + Long.toString(value, 16));
97687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
97734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
97834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
979afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
98014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
98114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (buttonView == mEnabledSwitch) {
98214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (isChecked != mLastEnabledState) {
98314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (isChecked) {
98414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mDialogClicked = false;
98514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    if (mEnableDialog != null) dismissDialogs();
98614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
98714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            getActivity().getResources().getString(
98814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                                    R.string.dev_settings_warning_message))
98914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setTitle(R.string.dev_settings_warning_title)
990c8272b075275f81ddfb9cef2f92514b7ce3365deBjörn Lundén                            .setIconAttribute(android.R.attr.alertDialogIcon)
99114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setPositiveButton(android.R.string.yes, this)
99214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setNegativeButton(android.R.string.no, this)
99314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .show();
99414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog.setOnDismissListener(this);
99514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                } else {
99614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    resetDangerousOptions();
9975a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.putInt(getActivity().getContentResolver(),
9985a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
99914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mLastEnabledState = isChecked;
100014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    setPrefsEnabledState(mLastEnabledState);
100114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                }
100214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
100314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
100414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
100514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
100614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
10079244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
10089244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
10099244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
10109244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
10119244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
10129244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
10139244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
10149244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
10159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
10169244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
10179244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
10189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
10199244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
1020afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
1021afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1022a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
1023afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
1024afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1025afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1026afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
1027b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
102814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
102914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
103014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
1031ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
1032b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
1033e7c53b1c9e48c6f997c47a0ca9a2f190ecbbf586Björn Lundén                        .setIconAttribute(android.R.attr.alertDialogIcon)
1034b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
1035b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
103624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
103714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
1038b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
10395a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
10405a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 0);
1041f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
1042f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setChecked(false);
10432817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
1044b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
10452d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        } else if (preference == mBugreportInPower) {
10462d803a3931797891a30158c1a912ce775049f974Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
10472d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    Settings.Secure.BUGREPORT_IN_POWER_MENU,
10482d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    mBugreportInPower.isChecked() ? 1 : 0);
1049afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
10505a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
10515a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
1052afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
1053afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
1054caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } else if (preference == mEnforceReadExternal) {
1055caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            if (mEnforceReadExternal.isChecked()) {
1056caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                ConfirmEnforceFragment.show(this);
1057caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            } else {
1058caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
1059caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            }
1060afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
1061ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
1062ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
1063afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
10649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
10659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            startActivityForResult(new Intent(getActivity(), AppPicker.class), RESULT_DEBUG_APP);
10669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
10679244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
1068f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else if (preference == mVerifyAppsOverUsb) {
1069f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            writeVerifyAppsOverUsbOptions();
1070eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
1071eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
1072eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
1073eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
1074f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
1075f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
1076eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
1077e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
1078e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
1079e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
1080eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
1081eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
1082eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
1083eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
1084d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
1085d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
10860c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
10870c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
10886a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        } else if (preference == mForceMsaa) {
10896a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy            writeMsaaOptions();
1090c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
1091c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
1092cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        } else if (preference == mShowHwLayersUpdates) {
1093cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            writeShowHwLayersUpdatesOptions();
1094098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        } else if (preference == mShowHwOverdraw) {
1095098f493dba656dea272dc7015363321dbb32f3a8Romain Guy            writeShowHwOverdrawOptions();
1096c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
1097c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
1098afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
109924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
1101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
1102b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
110383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
110483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
110583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
110683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
110783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
110887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
110983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
111083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
111183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
111283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
111383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
111483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
1115b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
1116b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
1117b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
111883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
1119b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        } else if (preference == mOverlayDisplayDevices) {
1120b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            writeOverlayDisplayDevicesOptions(newValue);
1121b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            return true;
1122025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        } else if (preference == mOpenGLTraces) {
1123025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            writeOpenGLTracesOptions(newValue);
1124025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            return true;
112570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        } else if (preference == mTrackFrameTime) {
112670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            writeTrackFrameTimeOptions(newValue);
112770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            return true;
112834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (preference == mEnableTracesPref) {
112934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            writeEnableTracesOptions();
113034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            return true;
113183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
113283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
113383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
113483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
113583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
113683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
113783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
113814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
113914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
114014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
114114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
114214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
114314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
114414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
114514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
114614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
114724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
114824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1149b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
115014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
115114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
115214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
11535a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
11545a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 1);
1155f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(true);
1156f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                updateVerifyAppsOverUsbOptions();
11572817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
115814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
115914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
116014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
116114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
116214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
116314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
116414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
11655a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
11665a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
116714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mLastEnabledState = true;
116814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                setPrefsEnabledState(mLastEnabledState);
116914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
117014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
117114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
117214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
1173b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1174b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
1175b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
1176b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
1177b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
117814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
117914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
118014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
118114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
118214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
118314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
118414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
118514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
118614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
118714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
1188b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1189b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
119024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
119124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
119224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
119314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
119424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
119524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
119687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
119787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
119887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
1199cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            //noinspection unchecked
120087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
120187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
120287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
120387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
120487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
120587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
120687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
120787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            String[] services;
120887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            try {
120987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                services = ServiceManager.listServices();
121087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            } catch (RemoteException e) {
121187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                return null;
121287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
121387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
121487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
121587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
121687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
121787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
121887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
121987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
1220d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                    } catch (Exception e) {
1221d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                        Log.i("DevSettings", "Somone wrote a bad service '" + service
1222d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                                + "' that doesn't like to be poked: " + e);
122387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
122487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
122587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
122687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
122787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
122887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
122987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
1230caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1231caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    /**
1232cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy     * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}.
1233caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey     */
1234caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    public static class ConfirmEnforceFragment extends DialogFragment {
1235caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public static void show(DevelopmentSettings parent) {
1236caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
1237caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.setTargetFragment(parent, 0);
1238caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
1239caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1240caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1241caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        @Override
1242caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public Dialog onCreateDialog(Bundle savedInstanceState) {
1243caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final Context context = getActivity();
1244caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1245caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
1246caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setTitle(R.string.enforce_read_external_confirm_title);
1247caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setMessage(R.string.enforce_read_external_confirm_message);
1248caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1249caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
1250caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1251caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1252caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
1253caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1254caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1255caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1256caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
1257caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1258caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1259caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1260caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1261caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1262caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1263caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            return builder.create();
1264caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1265caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1266caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1267cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static boolean isPermissionEnforced(String permission) {
1268caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1269cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            return ActivityThread.getPackageManager().isPermissionEnforced(permission);
1270caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1271caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1272caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1273caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1274caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1275caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static void setPermissionEnforced(
1276caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            Context context, String permission, boolean enforced) {
1277caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1278caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            // TODO: offload to background thread
1279caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            ActivityThread.getPackageManager()
1280caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
1281caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1282caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1283caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1284caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1286