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;
380761ffca609244eac10dd9cba8dc126add060138Benoit Gobyimport android.hardware.usb.IUsbManager;
3987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
41f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
43eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
44eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
45eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
46eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
47eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
48f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
4948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasaniimport android.os.UserHandle;
50c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasaniimport android.os.UserManager;
51f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
52f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
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;
618dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Dukeimport android.webkit.WebViewFactory;
6214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.view.Gravity;
63c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.HardwareRenderer;
64eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
65c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
6614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.CompoundButton;
6714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
68c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasaniimport android.widget.TextView;
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
70caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport java.util.ArrayList;
71f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport java.util.HashSet;
72f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport java.util.List;
73caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
77ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
78f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
7914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
800761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private static final String TAG = "DevelopmentSettings";
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
82caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
83caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Preference file were development settings prefs are stored.
84caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
85caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_FILE = "development";
86caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
87caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
88caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Whether to show the development settings to the user.  Default is false.
89caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
90caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_SHOW = "show";
91caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
930761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private static final String CLEAR_ADB_KEYS = "clear_adb_keys";
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
96f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
97f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
98caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
99fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
1000c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
1016a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
1022817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private static final String BUGREPORT = "bugreport";
1032d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
104025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1069244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
1079244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
108f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String VERIFY_APPS_OVER_USB_KEY = "verify_apps_over_usb";
109eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
110eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
111f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
112eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
113e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
114eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
1150c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
1166a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String FORCE_MSAA_KEY = "force_msaa";
117c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
1186b24c458139091836486cce774a2e1255668e001Romain Guy    private static final String SHOW_NON_RECTANGULAR_CLIP_KEY = "show_non_rect_clip";
119c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
120cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
121098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw";
122c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
123eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
124eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
125b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
126b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
127f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
1289225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke    private static final String DEBUG_APPLICATIONS_CATEGORY_KEY = "debug_applications_category";
1299225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke
130025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private static final String OPENGL_TRACES_KEY = "enable_opengl_traces";
131eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
132eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
133eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
134eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
136d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
137d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
1388dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    private static final String WEBVIEW_EXPERIMENTAL_KEY = "experimental_webview";
1398dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke
140caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
141caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
142f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
143f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
1449244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
1459244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
146eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
147fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
148f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private DevicePolicyManager mDpm;
149eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
15014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Switch mEnabledSwitch;
15114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mLastEnabledState;
15234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
15387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
15414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
1560761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private Preference mClearAdbKeys;
1572817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private Preference mBugreport;
1582d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private CheckBoxPreference mBugreportInPower;
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
160caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private CheckBoxPreference mEnforceReadExternal;
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
162fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
1659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
1669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private CheckBoxPreference mWaitForDebugger;
167f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private CheckBoxPreference mVerifyAppsOverUsb;
1689244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
169eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
170eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
171f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
172eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
173e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private CheckBoxPreference mDisableOverlays;
174eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
1750c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
1766a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private CheckBoxPreference mForceMsaa;
177c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mShowHwScreenUpdates;
178cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private CheckBoxPreference mShowHwLayersUpdates;
179098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private CheckBoxPreference mShowHwOverdraw;
180c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mDebugLayout;
18170618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private ListPreference mTrackFrameTime;
1826b24c458139091836486cce774a2e1255668e001Romain Guy    private ListPreference mShowNonRectClip;
183eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
184eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
185b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
186b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private ListPreference mOverlayDisplayDevices;
187025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private ListPreference mOpenGLTraces;
188eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
189eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
190eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
191eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
192d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
1938dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    private CheckBoxPreference mExperimentalWebView;
194d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
19514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
19614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<CheckBoxPreference> mResetCbPrefs
19714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            = new ArrayList<CheckBoxPreference>();
198b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
199f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
200f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
20114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
20214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
20314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
20414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
2050761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private Dialog mAdbKeysDialog;
20624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
207c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani    private boolean mUnavailable;
208c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
210ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
213eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
214fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
215fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
216f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
217eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
218c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        if (android.os.Process.myUserHandle().getIdentifier() != UserHandle.USER_OWNER) {
219c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            mUnavailable = true;
220c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            setPreferenceScreen(new PreferenceScreen(getActivity(), null));
221c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
222c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
223c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
226c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
2270761ffca609244eac10dd9cba8dc126add060138Benoit Goby        mClearAdbKeys = findPreference(CLEAR_ADB_KEYS);
2280761ffca609244eac10dd9cba8dc126add060138Benoit Goby        if (!SystemProperties.getBoolean("ro.adb.secure", false)) {
2290761ffca609244eac10dd9cba8dc126add060138Benoit Goby            PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
2300761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
2310761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (debugDebuggingCategory != null) {
2320761ffca609244eac10dd9cba8dc126add060138Benoit Goby                debugDebuggingCategory.removePreference(mClearAdbKeys);
2330761ffca609244eac10dd9cba8dc126add060138Benoit Goby            }
2340761ffca609244eac10dd9cba8dc126add060138Benoit Goby        }
2350761ffca609244eac10dd9cba8dc126add060138Benoit Goby
2362817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        mBugreport = findPreference(BUGREPORT);
2372d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY);
238c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
239caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
240c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
241fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
24214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
243f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
24448d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        if (!android.os.Process.myUserHandle().equals(UserHandle.OWNER)) {
24548d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mEnableAdb);
2460761ffca609244eac10dd9cba8dc126add060138Benoit Goby            disableForUser(mClearAdbKeys);
24748d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mPassword);
24848d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
24948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
2509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
2519244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
252c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY);
253f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb = findAndInitCheckboxPref(VERIFY_APPS_OVER_USB_KEY);
254f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (!showVerifierSetting()) {
255f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
256f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                    findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
257f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (debugDebuggingCategory != null) {
258f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                debugDebuggingCategory.removePreference(mVerifyAppsOverUsb);
259f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            } else {
260f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
261f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
262f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
263c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mStrictMode = findAndInitCheckboxPref(STRICT_MODE_KEY);
264c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mPointerLocation = findAndInitCheckboxPref(POINTER_LOCATION_KEY);
265c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowTouches = findAndInitCheckboxPref(SHOW_TOUCHES_KEY);
266c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
267c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
268c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
269c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
2706a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY);
2716b24c458139091836486cce774a2e1255668e001Romain Guy        mTrackFrameTime = addListPreference(TRACK_FRAME_TIME_KEY);
2726b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip = addListPreference(SHOW_NON_RECTANGULAR_CLIP_KEY);
273c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
274cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
275098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
276c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
2776b24c458139091836486cce774a2e1255668e001Romain Guy        mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
2786b24c458139091836486cce774a2e1255668e001Romain Guy        mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
2796b24c458139091836486cce774a2e1255668e001Romain Guy        mAnimatorDurationScale = addListPreference(ANIMATOR_DURATION_SCALE_KEY);
2806b24c458139091836486cce774a2e1255668e001Romain Guy        mOverlayDisplayDevices = addListPreference(OVERLAY_DISPLAY_DEVICES_KEY);
2816b24c458139091836486cce774a2e1255668e001Romain Guy        mOpenGLTraces = addListPreference(OPENGL_TRACES_KEY);
282eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
283eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
284eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
28514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
28614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mImmediatelyDestroyActivities);
2876b24c458139091836486cce774a2e1255668e001Romain Guy        mAppProcessLimit = addListPreference(APP_PROCESS_LIMIT_KEY);
288eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
289d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
290d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
29114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
29214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mShowAllANRs);
293d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
2948dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        if (WebViewFactory.isExperimentalWebViewAvailable()) {
2958dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            mExperimentalWebView = findAndInitCheckboxPref(WEBVIEW_EXPERIMENTAL_KEY);
2968dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        } else {
2978dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            Preference experimentalWebView = findPreference(WEBVIEW_EXPERIMENTAL_KEY);
2989225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke            PreferenceGroup debugApplicationsCategory = (PreferenceGroup)
2999225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke                    findPreference(DEBUG_APPLICATIONS_CATEGORY_KEY);
3009225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke            if (debugApplicationsCategory != null) {
3019225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke                debugApplicationsCategory.removePreference(experimentalWebView);
3028dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            }
3038dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        }
3048dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke
30514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
30614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
30714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
30814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3094f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
310f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
311f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
3126b24c458139091836486cce774a2e1255668e001Romain Guy    private ListPreference addListPreference(String prefKey) {
3136b24c458139091836486cce774a2e1255668e001Romain Guy        ListPreference pref = (ListPreference) findPreference(prefKey);
3146b24c458139091836486cce774a2e1255668e001Romain Guy        mAllPrefs.add(pref);
3156b24c458139091836486cce774a2e1255668e001Romain Guy        pref.setOnPreferenceChangeListener(this);
3166b24c458139091836486cce774a2e1255668e001Romain Guy        return pref;
3176b24c458139091836486cce774a2e1255668e001Romain Guy    }
3186b24c458139091836486cce774a2e1255668e001Romain Guy
31948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    private void disableForUser(Preference pref) {
32048d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        if (pref != null) {
32148d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            pref.setEnabled(false);
32248d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            mDisabledPrefs.add(pref);
32348d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
32448d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    }
32548d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
326c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference findAndInitCheckboxPref(String key) {
327c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
328c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
329c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
330c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
331c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
332c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mResetCbPrefs.add(pref);
333c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
334c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
335c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
33614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
33714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
33814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
33914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
34014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
34114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch = new Switch(activity);
34214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
34314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final int padding = activity.getResources().getDimensionPixelSize(
34414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                R.dimen.action_bar_switch_padding);
345b27223f139248f92637997378d7a38d7d24f6b02Fabrice Di Meglio        mEnabledSwitch.setPaddingRelative(0, 0, padding, 0);
346c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        if (mUnavailable) {
347c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            mEnabledSwitch.setEnabled(false);
348c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
349c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
35014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setOnCheckedChangeListener(this);
35114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
35214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
35314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
35414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStart() {
35514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStart();
35614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
35714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
35814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.DISPLAY_SHOW_CUSTOM);
35914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
36014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
36114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
36279d8e80a304922c34a6bd344f1fa49dd7dfd106dFabrice Di Meglio                Gravity.CENTER_VERTICAL | Gravity.END));
36314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
36414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
36514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
36614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStop() {
36714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStop();
36814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
36914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
37014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(null);
37114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
37214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
373f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
374f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
375f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
376f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
377f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
378f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
37914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAllPrefs.remove(hdcpChecking);
380f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
381f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
38414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
385c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
386f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            Preference pref = mAllPrefs.get(i);
387f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
38814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3899244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
39014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
39114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
393ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
39550cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
396c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        if (mUnavailable) {
397c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            // Show error message
398c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
399c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            getListView().setEmptyView(emptyView);
400c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            if (emptyView != null) {
401c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani                emptyView.setText(R.string.development_settings_not_available);
402c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            }
403c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
404c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
405c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
406f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        if (mDpm.getMaximumTimeToLock(null) > 0) {
407f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // A DeviceAdmin has specified a maximum time until the device
408f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // will lock...  in this case we can't allow the user to turn
409f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // on "stay awake when plugged in" because that would defeat the
410f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // restriction.
411f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.add(mKeepScreenOn);
412f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        } else {
413f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.remove(mKeepScreenOn);
414f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        }
415f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
416ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
4175a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        mLastEnabledState = Settings.Global.getInt(cr,
4185a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
41914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setChecked(mLastEnabledState);
42014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        setPrefsEnabledState(mLastEnabledState);
42134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
42234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (mHaveDebugSettings && !mLastEnabledState) {
42334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
42434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
42534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
42634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
4275a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
4285a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
42934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mLastEnabledState = true;
430caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn            mEnabledSwitch.setChecked(mLastEnabledState);
43134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            setPrefsEnabledState(mLastEnabledState);
43234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
43334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
43434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
43534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
43634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        checkBox.setChecked(value);
43734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
43814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
43914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
44014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
441caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final Context context = getActivity();
442caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final ContentResolver cr = context.getContentResolver();
44334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
4445a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mEnableAdb, Settings.Global.getInt(cr,
4455a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.ADB_ENABLED, 0) != 0);
4462d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr,
4472d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0);
4485a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr,
4495a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
450cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE));
45134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
453f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
454fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
4559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
456eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
457eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
458f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
459eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
460eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
4610c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
4626a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        updateMsaaOptions();
463c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
4646b24c458139091836486cce774a2e1255668e001Romain Guy        updateShowNonRectClipOptions();
465c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
466cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateShowHwLayersUpdatesOptions();
467098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateShowHwOverdrawOptions();
468c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
469eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
470b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
471025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        updateOpenGLTracesOptions();
472eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
473eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
474d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
4758dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        updateExperimentalWebViewOptions();
476f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateVerifyAppsOverUsbOptions();
4772817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        updateBugreportOptions();
478f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
479f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
48014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
48187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
48214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        for (int i=0; i<mResetCbPrefs.size(); i++) {
48314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            CheckBoxPreference cb = mResetCbPrefs.get(i);
48414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
48514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
48614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                onPreferenceTreeClick(null, cb);
48714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
48814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
4899244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
49014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
49114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
49214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
493b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        writeOverlayDisplayDevicesOptions(null);
49414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
49534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
49614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
49787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
49887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
49914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
50014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
501f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
502f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
503f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
504f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
505f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
506f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
507f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
508f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
509f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
510f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
511f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
512f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
513f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
514f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
515f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
516f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
517f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
519afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
520fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
521fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
522fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
523fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
524fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
525fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
526fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
527fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
528fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
529fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
530fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
531fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
5329244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
5339244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
5349244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
5359244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp, mWaitForDebugger.isChecked(), true);
5369244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
5379244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5389244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
540c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
5419244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
5429244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
5439244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
5449244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
5459244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5469244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5479244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
5489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
549860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        mDebugApp = Settings.Global.getString(
550860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.DEBUG_APP);
551860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mWaitForDebugger, Settings.Global.getInt(
552860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.WAIT_FOR_DEBUGGER, 0) != 0);
5539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
5549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
5559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
5569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
5579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
5589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
5599244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
5609244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
5619244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
5629244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
5639244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
5649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
56534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
5669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
5679244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
5689244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
5699244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5709244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5719244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
572f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void updateVerifyAppsOverUsbOptions() {
573f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateCheckBox(mVerifyAppsOverUsb, Settings.Global.getInt(getActivity().getContentResolver(),
574f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) != 0);
575f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb.setEnabled(enableVerifierSetting());
576f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
577f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
578f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void writeVerifyAppsOverUsbOptions() {
579f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        Settings.Global.putInt(getActivity().getContentResolver(),
580f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings              Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, mVerifyAppsOverUsb.isChecked() ? 1 : 0);
581f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
582f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
583f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean enableVerifierSetting() {
584f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        final ContentResolver cr = getActivity().getContentResolver();
585f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
586f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
587f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
588f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 0) {
589f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
590f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else {
591f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final PackageManager pm = getActivity().getPackageManager();
592f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
593f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.setType(PACKAGE_MIME_TYPE);
594f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
595f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final List<ResolveInfo> receivers = pm.queryBroadcastReceivers(verification, 0);
596f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (receivers.size() == 0) {
597f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                return false;
598f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
599f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
600f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return true;
601f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
602f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
603f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean showVerifierSetting() {
604f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return Settings.Global.getInt(getActivity().getContentResolver(),
605f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
606f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
607f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
6082817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private void updateBugreportOptions() {
6092817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        if ("user".equals(Build.TYPE)) {
6102817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            final ContentResolver resolver = getActivity().getContentResolver();
6112817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            final boolean adbEnabled = Settings.Global.getInt(
6122817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                    resolver, Settings.Global.ADB_ENABLED, 0) != 0;
6132817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            if (adbEnabled) {
6142817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreport.setEnabled(true);
6152817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setEnabled(true);
6162817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            } else {
6172817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreport.setEnabled(false);
6182817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setEnabled(false);
6192817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                mBugreportInPower.setChecked(false);
6202817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                Settings.Secure.putInt(resolver, Settings.Secure.BUGREPORT_IN_POWER_MENU, 0);
6212817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            }
6222817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        } else {
6232817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey            mBugreportInPower.setEnabled(true);
6242817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        }
6252817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    }
6262817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey
627eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
628eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
629eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
630eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
631eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
632c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
633eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
634eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
635eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
636eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
637eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
638eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
639eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
640eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
641eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
642eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
643eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
644eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
645eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
646eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
647eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
648eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
64934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
650eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
651eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
652eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
653eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
654eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
655eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
656eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
657eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
65834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
659eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
660eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
661eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
662f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
663f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
664f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
665f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
666f40770096fe75180fba679ed349a63d195729c0cJeff Brown
667f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
66834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
669f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
670f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
671f40770096fe75180fba679ed349a63d195729c0cJeff Brown
672eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
673eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
674eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
675eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
676eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
677eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
678eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
679eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
680eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
681eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
682eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
683eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
684eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
685eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
68634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mShowScreenUpdates, showUpdates != 0);
687eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
688eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
689e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
69034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mDisableOverlays, disableOverlays != 0);
691eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
692eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
693eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
694eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
695eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
696eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
697eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
698e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
699eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
700eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
701eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
702eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
703eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
704e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
705e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
706eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
707eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
708eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
709eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
710eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
711eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
712eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
713eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
714eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
715e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
716e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
717e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
718e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
719e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
720e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
721e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
722e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
723e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
724e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
725e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
726e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
727e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
728e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
729e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
730e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
731e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
7320c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
73334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
7340c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
7350c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
7360c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
7370c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
73887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
7390c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
7400c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
7416a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void updateMsaaOptions() {
7426a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        updateCheckBox(mForceMsaa, SystemProperties.getBoolean(MSAA_PROPERTY, false));
7436a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
7446a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
7456a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void writeMsaaOptions() {
7466a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        SystemProperties.set(MSAA_PROPERTY, mForceMsaa.isChecked() ? "true" : "false");
7476a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        pokeSystemProperties();
7486a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
7496a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
750c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
75170618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        String value = SystemProperties.get(HardwareRenderer.PROFILE_PROPERTY);
75270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        if (value == null) {
75370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            value = "";
75470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
75570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy
75670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        CharSequence[] values = mTrackFrameTime.getEntryValues();
75770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        for (int i = 0; i < values.length; i++) {
75870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            if (value.contentEquals(values[i])) {
75970618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setValueIndex(i);
76070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
76170618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                return;
76270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            }
76370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
76470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setValueIndex(0);
76570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
766c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
767c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
76870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private void writeTrackFrameTimeOptions(Object newValue) {
769c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
77070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                newValue == null ? "" : newValue.toString());
77187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
77270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        updateTrackFrameTimeOptions();
773c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
774c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
7756b24c458139091836486cce774a2e1255668e001Romain Guy    private void updateShowNonRectClipOptions() {
7766b24c458139091836486cce774a2e1255668e001Romain Guy        String value = SystemProperties.get(
7776b24c458139091836486cce774a2e1255668e001Romain Guy                HardwareRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY);
7786b24c458139091836486cce774a2e1255668e001Romain Guy        if (value == null) {
7796b24c458139091836486cce774a2e1255668e001Romain Guy            value = "hide";
7806b24c458139091836486cce774a2e1255668e001Romain Guy        }
7816b24c458139091836486cce774a2e1255668e001Romain Guy
7826b24c458139091836486cce774a2e1255668e001Romain Guy        CharSequence[] values = mShowNonRectClip.getEntryValues();
7836b24c458139091836486cce774a2e1255668e001Romain Guy        for (int i = 0; i < values.length; i++) {
7846b24c458139091836486cce774a2e1255668e001Romain Guy            if (value.contentEquals(values[i])) {
7856b24c458139091836486cce774a2e1255668e001Romain Guy                mShowNonRectClip.setValueIndex(i);
7866b24c458139091836486cce774a2e1255668e001Romain Guy                mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[i]);
7876b24c458139091836486cce774a2e1255668e001Romain Guy                return;
7886b24c458139091836486cce774a2e1255668e001Romain Guy            }
7896b24c458139091836486cce774a2e1255668e001Romain Guy        }
7906b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip.setValueIndex(0);
7916b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[0]);
7926b24c458139091836486cce774a2e1255668e001Romain Guy    }
7936b24c458139091836486cce774a2e1255668e001Romain Guy
7946b24c458139091836486cce774a2e1255668e001Romain Guy    private void writeShowNonRectClipOptions(Object newValue) {
7956b24c458139091836486cce774a2e1255668e001Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
7966b24c458139091836486cce774a2e1255668e001Romain Guy                newValue == null ? "" : newValue.toString());
7976b24c458139091836486cce774a2e1255668e001Romain Guy        pokeSystemProperties();
7986b24c458139091836486cce774a2e1255668e001Romain Guy        updateShowNonRectClipOptions();
7996b24c458139091836486cce774a2e1255668e001Romain Guy    }
8006b24c458139091836486cce774a2e1255668e001Romain Guy
801c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
80234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowHwScreenUpdates,
803c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
804c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
805c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
806c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
807c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
808cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : null);
809cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        pokeSystemProperties();
810cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
811cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
812cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void updateShowHwLayersUpdatesOptions() {
813cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mShowHwLayersUpdates, SystemProperties.getBoolean(
814cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
815cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
816cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
817cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void writeShowHwLayersUpdatesOptions() {
818cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
819cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwLayersUpdates.isChecked() ? "true" : null);
82087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
821c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
822c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
823098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void updateShowHwOverdrawOptions() {
824098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean(
825098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false));
826098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
827098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
828098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void writeShowHwOverdrawOptions() {
829098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY,
830098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                mShowHwOverdraw.isChecked() ? "true" : null);
831098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        pokeSystemProperties();
832098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
833098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
834c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
83534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mDebugLayout,
836c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
837c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
838c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
839c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
840c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
841c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
84287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
843c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
844c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
845eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
846860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(),
847860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                Settings.Global.SHOW_PROCESSES, 0) != 0);
848eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
8490c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
850eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
851eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
852860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        Settings.Global.putInt(getActivity().getContentResolver(),
853860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                Settings.Global.SHOW_PROCESSES, value ? 1 : 0);
854eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
855c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
856eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
857eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
858eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
859eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
860eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
861eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
862eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
863eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
864eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
865eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
866eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
867eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
868eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
869eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
870eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
871eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
872860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        updateCheckBox(mImmediatelyDestroyActivities, Settings.Global.getInt(
873860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey            getActivity().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
874eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
875eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
876eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
877eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
878eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
87934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
88034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
88134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
882eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
883eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
884eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
885eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
886eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
88783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
888eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
889eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
890eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
891eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
89283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
893eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
894eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
895eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
896eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
897eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
898eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
899eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
900b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
901eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
902eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
90383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
904eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
90514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
906eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
907c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
908eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
909eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
910eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
911eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
912b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void updateOverlayDisplayDevicesOptions() {
913075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        String value = Settings.Global.getString(getActivity().getContentResolver(),
914075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES);
915b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        if (value == null) {
916b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            value = "";
917b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
918b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
919b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
920b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        for (int i = 0; i < values.length; i++) {
921b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            if (value.contentEquals(values[i])) {
922b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setValueIndex(i);
923b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
924b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                return;
925b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            }
926b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
927b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setValueIndex(0);
928b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
929b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
930b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
931b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void writeOverlayDisplayDevicesOptions(Object newValue) {
932075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        Settings.Global.putString(getActivity().getContentResolver(),
933075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES, (String)newValue);
934b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
935b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
936b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
937025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private void updateOpenGLTracesOptions() {
938025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        String value = SystemProperties.get(OPENGL_TRACES_PROPERTY);
939025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        if (value == null) {
940025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            value = "";
941025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        }
942025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
943025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        CharSequence[] values = mOpenGLTraces.getEntryValues();
944025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        for (int i = 0; i < values.length; i++) {
945025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            if (value.contentEquals(values[i])) {
946025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                mOpenGLTraces.setValueIndex(i);
947025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[i]);
948025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy                return;
949025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            }
950025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        }
951025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces.setValueIndex(0);
952025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[0]);
953025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    }
954025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
955025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private void writeOpenGLTracesOptions(Object newValue) {
956025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        SystemProperties.set(OPENGL_TRACES_PROPERTY, newValue == null ? "" : newValue.toString());
957025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        pokeSystemProperties();
958025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        updateOpenGLTracesOptions();
959025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    }
960025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy
961eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
962eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
963eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
964eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
965eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
966eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
967eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
96834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
96934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
97034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
971eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
97283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
973eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
974eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
975eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
976eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
97783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
978eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
979eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
980eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
981eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
98283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
983eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
98414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
985eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
986c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
987eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
988eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
989eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
990eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
991d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
992d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
993d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
994d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
995d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
996d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
997d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
99834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
999d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
1000d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
1001d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
10028dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    private void writeExperimentalWebViewOptions() {
10038dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        if (mExperimentalWebView != null) {
10048dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            SystemProperties.set(WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY,
10058dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke                    mExperimentalWebView.isChecked() ? "true" : null);
10068dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            pokeSystemProperties();
10078dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        }
10088dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    }
10098dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke
10108dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    private void updateExperimentalWebViewOptions() {
10118dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        if (mExperimentalWebView != null) {
10128dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            updateCheckBox(mExperimentalWebView, SystemProperties.getBoolean(
10138dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke                    WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY, false));
10148dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        }
10158dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke    }
10168dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke
1017afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
101814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
101914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (buttonView == mEnabledSwitch) {
102014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (isChecked != mLastEnabledState) {
102114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (isChecked) {
102214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mDialogClicked = false;
102314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    if (mEnableDialog != null) dismissDialogs();
102414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
102514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            getActivity().getResources().getString(
102614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                                    R.string.dev_settings_warning_message))
102714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setTitle(R.string.dev_settings_warning_title)
1028c8272b075275f81ddfb9cef2f92514b7ce3365deBjörn Lundén                            .setIconAttribute(android.R.attr.alertDialogIcon)
102914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setPositiveButton(android.R.string.yes, this)
103014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setNegativeButton(android.R.string.no, this)
103114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .show();
103214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog.setOnDismissListener(this);
103314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                } else {
103414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    resetDangerousOptions();
10355a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.putInt(getActivity().getContentResolver(),
10365a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
103714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mLastEnabledState = isChecked;
103814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    setPrefsEnabledState(mLastEnabledState);
103914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                }
104014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
104114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
104214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
104314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
104414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
10459244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
10469244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
10479244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
10489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
10499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
10509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
10519244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
10529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
10539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
10549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
10559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
10569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
10579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
1058afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
1059afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1060a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
1061afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
1062afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1063afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1064afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
1065b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
106614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
106714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
106814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
1069ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
1070b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
1071e7c53b1c9e48c6f997c47a0ca9a2f190ecbbf586Björn Lundén                        .setIconAttribute(android.R.attr.alertDialogIcon)
1072b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
1073b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
107424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
107514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
1076b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
10775a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
10785a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 0);
1079f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
1080f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setChecked(false);
10812817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
1082b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
10830761ffca609244eac10dd9cba8dc126add060138Benoit Goby        } else if (preference == mClearAdbKeys) {
10840761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (mAdbKeysDialog != null) dismissDialogs();
10850761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog = new AlertDialog.Builder(getActivity())
10860761ffca609244eac10dd9cba8dc126add060138Benoit Goby                        .setMessage(R.string.adb_keys_warning_message)
10870761ffca609244eac10dd9cba8dc126add060138Benoit Goby                        .setPositiveButton(android.R.string.ok, this)
10880761ffca609244eac10dd9cba8dc126add060138Benoit Goby                        .setNegativeButton(android.R.string.cancel, null)
10890761ffca609244eac10dd9cba8dc126add060138Benoit Goby                        .show();
10902d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        } else if (preference == mBugreportInPower) {
10912d803a3931797891a30158c1a912ce775049f974Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
10922d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    Settings.Secure.BUGREPORT_IN_POWER_MENU,
10932d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    mBugreportInPower.isChecked() ? 1 : 0);
1094afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
10955a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
10965a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
1097afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
1098afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
1099caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } else if (preference == mEnforceReadExternal) {
1100caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            if (mEnforceReadExternal.isChecked()) {
1101caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                ConfirmEnforceFragment.show(this);
1102caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            } else {
1103caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
1104caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            }
1105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
1106ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
1107ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
1108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
11099244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
11109244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            startActivityForResult(new Intent(getActivity(), AppPicker.class), RESULT_DEBUG_APP);
11119244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
11129244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
1113f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else if (preference == mVerifyAppsOverUsb) {
1114f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            writeVerifyAppsOverUsbOptions();
1115eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
1116eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
1117eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
1118eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
1119f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
1120f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
1121eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
1122e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
1123e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
1124e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
1125eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
1126eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
1127eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
1128eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
1129d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
1130d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
11318dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke        } else if (preference == mExperimentalWebView) {
11328dc6d08f3b654805e717f8a05b3f589fd9fc136eJared Duke            writeExperimentalWebViewOptions();
11330c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
11340c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
11356a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        } else if (preference == mForceMsaa) {
11366a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy            writeMsaaOptions();
1137c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
1138c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
1139cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        } else if (preference == mShowHwLayersUpdates) {
1140cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            writeShowHwLayersUpdatesOptions();
1141098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        } else if (preference == mShowHwOverdraw) {
1142098f493dba656dea272dc7015363321dbb32f3a8Romain Guy            writeShowHwOverdrawOptions();
1143c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
1144c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
1145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
114624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
1148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
1149b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
115083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
115183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
115283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
115383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
115483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
115587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
115683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
115783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
115883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
115983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
116083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
116183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
1162b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
1163b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
1164b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
116583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
1166b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        } else if (preference == mOverlayDisplayDevices) {
1167b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            writeOverlayDisplayDevicesOptions(newValue);
1168b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            return true;
1169025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy        } else if (preference == mOpenGLTraces) {
1170025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            writeOpenGLTracesOptions(newValue);
1171025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy            return true;
117270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        } else if (preference == mTrackFrameTime) {
117370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            writeTrackFrameTimeOptions(newValue);
117470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            return true;
11756b24c458139091836486cce774a2e1255668e001Romain Guy        } else if (preference == mShowNonRectClip) {
11766b24c458139091836486cce774a2e1255668e001Romain Guy            writeShowNonRectClipOptions(newValue);
11776b24c458139091836486cce774a2e1255668e001Romain Guy            return true;
117883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
117983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
118083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
118183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
118283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
118383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
118483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
118514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
118614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
118714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
118814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
118914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
11900761ffca609244eac10dd9cba8dc126add060138Benoit Goby        if (mAdbKeysDialog != null) {
11910761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog.dismiss();
11920761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog = null;
11930761ffca609244eac10dd9cba8dc126add060138Benoit Goby        }
119414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
119514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
119614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
119714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
119824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
119924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1200b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
120114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
120214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
120314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
12045a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
12055a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 1);
1206f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(true);
1207f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                updateVerifyAppsOverUsbOptions();
12082817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
120914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
121014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
121114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
121214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
12130761ffca609244eac10dd9cba8dc126add060138Benoit Goby        } else if (dialog == mAdbKeysDialog) {
12140761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (which == DialogInterface.BUTTON_POSITIVE) {
12150761ffca609244eac10dd9cba8dc126add060138Benoit Goby                try {
12160761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    IBinder b = ServiceManager.getService(Context.USB_SERVICE);
12170761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    IUsbManager service = IUsbManager.Stub.asInterface(b);
12180761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    service.clearUsbDebuggingKeys();
12190761ffca609244eac10dd9cba8dc126add060138Benoit Goby                } catch (RemoteException e) {
12200761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    Log.e(TAG, "Unable to clear adb keys", e);
12210761ffca609244eac10dd9cba8dc126add060138Benoit Goby                }
12220761ffca609244eac10dd9cba8dc126add060138Benoit Goby            }
122314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
122414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
122514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
12265a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
12275a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
122814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mLastEnabledState = true;
122914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                setPrefsEnabledState(mLastEnabledState);
123014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
123114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
123214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
123314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
1234b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1235b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
1236b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
1237b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
1238b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
123914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
124014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
124114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
124214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
124314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
124414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
124514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
124614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
124714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
124814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
1249b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1250b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
125124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
125224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
125324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
125414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
125524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
125624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
125787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
125887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
125987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
1260cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            //noinspection unchecked
126187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
126287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
126387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
126487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
126587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
126687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
126787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
126887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            String[] services;
126987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            try {
127087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                services = ServiceManager.listServices();
127187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            } catch (RemoteException e) {
127287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                return null;
127387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
127487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
127587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
127687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
127787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
127887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
127987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
128087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
1281d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                    } catch (Exception e) {
12820761ffca609244eac10dd9cba8dc126add060138Benoit Goby                        Log.i(TAG, "Somone wrote a bad service '" + service
1283d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                                + "' that doesn't like to be poked: " + e);
128487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
128587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
128687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
128787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
128887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
128987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
129087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
1291caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1292caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    /**
1293cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy     * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}.
1294caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey     */
1295caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    public static class ConfirmEnforceFragment extends DialogFragment {
1296caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public static void show(DevelopmentSettings parent) {
1297caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
1298caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.setTargetFragment(parent, 0);
1299caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
1300caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1301caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1302caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        @Override
1303caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public Dialog onCreateDialog(Bundle savedInstanceState) {
1304caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final Context context = getActivity();
1305caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1306caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
1307caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setTitle(R.string.enforce_read_external_confirm_title);
1308caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setMessage(R.string.enforce_read_external_confirm_message);
1309caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1310caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
1311caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1312caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1313caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
1314caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1315caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1316caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1317caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
1318caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1319caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1320caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1321caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1322caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1323caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1324caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            return builder.create();
1325caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1326caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1327caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1328cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static boolean isPermissionEnforced(String permission) {
1329caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1330cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            return ActivityThread.getPackageManager().isPermissionEnforced(permission);
1331caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1332caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1333caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1334caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1335caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1336caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static void setPermissionEnforced(
1337caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            Context context, String permission, boolean enforced) {
1338caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1339caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            // TODO: offload to background thread
1340caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            ActivityThread.getPackageManager()
1341caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
1342caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1343caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1344caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1345caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1347