DevelopmentSettings.java revision caefa9b5f03b595b81729407e4123fee18a4342c
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport static android.Manifest.permission.READ_EXTERNAL_STORAGE;
2014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
2114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.ActionBar;
2214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.Activity;
23eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.app.ActivityManagerNative;
24caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.app.ActivityThread;
25b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
27caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.app.DialogFragment;
28f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport android.app.admin.DevicePolicyManager;
29fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.app.backup.IBackupManager;
30ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver;
31fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.content.Context;
32b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
33caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.content.DialogInterface.OnClickListener;
34eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.content.Intent;
359244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackbornimport android.content.pm.ApplicationInfo;
36498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.PackageManager;
37f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport android.content.pm.ResolveInfo;
3887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
40f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
42eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
43eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
44eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
45eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
46eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
47f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
4834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.os.Trace;
49f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference;
50f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference;
5134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackbornimport android.preference.MultiCheckPreference;
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
53caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport android.preference.Preference.OnPreferenceChangeListener;
54ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment;
55f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport android.preference.PreferenceGroup;
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
58eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
5914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.view.Gravity;
60c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.HardwareRenderer;
61eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
62c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
6314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.CompoundButton;
6414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
66caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport java.util.ArrayList;
67f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport java.util.HashSet;
68f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport java.util.List;
69caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
73ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment
74f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
7514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
77caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
78caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Preference file were development settings prefs are stored.
79caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
80caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_FILE = "development";
81caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
82caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
83caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Whether to show the development settings to the user.  Default is false.
84caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
85caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_SHOW = "show";
86caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
90f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
91f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
92caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
93fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
940c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
952d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
99f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String VERIFY_APPS_OVER_USB_KEY = "verify_apps_over_usb";
100eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
101eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
102f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
103eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
104e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
105eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
1060c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
107c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
108c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
109cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
110098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw";
111c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
112eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
113eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
114b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
115b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
116f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
117eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
11834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private static final String ENABLE_TRACES_KEY = "enable_traces";
11934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
120eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
121eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
122eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
123eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
124d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
125d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
126caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
127caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
128f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
129f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
1309244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
1319244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
132eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
133fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
134f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private DevicePolicyManager mDpm;
135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
13614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Switch mEnabledSwitch;
13714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mLastEnabledState;
13834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
13987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
14014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
1422d803a3931797891a30158c1a912ce775049f974Dianne Hackborn    private CheckBoxPreference mBugreportInPower;
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
144caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private CheckBoxPreference mEnforceReadExternal;
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
146fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private PreferenceScreen mPassword;
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
1499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
1509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private CheckBoxPreference mWaitForDebugger;
151f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private CheckBoxPreference mVerifyAppsOverUsb;
1529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
153eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mStrictMode;
154eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mPointerLocation;
155f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private CheckBoxPreference mShowTouches;
156eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowScreenUpdates;
157e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private CheckBoxPreference mDisableOverlays;
158eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mShowCpuUsage;
1590c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private CheckBoxPreference mForceHardwareUi;
160c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mTrackFrameTime;
161c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mShowHwScreenUpdates;
162cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private CheckBoxPreference mShowHwLayersUpdates;
163098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private CheckBoxPreference mShowHwOverdraw;
164c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference mDebugLayout;
165eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
166eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
167b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
168b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private ListPreference mOverlayDisplayDevices;
16934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private MultiCheckPreference mEnableTracesPref;
170eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
171eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private CheckBoxPreference mImmediatelyDestroyActivities;
172eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
173eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
174d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private CheckBoxPreference mShowAllANRs;
175d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
17614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
17714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<CheckBoxPreference> mResetCbPrefs
17814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            = new ArrayList<CheckBoxPreference>();
179b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
180f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
181f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
18214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
18314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
18414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
18514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
18624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
188ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
191eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
192fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
193fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
194f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
195eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
198c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
1992d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY);
200c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
201caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
202c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
203fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
20414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
205f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
2069244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
2079244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
208c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY);
209f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb = findAndInitCheckboxPref(VERIFY_APPS_OVER_USB_KEY);
210f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (!showVerifierSetting()) {
211f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
212f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                    findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
213f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (debugDebuggingCategory != null) {
214f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                debugDebuggingCategory.removePreference(mVerifyAppsOverUsb);
215f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            } else {
216f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
217f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
218f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
219c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mStrictMode = findAndInitCheckboxPref(STRICT_MODE_KEY);
220c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mPointerLocation = findAndInitCheckboxPref(POINTER_LOCATION_KEY);
221c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowTouches = findAndInitCheckboxPref(SHOW_TOUCHES_KEY);
222c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
223c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
224c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
225c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
226c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
227c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
228cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
229098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
230c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
231eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
23214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mWindowAnimationScale);
23383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mWindowAnimationScale.setOnPreferenceChangeListener(this);
234eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
23514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mTransitionAnimationScale);
23683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mTransitionAnimationScale.setOnPreferenceChangeListener(this);
237b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
23814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAnimatorDurationScale);
239b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        mAnimatorDurationScale.setOnPreferenceChangeListener(this);
240b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices = (ListPreference) findPreference(OVERLAY_DISPLAY_DEVICES_KEY);
241b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mAllPrefs.add(mOverlayDisplayDevices);
242b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setOnPreferenceChangeListener(this);
24334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
24434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] traceValues = new String[Trace.TRACE_TAGS.length];
24534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
24634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            traceValues[i] = Integer.toString(1<<i);
24734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
24834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntries(Trace.TRACE_TAGS);
24934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setEntryValues(traceValues);
25034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mAllPrefs.add(mEnableTracesPref);
25134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mEnableTracesPref.setOnPreferenceChangeListener(this);
252eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
253eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
254eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
25514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
25614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mImmediatelyDestroyActivities);
257eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
25814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mAppProcessLimit);
25983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        mAppProcessLimit.setOnPreferenceChangeListener(this);
260eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
261d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        mShowAllANRs = (CheckBoxPreference) findPreference(
262d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
26314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
26414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mResetCbPrefs.add(mShowAllANRs);
265d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
26614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
26714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
26814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
26914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2704f4ddaa823bfa7bd2fdff97338ff1839739925ddGlenn Kasten        removeHdcpOptionsForProduction();
271f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
272f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
273c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private CheckBoxPreference findAndInitCheckboxPref(String key) {
274c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
275c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
276c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
277c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
278c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
279c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mResetCbPrefs.add(pref);
280c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
281c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
282c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
28314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
28414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
28514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
28614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
28714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
28814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch = new Switch(activity);
28914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
29014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final int padding = activity.getResources().getDimensionPixelSize(
29114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                R.dimen.action_bar_switch_padding);
29214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setPadding(0, 0, padding, 0);
29314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setOnCheckedChangeListener(this);
29414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
29514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
29614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
29714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStart() {
29814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStart();
29914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
30014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
30114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.DISPLAY_SHOW_CUSTOM);
30214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
30314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
30414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                ActionBar.LayoutParams.WRAP_CONTENT,
30579d8e80a304922c34a6bd344f1fa49dd7dfd106dFabrice Di Meglio                Gravity.CENTER_VERTICAL | Gravity.END));
30614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
30714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
30814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
30914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onStop() {
31014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onStop();
31114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        final Activity activity = getActivity();
31214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
31314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        activity.getActionBar().setCustomView(null);
31414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
31514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
316f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void removeHdcpOptionsForProduction() {
317f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
318f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
319f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            if (hdcpChecking != null) {
320f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                // Remove the preference
321f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                getPreferenceScreen().removePreference(hdcpChecking);
32214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAllPrefs.remove(hdcpChecking);
323f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
324f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
32714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
328c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
329f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            Preference pref = mAllPrefs.get(i);
330f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
33114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
3329244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
33314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
33414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
336ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
33850cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
339f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        if (mDpm.getMaximumTimeToLock(null) > 0) {
340f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // A DeviceAdmin has specified a maximum time until the device
341f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // will lock...  in this case we can't allow the user to turn
342f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // on "stay awake when plugged in" because that would defeat the
343f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            // restriction.
344f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.add(mKeepScreenOn);
345f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        } else {
346f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.remove(mKeepScreenOn);
347f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        }
348f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
349ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn        final ContentResolver cr = getActivity().getContentResolver();
3505a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        mLastEnabledState = Settings.Global.getInt(cr,
3515a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
35214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mEnabledSwitch.setChecked(mLastEnabledState);
35314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        setPrefsEnabledState(mLastEnabledState);
35434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
35534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (mHaveDebugSettings && !mLastEnabledState) {
35634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
35734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
35834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
35934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
3605a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
3615a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
36234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mLastEnabledState = true;
363caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn            mEnabledSwitch.setChecked(mLastEnabledState);
36434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            setPrefsEnabledState(mLastEnabledState);
36534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
36634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
36734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
36834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
36934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        checkBox.setChecked(value);
37034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
37114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
37214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
37314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
374caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final Context context = getActivity();
375caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final ContentResolver cr = context.getContentResolver();
37634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
3775a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mEnableAdb, Settings.Global.getInt(cr,
3785a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.ADB_ENABLED, 0) != 0);
3792d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr,
3802d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0);
3815a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate        updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr,
3825a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
383cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE));
38434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
386f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
387fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
3889244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
389eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
390eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
391f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
392eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
393eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateCpuUsageOptions();
3940c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
395c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
396c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
397cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateShowHwLayersUpdatesOptions();
398098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateShowHwOverdrawOptions();
399c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
400eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
401b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
40234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
403eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
404eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
405d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
406f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateVerifyAppsOverUsbOptions();
407f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
408f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
40914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
41087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
41114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        for (int i=0; i<mResetCbPrefs.size(); i++) {
41214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            CheckBoxPreference cb = mResetCbPrefs.get(i);
41314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
41414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
41514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                onPreferenceTreeClick(null, cb);
41614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
41714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
4189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
41914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
42014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
42114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
422b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        writeOverlayDisplayDevicesOptions(null);
42334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(0);
42414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
42534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
42614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
42787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
42887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
42914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
43014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
431f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
432f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
433f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
434f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
435f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
436f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
437f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
438f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
439f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
440f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
441f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
442f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
443f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
444f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
445f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
446f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
447f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
448afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
449afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
450fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
451fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
452fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
453fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
454fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
455fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
456fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
457fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
458fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
459fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
460fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
461fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
4629244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
4639244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
4649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
4659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp, mWaitForDebugger.isChecked(), true);
4669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
4679244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4689244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4699244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
470c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
4719244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
4729244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            ActivityManagerNative.getDefault().setDebugApp(
4739244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
4749244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
4759244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
4769244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
4779244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
4789244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
4799244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugApp = Settings.System.getString(
4809244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.DEBUG_APP);
48134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mWaitForDebugger, Settings.System.getInt(
4829244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                getActivity().getContentResolver(), Settings.System.WAIT_FOR_DEBUGGER, 0) != 0);
4839244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
4849244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
4859244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
4869244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
4879244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
4889244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
4899244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
4909244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
4919244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
4929244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
4939244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
4949244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
49534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
4969244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
4979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
4989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
4999244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
5009244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
5019244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
502f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void updateVerifyAppsOverUsbOptions() {
503f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        updateCheckBox(mVerifyAppsOverUsb, Settings.Global.getInt(getActivity().getContentResolver(),
504f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) != 0);
505f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        mVerifyAppsOverUsb.setEnabled(enableVerifierSetting());
506f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
507f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
508f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private void writeVerifyAppsOverUsbOptions() {
509f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        Settings.Global.putInt(getActivity().getContentResolver(),
510f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings              Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, mVerifyAppsOverUsb.isChecked() ? 1 : 0);
511f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
512f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
513f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean enableVerifierSetting() {
514f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        final ContentResolver cr = getActivity().getContentResolver();
515f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
516f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
517f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
518f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 0) {
519f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            return false;
520f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else {
521f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final PackageManager pm = getActivity().getPackageManager();
522f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
523f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.setType(PACKAGE_MIME_TYPE);
524f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
525f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            final List<ResolveInfo> receivers = pm.queryBroadcastReceivers(verification, 0);
526f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            if (receivers.size() == 0) {
527f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                return false;
528f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            }
529f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        }
530f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return true;
531f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
532f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
533f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private boolean showVerifierSetting() {
534f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        return Settings.Global.getInt(getActivity().getContentResolver(),
535f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
536f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    }
537f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings
538eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
539eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
540eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
541eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
542eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
543c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
544eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
545eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
546eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
547eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
548eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
549eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
550eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
551eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
552eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
553eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
554eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
555eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
556eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
557eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
558eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
559eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
56034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
561eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
562eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
563eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
564eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
565eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
566eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
567eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
568eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
56934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
570eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, 0) != 0);
571eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
572eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
573f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
574f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
575f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
576f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
577f40770096fe75180fba679ed349a63d195729c0cJeff Brown
578f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
57934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
580f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, 0) != 0);
581f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
582f40770096fe75180fba679ed349a63d195729c0cJeff Brown
583eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
584eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
585eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
586eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
587eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
588eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
589eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
590eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
591eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
592eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
593eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
594eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
595eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
596eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
59734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mShowScreenUpdates, showUpdates != 0);
598eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
599eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
600e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
60134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                updateCheckBox(mDisableOverlays, disableOverlays != 0);
602eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
603eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
604eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
605eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
606eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
607eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
608eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
609e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
610eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
611eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
612eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
613eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
614eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
615e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
616e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
617eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
618eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
619eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
620eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
621eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
622eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
623eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
624eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
625eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
626e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
627e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
628e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
629e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
630e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
631e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
632e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
633e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
634e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
635e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
636e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
637e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
638e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
639e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
640e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
641e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
642e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
6430c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
64434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
6450c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
6460c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
6470c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
6480c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
64987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
6500c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
6510c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
652c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
65334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mTrackFrameTime,
654c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
655c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
656c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
657c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeTrackFrameTimeOptions() {
658c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
659c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mTrackFrameTime.isChecked() ? "true" : "false");
66087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
661c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
662c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
663c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
66434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowHwScreenUpdates,
665c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
666c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
667c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
668c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
669c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
670cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : null);
671cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        pokeSystemProperties();
672cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
673cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
674cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void updateShowHwLayersUpdatesOptions() {
675cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateCheckBox(mShowHwLayersUpdates, SystemProperties.getBoolean(
676cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
677cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
678cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
679cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void writeShowHwLayersUpdatesOptions() {
680cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
681cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwLayersUpdates.isChecked() ? "true" : null);
68287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
683c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
684c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
685098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void updateShowHwOverdrawOptions() {
686098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean(
687098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false));
688098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
689098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
690098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    private void writeShowHwOverdrawOptions() {
691098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY,
692098f493dba656dea272dc7015363321dbb32f3a8Romain Guy                mShowHwOverdraw.isChecked() ? "true" : null);
693098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        pokeSystemProperties();
694098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
695098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
696c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
69734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mDebugLayout,
698c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
699c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
700c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
701c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
702c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
703c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
70487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
705c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
706c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
707eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateCpuUsageOptions() {
70834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowCpuUsage, Settings.System.getInt(getActivity().getContentResolver(),
709eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, 0) != 0);
710eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
7110c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
712eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeCpuUsageOptions() {
713eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean value = mShowCpuUsage.isChecked();
714eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
715eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.SHOW_PROCESSES, value ? 1 : 0);
716eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Intent service = (new Intent())
717c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn                .setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
718eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (value) {
719eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().startService(service);
720eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else {
721eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().stopService(service);
722eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
723eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
724eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
725eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
726eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
727eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setAlwaysFinish(
728eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
729eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
730eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
731eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
732eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
733eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
73434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mImmediatelyDestroyActivities, Settings.System.getInt(
735eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
736eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
737eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
738eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
739eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
740eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
74134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
74234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
74334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
744eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
745eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
746eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
747eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
748eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
74983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
750eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
751eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
752eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
753eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            pref.setValueIndex(values.length-1);
75483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
755eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
756eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
757eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
758eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
759eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
760eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
761eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
762b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
763eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
764eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
76583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
766eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
76714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
768eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
769c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
770eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
771eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
772eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
773eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
774b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void updateOverlayDisplayDevicesOptions() {
775075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        String value = Settings.Global.getString(getActivity().getContentResolver(),
776075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES);
777b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        if (value == null) {
778b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            value = "";
779b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
780b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
781b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
782b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        for (int i = 0; i < values.length; i++) {
783b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            if (value.contentEquals(values[i])) {
784b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setValueIndex(i);
785b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
786b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                return;
787b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            }
788b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
789b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setValueIndex(0);
790b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
791b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
792b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
793b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void writeOverlayDisplayDevicesOptions(Object newValue) {
794075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        Settings.Global.putString(getActivity().getContentResolver(),
795075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES, (String)newValue);
796b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
797b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
798b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
799eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
800eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
801eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            int limit = ActivityManagerNative.getDefault().getProcessLimit();
802eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
803eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            for (int i=0; i<values.length; i++) {
804eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
805eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
80634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
80734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
80834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
809eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
81083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
811eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
812eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
813eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
814eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
81583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
816eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
817eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
818eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
819eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
82083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
821eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
82214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
823eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            ActivityManagerNative.getDefault().setProcessLimit(limit);
824c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
825eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
826eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
827eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
828eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
829d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
830d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
831d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
832d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
833d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
834d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
835d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
83634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
837d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
838d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
839d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
84034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void updateEnableTracesOptions() {
84134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long flags = SystemProperties.getLong(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS, 0);
84234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
84334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        int numSet = 0;
84434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
84534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            boolean set = (flags&(1<<i)) != 0;
84634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setValue(i-Trace.TRACE_FLAGS_START_BIT, set);
84734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (set) {
84834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                numSet++;
84934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
85034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
85134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        if (numSet == 0) {
85234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_none);
85334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (numSet == values.length) {
85434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
85534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(R.string.enable_traces_summary_all);
85634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else {
85734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
85834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mEnableTracesPref.setSummary(getString(R.string.enable_traces_summary_num, numSet));
85934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
86034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
86134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
86234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions() {
86334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        long value = 0;
86434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        String[] values = mEnableTracesPref.getEntryValues();
86534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
86634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (mEnableTracesPref.getValue(i-Trace.TRACE_FLAGS_START_BIT)) {
86734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                value |= 1<<i;
86834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
86934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
87034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        writeEnableTracesOptions(value);
87134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        // Make sure summary is updated.
87234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        updateEnableTracesOptions();
87334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
87434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
87534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private void writeEnableTracesOptions(long value) {
87634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        SystemProperties.set(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS,
87734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                "0x" + Long.toString(value, 16));
87887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
87934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
88034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
881afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
88214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
88314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (buttonView == mEnabledSwitch) {
88414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (isChecked != mLastEnabledState) {
88514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (isChecked) {
88614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mDialogClicked = false;
88714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    if (mEnableDialog != null) dismissDialogs();
88814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
88914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            getActivity().getResources().getString(
89014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                                    R.string.dev_settings_warning_message))
89114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setTitle(R.string.dev_settings_warning_title)
892c8272b075275f81ddfb9cef2f92514b7ce3365deBjörn Lundén                            .setIconAttribute(android.R.attr.alertDialogIcon)
89314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setPositiveButton(android.R.string.yes, this)
89414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .setNegativeButton(android.R.string.no, this)
89514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                            .show();
89614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mEnableDialog.setOnDismissListener(this);
89714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                } else {
89814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    resetDangerousOptions();
8995a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.putInt(getActivity().getContentResolver(),
9005a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
90114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    mLastEnabledState = isChecked;
90214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                    setPrefsEnabledState(mLastEnabledState);
90314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                }
90414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
90514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
90614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
90714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
90814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
9099244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
9109244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
9119244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
9129244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
9139244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
9149244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
9159244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
9169244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
9179244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
9189244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
9199244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
9209244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
9219244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
922afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
923afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
924a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
925afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
926afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
927afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
928afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
929b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
93014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
93114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
93214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
933ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
934b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
935e7c53b1c9e48c6f997c47a0ca9a2f190ecbbf586Björn Lundén                        .setIconAttribute(android.R.attr.alertDialogIcon)
936b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
937b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
93824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
93914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
940b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
9415a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
9425a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 0);
943f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(false);
944f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setChecked(false);
945b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
9462d803a3931797891a30158c1a912ce775049f974Dianne Hackborn        } else if (preference == mBugreportInPower) {
9472d803a3931797891a30158c1a912ce775049f974Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
9482d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    Settings.Secure.BUGREPORT_IN_POWER_MENU,
9492d803a3931797891a30158c1a912ce775049f974Dianne Hackborn                    mBugreportInPower.isChecked() ? 1 : 0);
950afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
9515a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
9525a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
953afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
954afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
955caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } else if (preference == mEnforceReadExternal) {
956caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            if (mEnforceReadExternal.isChecked()) {
957caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                ConfirmEnforceFragment.show(this);
958caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            } else {
959caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
960caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            }
961afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
962ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn            Settings.Secure.putInt(getActivity().getContentResolver(),
963ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                    Settings.Secure.ALLOW_MOCK_LOCATION,
964afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
9659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
9669244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            startActivityForResult(new Intent(getActivity(), AppPicker.class), RESULT_DEBUG_APP);
9679244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
9689244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
969f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings        } else if (preference == mVerifyAppsOverUsb) {
970f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings            writeVerifyAppsOverUsbOptions();
971eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
972eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
973eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
974eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
975f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
976f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
977eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
978e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
979e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
980e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
981eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowCpuUsage) {
982eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeCpuUsageOptions();
983eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
984eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
985d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
986d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
9870c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
9880c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
989c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mTrackFrameTime) {
990c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeTrackFrameTimeOptions();
991c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
992c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
993cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        } else if (preference == mShowHwLayersUpdates) {
994cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            writeShowHwLayersUpdatesOptions();
995098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        } else if (preference == mShowHwOverdraw) {
996098f493dba656dea272dc7015363321dbb32f3a8Romain Guy            writeShowHwOverdrawOptions();
997c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
998c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
999afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
100024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1001afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
1002afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
1003b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
100483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
100583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
100683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
100783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
100883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
100987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
101083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
101183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
101283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
101383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
101483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
101583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
1016b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
1017b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
1018b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
101983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
1020b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        } else if (preference == mOverlayDisplayDevices) {
1021b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            writeOverlayDisplayDevicesOptions(newValue);
1022b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            return true;
102334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        } else if (preference == mEnableTracesPref) {
102434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            writeEnableTracesOptions();
102534481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            return true;
102683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
102783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
102883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
102983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
103083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
103183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
103283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
103314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
103414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
103514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
103614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
103714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
103814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
103914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
104014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
104114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
104224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
104324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
1044b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
104514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
104614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
104714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
10485a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
10495a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 1);
1050f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                mVerifyAppsOverUsb.setEnabled(true);
1051f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings                updateVerifyAppsOverUsbOptions();
105214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
105314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
105414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
105514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
105614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
105714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
105814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
10595a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
10605a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
106114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mLastEnabledState = true;
106214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                setPrefsEnabledState(mLastEnabledState);
106314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
106414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
106514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
106614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
1067b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1068b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
1069b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
1070b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
1071b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
107214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
107314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
107414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
107514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
107614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
107714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
107814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
107914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnabledSwitch.setChecked(false);
108014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
108114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
1082b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
1083b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
108424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
108524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
108624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
108714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
108824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
108924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
109087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
109187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
109287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
1093cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            //noinspection unchecked
109487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
109587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
109687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
109787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
109887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
109987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
110087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
110187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            String[] services;
110287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            try {
110387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                services = ServiceManager.listServices();
110487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            } catch (RemoteException e) {
110587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                return null;
110687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
110787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
110887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
110987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
111087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
111187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
111287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
111387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
111487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
111587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
111687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
111787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
111887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
111987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
112087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
1121caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1122caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    /**
1123cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy     * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}.
1124caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey     */
1125caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    public static class ConfirmEnforceFragment extends DialogFragment {
1126caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public static void show(DevelopmentSettings parent) {
1127caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
1128caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.setTargetFragment(parent, 0);
1129caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
1130caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1131caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1132caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        @Override
1133caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        public Dialog onCreateDialog(Bundle savedInstanceState) {
1134caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final Context context = getActivity();
1135caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1136caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
1137caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setTitle(R.string.enforce_read_external_confirm_title);
1138caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setMessage(R.string.enforce_read_external_confirm_message);
1139caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1140caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
1141caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1142caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1143caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
1144caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1145caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1146caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1147caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
1148caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                @Override
1149caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                public void onClick(DialogInterface dialog, int which) {
1150caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
1151caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                }
1152caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            });
1153caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1154caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            return builder.create();
1155caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1156caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1157caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1158cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static boolean isPermissionEnforced(String permission) {
1159caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1160cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            return ActivityThread.getPackageManager().isPermissionEnforced(permission);
1161caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1162caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1163caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1164caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1165caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
1166caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    private static void setPermissionEnforced(
1167caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            Context context, String permission, boolean enforced) {
1168caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        try {
1169caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            // TODO: offload to background thread
1170caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            ActivityThread.getPackageManager()
1171caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey                    .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
1172caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        } catch (RemoteException e) {
1173caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey            throw new RuntimeException("Problem talking with PackageManager", e);
1174caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        }
1175caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey    }
1176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1177