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
1711d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangpackage com.android.settings.development;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganovimport android.Manifest;
2014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.app.Activity;
21acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shankaimport android.app.ActivityManager;
22b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganovimport android.app.AppOpsManager;
2402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganovimport android.app.AppOpsManager.PackageOps;
2524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
26fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.app.backup.IBackupManager;
27c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavovimport android.bluetooth.BluetoothA2dp;
2884bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xuimport android.bluetooth.BluetoothAdapter;
29c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavovimport android.bluetooth.BluetoothCodecConfig;
302829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavovimport android.bluetooth.BluetoothCodecStatus;
3137fb338cda1066e20a813ce0d33b38fa0840bdcbJack Heimport android.bluetooth.BluetoothHeadset;
32c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavovimport android.bluetooth.BluetoothProfile;
333f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwoodimport android.content.BroadcastReceiver;
34ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver;
35fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tateimport android.content.Context;
36b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
37eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.content.Intent;
383f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwoodimport android.content.IntentFilter;
399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackbornimport android.content.pm.ApplicationInfo;
40bdcce705728bc46addca29736653863fe22f5659Makoto Onukiimport android.content.pm.IShortcutService;
41498fbe470e8201ed6d4a1677025b274d9ca65e0bKenny Rootimport android.content.pm.PackageManager;
42078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkeyimport android.content.pm.PackageManager.NameNotFoundException;
4373bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Moralesimport android.content.res.Resources;
440761ffca609244eac10dd9cba8dc126add060138Benoit Gobyimport android.hardware.usb.IUsbManager;
453f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwoodimport android.hardware.usb.UsbManager;
46c9a6698fd44492841bf83bead93b62ecba8a967evandwalleimport android.net.wifi.WifiManager;
4787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackbornimport android.os.AsyncTask;
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
49f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build;
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
51eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.IBinder;
52eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.Parcel;
53eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.RemoteException;
54eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.ServiceManager;
55eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.os.StrictMode;
56f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties;
576c088cb221bb43d47be065387231ffa7192ff211Julia Reynoldsimport android.os.UserManager;
58ee2d592c727a18131a051c1389b1867906e18449Sudheer Shankaimport android.os.storage.IStorageManager;
59ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Moralesimport android.provider.SearchIndexableResource;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
61e98178bd58667b6ad756bf8a214547502185d66fFan Zhangimport android.service.persistentdata.PersistentDataBlockManager;
62ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhangimport android.support.annotation.VisibleForTesting;
6339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference;
6439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.ListPreference;
6539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
6639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceChangeListener;
6739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceGroup;
6839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen;
690998abfc8f38c10fb4db336f412617a9e1774f72Steven Ngimport android.telephony.TelephonyManager;
70eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.text.TextUtils;
71d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackbornimport android.util.Log;
72eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackbornimport android.view.IWindowManager;
732c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissenimport android.view.LayoutInflater;
74e98178bd58667b6ad756bf8a214547502185d66fFan Zhangimport android.view.ThreadedRenderer;
75c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guyimport android.view.View;
762c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissenimport android.view.ViewGroup;
77fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viveretteimport android.view.accessibility.AccessibilityManager;
780d54bbf065cd616ebe5f4b4b2649c53887c9ecf9Gustav Senntonimport android.webkit.IWebViewUpdateService;
794d3334c50b07c60c137085a35a8fb670eabd2acaGustav Senntonimport android.webkit.WebViewFactory;
8014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackbornimport android.widget.Switch;
818897655d2e19daffbb721188a23d3443e045df00Steve Pfetschimport android.widget.Toast;
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
8371043766921dd1160adeb63c411204bffee6ff97Mihai Nitaimport com.android.internal.app.LocalePicker;
84265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
8511d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangimport com.android.settings.ChooseLockSettingsHelper;
8611d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangimport com.android.settings.R;
8711d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangimport com.android.settings.RestrictedSettingsFragment;
8811d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangimport com.android.settings.SettingsActivity;
8911d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhangimport com.android.settings.Utils;
90ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhangimport com.android.settings.dashboard.DashboardFeatureProvider;
91ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhangimport com.android.settings.overlay.FeatureFactory;
92ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Moralesimport com.android.settings.search.BaseSearchIndexProvider;
93ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Moralesimport com.android.settings.search.Indexable;
944d3334c50b07c60c137085a35a8fb670eabd2acaGustav Senntonimport com.android.settings.webview.WebViewAppPreferenceController;
95f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglioimport com.android.settings.widget.SwitchBar;
96c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils;
97c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
98c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shankaimport com.android.settingslib.RestrictedSwitchPreference;
99ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhangimport com.android.settingslib.drawer.CategoryKey;
100f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom
101caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkeyimport java.util.ArrayList;
102ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Moralesimport java.util.Arrays;
103f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackbornimport java.util.HashSet;
104f04211443e9cae815ad89f821b6ec83ec2790c0crich canningsimport java.util.List;
105caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
1097dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shankapublic class DevelopmentSettings extends RestrictedSettingsFragment
110f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
111ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener, Indexable {
1120761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private static final String TAG = "DevelopmentSettings";
113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
114caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
115caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Preference file were development settings prefs are stored.
116caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
117caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_FILE = "development";
118caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
119caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    /**
120caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     * Whether to show the development settings to the user.  Default is false.
121caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn     */
122caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn    public static final String PREF_SHOW = "show";
123caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
1250761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private static final String CLEAR_ADB_KEYS = "clear_adb_keys";
126d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey    private static final String ENABLE_TERMINAL = "enable_terminal";
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
12884bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu    private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
129ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
130f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_KEY = "hdcp_checking";
131f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
132fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
1330c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
1346a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
135025cafcfa153fe0f8dab2bfe07c392ff5403d326Romain Guy    private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
136ee1a06eee3ba73c0382332eae98a14fbacffa352Jason Monk    private static final String TUNER_UI_KEY = "tuner_ui";
137b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    private static final String COLOR_TEMPERATURE_PROPERTY = "persist.sys.debug.color_temp";
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String DEBUG_APP_KEY = "debug_app";
1409244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
14102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private static final String MOCK_LOCATION_APP_KEY = "mock_location_app";
142ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    private static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
14397162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy    private static final String FORCE_ALLOW_ON_EXTERNAL_KEY = "force_allow_on_external";
144eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String STRICT_MODE_KEY = "strict_mode";
145eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String POINTER_LOCATION_KEY = "pointer_location";
146f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private static final String SHOW_TOUCHES_KEY = "show_touches";
147eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
148e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
149fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    private static final String SIMULATE_COLOR_SPACE = "simulate_color_space";
150ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten    private static final String USB_AUDIO_KEY = "usb_audio";
1510c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
1526a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private static final String FORCE_MSAA_KEY = "force_msaa";
153c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
1546b24c458139091836486cce774a2e1255668e001Romain Guy    private static final String SHOW_NON_RECTANGULAR_CLIP_KEY = "show_non_rect_clip";
155c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
156cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
157eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy    private static final String DEBUG_HW_OVERDRAW_KEY = "debug_hw_overdraw";
158f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    private static final String DEBUG_HW_RENDERER_KEY = "debug_hw_renderer";
159c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static final String DEBUG_LAYOUT_KEY = "debug_layout";
160df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani    private static final String FORCE_RTL_LAYOUT_KEY = "force_rtl_layout_all_locales";
161eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
162eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
163b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
164b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
165f04211443e9cae815ad89f821b6ec83ec2790c0crich cannings    private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
1668fc9341b38c45f71733636cd398afbe7238dcf6eLorenzo Colitti    private static final String SELECT_LOGD_SIZE_KEY = "select_logd_size";
1678fc9341b38c45f71733636cd398afbe7238dcf6eLorenzo Colitti    private static final String SELECT_LOGD_SIZE_PROPERTY = "persist.logd.size";
168285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn    private static final String SELECT_LOGD_TAG_PROPERTY = "persist.log.tag";
1698fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    // Tricky, isLoggable only checks for first character, assumes silence
1708fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_TAG_SILENCE = "Settings";
1718fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_SNET_TAG_PROPERTY = "persist.log.tag.snet_event_log";
1728fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_RUNTIME_SNET_TAG_PROPERTY = "log.tag.snet_event_log";
1738fc9341b38c45f71733636cd398afbe7238dcf6eLorenzo Colitti    private static final String SELECT_LOGD_DEFAULT_SIZE_PROPERTY = "ro.logd.size";
1748fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_DEFAULT_SIZE_VALUE = "262144";
1758fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_SVELTE_DEFAULT_SIZE_VALUE = "65536";
1768fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    // 32768 is merely a menu marker, 64K is our lowest log buffer size we replace it with.
1778fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_MINIMUM_SIZE_VALUE = "65536";
1788fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private static final String SELECT_LOGD_OFF_SIZE_MARKER_VALUE = "32768";
179c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private static final String SELECT_LOGPERSIST_KEY = "select_logpersist";
180c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private static final String SELECT_LOGPERSIST_PROPERTY = "persist.logd.logpersistd";
181bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn    private static final String ACTUAL_LOGPERSIST_PROPERTY = "logd.logpersistd";
182c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private static final String SELECT_LOGPERSIST_PROPERTY_SERVICE = "logcatd";
183c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private static final String SELECT_LOGPERSIST_PROPERTY_CLEAR = "clear";
184c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private static final String SELECT_LOGPERSIST_PROPERTY_STOP = "stop";
185ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    private static final String SELECT_LOGPERSIST_PROPERTY_BUFFER =
186ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            "persist.logd.logpersistd.buffer";
187bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn    private static final String ACTUAL_LOGPERSIST_PROPERTY_BUFFER = "logd.logpersistd.buffer";
188bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn    private static final String ACTUAL_LOGPERSIST_PROPERTY_ENABLE = "logd.logpersistd.enable";
1898fc9341b38c45f71733636cd398afbe7238dcf6eLorenzo Colitti
1906c607384c478958260952b82932b9084a4536fc6Chong Zhang    private static final String WIFI_DISPLAY_CERTIFICATION_KEY = "wifi_display_certification";
191c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    private static final String WIFI_VERBOSE_LOGGING_KEY = "wifi_verbose_logging";
1925e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private static final String WIFI_AGGRESSIVE_HANDOVER_KEY = "wifi_aggressive_handover";
1935e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private static final String WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY = "wifi_allow_scan_with_traffic";
1943f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    private static final String USB_CONFIGURATION_KEY = "select_usb_configuration";
19554861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    private static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
19616a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk    private static final String KEY_COLOR_MODE = "color_mode";
197b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    private static final String FORCE_RESIZABLE_KEY = "force_resizable_activities";
198b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    private static final String COLOR_TEMPERATURE_KEY = "color_temperature";
1999225bc538d58f2fd780793cf8e971b5d2ebbfc77Jared Duke
200591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY =
201ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            "bluetooth_disable_absolute_volume";
202591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY =
203ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            "persist.bluetooth.disableabsvol";
204da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker    private static final String BLUETOOTH_AVRCP_VERSION_PROPERTY =
205da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker                                    "persist.bluetooth.avrcpversion";
20637fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    private static final String BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY =
20737fb338cda1066e20a813ce0d33b38fa0840bdcbJack He                                    "persist.bluetooth.enableinbandringing";
208a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker    private static final String BLUETOOTH_BTSNOOP_ENABLE_PROPERTY =
209a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker                                    "persist.bluetooth.btsnoopenable";
210591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach
21137fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    private static final String BLUETOOTH_ENABLE_INBAND_RINGING_KEY = "bluetooth_enable_inband_ringing";
212da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker    private static final String BLUETOOTH_SELECT_AVRCP_VERSION_KEY = "bluetooth_select_avrcp_version";
213c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec";
214c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private static final String BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY = "bluetooth_select_a2dp_sample_rate";
215c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY = "bluetooth_select_a2dp_bits_per_sample";
216c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY = "bluetooth_select_a2dp_channel_mode";
217c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private static final String BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY = "bluetooth_select_a2dp_ldac_playback_quality";
218c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
21950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    private static final String INACTIVE_APPS_KEY = "inactive_apps";
22050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
221eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
222eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            = "immediately_destroy_activities";
223eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
224eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
225f467c0acacd834257189dd73f260939a742114f9Dianne Hackborn    private static final String BACKGROUND_CHECK_KEY = "background_check";
226f467c0acacd834257189dd73f260939a742114f9Dianne Hackborn
227d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
228d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
229e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    private static final String SHOW_NOTIFICATION_CHANNEL_WARNINGS_KEY = "show_notification_channel_warnings";
230e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch
231d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey    private static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
232d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey
233acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence    private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
234df283601c571e74015c9c79c7d2d5865d1a8c9eeJason Monk
23545a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao    private static final String OTA_DISABLE_AUTOMATIC_UPDATE_KEY = "ota_disable_automatic_update";
23645a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao
2379244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private static final int RESULT_DEBUG_APP = 1000;
23802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private static final int RESULT_MOCK_LOCATION_APP = 1001;
2399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
240ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
241e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales    private static final String FLASH_LOCKED_PROP = "ro.boot.flash.locked";
242ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
243bdcce705728bc46addca29736653863fe22f5659Makoto Onuki    private static final String SHORTCUT_MANAGER_RESET_KEY = "reset_shortcut_manager_throttling";
244bdcce705728bc46addca29736653863fe22f5659Makoto Onuki
24573bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales    private static final int REQUEST_CODE_ENABLE_OEM_UNLOCK = 0;
24673bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales
247ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    private static final int[] MOCK_LOCATION_APP_OPS = new int[]{AppOpsManager.OP_MOCK_LOCATION};
24802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
249eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private IWindowManager mWindowManager;
250fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private IBackupManager mBackupManager;
251f8364f597b181df0005b529aa74920e30c4b5dd9Tobias Sargeant    private IWebViewUpdateService mWebViewUpdateService;
2526c088cb221bb43d47be065387231ffa7192ff211Julia Reynolds    private UserManager mUm;
253c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    private WifiManager mWifiManager;
254fb2bae951960d89cf4052212211e8961037e7e6fAndres Morales    private PersistentDataBlockManager mOemUnlockManager;
2550998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    private TelephonyManager mTelephonyManager;
256eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
257f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio    private SwitchBar mSwitchBar;
258748649b006ca842af9f916f45816ee704d27a46eFan Zhang
25934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    private boolean mHaveDebugSettings;
26087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    private boolean mDontPokeProperties;
261886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mEnableAdb;
2620761ffca609244eac10dd9cba8dc126add060138Benoit Goby    private Preference mClearAdbKeys;
263886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mEnableTerminal;
264c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka    private RestrictedSwitchPreference mKeepScreenOn;
265886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mBtHciSnoopLog;
266dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra    private RestrictedSwitchPreference mEnableOemUnlock;
267886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mDebugViewAttributes;
26897162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy    private SwitchPreference mForceAllowOnExternal;
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
2701c118b5f2a9d88b51c0c6a66443ff439ca377cabFan Zhang    private Preference mPassword;
2719244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private String mDebugApp;
2729244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private Preference mDebugAppPref;
27302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
27402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private String mMockLocationApp;
27502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private Preference mMockLocationAppPref;
27602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
277886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mWaitForDebugger;
278f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov    private VerifyAppsOverUsbPreferenceController mVerifyAppsOverUsbController;
279886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mWifiDisplayCertification;
280886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mWifiVerboseLogging;
281886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mWifiAggressiveHandover;
28254861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    private SwitchPreference mMobileDataAlwaysOn;
283591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    private SwitchPreference mBluetoothDisableAbsVolume;
28437fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    private SwitchPreference mBluetoothEnableInbandRinging;
285886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio
286c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private BluetoothA2dp mBluetoothA2dp;
287c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private final Object mBluetoothA2dpLock = new Object();
288da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker    private ListPreference mBluetoothSelectAvrcpVersion;
289c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private ListPreference mBluetoothSelectA2dpCodec;
290c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private ListPreference mBluetoothSelectA2dpSampleRate;
291c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private ListPreference mBluetoothSelectA2dpBitsPerSample;
292c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private ListPreference mBluetoothSelectA2dpChannelMode;
293c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private ListPreference mBluetoothSelectA2dpLdacPlaybackQuality;
294c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
295c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private SwitchPreference mOtaDisableAutomaticUpdate;
296886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mWifiAllowScansWithTraffic;
297886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mStrictMode;
298886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mPointerLocation;
299886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mShowTouches;
300886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mShowScreenUpdates;
301886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mDisableOverlays;
302886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mForceHardwareUi;
303886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mForceMsaa;
304886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mShowHwScreenUpdates;
305886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mShowHwLayersUpdates;
306886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mDebugLayout;
307886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mForceRtlLayout;
308eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy    private ListPreference mDebugHwOverdraw;
309f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    private ListPreference mDebugHwRenderer;
310408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn    private ListPreference mLogdSize;
311c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private ListPreference mLogpersist;
3123f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    private ListPreference mUsbConfiguration;
31370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private ListPreference mTrackFrameTime;
3146b24c458139091836486cce774a2e1255668e001Romain Guy    private ListPreference mShowNonRectClip;
315eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mWindowAnimationScale;
316eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mTransitionAnimationScale;
317b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase    private ListPreference mAnimatorDurationScale;
318b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private ListPreference mOverlayDisplayDevices;
319f8364f597b181df0005b529aa74920e30c4b5dd9Tobias Sargeant
3204d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton    private WebViewAppPreferenceController mWebViewAppPrefController;
321ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
322fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    private ListPreference mSimulateColorSpace;
323eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
324886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mUSBAudio;
325886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mImmediatelyDestroyActivities;
326ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
327eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private ListPreference mAppProcessLimit;
328eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
329886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference mShowAllANRs;
330d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
331e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    private SwitchPreference mShowNotificationChannelWarnings;
332e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch
33316a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk    private ColorModePreference mColorModePreference;
33416a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk
335b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    private SwitchPreference mForceResizable;
336b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi
337b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    private SwitchPreference mColorTemperaturePreference;
338b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch
33914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
340ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
341886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private final ArrayList<SwitchPreference> mResetSwitchPrefs
342886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio            = new ArrayList<SwitchPreference>();
343b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
344f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
34514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    // To track whether a confirmation dialog was clicked.
34614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private boolean mDialogClicked;
34714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mEnableDialog;
34814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private Dialog mAdbDialog;
34924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
350ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    private Dialog mAdbKeysDialog;
351c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani    private boolean mUnavailable;
352c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
353c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private boolean mLogpersistCleared;
354c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private Dialog mLogpersistClearDialog;
355ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    private DashboardFeatureProvider mDashboardFeatureProvider;
356748649b006ca842af9f916f45816ee704d27a46eFan Zhang    private DevelopmentSettingsEnabler mSettingsEnabler;
357cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling    private BugReportPreferenceController mBugReportController;
358cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling    private BugReportInPowerPreferenceController mBugReportInPowerController;
359607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang    private TelephonyMonitorPreferenceController mTelephonyMonitorController;
360c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
3617dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka    public DevelopmentSettings() {
3627dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka        super(UserManager.DISALLOW_DEBUGGING_FEATURES);
3637dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka    }
3647dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka
365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
3666507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang    public int getMetricsCategory() {
3679d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.DEVELOPMENT;
3688a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
3698a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
3708a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
371ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    public void onAttach(Context context) {
372ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        super.onAttach(context);
373748649b006ca842af9f916f45816ee704d27a46eFan Zhang        mSettingsEnabler = new DevelopmentSettingsEnabler(context, getLifecycle());
374ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        mDashboardFeatureProvider = FeatureFactory.getFactory(context)
375ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                .getDashboardFeatureProvider(context);
376ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    }
377ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang
378ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    @Override
379ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onCreate(Bundle icicle) {
380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
382eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
383fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        mBackupManager = IBackupManager.Stub.asInterface(
384fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                ServiceManager.getService(Context.BACKUP_SERVICE));
3854d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        mWebViewUpdateService = WebViewFactory.getUpdateService();
386ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        mOemUnlockManager = (PersistentDataBlockManager) getActivity()
387fb2bae951960d89cf4052212211e8961037e7e6fAndres Morales                .getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
3880998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
389f8364f597b181df0005b529aa74920e30c4b5dd9Tobias Sargeant
3906c088cb221bb43d47be065387231ffa7192ff211Julia Reynolds        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
391eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
392c9a6698fd44492841bf83bead93b62ecba8a967evandwalle        mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
393c9a6698fd44492841bf83bead93b62ecba8a967evandwalle
394cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportController = new BugReportPreferenceController(getActivity());
395cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportInPowerController = new BugReportInPowerPreferenceController(getActivity());
396607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        mTelephonyMonitorController = new TelephonyMonitorPreferenceController(getActivity());
3974d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        mWebViewAppPrefController = new WebViewAppPreferenceController(getActivity());
398f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov        mVerifyAppsOverUsbController = new VerifyAppsOverUsbPreferenceController(getActivity());
399cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling
4007dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka        setIfOnlyAvailableForAdmins(true);
401679f7ad07e4e2a4b4c6645d05bca92790394c2fdUdam Saini        if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
4024836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner            // Block access to developer options if the user is not the owner, if user policy
4034836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner            // restricts it, or if the device has not been provisioned
404c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            mUnavailable = true;
40576f46fc8694dd445dc0c3559c6c44d22fc269848Tony Mantler            addPreferencesFromResource(R.xml.empty_settings);
406c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
407c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
408c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
409afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
411078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        final PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
412078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey                findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
413886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mEnableAdb = findAndInitSwitchPref(ENABLE_ADB);
4140761ffca609244eac10dd9cba8dc126add060138Benoit Goby        mClearAdbKeys = findPreference(CLEAR_ADB_KEYS);
4150761ffca609244eac10dd9cba8dc126add060138Benoit Goby        if (!SystemProperties.getBoolean("ro.adb.secure", false)) {
4160761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (debugDebuggingCategory != null) {
4170761ffca609244eac10dd9cba8dc126add060138Benoit Goby                debugDebuggingCategory.removePreference(mClearAdbKeys);
4180761ffca609244eac10dd9cba8dc126add060138Benoit Goby            }
4190761ffca609244eac10dd9cba8dc126add060138Benoit Goby        }
4201b5edd535f2bd3d8209598e13c6e8f0424b30e26Fabrice Di Meglio        mAllPrefs.add(mClearAdbKeys);
421886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mEnableTerminal = findAndInitSwitchPref(ENABLE_TERMINAL);
422078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        if (!isPackageInstalled(getActivity(), TERMINAL_APP_PACKAGE)) {
423078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey            debugDebuggingCategory.removePreference(mEnableTerminal);
424078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey            mEnableTerminal = null;
425078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        }
4260761ffca609244eac10dd9cba8dc126add060138Benoit Goby
427cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportController.displayPreference(getPreferenceScreen());
428cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportInPowerController.displayPreference(getPreferenceScreen());
429607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        mTelephonyMonitorController.displayPreference(getPreferenceScreen());
4304d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        mWebViewAppPrefController.displayPreference(getPreferenceScreen());
431cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling
432c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
433886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
434dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra        mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
435ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales        if (!showEnableOemUnlockPreference()) {
436ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales            removePreference(mEnableOemUnlock);
4377568392c00137bc0bd116763124d41e6d762b79cAndres Morales            mEnableOemUnlock = null;
438ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales        }
43902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
440886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mDebugViewAttributes = findAndInitSwitchPref(DEBUG_VIEW_ATTRIBUTES);
44197162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy        mForceAllowOnExternal = findAndInitSwitchPref(FORCE_ALLOW_ON_EXTERNAL_KEY);
4421c118b5f2a9d88b51c0c6a66443ff439ca377cabFan Zhang        mPassword = findPreference(LOCAL_BACKUP_PASSWORD);
44314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mPassword);
444f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
44544879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen        if (!mUm.isAdminUser()) {
44648d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mEnableAdb);
4470761ffca609244eac10dd9cba8dc126add060138Benoit Goby            disableForUser(mClearAdbKeys);
448d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey            disableForUser(mEnableTerminal);
44948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            disableForUser(mPassword);
45048d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
45148d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
4529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mDebugAppPref = findPreference(DEBUG_APP_KEY);
4539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        mAllPrefs.add(mDebugAppPref);
454886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mWaitForDebugger = findAndInitSwitchPref(WAIT_FOR_DEBUGGER_KEY);
45502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
45602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        mMockLocationAppPref = findPreference(MOCK_LOCATION_APP_KEY);
45702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        mAllPrefs.add(mMockLocationAppPref);
45802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
459f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov        mVerifyAppsOverUsbController.displayPreference(getPreferenceScreen());
460f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov
461886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mStrictMode = findAndInitSwitchPref(STRICT_MODE_KEY);
462886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mPointerLocation = findAndInitSwitchPref(POINTER_LOCATION_KEY);
463886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mShowTouches = findAndInitSwitchPref(SHOW_TOUCHES_KEY);
464886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mShowScreenUpdates = findAndInitSwitchPref(SHOW_SCREEN_UPDATES_KEY);
465886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mDisableOverlays = findAndInitSwitchPref(DISABLE_OVERLAYS_KEY);
466886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mForceHardwareUi = findAndInitSwitchPref(FORCE_HARDWARE_UI_KEY);
467886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mForceMsaa = findAndInitSwitchPref(FORCE_MSAA_KEY);
4686b24c458139091836486cce774a2e1255668e001Romain Guy        mTrackFrameTime = addListPreference(TRACK_FRAME_TIME_KEY);
4696b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip = addListPreference(SHOW_NON_RECTANGULAR_CLIP_KEY);
470886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mShowHwScreenUpdates = findAndInitSwitchPref(SHOW_HW_SCREEN_UPDATES_KEY);
471886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mShowHwLayersUpdates = findAndInitSwitchPref(SHOW_HW_LAYERS_UPDATES_KEY);
472886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mDebugLayout = findAndInitSwitchPref(DEBUG_LAYOUT_KEY);
473886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mForceRtlLayout = findAndInitSwitchPref(FORCE_RTL_LAYOUT_KEY);
474eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        mDebugHwOverdraw = addListPreference(DEBUG_HW_OVERDRAW_KEY);
475f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        mDebugHwRenderer = addListPreference(DEBUG_HW_RENDERER_KEY);
476886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mWifiDisplayCertification = findAndInitSwitchPref(WIFI_DISPLAY_CERTIFICATION_KEY);
477886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mWifiVerboseLogging = findAndInitSwitchPref(WIFI_VERBOSE_LOGGING_KEY);
478886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mWifiAggressiveHandover = findAndInitSwitchPref(WIFI_AGGRESSIVE_HANDOVER_KEY);
479886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mWifiAllowScansWithTraffic = findAndInitSwitchPref(WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY);
48054861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline        mMobileDataAlwaysOn = findAndInitSwitchPref(MOBILE_DATA_ALWAYS_ON);
481408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        mLogdSize = addListPreference(SELECT_LOGD_SIZE_KEY);
482c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if ("1".equals(SystemProperties.get("ro.debuggable", "0"))) {
483c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersist = addListPreference(SELECT_LOGPERSIST_KEY);
484c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        } else {
485c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersist = (ListPreference) findPreference(SELECT_LOGPERSIST_KEY);
486c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            if (mLogpersist != null) {
487c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                mLogpersist.setEnabled(false);
488c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                if (debugDebuggingCategory != null) {
489c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    debugDebuggingCategory.removePreference(mLogpersist);
490c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                }
491c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            }
492c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersist = null;
493c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
4943f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
495591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach        mBluetoothDisableAbsVolume = findAndInitSwitchPref(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY);
49637fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        mBluetoothEnableInbandRinging = findAndInitSwitchPref(BLUETOOTH_ENABLE_INBAND_RINGING_KEY);
49737fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        if (!BluetoothHeadset.isInbandRingingSupported(getContext())) {
49837fb338cda1066e20a813ce0d33b38fa0840bdcbJack He            removePreference(mBluetoothEnableInbandRinging);
49937fb338cda1066e20a813ce0d33b38fa0840bdcbJack He            mBluetoothEnableInbandRinging = null;
50037fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        }
501408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn
502da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        mBluetoothSelectAvrcpVersion = addListPreference(BLUETOOTH_SELECT_AVRCP_VERSION_KEY);
503c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpCodec = addListPreference(BLUETOOTH_SELECT_A2DP_CODEC_KEY);
504c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpSampleRate = addListPreference(BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY);
505c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpBitsPerSample = addListPreference(BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY);
506c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpChannelMode = addListPreference(BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY);
507c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpLdacPlaybackQuality = addListPreference(BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY);
5080a63e8b768b4c10b93acb1cafcfcf027f4817558Pavlin Radoslavov        initBluetoothConfigurationValues();
509c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
5106b24c458139091836486cce774a2e1255668e001Romain Guy        mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
5116b24c458139091836486cce774a2e1255668e001Romain Guy        mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
5126b24c458139091836486cce774a2e1255668e001Romain Guy        mAnimatorDurationScale = addListPreference(ANIMATOR_DURATION_SCALE_KEY);
5136b24c458139091836486cce774a2e1255668e001Romain Guy        mOverlayDisplayDevices = addListPreference(OVERLAY_DISPLAY_DEVICES_KEY);
514fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        mSimulateColorSpace = addListPreference(SIMULATE_COLOR_SPACE);
515886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mUSBAudio = findAndInitSwitchPref(USB_AUDIO_KEY);
516b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi        mForceResizable = findAndInitSwitchPref(FORCE_RESIZABLE_KEY);
517eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
518886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mImmediatelyDestroyActivities = (SwitchPreference) findPreference(
519eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
52014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mImmediatelyDestroyActivities);
521886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mResetSwitchPrefs.add(mImmediatelyDestroyActivities);
5221b5edd535f2bd3d8209598e13c6e8f0424b30e26Fabrice Di Meglio
5236b24c458139091836486cce774a2e1255668e001Romain Guy        mAppProcessLimit = addListPreference(APP_PROCESS_LIMIT_KEY);
524eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
525886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mShowAllANRs = (SwitchPreference) findPreference(
526d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                SHOW_ALL_ANRS_KEY);
52714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        mAllPrefs.add(mShowAllANRs);
528886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mResetSwitchPrefs.add(mShowAllANRs);
529d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
530e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        mShowNotificationChannelWarnings = (SwitchPreference) findPreference(
531e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch                SHOW_NOTIFICATION_CHANNEL_WARNINGS_KEY);
532e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        mAllPrefs.add(mShowNotificationChannelWarnings);
533e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        mResetSwitchPrefs.add(mShowNotificationChannelWarnings);
534e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch
53514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
53614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (hdcpChecking != null) {
53714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAllPrefs.add(hdcpChecking);
538f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom            removePreferenceForProduction(hdcpChecking);
53914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
540df283601c571e74015c9c79c7d2d5865d1a8c9eeJason Monk
5411c118b5f2a9d88b51c0c6a66443ff439ca377cabFan Zhang        Preference convertFbePreference = findPreference(KEY_CONVERT_FBE);
5420e1a46cf6cbecc2bd6fb6cf6661e61859b243e76Paul Lawrence
543acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence        try {
544acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence            IBinder service = ServiceManager.getService("mount");
545ee2d592c727a18131a051c1389b1867906e18449Sudheer Shanka            IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
546ee2d592c727a18131a051c1389b1867906e18449Sudheer Shanka            if (!storageManager.isConvertibleToFBE()) {
547acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence                removePreference(KEY_CONVERT_FBE);
5483bd73edbae9a4c476eb14a5a909d9e6658224a8aJeff Sharkey            } else if ("file".equals(SystemProperties.get("ro.crypto.type", "none"))) {
5490e1a46cf6cbecc2bd6fb6cf6661e61859b243e76Paul Lawrence                convertFbePreference.setEnabled(false);
5500e1a46cf6cbecc2bd6fb6cf6661e61859b243e76Paul Lawrence                convertFbePreference.setSummary(getResources()
551ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        .getString(R.string.convert_to_file_encryption_done));
552acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence            }
553ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        } catch (RemoteException e) {
554acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence            removePreference(KEY_CONVERT_FBE);
555acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence        }
556acbac8cdfeee704af0277a4579faa864b0ca20e0Paul Lawrence
55745a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        mOtaDisableAutomaticUpdate = findAndInitSwitchPref(OTA_DISABLE_AUTOMATIC_UPDATE_KEY);
55845a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao
55916a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        mColorModePreference = (ColorModePreference) findPreference(KEY_COLOR_MODE);
56016a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        mColorModePreference.updateCurrentAndSupported();
561aacf55ab3f3d6487871568432669afe28031f15bMichael Wright        if (mColorModePreference.getColorModeCount() < 2) {
56216a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk            removePreference(KEY_COLOR_MODE);
56316a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk            mColorModePreference = null;
56416a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        }
565b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch
566b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        mColorTemperaturePreference = (SwitchPreference) findPreference(COLOR_TEMPERATURE_KEY);
567b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        if (getResources().getBoolean(R.bool.config_enableColorTemperature)) {
568b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            mAllPrefs.add(mColorTemperaturePreference);
569b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            mResetSwitchPrefs.add(mColorTemperaturePreference);
570b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        } else {
571b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            removePreference(COLOR_TEMPERATURE_KEY);
572b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            mColorTemperaturePreference = null;
573b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        }
574ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang
575ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        addDashboardCategoryPreferences();
576ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    }
577ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang
578ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    @VisibleForTesting
579ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang    void addDashboardCategoryPreferences() {
580ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        final PreferenceScreen screen = getPreferenceScreen();
581ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
582c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang                getActivity(), getPrefContext(), getMetricsCategory(),
583c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang                CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
584ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        if (tilePrefs != null) {
585ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            for (Preference preference : tilePrefs) {
586ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                screen.addPreference(preference);
587ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            }
588ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        }
589f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
590f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
5916b24c458139091836486cce774a2e1255668e001Romain Guy    private ListPreference addListPreference(String prefKey) {
5926b24c458139091836486cce774a2e1255668e001Romain Guy        ListPreference pref = (ListPreference) findPreference(prefKey);
5936b24c458139091836486cce774a2e1255668e001Romain Guy        mAllPrefs.add(pref);
5946b24c458139091836486cce774a2e1255668e001Romain Guy        pref.setOnPreferenceChangeListener(this);
5956b24c458139091836486cce774a2e1255668e001Romain Guy        return pref;
5966b24c458139091836486cce774a2e1255668e001Romain Guy    }
5976b24c458139091836486cce774a2e1255668e001Romain Guy
59848d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    private void disableForUser(Preference pref) {
59948d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        if (pref != null) {
60048d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            pref.setEnabled(false);
60148d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani            mDisabledPrefs.add(pref);
60248d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani        }
60348d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani    }
60448d000ee2e54773b50079497f9d1e2e2ab570676Amith Yamasani
605886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    private SwitchPreference findAndInitSwitchPref(String key) {
606886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        SwitchPreference pref = (SwitchPreference) findPreference(key);
607c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        if (pref == null) {
608c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            throw new IllegalArgumentException("Cannot find preference with key = " + key);
609c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        }
610c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        mAllPrefs.add(pref);
611886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        mResetSwitchPrefs.add(pref);
612c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        return pref;
613c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
614c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
61514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
61614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    public void onActivityCreated(Bundle savedInstanceState) {
61714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        super.onActivityCreated(savedInstanceState);
61814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
619f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio        final SettingsActivity activity = (SettingsActivity) getActivity();
62014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
621f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio        mSwitchBar = activity.getSwitchBar();
622ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        if (mUnavailable) {
623138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio            mSwitchBar.setEnabled(false);
624c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
625c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
626138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio
627138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        mSwitchBar.addOnSwitchChangeListener(this);
62814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
62914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
630f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom    private boolean removePreferenceForProduction(Preference preference) {
631f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if ("user".equals(Build.TYPE)) {
632f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom            removePreference(preference);
633f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom            return true;
634f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
635f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom        return false;
636f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom    }
637f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom
638f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom    private void removePreference(Preference preference) {
639f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom        getPreferenceScreen().removePreference(preference);
640f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom        mAllPrefs.remove(preference);
6414c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale        mResetSwitchPrefs.remove(preference);
642afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
643afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
64414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void setPrefsEnabledState(boolean enabled) {
645c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        for (int i = 0; i < mAllPrefs.size(); i++) {
646f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            Preference pref = mAllPrefs.get(i);
647f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
64814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
649cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportInPowerController.enablePreference(enabled);
650607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        mTelephonyMonitorController.enablePreference(enabled);
6514d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        mWebViewAppPrefController.enablePreference(enabled);
6529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateAllOptions();
65314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
65414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
655afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
656ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn    public void onResume() {
657afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
65850cb76f58554dbccc51a754a73abef2debd8b721Ying Wang
659c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        if (mUnavailable) {
660c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            // Show error message
6617dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka            if (!isUiRestrictedByOnlyAdmin()) {
6627dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka                getEmptyTextView().setText(R.string.development_settings_not_available);
663c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            }
6647dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka            getPreferenceScreen().removeAll();
665c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani            return;
666c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani        }
667c39dcc1ce4d1885ef1de926b67e88cf2dd1acaffAmith Yamasani
668c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        // A DeviceAdmin has specified a maximum time until the device
669c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        // will lock...  in this case we can't allow the user to turn
670c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        // on "stay awake when plugged in" because that would defeat the
671c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        // restriction.
672c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        final EnforcedAdmin admin = RestrictedLockUtils.checkIfMaximumTimeToLockIsSet(
673c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka                getActivity());
674c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        mKeepScreenOn.setDisabledByAdmin(admin);
675c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        if (admin == null) {
676f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn            mDisabledPrefs.remove(mKeepScreenOn);
677c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka        } else {
678c779bece315324b6a8363641f03be3ee87d8e2d2Sudheer Shanka            mDisabledPrefs.add(mKeepScreenOn);
679f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn        }
680f34a8d75177f52bffeceaf308b65860015b45d5eDianne Hackborn
681748649b006ca842af9f916f45816ee704d27a46eFan Zhang        final boolean lastEnabledState = mSettingsEnabler.getLastEnabledState();
682748649b006ca842af9f916f45816ee704d27a46eFan Zhang        mSwitchBar.setChecked(lastEnabledState);
683748649b006ca842af9f916f45816ee704d27a46eFan Zhang        setPrefsEnabledState(lastEnabledState);
68434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
685748649b006ca842af9f916f45816ee704d27a46eFan Zhang        if (mHaveDebugSettings && !lastEnabledState) {
68634481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // Overall debugging is disabled, but there are some debug
68734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // settings that are enabled.  This is an invalid state.  Switch
68834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // to debug settings being enabled, so the user knows there is
68934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            // stuff enabled and can turn it all off if they want.
690748649b006ca842af9f916f45816ee704d27a46eFan Zhang            mSettingsEnabler.enableDevelopmentSettings();
691748649b006ca842af9f916f45816ee704d27a46eFan Zhang            mSwitchBar.setChecked(lastEnabledState);
692748649b006ca842af9f916f45816ee704d27a46eFan Zhang            setPrefsEnabledState(lastEnabledState);
69334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        }
69408190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio        mSwitchBar.show();
69516a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk
69616a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        if (mColorModePreference != null) {
69716a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk            mColorModePreference.startListening();
69816a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk            mColorModePreference.updateCurrentAndSupported();
69916a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        }
70016a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk    }
70116a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk
70216a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk    @Override
70316a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk    public void onPause() {
70416a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        super.onPause();
70516a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        if (mColorModePreference != null) {
70616a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk            mColorModePreference.stopListening();
70716a8e8d1028c09abe8b083acf9da70e6d65ebb79Jason Monk        }
70808190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio    }
70908190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio
71008190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio    @Override
7112c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen    public View onCreateView(LayoutInflater inflater, ViewGroup container,
7122c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen            Bundle savedInstanceState) {
7132c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen        IntentFilter filter = new IntentFilter();
7142c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen        filter.addAction(UsbManager.ACTION_USB_STATE);
7154a109b1d8790736bc5cca0d7f95d8b2abced6b59Yasuhiro Matsuda        if (getActivity().registerReceiver(mUsbReceiver, filter) == null) {
7164a109b1d8790736bc5cca0d7f95d8b2abced6b59Yasuhiro Matsuda            updateUsbConfigurationValues();
7174a109b1d8790736bc5cca0d7f95d8b2abced6b59Yasuhiro Matsuda        }
718c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
719c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
720c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (adapter != null) {
721c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            adapter.getProfileProxy(getActivity(),
722c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                    mBluetoothA2dpServiceListener,
723c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                    BluetoothProfile.A2DP);
724c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
725c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        filter = new IntentFilter();
726c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        filter.addAction(BluetoothA2dp.ACTION_CODEC_CONFIG_CHANGED);
727c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (getActivity().registerReceiver(mBluetoothA2dpReceiver, filter) == null) {
728c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            updateBluetoothA2dpConfigurationValues();
729c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
730c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
7312c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen        return super.onCreateView(inflater, container, savedInstanceState);
7322c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen    }
7332c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen
7342c47e6f823ba98b8fc59c790a65e8d9632620060Marco Nelissen    @Override
735138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio    public void onDestroyView() {
736138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        super.onDestroyView();
73708190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio
738ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds        if (mUnavailable) {
739ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds            return;
740ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds        }
74108190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio        mSwitchBar.removeOnSwitchChangeListener(this);
74208190bbb75ca9f5affb9d7b6474a87bc41256900Fabrice Di Meglio        mSwitchBar.hide();
7433f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        getActivity().unregisterReceiver(mUsbReceiver);
744c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        getActivity().unregisterReceiver(mBluetoothA2dpReceiver);
745c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
746c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (adapter != null) {
747c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            adapter.closeProfileProxy(BluetoothProfile.A2DP, mBluetoothA2dp);
748c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            mBluetoothA2dp = null;
749c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
75034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn    }
75134481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn
752886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio    void updateSwitchPreference(SwitchPreference switchPreference, boolean value) {
753886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        switchPreference.setChecked(value);
75434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings |= value;
75514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
75614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
75714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void updateAllOptions() {
758caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final Context context = getActivity();
759caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey        final ContentResolver cr = context.getContentResolver();
76034481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
761886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mEnableAdb, Settings.Global.getInt(cr,
7625a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.ADB_ENABLED, 0) != 0);
763078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        if (mEnableTerminal != null) {
764886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio            updateSwitchPreference(mEnableTerminal,
765078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey                    context.getPackageManager().getApplicationEnabledSetting(TERMINAL_APP_PACKAGE)
766886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio                            == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
767078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        }
768cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mHaveDebugSettings |= mBugReportInPowerController.updatePreference();
769607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        mHaveDebugSettings |= mTelephonyMonitorController.updatePreference();
770886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mKeepScreenOn, Settings.Global.getInt(cr,
7715a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
772a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker        updateSwitchPreference(mBtHciSnoopLog, SystemProperties.getBoolean(
773a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker                BLUETOOTH_BTSNOOP_ENABLE_PROPERTY, false));
774886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mDebugViewAttributes, Settings.Global.getInt(cr,
7750b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda                Settings.Global.DEBUG_VIEW_ATTRIBUTES, 0) != 0);
77697162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy        updateSwitchPreference(mForceAllowOnExternal, Settings.Global.getInt(cr,
77797162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy                Settings.Global.FORCE_ALLOW_ON_EXTERNAL, 0) != 0);
778f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        updateHdcpValues();
779fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        updatePasswordSummary();
7809244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        updateDebuggerOptions();
78102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        updateMockLocation();
782eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateStrictModeVisualOptions();
783eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updatePointerLocationOptions();
784f40770096fe75180fba679ed349a63d195729c0cJeff Brown        updateShowTouchesOptions();
785eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateFlingerOptions();
7860c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        updateHardwareUiOptions();
7876a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        updateMsaaOptions();
788c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateTrackFrameTimeOptions();
7896b24c458139091836486cce774a2e1255668e001Romain Guy        updateShowNonRectClipOptions();
790c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateShowHwScreenUpdatesOptions();
791cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        updateShowHwLayersUpdatesOptions();
792eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        updateDebugHwOverdrawOptions();
793f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        updateDebugHwRendererOptions();
794c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        updateDebugLayoutOptions();
795eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleOptions();
796b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
797eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateImmediatelyDestroyActivitiesOptions();
798eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAppProcessLimitOptions();
799d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        updateShowAllANRsOptions();
800e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        updateShowNotificationChannelWarningsOptions();
801f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov        mVerifyAppsOverUsbController.updatePreference();
80245a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        updateOtaDisableAutomaticUpdateOptions();
8032817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey        updateBugreportOptions();
804df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani        updateForceRtlOptions();
805408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        updateLogdSizeValues();
806c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        updateLogpersistValues();
8076c607384c478958260952b82932b9084a4536fc6Chong Zhang        updateWifiDisplayCertificationOptions();
808c9a6698fd44492841bf83bead93b62ecba8a967evandwalle        updateWifiVerboseLoggingOptions();
8095e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        updateWifiAggressiveHandoverOptions();
8105e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        updateWifiAllowScansWithTrafficOptions();
81154861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline        updateMobileDataAlwaysOnOptions();
812fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        updateSimulateColorSpace();
813ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten        updateUSBAudioOptions();
814b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi        updateForceResizableOptions();
8155b596285a04c503b52278a54389d2034f83f85b4Gustav Sennton        Preference webViewAppPref = findPreference(mWebViewAppPrefController.getPreferenceKey());
8165b596285a04c503b52278a54389d2034f83f85b4Gustav Sennton        mWebViewAppPrefController.updateState(webViewAppPref);
817e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales        updateOemUnlockOptions();
818b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        if (mColorTemperaturePreference != null) {
819b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            updateColorTemperature();
820b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        }
821591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach        updateBluetoothDisableAbsVolumeOptions();
82237fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        updateBluetoothEnableInbandRingingOptions();
823c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        updateBluetoothA2dpConfigurationValues();
824f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    }
825f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani
82614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void resetDangerousOptions() {
82787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = true;
828ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        for (int i = 0; i < mResetSwitchPrefs.size(); i++) {
829886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio            SwitchPreference cb = mResetSwitchPrefs.get(i);
83014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (cb.isChecked()) {
83114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                cb.setChecked(false);
83239b467482d1bf256a111c757e9b7621c6f523271Jason Monk                onPreferenceTreeClick(cb);
83314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
83414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
835cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportInPowerController.resetPreference();
8369244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        resetDebuggerOptions();
837c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        writeLogpersistOption(null, true);
838408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        writeLogdSizeOption(null);
83914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(0, mWindowAnimationScale, null);
84014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(1, mTransitionAnimationScale, null);
84114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAnimationScaleOption(2, mAnimatorDurationScale, null);
84265e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        // Only poke the color space setting if we control it.
84365e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        if (usingDevelopmentColorSpace()) {
84465e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette            writeSimulateColorSpace(-1);
84565e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        }
846b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        writeOverlayDisplayDevicesOptions(null);
84714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        writeAppProcessLimitOptions(null);
84834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn        mHaveDebugSettings = false;
84914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        updateAllOptions();
85087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        mDontPokeProperties = false;
85187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
85214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
85314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
854f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani    private void updateHdcpValues() {
855f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
856f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        if (hdcpChecking != null) {
857f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
858f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
859f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
860f32ba13a760eeb2ee5f451b100b849a57fc11e9eBrian Carlstrom            int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
861f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            for (int i = 0; i < values.length; i++) {
862f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                if (currentValue.equals(values[i])) {
863f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    index = i;
864f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                    break;
865f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani                }
866f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            }
867f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setValue(values[index]);
868f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setSummary(summaries[index]);
869f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani            hdcpChecking.setOnPreferenceChangeListener(this);
870f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani        }
871afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
872afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
873fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    private void updatePasswordSummary() {
874fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        try {
875fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            if (mBackupManager.hasBackupPassword()) {
876fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_change);
877fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            } else {
878fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate                mPassword.setSummary(R.string.local_backup_password_summary_none);
879fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            }
880fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        } catch (RemoteException e) {
881fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate            // Not much we can do here
882fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate        }
883fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate    }
884fac0ea781f0c99a446ab6588006b2ac0330cb774Christopher Tate
88584bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu    private void writeBtHciSnoopLogOptions() {
88684bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
887a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker        SystemProperties.set(BLUETOOTH_BTSNOOP_ENABLE_PROPERTY,
888a253e1752fa2f9397883999fae2023cfd32db647Ajay Panicker                Boolean.toString(mBtHciSnoopLog.isChecked()));
88984bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu    }
89084bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu
8919244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void writeDebuggerOptions() {
8929244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
893acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka            ActivityManager.getService().setDebugApp(
894ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    mDebugApp, mWaitForDebugger.isChecked(), true);
8959244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
8969244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
8979244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
8989244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
89902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private void writeMockLocation() {
90002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
90102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
90202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        // Disable the app op of the previous mock location app if such.
903280e59f1fb45cf2f41ef6ab7e9f975f9b0363731Svet Ganov        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
90402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        if (packageOps != null) {
90502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            // Should be one but in case we are in a bad state due to use of command line tools.
90602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            for (PackageOps packageOp : packageOps) {
90702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                if (packageOp.getOps().get(0).getMode() != AppOpsManager.MODE_ERRORED) {
90802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    String oldMockLocationApp = packageOp.getPackageName();
90902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    try {
91002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
91102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                                oldMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
91202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        appOpsManager.setMode(AppOpsManager.OP_MOCK_LOCATION, ai.uid,
91302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                                oldMockLocationApp, AppOpsManager.MODE_ERRORED);
91402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    } catch (NameNotFoundException e) {
91502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        /* ignore */
91602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    }
91702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                }
91802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            }
91902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        }
92002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
92102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        // Enable the app op of the new mock location app if such.
92202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        if (!TextUtils.isEmpty(mMockLocationApp)) {
92302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            try {
92402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
92502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        mMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
92602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                appOpsManager.setMode(AppOpsManager.OP_MOCK_LOCATION, ai.uid,
92702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        mMockLocationApp, AppOpsManager.MODE_ALLOWED);
92802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            } catch (NameNotFoundException e) {
92902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                /* ignore */
93002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            }
93102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        }
93202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    }
93302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
934c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static void resetDebuggerOptions() {
9359244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        try {
936acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka            ActivityManager.getService().setDebugApp(
9379244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                    null, false, true);
9389244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } catch (RemoteException ex) {
9399244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
9409244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
9419244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
9429244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    private void updateDebuggerOptions() {
943860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey        mDebugApp = Settings.Global.getString(
944860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.DEBUG_APP);
945886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mWaitForDebugger, Settings.Global.getInt(
946860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey                getActivity().getContentResolver(), Settings.Global.WAIT_FOR_DEBUGGER, 0) != 0);
9479244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (mDebugApp != null && mDebugApp.length() > 0) {
9489244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            String label;
9499244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            try {
9509244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
9519244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                        PackageManager.GET_DISABLED_COMPONENTS);
9529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
9539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = lab != null ? lab.toString() : mDebugApp;
9549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            } catch (PackageManager.NameNotFoundException e) {
9559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                label = mDebugApp;
9569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
9579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
9589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(true);
95934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            mHaveDebugSettings = true;
9609244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
9619244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
9629244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            mWaitForDebugger.setEnabled(false);
9639244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
9649244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
9659244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
96602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    private void updateMockLocation() {
96702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
96802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
969280e59f1fb45cf2f41ef6ab7e9f975f9b0363731Svet Ganov        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
97002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        if (packageOps != null) {
97102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            for (PackageOps packageOp : packageOps) {
97202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                if (packageOp.getOps().get(0).getMode() == AppOpsManager.MODE_ALLOWED) {
97302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    mMockLocationApp = packageOps.get(0).getPackageName();
97402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    break;
97502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                }
97602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            }
97702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        }
97802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
97902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        if (!TextUtils.isEmpty(mMockLocationApp)) {
98002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            String label = mMockLocationApp;
98102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            try {
98202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
98302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                        mMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
98402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                CharSequence appLabel = getPackageManager().getApplicationLabel(ai);
98502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                if (appLabel != null) {
98602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    label = appLabel.toString();
98702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                }
98802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            } catch (PackageManager.NameNotFoundException e) {
98902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                /* ignore */
99002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            }
99102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
99202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_set, label));
99302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            mHaveDebugSettings = true;
99402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        } else {
99502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_not_set));
99602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        }
99702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov    }
99802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov
99945a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao    private void updateOtaDisableAutomaticUpdateOptions() {
100045a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // We use the "disabled status" in code, but show the opposite text
100145a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // "Automatic system updates" on screen. So a value 0 indicates the
100245a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // automatic update is enabled.
100345a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        updateSwitchPreference(mOtaDisableAutomaticUpdate, Settings.Global.getInt(
100445a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao                getActivity().getContentResolver(),
100545a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao                Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, 0) != 1);
100645a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao    }
100745a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao
100845a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao    private void writeOtaDisableAutomaticUpdateOptions() {
100945a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // We use the "disabled status" in code, but show the opposite text
101045a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // "Automatic system updates" on screen. So a value 0 indicates the
101145a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        // automatic update is enabled.
101245a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        Settings.Global.putInt(getActivity().getContentResolver(),
101345a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao                Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE,
101445a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao                mOtaDisableAutomaticUpdate.isChecked() ? 0 : 1);
101545a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao    }
101645a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao
1017ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    private static boolean showEnableOemUnlockPreference() {
1018ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales        return !SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals("");
1019ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    }
1020ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
1021fb2bae951960d89cf4052212211e8961037e7e6fAndres Morales    private boolean enableOemUnlockPreference() {
102211d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang        return !isBootloaderUnlocked() && OemUnlockUtils.isOemUnlockAllowed(mUm);
1023e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales    }
1024e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales
1025e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales    private void updateOemUnlockOptions() {
1026e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales        if (mEnableOemUnlock != null) {
102711d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang            updateSwitchPreference(mEnableOemUnlock,
102811d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang                    OemUnlockUtils.isOemUnlockEnabled(getActivity()));
1029e98178bd58667b6ad756bf8a214547502185d66fFan Zhang            updateOemUnlockSettingDescription();
1030dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra            // Showing mEnableOemUnlock preference as device has persistent data block.
1031dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra            mEnableOemUnlock.setDisabledByAdmin(null);
1032e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales            mEnableOemUnlock.setEnabled(enableOemUnlockPreference());
1033dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra            if (mEnableOemUnlock.isEnabled()) {
10346bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra                // Check restriction, disable mEnableOemUnlock and apply policy transparency.
10356bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra                mEnableOemUnlock.checkRestrictionAndSetDisabled(UserManager.DISALLOW_FACTORY_RESET);
10366bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra            }
10376bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra            if (mEnableOemUnlock.isEnabled()) {
10386bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra                // Check restriction, disable mEnableOemUnlock and apply policy transparency.
10396bc19a2e5cebbb76a6dc6f825cac548c6933c536Mahaver Chopra                mEnableOemUnlock.checkRestrictionAndSetDisabled(UserManager.DISALLOW_OEM_UNLOCK);
1040dcf3d7c185a2b6c7eaf13f0ea9a866338fd40fd6Mahaver Chopra            }
1041e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales        }
1042e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales    }
1043e32497c6de3f5ec3d494474da9c7ad04db76ef79Andres Morales
10442817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    private void updateBugreportOptions() {
1045cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportController.enablePreference(true);
1046cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        mBugReportInPowerController.updateBugreportOptions();
10472817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey    }
10482817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey
1049eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // Returns the current state of the system property that controls
1050eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    // strictmode flashes.  One of:
1051eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    0: not explicitly set one way or another
1052eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    1: on
1053eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    //    2: off
1054c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private static int currentStrictModeActiveIndex() {
1055eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
1056eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            return 0;
1057eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
1058eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
1059eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        return enabled ? 1 : 2;
1060eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1061eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1062eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeStrictModeVisualOptions() {
1063eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
1064eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
1065eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    ? "1" : "");
1066eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
1067eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
1068eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1069eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1070eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateStrictModeVisualOptions() {
1071886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mStrictMode, currentStrictModeActiveIndex() == 1);
1072eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1073eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1074eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writePointerLocationOptions() {
1075eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        Settings.System.putInt(getActivity().getContentResolver(),
1076eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
1077eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1078eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1079eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updatePointerLocationOptions() {
10804c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale        updateSwitchPreference(mPointerLocation,
10814c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale                Settings.System.getInt(getActivity().getContentResolver(),
1082292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi                        Settings.System.POINTER_LOCATION, 0) != 0);
1083eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1084eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1085f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void writeShowTouchesOptions() {
1086f40770096fe75180fba679ed349a63d195729c0cJeff Brown        Settings.System.putInt(getActivity().getContentResolver(),
1087f40770096fe75180fba679ed349a63d195729c0cJeff Brown                Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
1088f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
1089f40770096fe75180fba679ed349a63d195729c0cJeff Brown
1090f40770096fe75180fba679ed349a63d195729c0cJeff Brown    private void updateShowTouchesOptions() {
10914c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale        updateSwitchPreference(mShowTouches,
10924c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale                Settings.System.getInt(getActivity().getContentResolver(),
1093292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi                        Settings.System.SHOW_TOUCHES, 0) != 0);
1094f40770096fe75180fba679ed349a63d195729c0cJeff Brown    }
1095f40770096fe75180fba679ed349a63d195729c0cJeff Brown
1096eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateFlingerOptions() {
1097eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        // magic communication with surface flinger.
1098eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
1099eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
1100eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
1101eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
1102eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel reply = Parcel.obtain();
1103eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
1104eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1010, data, reply, 0);
1105eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
1106eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showCpu = reply.readInt();
1107eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
1108eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int enableGL = reply.readInt();
1109eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showUpdates = reply.readInt();
1110886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio                updateSwitchPreference(mShowScreenUpdates, showUpdates != 0);
1111eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                @SuppressWarnings("unused")
1112eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int showBackground = reply.readInt();
1113e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                int disableOverlays = reply.readInt();
1114886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio                updateSwitchPreference(mDisableOverlays, disableOverlays != 0);
1115eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                reply.recycle();
1116eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
1117eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
1118eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
1119eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
1120eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1121eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1122e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeShowUpdatesOption() {
1123eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
1124eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
1125eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            if (flinger != null) {
1126eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                Parcel data = Parcel.obtain();
1127eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
1128fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard                final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
1129e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(showUpdates);
1130eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                flinger.transact(1002, data, null, 0);
1131eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                data.recycle();
1132eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1133eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                updateFlingerOptions();
1134eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
1135eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
1136eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
1137eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
1138eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
1139e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    private void writeDisableOverlaysOption() {
1140e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        try {
1141e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
1142e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            if (flinger != null) {
1143e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                Parcel data = Parcel.obtain();
1144e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInterfaceToken("android.ui.ISurfaceComposer");
1145fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard                final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
1146e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.writeInt(disableOverlays);
1147e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                flinger.transact(1008, data, null, 0);
1148e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                data.recycle();
1149e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
1150e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn                updateFlingerOptions();
1151e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            }
1152e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } catch (RemoteException ex) {
1153e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        }
1154e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn    }
1155e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn
11560c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void updateHardwareUiOptions() {
1157292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi        updateSwitchPreference(mForceHardwareUi,
1158292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi                SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
11590c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
1160fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard
11610c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    private void writeHardwareUiOptions() {
11620c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
116387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
11640c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy    }
11650c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy
11666a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void updateMsaaOptions() {
1167886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mForceMsaa, SystemProperties.getBoolean(MSAA_PROPERTY, false));
11686a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
11696a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
11706a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    private void writeMsaaOptions() {
11716a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        SystemProperties.set(MSAA_PROPERTY, mForceMsaa.isChecked() ? "true" : "false");
11726a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        pokeSystemProperties();
11736a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy    }
11746a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy
1175c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateTrackFrameTimeOptions() {
1176b2b44a47551c42393101208eca401ef8c872e0d4John Reck        String value = SystemProperties.get(ThreadedRenderer.PROFILE_PROPERTY);
117770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        if (value == null) {
117870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            value = "";
117970618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
118070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy
118170618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        CharSequence[] values = mTrackFrameTime.getEntryValues();
118270618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        for (int i = 0; i < values.length; i++) {
118370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            if (value.contentEquals(values[i])) {
118470618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setValueIndex(i);
118570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
118670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                return;
118770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            }
118870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        }
118970618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setValueIndex(0);
119070618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
1191c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1192c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
119370618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy    private void writeTrackFrameTimeOptions(Object newValue) {
1194b2b44a47551c42393101208eca401ef8c872e0d4John Reck        SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
119570618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy                newValue == null ? "" : newValue.toString());
119687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
119770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        updateTrackFrameTimeOptions();
1198c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1199c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
12006b24c458139091836486cce774a2e1255668e001Romain Guy    private void updateShowNonRectClipOptions() {
12016b24c458139091836486cce774a2e1255668e001Romain Guy        String value = SystemProperties.get(
1202b2b44a47551c42393101208eca401ef8c872e0d4John Reck                ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY);
12036b24c458139091836486cce774a2e1255668e001Romain Guy        if (value == null) {
12046b24c458139091836486cce774a2e1255668e001Romain Guy            value = "hide";
12056b24c458139091836486cce774a2e1255668e001Romain Guy        }
12066b24c458139091836486cce774a2e1255668e001Romain Guy
12076b24c458139091836486cce774a2e1255668e001Romain Guy        CharSequence[] values = mShowNonRectClip.getEntryValues();
12086b24c458139091836486cce774a2e1255668e001Romain Guy        for (int i = 0; i < values.length; i++) {
12096b24c458139091836486cce774a2e1255668e001Romain Guy            if (value.contentEquals(values[i])) {
12106b24c458139091836486cce774a2e1255668e001Romain Guy                mShowNonRectClip.setValueIndex(i);
12116b24c458139091836486cce774a2e1255668e001Romain Guy                mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[i]);
12126b24c458139091836486cce774a2e1255668e001Romain Guy                return;
12136b24c458139091836486cce774a2e1255668e001Romain Guy            }
12146b24c458139091836486cce774a2e1255668e001Romain Guy        }
12156b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip.setValueIndex(0);
12166b24c458139091836486cce774a2e1255668e001Romain Guy        mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[0]);
12176b24c458139091836486cce774a2e1255668e001Romain Guy    }
12186b24c458139091836486cce774a2e1255668e001Romain Guy
12196b24c458139091836486cce774a2e1255668e001Romain Guy    private void writeShowNonRectClipOptions(Object newValue) {
1220b2b44a47551c42393101208eca401ef8c872e0d4John Reck        SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
12216b24c458139091836486cce774a2e1255668e001Romain Guy                newValue == null ? "" : newValue.toString());
12226b24c458139091836486cce774a2e1255668e001Romain Guy        pokeSystemProperties();
12236b24c458139091836486cce774a2e1255668e001Romain Guy        updateShowNonRectClipOptions();
12246b24c458139091836486cce774a2e1255668e001Romain Guy    }
12256b24c458139091836486cce774a2e1255668e001Romain Guy
1226c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateShowHwScreenUpdatesOptions() {
1227886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mShowHwScreenUpdates,
1228b2b44a47551c42393101208eca401ef8c872e0d4John Reck                SystemProperties.getBoolean(ThreadedRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
1229c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1230c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
1231c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeShowHwScreenUpdatesOptions() {
1232b2b44a47551c42393101208eca401ef8c872e0d4John Reck        SystemProperties.set(ThreadedRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
1233cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwScreenUpdates.isChecked() ? "true" : null);
1234cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        pokeSystemProperties();
1235cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
1236cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
1237cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void updateShowHwLayersUpdatesOptions() {
1238886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mShowHwLayersUpdates, SystemProperties.getBoolean(
1239b2b44a47551c42393101208eca401ef8c872e0d4John Reck                ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
1240cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    }
1241cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy
1242cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy    private void writeShowHwLayersUpdatesOptions() {
1243b2b44a47551c42393101208eca401ef8c872e0d4John Reck        SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
1244cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy                mShowHwLayersUpdates.isChecked() ? "true" : null);
124587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
1246c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1247c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
1248eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy    private void updateDebugHwOverdrawOptions() {
1249b2b44a47551c42393101208eca401ef8c872e0d4John Reck        String value = SystemProperties.get(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY);
1250eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        if (value == null) {
1251eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy            value = "";
1252eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        }
1253eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy
1254eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        CharSequence[] values = mDebugHwOverdraw.getEntryValues();
1255eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        for (int i = 0; i < values.length; i++) {
1256eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy            if (value.contentEquals(values[i])) {
1257eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy                mDebugHwOverdraw.setValueIndex(i);
1258eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy                mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[i]);
1259eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy                return;
1260eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy            }
1261eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        }
1262eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        mDebugHwOverdraw.setValueIndex(0);
1263eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[0]);
1264098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
1265098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
1266eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy    private void writeDebugHwOverdrawOptions(Object newValue) {
1267b2b44a47551c42393101208eca401ef8c872e0d4John Reck        SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY,
1268eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy                newValue == null ? "" : newValue.toString());
1269098f493dba656dea272dc7015363321dbb32f3a8Romain Guy        pokeSystemProperties();
1270eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        updateDebugHwOverdrawOptions();
1271098f493dba656dea272dc7015363321dbb32f3a8Romain Guy    }
1272098f493dba656dea272dc7015363321dbb32f3a8Romain Guy
1273f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    private void updateDebugHwRendererOptions() {
1274f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        String value = SystemProperties.get(ThreadedRenderer.DEBUG_RENDERER_PROPERTY);
1275f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        if (value == null) {
1276f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger            value = "";
1277f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        }
1278f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger
1279f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        CharSequence[] values = mDebugHwRenderer.getEntryValues();
1280f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        for (int i = 0; i < values.length; i++) {
1281f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger            if (value.contentEquals(values[i])) {
1282f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger                mDebugHwRenderer.setValueIndex(i);
1283f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger                mDebugHwRenderer.setSummary(mDebugHwRenderer.getEntries()[i]);
1284f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger                return;
1285f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger            }
1286f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        }
1287f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        mDebugHwRenderer.setValueIndex(0);
1288f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        mDebugHwRenderer.setSummary(mDebugHwRenderer.getEntries()[0]);
1289f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    }
1290f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger
1291f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    private void writeDebugHwRendererOptions(Object newValue) {
1292f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY,
1293f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger                newValue == null ? "" : newValue.toString());
1294f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        pokeSystemProperties();
1295f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        updateDebugHwRendererOptions();
1296f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger    }
1297f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger
1298c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void updateDebugLayoutOptions() {
1299886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mDebugLayout,
1300c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
1301c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1302c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
1303c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    private void writeDebugLayoutOptions() {
1304c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
1305c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy                mDebugLayout.isChecked() ? "true" : "false");
130687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        pokeSystemProperties();
1307c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy    }
1308c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy
1309fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    private void updateSimulateColorSpace() {
1310fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        final ContentResolver cr = getContentResolver();
1311fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        final boolean enabled = Settings.Secure.getInt(
1312fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0) != 0;
1313fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        if (enabled) {
1314fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            final String mode = Integer.toString(Settings.Secure.getInt(
1315fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                    cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
1316fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                    AccessibilityManager.DALTONIZER_DISABLED));
1317fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            mSimulateColorSpace.setValue(mode);
1318fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            final int index = mSimulateColorSpace.findIndexOfValue(mode);
1319fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            if (index < 0) {
1320fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                // We're using a mode controlled by accessibility preferences.
1321fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                mSimulateColorSpace.setSummary(getString(R.string.daltonizer_type_overridden,
1322fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                        getString(R.string.accessibility_display_daltonizer_preference_title)));
1323fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            } else {
1324fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                mSimulateColorSpace.setSummary("%s");
1325fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            }
1326fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        } else {
1327fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            mSimulateColorSpace.setValue(
1328fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette                    Integer.toString(AccessibilityManager.DALTONIZER_DISABLED));
1329fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        }
1330fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    }
1331fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette
133265e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette    /**
133365e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette     * @return <code>true</code> if the color space preference is currently
1334ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang     * controlled by development settings
133565e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette     */
133665e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette    private boolean usingDevelopmentColorSpace() {
133765e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        final ContentResolver cr = getContentResolver();
133865e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        final boolean enabled = Settings.Secure.getInt(
133965e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0) != 0;
134065e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        if (enabled) {
134165e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette            final String mode = Integer.toString(Settings.Secure.getInt(
134265e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette                    cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
134365e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette                    AccessibilityManager.DALTONIZER_DISABLED));
134465e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette            final int index = mSimulateColorSpace.findIndexOfValue(mode);
134565e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette            if (index >= 0) {
134665e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette                // We're using a mode controlled by developer preferences.
134765e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette                return true;
134865e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette            }
134965e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        }
135065e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette        return false;
135165e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette    }
135265e00e5ac8114451aace4ca55bf4f739e75e686cAlan Viverette
1353fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    private void writeSimulateColorSpace(Object value) {
1354fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        final ContentResolver cr = getContentResolver();
1355fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        final int newMode = Integer.parseInt(value.toString());
1356fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        if (newMode < 0) {
1357fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0);
1358fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        } else {
1359fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 1);
1360fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, newMode);
1361fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        }
1362fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette    }
1363fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette
1364b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    private void updateColorTemperature() {
1365b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        updateSwitchPreference(mColorTemperaturePreference,
1366b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch                SystemProperties.getBoolean(COLOR_TEMPERATURE_PROPERTY, false));
1367b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    }
1368b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch
1369b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    private void writeColorTemperature() {
1370b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        SystemProperties.set(COLOR_TEMPERATURE_PROPERTY,
1371b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch                mColorTemperaturePreference.isChecked() ? "1" : "0");
1372b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        pokeSystemProperties();
13738897655d2e19daffbb721188a23d3443e045df00Steve Pfetsch        Toast.makeText(getActivity(), R.string.color_temperature_toast, Toast.LENGTH_LONG).show();
1374b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch    }
1375b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch
1376ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten    private void updateUSBAudioOptions() {
1377886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mUSBAudio, Settings.Secure.getInt(getContentResolver(),
1378ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten                Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED, 0) != 0);
1379ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten    }
1380ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten
1381ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten    private void writeUSBAudioOptions() {
1382ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten        Settings.Secure.putInt(getContentResolver(),
1383ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten                Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED,
13840b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda                mUSBAudio.isChecked() ? 1 : 0);
1385ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten    }
1386ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten
1387b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    private void updateForceResizableOptions() {
1388b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi        updateSwitchPreference(mForceResizable, Settings.Global.getInt(getContentResolver(),
13890d228a62bd797cbb1f2e4791dcdc8b64e473e34fFilip Gruszczynski                Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES, 0) != 0);
1390b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    }
1391b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi
1392b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    private void writeForceResizableOptions() {
1393b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi        Settings.Global.putInt(getContentResolver(),
1394b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi                Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES,
1395b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi                mForceResizable.isChecked() ? 1 : 0);
1396b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi    }
1397b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi
1398df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani    private void updateForceRtlOptions() {
13994c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale        updateSwitchPreference(mForceRtlLayout,
14004c9d667bc2044a5d5d0d0616425906f75b42a8e0Wale Ogunwale                Settings.Global.getInt(getActivity().getContentResolver(),
1401292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi                        Settings.Global.DEVELOPMENT_FORCE_RTL, 0) != 0);
1402df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani    }
1403df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani
1404df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani    private void writeForceRtlOptions() {
1405df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani        boolean value = mForceRtlLayout.isChecked();
1406df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani        Settings.Global.putInt(getActivity().getContentResolver(),
1407df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani                Settings.Global.DEVELOPMENT_FORCE_RTL, value ? 1 : 0);
1408df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani        SystemProperties.set(Settings.Global.DEVELOPMENT_FORCE_RTL, value ? "1" : "0");
1409efede418646d05edee8d9938b52d5461c4c5b687Mihai Nita        LocalePicker.updateLocales(getActivity().getResources().getConfiguration().getLocales());
1410df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani    }
1411df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani
14126c607384c478958260952b82932b9084a4536fc6Chong Zhang    private void updateWifiDisplayCertificationOptions() {
1413886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mWifiDisplayCertification, Settings.Global.getInt(
14146c607384c478958260952b82932b9084a4536fc6Chong Zhang                getActivity().getContentResolver(),
14156c607384c478958260952b82932b9084a4536fc6Chong Zhang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0);
14166c607384c478958260952b82932b9084a4536fc6Chong Zhang    }
14176c607384c478958260952b82932b9084a4536fc6Chong Zhang
14186c607384c478958260952b82932b9084a4536fc6Chong Zhang    private void writeWifiDisplayCertificationOptions() {
14196c607384c478958260952b82932b9084a4536fc6Chong Zhang        Settings.Global.putInt(getActivity().getContentResolver(),
14206c607384c478958260952b82932b9084a4536fc6Chong Zhang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
14216c607384c478958260952b82932b9084a4536fc6Chong Zhang                mWifiDisplayCertification.isChecked() ? 1 : 0);
14226c607384c478958260952b82932b9084a4536fc6Chong Zhang    }
14236c607384c478958260952b82932b9084a4536fc6Chong Zhang
1424c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    private void updateWifiVerboseLoggingOptions() {
1425c9a6698fd44492841bf83bead93b62ecba8a967evandwalle        boolean enabled = mWifiManager.getVerboseLoggingLevel() > 0;
1426886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mWifiVerboseLogging, enabled);
1427c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    }
1428c9a6698fd44492841bf83bead93b62ecba8a967evandwalle
1429c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    private void writeWifiVerboseLoggingOptions() {
1430c9a6698fd44492841bf83bead93b62ecba8a967evandwalle        mWifiManager.enableVerboseLogging(mWifiVerboseLogging.isChecked() ? 1 : 0);
1431c9a6698fd44492841bf83bead93b62ecba8a967evandwalle    }
1432c9a6698fd44492841bf83bead93b62ecba8a967evandwalle
14335e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private void updateWifiAggressiveHandoverOptions() {
14345e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        boolean enabled = mWifiManager.getAggressiveHandover() > 0;
1435886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mWifiAggressiveHandover, enabled);
14365e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    }
14375e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle
14385e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private void writeWifiAggressiveHandoverOptions() {
14395e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
14405e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    }
14415e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle
14425e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private void updateWifiAllowScansWithTrafficOptions() {
14435e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        boolean enabled = mWifiManager.getAllowScansWithTraffic() > 0;
1444886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mWifiAllowScansWithTraffic, enabled);
14455e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    }
14465e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle
14475e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    private void writeWifiAllowScansWithTrafficOptions() {
14485e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        mWifiManager.setAllowScansWithTraffic(mWifiAllowScansWithTraffic.isChecked() ? 1 : 0);
14495e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle    }
14505e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle
1451591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    private void updateBluetoothDisableAbsVolumeOptions() {
1452591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach        updateSwitchPreference(mBluetoothDisableAbsVolume,
1453591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach                SystemProperties.getBoolean(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY, false));
1454591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    }
1455591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach
1456591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    private void writeBluetoothDisableAbsVolumeOptions() {
1457591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach        SystemProperties.set(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY,
1458591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach                mBluetoothDisableAbsVolume.isChecked() ? "true" : "false");
1459591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach    }
1460591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach
146137fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    private void updateBluetoothEnableInbandRingingOptions() {
146237fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        if (mBluetoothEnableInbandRinging != null) {
146337fb338cda1066e20a813ce0d33b38fa0840bdcbJack He            updateSwitchPreference(mBluetoothEnableInbandRinging,
146437fb338cda1066e20a813ce0d33b38fa0840bdcbJack He                SystemProperties.getBoolean(BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY, false));
146537fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        }
146637fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    }
146737fb338cda1066e20a813ce0d33b38fa0840bdcbJack He
146837fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    private void writeBluetoothEnableInbandRingingOptions() {
146937fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        if (mBluetoothEnableInbandRinging != null) {
147037fb338cda1066e20a813ce0d33b38fa0840bdcbJack He            SystemProperties.set(BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY,
147137fb338cda1066e20a813ce0d33b38fa0840bdcbJack He                mBluetoothEnableInbandRinging.isChecked() ? "true" : "false");
147237fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        }
147337fb338cda1066e20a813ce0d33b38fa0840bdcbJack He    }
147437fb338cda1066e20a813ce0d33b38fa0840bdcbJack He
147554861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    private void updateMobileDataAlwaysOnOptions() {
147654861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline        updateSwitchPreference(mMobileDataAlwaysOn, Settings.Global.getInt(
147754861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline                getActivity().getContentResolver(),
147815fb2d1096ecd9ced547682f0c1b3e185ed5f437Lorenzo Colitti                Settings.Global.MOBILE_DATA_ALWAYS_ON, 1) != 0);
147954861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    }
148054861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline
148154861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    private void writeMobileDataAlwaysOnOptions() {
148254861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline        Settings.Global.putInt(getActivity().getContentResolver(),
148354861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline                Settings.Global.MOBILE_DATA_ALWAYS_ON,
148454861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline                mMobileDataAlwaysOn.isChecked() ? 1 : 0);
148554861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline    }
148654861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline
14878fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    private String defaultLogdSizeValue() {
14888fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        String defaultValue = SystemProperties.get(SELECT_LOGD_DEFAULT_SIZE_PROPERTY);
14898fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        if ((defaultValue == null) || (defaultValue.length() == 0)) {
14908fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            if (SystemProperties.get("ro.config.low_ram").equals("true")) {
14918fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                defaultValue = SELECT_LOGD_SVELTE_DEFAULT_SIZE_VALUE;
14928fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            } else {
14938fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                defaultValue = SELECT_LOGD_DEFAULT_SIZE_VALUE;
14948fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            }
14958fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        }
14968fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        return defaultValue;
14978fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn    }
14988fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn
1499408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn    private void updateLogdSizeValues() {
1500408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        if (mLogdSize != null) {
1501285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn            String currentTag = SystemProperties.get(SELECT_LOGD_TAG_PROPERTY);
1502408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            String currentValue = SystemProperties.get(SELECT_LOGD_SIZE_PROPERTY);
15038fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            if ((currentTag != null) && currentTag.startsWith(SELECT_LOGD_TAG_SILENCE)) {
15048fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                currentValue = SELECT_LOGD_OFF_SIZE_MARKER_VALUE;
1505285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn            }
1506bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            if (mLogpersist != null) {
1507bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                String currentLogpersistEnable
1508ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_ENABLE);
1509bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                if ((currentLogpersistEnable == null)
1510bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                        || !currentLogpersistEnable.equals("true")
1511bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                        || currentValue.equals(SELECT_LOGD_OFF_SIZE_MARKER_VALUE)) {
1512bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    writeLogpersistOption(null, true);
1513bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    mLogpersist.setEnabled(false);
1514748649b006ca842af9f916f45816ee704d27a46eFan Zhang                } else if (mSettingsEnabler.getLastEnabledState()) {
1515bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    mLogpersist.setEnabled(true);
1516c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                }
1517285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn            }
15188fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            if ((currentValue == null) || (currentValue.length() == 0)) {
15198fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                currentValue = defaultLogdSizeValue();
1520408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            }
1521408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            String[] values = getResources().getStringArray(R.array.select_logd_size_values);
1522408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            String[] titles = getResources().getStringArray(R.array.select_logd_size_titles);
1523285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn            int index = 2; // punt to second entry if not found
1524894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn            if (SystemProperties.get("ro.config.low_ram").equals("true")) {
1525894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn                mLogdSize.setEntries(R.array.select_logd_size_lowram_titles);
1526894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn                titles = getResources().getStringArray(R.array.select_logd_size_lowram_titles);
1527285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn                index = 1;
1528894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn            }
1529408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            String[] summaries = getResources().getStringArray(R.array.select_logd_size_summaries);
1530894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn            for (int i = 0; i < titles.length; i++) {
1531408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn                if (currentValue.equals(values[i])
1532408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn                        || currentValue.equals(titles[i])) {
1533408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn                    index = i;
1534408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn                    break;
1535408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn                }
1536408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            }
1537408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            mLogdSize.setValue(values[index]);
1538408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            mLogdSize.setSummary(summaries[index]);
1539408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            mLogdSize.setOnPreferenceChangeListener(this);
1540408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        }
1541408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn    }
1542408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn
1543408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn    private void writeLogdSizeOption(Object newValue) {
15448fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        boolean disable = (newValue != null) &&
1545ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                (newValue.toString().equals(SELECT_LOGD_OFF_SIZE_MARKER_VALUE));
15468fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        String currentTag = SystemProperties.get(SELECT_LOGD_TAG_PROPERTY);
15478fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        if (currentTag == null) {
15488fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            currentTag = "";
1549894af268def8a817306ea83f21cb25b6f0edf2e3Mark Salyzyn        }
15508fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        // filter clean and unstack all references to our setting
15518fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        String newTag = currentTag.replaceAll(
15528fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                ",+" + SELECT_LOGD_TAG_SILENCE, "").replaceFirst(
15538fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                "^" + SELECT_LOGD_TAG_SILENCE + ",*", "").replaceAll(
15548fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                ",+", ",").replaceFirst(
15558fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                ",+$", "");
1556285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn        if (disable) {
15578fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            newValue = SELECT_LOGD_MINIMUM_SIZE_VALUE;
15588fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            // Make sure snet_event_log get through first, but do not override
15598fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            String snetValue = SystemProperties.get(SELECT_LOGD_SNET_TAG_PROPERTY);
15608fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            if ((snetValue == null) || (snetValue.length() == 0)) {
15618fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                snetValue = SystemProperties.get(SELECT_LOGD_RUNTIME_SNET_TAG_PROPERTY);
15628fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                if ((snetValue == null) || (snetValue.length() == 0)) {
15638fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                    SystemProperties.set(SELECT_LOGD_SNET_TAG_PROPERTY, "I");
15648fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                }
15658fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            }
15668fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            // Silence all log sources, security logs notwithstanding
15678fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            if (newTag.length() != 0) {
15688fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn                newTag = "," + newTag;
15698fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            }
15708fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            // Stack settings, stack to help preserve original value
15718fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            newTag = SELECT_LOGD_TAG_SILENCE + newTag;
15728fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        }
15738fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        if (!newTag.equals(currentTag)) {
15748fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn            SystemProperties.set(SELECT_LOGD_TAG_PROPERTY, newTag);
1575285afa8d15bd4d33e6f0e5b85b160499e0b6e09fMark Salyzyn        }
15768fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        String defaultValue = defaultLogdSizeValue();
15778fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        final String size = ((newValue != null) && (newValue.toString().length() != 0)) ?
1578ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                newValue.toString() : defaultValue;
15798fc90b4fe0275a4382ae34a4591334f18e5d17afMark Salyzyn        SystemProperties.set(SELECT_LOGD_SIZE_PROPERTY, defaultValue.equals(size) ? "" : size);
15808f3a25bf7d81e48a7f23f0df2b2e27b311a18a97Mark Salyzyn        SystemProperties.set("ctl.start", "logd-reinit");
1581408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        pokeSystemProperties();
1582408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        updateLogdSizeValues();
1583408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn    }
1584408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn
1585c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private void updateLogpersistValues() {
1586c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (mLogpersist == null) {
1587c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            return;
1588c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1589bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
1590c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (currentValue == null) {
1591c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            currentValue = "";
1592c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1593bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        String currentBuffers = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_BUFFER);
1594c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if ((currentBuffers == null) || (currentBuffers.length() == 0)) {
1595c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            currentBuffers = "all";
1596c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1597c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        int index = 0;
1598c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (currentValue.equals(SELECT_LOGPERSIST_PROPERTY_SERVICE)) {
1599c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            index = 1;
160078dd2e2c742075e23eceff8b28fcdc64ca4aeb7eMark Salyzyn            if (currentBuffers.equals("kernel")) {
160178dd2e2c742075e23eceff8b28fcdc64ca4aeb7eMark Salyzyn                index = 3;
160278dd2e2c742075e23eceff8b28fcdc64ca4aeb7eMark Salyzyn            } else if (!currentBuffers.equals("all") &&
1603c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    !currentBuffers.contains("radio") &&
1604c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    currentBuffers.contains("security") &&
1605c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    currentBuffers.contains("kernel")) {
1606c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                index = 2;
1607c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                if (!currentBuffers.contains("default")) {
1608ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    String[] contains = {"main", "events", "system", "crash"};
1609c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    for (int i = 0; i < contains.length; i++) {
1610c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                        if (!currentBuffers.contains(contains[i])) {
1611c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            index = 1;
1612c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            break;
1613c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                        }
1614c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    }
1615c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                }
1616c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            }
1617c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1618ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        mLogpersist.setValue(
1619ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                getResources().getStringArray(R.array.select_logpersist_values)[index]);
1620ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        mLogpersist.setSummary(
1621ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                getResources().getStringArray(R.array.select_logpersist_summaries)[index]);
1622c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        mLogpersist.setOnPreferenceChangeListener(this);
1623c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (index != 0) {
1624c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersistCleared = false;
1625c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        } else if (!mLogpersistCleared) {
1626c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            // would File.delete() directly but need to switch uid/gid to access
1627bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY, SELECT_LOGPERSIST_PROPERTY_CLEAR);
1628c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            pokeSystemProperties();
1629c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersistCleared = true;
1630c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1631c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    }
1632c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
1633c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private void setLogpersistOff(boolean update) {
1634c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY_BUFFER, "");
1635bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        // deal with trampoline of empty properties
1636bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY_BUFFER, "");
1637bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY, "");
1638bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY,
1639ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                update ? "" : SELECT_LOGPERSIST_PROPERTY_STOP);
1640c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        pokeSystemProperties();
1641c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (update) {
1642c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            updateLogpersistValues();
1643bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        } else {
1644bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            for (int i = 0; i < 3; i++) {
1645bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
1646bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                if ((currentValue == null) || currentValue.equals("")) {
1647bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    break;
1648bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                }
1649bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                try {
1650bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    Thread.sleep(100);
1651bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                } catch (InterruptedException e) {
1652bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                }
1653bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            }
1654c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1655c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    }
1656c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
1657c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    private void writeLogpersistOption(Object newValue, boolean skipWarning) {
1658c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (mLogpersist == null) {
1659c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            return;
1660c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1661c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        String currentTag = SystemProperties.get(SELECT_LOGD_TAG_PROPERTY);
1662c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if ((currentTag != null) && currentTag.startsWith(SELECT_LOGD_TAG_SILENCE)) {
1663c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            newValue = null;
1664c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            skipWarning = true;
1665c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1666c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
1667c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if ((newValue == null) || newValue.toString().equals("")) {
1668c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            if (skipWarning) {
1669c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                mLogpersistCleared = false;
1670c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            } else if (!mLogpersistCleared) {
1671c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                // if transitioning from on to off, pop up an are you sure?
1672bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
1673bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                if ((currentValue != null) &&
1674bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                        currentValue.equals(SELECT_LOGPERSIST_PROPERTY_SERVICE)) {
1675c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    if (mLogpersistClearDialog != null) dismissDialogs();
1676c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    mLogpersistClearDialog = new AlertDialog.Builder(getActivity()).setMessage(
1677c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            getActivity().getResources().getString(
1678c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                                    R.string.dev_logpersist_clear_warning_message))
1679c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            .setTitle(R.string.dev_logpersist_clear_warning_title)
1680c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            .setPositiveButton(android.R.string.yes, this)
1681c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            .setNegativeButton(android.R.string.no, this)
1682c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                            .show();
1683c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    mLogpersistClearDialog.setOnDismissListener(this);
1684c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                    return;
1685c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                }
1686c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            }
1687c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            setLogpersistOff(true);
1688c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            return;
1689c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1690c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
1691bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        String currentBuffer = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_BUFFER);
1692c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if ((currentBuffer != null) && !currentBuffer.equals(newValue.toString())) {
1693c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            setLogpersistOff(false);
1694c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
1695c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY_BUFFER, newValue.toString());
1696c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY, SELECT_LOGPERSIST_PROPERTY_SERVICE);
1697c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        pokeSystemProperties();
1698bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        for (int i = 0; i < 3; i++) {
1699bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
1700bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            if ((currentValue != null)
1701bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                    && currentValue.equals(SELECT_LOGPERSIST_PROPERTY_SERVICE)) {
1702bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                break;
1703bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            }
1704bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            try {
1705bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn                Thread.sleep(100);
1706bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            } catch (InterruptedException e) {
1707bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn            }
1708bdbd2d984edc29df0db11077b109418c9e6b4ac5Mark Salyzyn        }
1709c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        updateLogpersistValues();
1710c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn    }
1711c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn
17123f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    private void updateUsbConfigurationValues() {
17133f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        if (mUsbConfiguration != null) {
17149cff8cdfe0fcc18af32591052cb8263cbe95c5cdNick Kralevich            UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
17153f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood
17163f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            String[] values = getResources().getStringArray(R.array.usb_configuration_values);
17173f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            String[] titles = getResources().getStringArray(R.array.usb_configuration_titles);
17189cff8cdfe0fcc18af32591052cb8263cbe95c5cdNick Kralevich            int index = 0;
17193f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            for (int i = 0; i < titles.length; i++) {
17209cff8cdfe0fcc18af32591052cb8263cbe95c5cdNick Kralevich                if (manager.isFunctionEnabled(values[i])) {
17213f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood                    index = i;
17223f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood                    break;
17233f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood                }
17243f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            }
17259cff8cdfe0fcc18af32591052cb8263cbe95c5cdNick Kralevich            mUsbConfiguration.setValue(values[index]);
17269cff8cdfe0fcc18af32591052cb8263cbe95c5cdNick Kralevich            mUsbConfiguration.setSummary(titles[index]);
17273f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            mUsbConfiguration.setOnPreferenceChangeListener(this);
17283f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        }
17293f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    }
17303f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood
17313f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    private void writeUsbConfigurationOption(Object newValue) {
1732ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        UsbManager manager = (UsbManager) getActivity().getSystemService(Context.USB_SERVICE);
1733e6ffe317547abc583742a02a9272e421c3fe4efbMarco Nelissen        String function = newValue.toString();
1734e6ffe317547abc583742a02a9272e421c3fe4efbMarco Nelissen        if (function.equals("none")) {
17355d36a177d95184aaa0763d07aa38ff028f5a9b9cJerry Zhang            manager.setCurrentFunction(function, false);
1736e6ffe317547abc583742a02a9272e421c3fe4efbMarco Nelissen        } else {
17375d36a177d95184aaa0763d07aa38ff028f5a9b9cJerry Zhang            manager.setCurrentFunction(function, true);
1738e6ffe317547abc583742a02a9272e421c3fe4efbMarco Nelissen        }
17393f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    }
17403f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood
1741c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private void initBluetoothConfigurationValues() {
1742c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String[] values;
1743dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        String[] summaries;
1744c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int index;
1745c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1746da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        // Init the AVRCP Version - Default
1747da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        values = getResources().getStringArray(R.array.bluetooth_avrcp_version_values);
1748da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        summaries = getResources().getStringArray(R.array.bluetooth_avrcp_versions);
1749bb1174de5e9406318224d090e05d33e930cc3ea3Ajay Panicker        String value = SystemProperties.get(BLUETOOTH_AVRCP_VERSION_PROPERTY, values[0]);
1750da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        index = mBluetoothSelectAvrcpVersion.findIndexOfValue(value);
1751da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        mBluetoothSelectAvrcpVersion.setValue(values[index]);
1752da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        mBluetoothSelectAvrcpVersion.setSummary(summaries[index]);
1753da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker
1754c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Init the Codec Type - Default
1755c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_values);
1756dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
1757c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = 0;
1758c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpCodec.setValue(values[index]);
1759dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
1760c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1761c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Init the Sample Rate - Default
1762c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_values);
1763dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
1764c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = 0;
1765c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpSampleRate.setValue(values[index]);
1766dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
1767c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1768c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Init the Bits Per Sample - Default
1769c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_values);
1770dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
1771c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = 0;
1772c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpBitsPerSample.setValue(values[index]);
1773dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
1774c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1775c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Init the Channel Mode - Default
1776c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_values);
1777dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
1778c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = 0;
1779c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpChannelMode.setValue(values[index]);
1780dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
1781c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
17828e568ec84c0000798fd5adeddff865b63943e654fen wang        // Init the LDAC Playback Quality - ABR
1783c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_values);
1784dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
17858e568ec84c0000798fd5adeddff865b63943e654fen wang        index = 3;
1786c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        mBluetoothSelectA2dpLdacPlaybackQuality.setValue(values[index]);
1787dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
1788c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    }
1789c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1790da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker    private void writeBluetoothAvrcpVersion(Object newValue) {
1791da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        SystemProperties.set(BLUETOOTH_AVRCP_VERSION_PROPERTY, newValue.toString());
1792da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        int index = mBluetoothSelectAvrcpVersion.findIndexOfValue(newValue.toString());
1793da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        if (index >= 0) {
1794da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker            String[] titles = getResources().getStringArray(R.array.bluetooth_avrcp_versions);
1795da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker            mBluetoothSelectAvrcpVersion.setSummary(titles[index]);
1796da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        }
1797da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker    }
1798da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker
1799c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private void updateBluetoothA2dpConfigurationValues() {
1800c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int index;
1801dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        String[] summaries;
18022829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov        BluetoothCodecStatus codecStatus = null;
1803c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        BluetoothCodecConfig codecConfig = null;
18042829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov        BluetoothCodecConfig[] codecsLocalCapabilities = null;
18052829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov        BluetoothCodecConfig[] codecsSelectableCapabilities = null;
1806dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        String streaming;
1807a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        Resources resources = null;
1808c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1809c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        synchronized (mBluetoothA2dpLock) {
1810c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (mBluetoothA2dp != null) {
18112829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov                codecStatus = mBluetoothA2dp.getCodecStatus();
1812789d21d475a9e3fa494fb7e171bb70d3cbb566aePavlin Radoslavov                if (codecStatus != null) {
1813789d21d475a9e3fa494fb7e171bb70d3cbb566aePavlin Radoslavov                    codecConfig = codecStatus.getCodecConfig();
1814789d21d475a9e3fa494fb7e171bb70d3cbb566aePavlin Radoslavov                    codecsLocalCapabilities = codecStatus.getCodecsLocalCapabilities();
1815789d21d475a9e3fa494fb7e171bb70d3cbb566aePavlin Radoslavov                    codecsSelectableCapabilities = codecStatus.getCodecsSelectableCapabilities();
1816789d21d475a9e3fa494fb7e171bb70d3cbb566aePavlin Radoslavov                }
1817c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
1818c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1819748649b006ca842af9f916f45816ee704d27a46eFan Zhang        if (codecConfig == null) {
1820c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            return;
1821748649b006ca842af9f916f45816ee704d27a46eFan Zhang        }
1822c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1823a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        try {
1824a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            resources = getResources();
1825a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        } catch (IllegalStateException e) {
1826a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            return;
1827a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        }
1828a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        if (resources == null) {
1829a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            return;
1830a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov        }
1831a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov
1832c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Update the Codec Type
1833c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = -1;
1834c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (codecConfig.getCodecType()) {
1835c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC:
1836c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 1;
1837c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1838c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC:
1839c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 2;
1840c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1841c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
1842c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 3;
1843c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1844c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
1845c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 4;
1846c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1847c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
1848c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            index = 5;
1849c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            break;
1850c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID:
1851c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
1852c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1853c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1854c851f854bbb0ec671270ff54e75b4a01f02f9281Pavlin Radoslavov        if (index >= 0 && mBluetoothSelectA2dpCodec != null) {
1855a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_summaries);
1856a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
1857dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            mBluetoothSelectA2dpCodec.setSummary(streaming);
1858c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1859c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1860c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Update the Sample Rate
1861c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = -1;
1862c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (codecConfig.getSampleRate()) {
1863c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_44100:
1864c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 1;
1865c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1866c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_48000:
1867c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 2;
1868c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1869c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_88200:
1870c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 3;
1871c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1872c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_96000:
1873c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 4;
1874c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1875c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_176400:
1876c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_192000:
1877c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.SAMPLE_RATE_NONE:
1878c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
1879c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1880c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1881c851f854bbb0ec671270ff54e75b4a01f02f9281Pavlin Radoslavov        if (index >= 0 && mBluetoothSelectA2dpSampleRate != null) {
1882a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
1883a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
1884dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov             mBluetoothSelectA2dpSampleRate.setSummary(streaming);
1885c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1886c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1887c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Update the Bits Per Sample
1888c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = -1;
1889c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (codecConfig.getBitsPerSample()) {
1890c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.BITS_PER_SAMPLE_16:
1891c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 1;
1892c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1893c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.BITS_PER_SAMPLE_24:
1894c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 2;
1895c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1896c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.BITS_PER_SAMPLE_32:
1897c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 3;
1898c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1899c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.BITS_PER_SAMPLE_NONE:
1900c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
1901c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1902c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1903c851f854bbb0ec671270ff54e75b4a01f02f9281Pavlin Radoslavov        if (index >= 0 && mBluetoothSelectA2dpBitsPerSample != null) {
1904a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
1905a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
1906dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            mBluetoothSelectA2dpBitsPerSample.setSummary(streaming);
1907c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1908c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1909c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Update the Channel Mode
1910c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = -1;
1911c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (codecConfig.getChannelMode()) {
1912c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.CHANNEL_MODE_MONO:
1913c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 1;
1914c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1915c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.CHANNEL_MODE_STEREO:
1916c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = 2;
1917c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1918c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case BluetoothCodecConfig.CHANNEL_MODE_NONE:
1919c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
1920c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1921c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1922c851f854bbb0ec671270ff54e75b4a01f02f9281Pavlin Radoslavov        if (index >= 0 && mBluetoothSelectA2dpChannelMode != null) {
1923a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
1924a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
1925dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov             mBluetoothSelectA2dpChannelMode.setSummary(streaming);
1926c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1927c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1928c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Update the LDAC Playback Quality
1929dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        // The actual values are 0, 1, 2 - those are extracted
1930dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        // as mod-10 remainders of a larger value.
1931dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        // The reason is because within BluetoothCodecConfig we cannot use
1932dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        // a codec-specific value of zero.
1933dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        index = (int)codecConfig.getCodecSpecific1();
1934dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        if (index > 0) {
1935dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            index %= 10;
1936dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        } else {
1937dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            index = -1;
1938dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        }
1939dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        switch (index) {
1940dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        case 0:
1941dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        case 1:
1942dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        case 2:
19438e568ec84c0000798fd5adeddff865b63943e654fen wang        case 3:
1944c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1945c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
1946dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            index = -1;
1947c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
1948c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1949c851f854bbb0ec671270ff54e75b4a01f02f9281Pavlin Radoslavov        if (index >= 0 && mBluetoothSelectA2dpLdacPlaybackQuality != null) {
1950a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
1951a4efdf51958a39e6f897b1fcf6c88353753c9c21Pavlin Radoslavov            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
1952dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(streaming);
1953c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1954c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    }
1955c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1956c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private void writeBluetoothConfigurationOption(Preference preference,
1957c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                                   Object newValue) {
1958dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov        String[] summaries;
1959c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int index;
1960c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
1961c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
1962c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE;
1963c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE;
1964c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        int channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_NONE;
1965c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        long codecSpecific1Value = 0;
1966c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        long codecSpecific2Value = 0;
1967c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        long codecSpecific3Value = 0;
1968c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        long codecSpecific4Value = 0;
1969c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
1970c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Codec Type
1971c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String codecType = mBluetoothSelectA2dpCodec.getValue();
1972c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (preference == mBluetoothSelectA2dpCodec) {
1973c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecType = newValue.toString();
1974c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = mBluetoothSelectA2dpCodec.findIndexOfValue(newValue.toString());
1975c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (index >= 0) {
1976dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
1977dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
1978c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
1979c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
1980c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = mBluetoothSelectA2dpCodec.findIndexOfValue(codecType);
1981c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (index) {
1982c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 0:
1983c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            // Reset the priority of the current codec to default
1984c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            String oldValue = mBluetoothSelectA2dpCodec.getValue();
1985c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            switch (mBluetoothSelectA2dpCodec.findIndexOfValue(oldValue)) {
1986c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            case 0:
1987c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;      // No current codec
1988c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            case 1:
1989c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
1990c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;
1991c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            case 2:
1992c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
1993c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;
1994c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            case 3:
1995c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
1996c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;
1997c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            case 4:
1998c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
1999c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov                break;
2000c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            case 5:
2001c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
2002c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;
2003c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            default:
2004c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                break;
2005c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2006c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2007c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 1:
2008c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
2009c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
2010c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2011c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 2:
2012c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
2013c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
2014c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2015c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 3:
2016c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
2017c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
2018c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2019c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 4:
2020c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
2021c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
2022c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov            break;
2023c0a3a9fb948c83ad267d1bebd22d20c9d197171fPavlin Radoslavov        case 5:
2024c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
2025c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
2026c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
20275b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        case 6:
20285b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        synchronized (mBluetoothA2dpLock) {
20295b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov            if (mBluetoothA2dp != null) {
20305b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov                mBluetoothA2dp.enableOptionalCodecs();
20315b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov            }
20325b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        }
20335b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        return;
20345b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        case 7:
20355b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        synchronized (mBluetoothA2dpLock) {
20365b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov            if (mBluetoothA2dp != null) {
20375b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov                mBluetoothA2dp.disableOptionalCodecs();
20385b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov            }
20395b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        }
20405b1e4a27052b0b38394de12a4184026da4d908c1Pavlin Radoslavov        return;
2041c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
2042c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2043c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2044c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2045c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Sample Rate
2046c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String sampleRate = mBluetoothSelectA2dpSampleRate.getValue();
2047c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (preference == mBluetoothSelectA2dpSampleRate) {
2048c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            sampleRate = newValue.toString();
2049c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(newValue.toString());
2050c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (index >= 0) {
2051dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
2052dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
2053c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2054c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2055c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(sampleRate);
2056c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (index) {
2057c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 0:
2058c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            // Reset to default
2059c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2060c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 1:
2061c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_44100;
2062c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2063c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 2:
2064c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_48000;
2065c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2066c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 3:
2067c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_88200;
2068c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2069c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 4:
2070c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_96000;
2071c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2072c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
2073c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2074c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2075c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2076c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Bits Per Sample
2077c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String bitsPerSample = mBluetoothSelectA2dpBitsPerSample.getValue();
2078c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (preference == mBluetoothSelectA2dpBitsPerSample) {
2079c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            bitsPerSample = newValue.toString();
2080c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(newValue.toString());
2081c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (index >= 0) {
2082dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
2083dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
2084c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2085c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2086c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(bitsPerSample);
2087c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (index) {
2088c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 0:
2089c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            // Reset to default
2090c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2091c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 1:
2092c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_16;
2093c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2094c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 2:
2095c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_24;
2096c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2097c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 3:
2098c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_32;
2099c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2100c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
2101c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2102c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2103c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2104c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // Channel Mode
2105c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String channelMode = mBluetoothSelectA2dpChannelMode.getValue();
2106c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (preference == mBluetoothSelectA2dpChannelMode) {
2107c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            channelMode = newValue.toString();
2108c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(newValue.toString());
2109c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (index >= 0) {
2110dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
2111dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
2112c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2113c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2114c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(channelMode);
2115c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (index) {
2116c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 0:
2117c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            // Reset to default
2118c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2119c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 1:
2120c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_MONO;
2121c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2122c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 2:
2123c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_STEREO;
2124c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2125c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
2126c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2127c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2128c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2129c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        // LDAC Playback Quality
2130c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        String ldacPlaybackQuality = mBluetoothSelectA2dpLdacPlaybackQuality.getValue();
2131c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        if (preference == mBluetoothSelectA2dpLdacPlaybackQuality) {
2132c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            ldacPlaybackQuality = newValue.toString();
2133c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(newValue.toString());
2134c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (index >= 0) {
2135dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
2136dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov                mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
2137c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2138c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2139c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(ldacPlaybackQuality);
2140c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        switch (index) {
2141c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 0:
2142c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 1:
2143c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        case 2:
21448e568ec84c0000798fd5adeddff865b63943e654fen wang        case 3:
2145dd39c073d619b424c1e27a822026e86fb71a8059Pavlin Radoslavov            codecSpecific1Value = 1000 + index;
2146c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2147c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        default:
2148c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            break;
2149c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2150c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2151c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        BluetoothCodecConfig codecConfig =
2152c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            new BluetoothCodecConfig(codecTypeValue, codecPriorityValue,
2153c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                     sampleRateValue, bitsPerSampleValue,
2154c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                     channelModeValue, codecSpecific1Value,
2155c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                     codecSpecific2Value, codecSpecific3Value,
2156c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                     codecSpecific4Value);
2157c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2158c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        synchronized (mBluetoothA2dpLock) {
2159c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            if (mBluetoothA2dp != null) {
2160c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                mBluetoothA2dp.setCodecConfigPreference(codecConfig);
2161c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2162c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2163c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    }
2164c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2165eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void writeImmediatelyDestroyActivitiesOptions() {
2166eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
2167acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka            ActivityManager.getService().setAlwaysFinish(
2168eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mImmediatelyDestroyActivities.isChecked());
2169eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException ex) {
2170eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
2171eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2172eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
2173eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateImmediatelyDestroyActivitiesOptions() {
2174886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mImmediatelyDestroyActivities, Settings.Global.getInt(
2175ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                getActivity().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0)
2176ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                != 0);
2177eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2178eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
2179eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleValue(int which, ListPreference pref) {
2180eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
2181eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            float scale = mWindowManager.getAnimationScale(which);
218234481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            if (scale != 1) {
218334481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                mHaveDebugSettings = true;
218434481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn            }
2185eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = pref.getEntryValues();
2186ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            for (int i = 0; i < values.length; i++) {
2187eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                float val = Float.parseFloat(values[i].toString());
2188eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (scale <= val) {
2189eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    pref.setValueIndex(i);
219083b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    pref.setSummary(pref.getEntries()[i]);
2191eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
2192eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
2193eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
2194ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            pref.setValueIndex(values.length - 1);
219583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            pref.setSummary(pref.getEntries()[0]);
2196eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
2197eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
2198eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2199eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
2200eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAnimationScaleOptions() {
2201eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(0, mWindowAnimationScale);
2202eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        updateAnimationScaleValue(1, mTransitionAnimationScale);
2203b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        updateAnimationScaleValue(2, mAnimatorDurationScale);
2204eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2205eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
220683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
2207eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
220814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
2209eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mWindowManager.setAnimationScale(which, scale);
2210c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAnimationScaleValue(which, pref);
2211eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
2212eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
2213eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2214eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
2215b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void updateOverlayDisplayDevicesOptions() {
2216075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        String value = Settings.Global.getString(getActivity().getContentResolver(),
2217075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown                Settings.Global.OVERLAY_DISPLAY_DEVICES);
2218b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        if (value == null) {
2219b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            value = "";
2220b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
2221b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
2222b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
2223b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        for (int i = 0; i < values.length; i++) {
2224b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            if (value.contentEquals(values[i])) {
2225b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setValueIndex(i);
2226b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
2227b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown                return;
2228b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            }
2229b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        }
2230b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setValueIndex(0);
2231b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
2232b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
2233b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
2234b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    private void writeOverlayDisplayDevicesOptions(Object newValue) {
2235075cb30d4ce12805f43ae71cee27b8f0cdbc0149Jeff Brown        Settings.Global.putString(getActivity().getContentResolver(),
2236292b9fd2daf9d3222430a1a017623d2ce1a17471Jorim Jaggi                Settings.Global.OVERLAY_DISPLAY_DEVICES, (String) newValue);
2237b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        updateOverlayDisplayDevicesOptions();
2238b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown    }
2239b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown
2240eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    private void updateAppProcessLimitOptions() {
2241eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
2242acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka            int limit = ActivityManager.getService().getProcessLimit();
2243eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            CharSequence[] values = mAppProcessLimit.getEntryValues();
2244ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang            for (int i = 0; i < values.length; i++) {
2245eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                int val = Integer.parseInt(values[i].toString());
2246eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                if (val >= limit) {
224734481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    if (i != 0) {
224834481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                        mHaveDebugSettings = true;
224934481b9cd4a589d35f59b1e504cf02f4595f0d92Dianne Hackborn                    }
2250eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    mAppProcessLimit.setValueIndex(i);
225183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn                    mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
2252eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                    return;
2253eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn                }
2254eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            }
2255eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            mAppProcessLimit.setValueIndex(0);
225683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
2257eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
2258eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
2259eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2260eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
226183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    private void writeAppProcessLimitOptions(Object newValue) {
2262eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        try {
226314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
2264acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka            ActivityManager.getService().setProcessLimit(limit);
2265c5ec5be6e4e796bd44475c63d43d8806e522aaf1Dianne Hackborn            updateAppProcessLimitOptions();
2266eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } catch (RemoteException e) {
2267eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        }
2268eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn    }
2269eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn
2270d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void writeShowAllANRsOptions() {
2271d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        Settings.Secure.putInt(getActivity().getContentResolver(),
2272d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                Settings.Secure.ANR_SHOW_BACKGROUND,
2273d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn                mShowAllANRs.isChecked() ? 1 : 0);
2274d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
2275d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
2276d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    private void updateShowAllANRsOptions() {
2277886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio        updateSwitchPreference(mShowAllANRs, Settings.Secure.getInt(
2278886387373e21ffe78ccbc9b032b18794e2ce826fFabrice Di Meglio                getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
2279d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn    }
2280d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn
2281e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    private void writeShowNotificationChannelWarningsOptions() {
2282e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        Settings.Global.putInt(getActivity().getContentResolver(),
2283e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch                Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS,
2284e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch                mShowNotificationChannelWarnings.isChecked() ? 1 : 0);
2285e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    }
2286e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch
2287e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    private void updateShowNotificationChannelWarningsOptions() {
2288e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        final int defaultWarningEnabled = Build.IS_DEBUGGABLE ? 1 : 0;
2289e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        updateSwitchPreference(mShowNotificationChannelWarnings, Settings.Global.getInt(
2290e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch                getActivity().getContentResolver(),
2291e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch                Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, defaultWarningEnabled) != 0);
2292e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch    }
2293e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch
229448b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales    private void confirmEnableOemUnlock() {
22958b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales        DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
229648b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales            @Override
229748b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales            public void onClick(DialogInterface dialog, int which) {
22988b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales                if (which == DialogInterface.BUTTON_POSITIVE) {
229911d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang                    OemUnlockUtils.setOemUnlockEnabled(getActivity(), true);
23008b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales                }
23018b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales            }
23028b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales        };
23038b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales
2304ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang        DialogInterface.OnDismissListener onDismissListener =
2305ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                new DialogInterface.OnDismissListener() {
2306ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    @Override
2307ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    public void onDismiss(DialogInterface dialog) {
2308ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        if (getActivity() == null) {
2309ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                            return;
2310ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        }
2311ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        updateAllOptions();
2312ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    }
2313ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                };
231448b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales
231548b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales        new AlertDialog.Builder(getActivity())
231648b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                .setTitle(R.string.confirm_enable_oem_unlock_title)
231748b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                .setMessage(R.string.confirm_enable_oem_unlock_text)
23188b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales                .setPositiveButton(R.string.enable_text, onClickListener)
231948b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                .setNegativeButton(android.R.string.cancel, null)
23208b85fbfe51753506f6b4eb65892648d49059a8d6Andres Morales                .setOnDismissListener(onDismissListener)
232148b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                .create()
232248b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                .show();
232348b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales    }
232448b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales
2325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
2326f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio    public void onSwitchChanged(Switch switchView, boolean isChecked) {
2327138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio        if (switchView != mSwitchBar.getSwitch()) {
2328f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio            return;
2329f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio        }
2330748649b006ca842af9f916f45816ee704d27a46eFan Zhang        final boolean lastEnabledState = mSettingsEnabler.getLastEnabledState();
2331748649b006ca842af9f916f45816ee704d27a46eFan Zhang        if (isChecked != lastEnabledState) {
2332f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio            if (isChecked) {
2333f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                mDialogClicked = false;
2334f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                if (mEnableDialog != null) dismissDialogs();
2335f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
2336f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                        getActivity().getResources().getString(
2337f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                                R.string.dev_settings_warning_message))
2338f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                        .setTitle(R.string.dev_settings_warning_title)
2339f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                        .setPositiveButton(android.R.string.yes, this)
2340f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                        .setNegativeButton(android.R.string.no, this)
2341f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                        .show();
2342f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                mEnableDialog.setOnDismissListener(this);
2343f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio            } else {
2344f02db01ba6c255cffee5a334cd1b0ee7e01f116cFabrice Di Meglio                resetDangerousOptions();
2345748649b006ca842af9f916f45816ee704d27a46eFan Zhang                mSettingsEnabler.disableDevelopmentSettings();
2346748649b006ca842af9f916f45816ee704d27a46eFan Zhang                setPrefsEnabledState(false);
234714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
234814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
234914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    }
235014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn
235114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    @Override
23529244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    public void onActivityResult(int requestCode, int resultCode, Intent data) {
23539244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        if (requestCode == RESULT_DEBUG_APP) {
23549244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            if (resultCode == Activity.RESULT_OK) {
23559244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                mDebugApp = data.getAction();
23569244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                writeDebuggerOptions();
23579244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn                updateDebuggerOptions();
23589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            }
235902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        } else if (requestCode == RESULT_MOCK_LOCATION_APP) {
236002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            if (resultCode == Activity.RESULT_OK) {
236102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                mMockLocationApp = data.getAction();
236202e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                writeMockLocation();
236302e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                updateMockLocation();
236402e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            }
236573bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales        } else if (requestCode == REQUEST_CODE_ENABLE_OEM_UNLOCK) {
236673bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales            if (resultCode == Activity.RESULT_OK) {
236748b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                if (mEnableOemUnlock.isChecked()) {
236848b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                    confirmEnableOemUnlock();
236948b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                } else {
237011d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang                    OemUnlockUtils.setOemUnlockEnabled(getActivity(), false);
237148b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                }
237273bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales            }
23739244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else {
23749244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            super.onActivityResult(requestCode, resultCode, data);
23759244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        }
23769244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    }
23779244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn
23789244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn    @Override
237939b467482d1bf256a111c757e9b7621c6f523271Jason Monk    public boolean onPreferenceTreeClick(Preference preference) {
2380a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang        if (Utils.isMonkeyRunning()) {
2381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
2382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
2383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
2384cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        if (mBugReportInPowerController.handlePreferenceTreeClick(preference)) {
2385cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling            return true;
2386cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling        }
2387607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang
2388607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        if (mTelephonyMonitorController.handlePreferenceTreeClick(preference)) {
2389607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang            return true;
2390607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang        }
2391607ffe685ea6632a7ea4c972130f74b7db645f27Youhan Wang
23924d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        if (mWebViewAppPrefController.handlePreferenceTreeClick(preference)) {
23935b596285a04c503b52278a54389d2034f83f85b4Gustav Sennton            return true;
23944d3334c50b07c60c137085a35a8fb670eabd2acaGustav Sennton        }
2395cc20600102f7b61bac8be6160cce64fd4b1dde11Doris Ling
2396f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov        if (mVerifyAppsOverUsbController.handlePreferenceTreeClick(preference)) {
2397f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov            return true;
2398f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov        }
2399f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov
2400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
2401b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
240214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = false;
240314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                if (mAdbDialog != null) dismissDialogs();
240414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
2405ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn                        getActivity().getResources().getString(R.string.adb_warning_message))
2406b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
2407b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
2408b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
240924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
241014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mAdbDialog.setOnDismissListener(this);
2411b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
24125a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
24135a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 0);
2414f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov                mVerifyAppsOverUsbController.updatePreference();
24152817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
2416b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
24170761ffca609244eac10dd9cba8dc126add060138Benoit Goby        } else if (preference == mClearAdbKeys) {
24180761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (mAdbKeysDialog != null) dismissDialogs();
24190761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog = new AlertDialog.Builder(getActivity())
2420ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    .setMessage(R.string.adb_keys_warning_message)
2421ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    .setPositiveButton(android.R.string.ok, this)
2422ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    .setNegativeButton(android.R.string.cancel, null)
2423ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                    .show();
2424d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey        } else if (preference == mEnableTerminal) {
2425d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey            final PackageManager pm = getActivity().getPackageManager();
2426d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey            pm.setApplicationEnabledSetting(TERMINAL_APP_PACKAGE,
2427d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey                    mEnableTerminal.isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
2428d390b702b627b2f16d27f6ec54a89b8786761ed7Jeff Sharkey                            : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
2429afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
24305a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate            Settings.Global.putInt(getActivity().getContentResolver(),
24315a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
2432fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard                    mKeepScreenOn.isChecked() ?
2433b182ef3c77b7170ab09df72b86550a67eadbcfddjackqdyulei                            (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB
2434b182ef3c77b7170ab09df72b86550a67eadbcfddjackqdyulei                                    | BatteryManager.BATTERY_PLUGGED_WIRELESS) : 0);
243584bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu        } else if (preference == mBtHciSnoopLog) {
243684bbb548a6823649103ef91b73462848e8bf74d4Zhihai Xu            writeBtHciSnoopLogOptions();
24370bb6f70a8789a0b89beaf01ee463f63fc6876ba8Andres Morales        } else if (preference == mEnableOemUnlock && mEnableOemUnlock.isEnabled()) {
24387df06f131f16ea5f31150ae101b7fd50ca46a13fUdam Saini            if (mEnableOemUnlock.isChecked()) {
24397df06f131f16ea5f31150ae101b7fd50ca46a13fUdam Saini                if (!showKeyguardConfirmation(getResources(), REQUEST_CODE_ENABLE_OEM_UNLOCK)) {
244048b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                    confirmEnableOemUnlock();
244148b0b241aa30c5b4c97b74e62bbd806e88fd28a0Andres Morales                }
24427df06f131f16ea5f31150ae101b7fd50ca46a13fUdam Saini            } else {
244311d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang                OemUnlockUtils.setOemUnlockEnabled(getActivity(), false);
244473bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales            }
244502e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov        } else if (preference == mMockLocationAppPref) {
244602e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            Intent intent = new Intent(getActivity(), AppPicker.class);
244702e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            intent.putExtra(AppPicker.EXTRA_REQUESTIING_PERMISSION,
244802e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov                    Manifest.permission.ACCESS_MOCK_LOCATION);
244902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            startActivityForResult(intent, RESULT_MOCK_LOCATION_APP);
24500b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda        } else if (preference == mDebugViewAttributes) {
24510b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda            Settings.Global.putInt(getActivity().getContentResolver(),
24520b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda                    Settings.Global.DEBUG_VIEW_ATTRIBUTES,
24530b65294a7a94dd9a871bcae3a28d512df16a7b4cJon Miranda                    mDebugViewAttributes.isChecked() ? 1 : 0);
245497162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy        } else if (preference == mForceAllowOnExternal) {
245597162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy            Settings.Global.putInt(getActivity().getContentResolver(),
245697162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy                    Settings.Global.FORCE_ALLOW_ON_EXTERNAL,
245797162821f904b0b62096a0f4bedb7b0b2d8b70d0Todd Kennedy                    mForceAllowOnExternal.isChecked() ? 1 : 0);
24589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mDebugAppPref) {
245902e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            Intent intent = new Intent(getActivity(), AppPicker.class);
246002e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            intent.putExtra(AppPicker.EXTRA_DEBUGGABLE, true);
246102e65a181ae3b8b757b520f599b2678d06ce0c2fSvet Ganov            startActivityForResult(intent, RESULT_DEBUG_APP);
24629244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn        } else if (preference == mWaitForDebugger) {
24639244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn            writeDebuggerOptions();
246445a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao        } else if (preference == mOtaDisableAutomaticUpdate) {
246545a2c163c3870242ed60b5e025d505c967c2b0cbTao Bao            writeOtaDisableAutomaticUpdateOptions();
2466eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mStrictMode) {
2467eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeStrictModeVisualOptions();
2468eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mPointerLocation) {
2469eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writePointerLocationOptions();
2470f40770096fe75180fba679ed349a63d195729c0cJeff Brown        } else if (preference == mShowTouches) {
2471f40770096fe75180fba679ed349a63d195729c0cJeff Brown            writeShowTouchesOptions();
2472eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mShowScreenUpdates) {
2473e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeShowUpdatesOption();
2474e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn        } else if (preference == mDisableOverlays) {
2475e44f44d67913ae74900656ee2ef1d2f690c63d1cDianne Hackborn            writeDisableOverlaysOption();
2476eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn        } else if (preference == mImmediatelyDestroyActivities) {
2477eddc4fe89c020cbfedd5531cc2c13782034a8158Dianne Hackborn            writeImmediatelyDestroyActivitiesOptions();
2478d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn        } else if (preference == mShowAllANRs) {
2479d5119bd39738853dc96156d93c3dfbd65dd601e7Dianne Hackborn            writeShowAllANRsOptions();
2480e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch        } else if (preference == mShowNotificationChannelWarnings) {
2481e18fd90524d8e9dccbcee9fe585497b4943a16d6Geoffrey Pitsch            writeShowNotificationChannelWarningsOptions();
24820c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy        } else if (preference == mForceHardwareUi) {
24830c9c14b7864fddc7d5822d5db866ef0cc7a6d08aRomain Guy            writeHardwareUiOptions();
24846a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy        } else if (preference == mForceMsaa) {
24856a9a3e765a6a1e0a19ff7a866603f1a51155cc5dRomain Guy            writeMsaaOptions();
2486c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mShowHwScreenUpdates) {
2487c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeShowHwScreenUpdatesOptions();
2488cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy        } else if (preference == mShowHwLayersUpdates) {
2489cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            writeShowHwLayersUpdatesOptions();
2490c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy        } else if (preference == mDebugLayout) {
2491c1fa3e64b88ab81cf1faeaccb40cbc73e9f1f829Romain Guy            writeDebugLayoutOptions();
2492df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani        } else if (preference == mForceRtlLayout) {
2493df1eda8ef7c9b8ede9e125777d6adc67e0585c9bAmith Yamasani            writeForceRtlOptions();
24946c607384c478958260952b82932b9084a4536fc6Chong Zhang        } else if (preference == mWifiDisplayCertification) {
24956c607384c478958260952b82932b9084a4536fc6Chong Zhang            writeWifiDisplayCertificationOptions();
2496c9a6698fd44492841bf83bead93b62ecba8a967evandwalle        } else if (preference == mWifiVerboseLogging) {
2497c9a6698fd44492841bf83bead93b62ecba8a967evandwalle            writeWifiVerboseLoggingOptions();
24985e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        } else if (preference == mWifiAggressiveHandover) {
24995e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle            writeWifiAggressiveHandoverOptions();
25005e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle        } else if (preference == mWifiAllowScansWithTraffic) {
25015e7b3ad09f28f0ef083b6f10cf17f26a39735debvandwalle            writeWifiAllowScansWithTrafficOptions();
250254861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline        } else if (preference == mMobileDataAlwaysOn) {
250354861e124c1a3efeb43c95d68a5077a3ec2d99cbErik Kline            writeMobileDataAlwaysOnOptions();
2504b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch        } else if (preference == mColorTemperaturePreference) {
2505b3fef371bedcca5c26e8de1ca5759a39030f0ee8Steve Pfetsch            writeColorTemperature();
2506ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten        } else if (preference == mUSBAudio) {
2507ca54234efc0fe8fe2d36a1fb465a153ed0ca0cf8Glenn Kasten            writeUSBAudioOptions();
2508b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi        } else if (preference == mForceResizable) {
2509b12e9adc97adf6db90a896f2af37d7f1d0c1fe1bJorim Jaggi            writeForceResizableOptions();
2510591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach        } else if (preference == mBluetoothDisableAbsVolume) {
2511591c6c4f5ac73387dc83e119627344a78fd615c6Andre Eisenbach            writeBluetoothDisableAbsVolumeOptions();
251237fb338cda1066e20a813ce0d33b38fa0840bdcbJack He        } else if (preference == mBluetoothEnableInbandRinging) {
251337fb338cda1066e20a813ce0d33b38fa0840bdcbJack He            writeBluetoothEnableInbandRingingOptions();
2514bdcce705728bc46addca29736653863fe22f5659Makoto Onuki        } else if (SHORTCUT_MANAGER_RESET_KEY.equals(preference.getKey())) {
251506517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki            resetShortcutManagerThrottling();
2516c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn        } else {
251739b467482d1bf256a111c757e9b7621c6f523271Jason Monk            return super.onPreferenceTreeClick(preference);
2518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
251924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
2520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
2521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
2522b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
252373bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales    private boolean showKeyguardConfirmation(Resources resources, int requestCode) {
25248a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi        return new ChooseLockSettingsHelper(getActivity(), this).launchConfirmationActivity(
25258a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi                requestCode, resources.getString(R.string.oem_unlock_enable));
252673bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales    }
252773bbd4cbffd4c881b8b3a41c4ca9189fecad00a5Andres Morales
252883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    @Override
252983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    public boolean onPreferenceChange(Preference preference, Object newValue) {
2530fdf54815d29f1bddebd6e190290c825cec49c1b9Fabrice Di Meglio        if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
253183b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
253283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            updateHdcpValues();
253387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            pokeSystemProperties();
253483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
2535da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker        } else if (preference == mBluetoothSelectAvrcpVersion) {
2536da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker           writeBluetoothAvrcpVersion(newValue);
2537da2723a5ae4218be5cdaf57c3c439b95fc078793Ajay Panicker           return true;
2538c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        } else if ((preference == mBluetoothSelectA2dpCodec) ||
2539c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                   (preference == mBluetoothSelectA2dpSampleRate) ||
2540c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                   (preference == mBluetoothSelectA2dpBitsPerSample) ||
2541c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                   (preference == mBluetoothSelectA2dpChannelMode) ||
2542c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                   (preference == mBluetoothSelectA2dpLdacPlaybackQuality)) {
2543c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            writeBluetoothConfigurationOption(preference, newValue);
2544c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            return true;
2545408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn        } else if (preference == mLogdSize) {
2546408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            writeLogdSizeOption(newValue);
2547408c89bfb5738322fbea5e4119f7052173ceefc6Mark Salyzyn            return true;
2548c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        } else if (preference == mLogpersist) {
2549c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            writeLogpersistOption(newValue, false);
2550c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            return true;
25513f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        } else if (preference == mUsbConfiguration) {
25523f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            writeUsbConfigurationOption(newValue);
25533f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            return true;
255483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mWindowAnimationScale) {
255583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
255683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
255783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mTransitionAnimationScale) {
255883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
2559b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            return true;
2560b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase        } else if (preference == mAnimatorDurationScale) {
2561b29e7870de4238cbfa8eb7f3709bed7b49eeacdbChet Haase            writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
256283b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
2563b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown        } else if (preference == mOverlayDisplayDevices) {
2564b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            writeOverlayDisplayDevicesOptions(newValue);
2565b2b54eec86bc5b5830e4480407cbd1fccfd21256Jeff Brown            return true;
256670618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy        } else if (preference == mTrackFrameTime) {
256770618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            writeTrackFrameTimeOptions(newValue);
256870618480d95b0c0b9a8a55d47f9233b2111b4c6fRomain Guy            return true;
2569eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy        } else if (preference == mDebugHwOverdraw) {
2570eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy            writeDebugHwOverdrawOptions(newValue);
2571eb90fc56b285f9e9fabc1e104ad155ff213a6c48Romain Guy            return true;
2572f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger        } else if (preference == mDebugHwRenderer) {
2573f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger            writeDebugHwRendererOptions(newValue);
2574f91b036177326b65518402ada527f5348e2a18c4Derek Sollenberger            return true;
25756b24c458139091836486cce774a2e1255668e001Romain Guy        } else if (preference == mShowNonRectClip) {
25766b24c458139091836486cce774a2e1255668e001Romain Guy            writeShowNonRectClipOptions(newValue);
25776b24c458139091836486cce774a2e1255668e001Romain Guy            return true;
257883b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        } else if (preference == mAppProcessLimit) {
257983b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            writeAppProcessLimitOptions(newValue);
2580fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            return true;
2581fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette        } else if (preference == mSimulateColorSpace) {
2582fc0ab213b8637f4d9177ff5f08c4fdc155bbb941Alan Viverette            writeSimulateColorSpace(newValue);
258383b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn            return true;
258483b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        }
258583b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn        return false;
258683b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn    }
258783b09a57e158f3050c7feb5ea75e8dd2d626697eDianne Hackborn
258814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn    private void dismissDialogs() {
258914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mAdbDialog != null) {
259014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog.dismiss();
259114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
259214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
25930761ffca609244eac10dd9cba8dc126add060138Benoit Goby        if (mAdbKeysDialog != null) {
25940761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog.dismiss();
25950761ffca609244eac10dd9cba8dc126add060138Benoit Goby            mAdbKeysDialog = null;
25960761ffca609244eac10dd9cba8dc126add060138Benoit Goby        }
259714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (mEnableDialog != null) {
259814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog.dismiss();
259914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
260014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        }
2601c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        if (mLogpersistClearDialog != null) {
2602c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersistClearDialog.dismiss();
2603c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersistClearDialog = null;
2604c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        }
260524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
260624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
2607b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
260814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
260914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
261014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
26115a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                Settings.Global.putInt(getActivity().getContentResolver(),
26125a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate                        Settings.Global.ADB_ENABLED, 1);
2613f9f980d315c9dd6d0583f4918bad3a5276e1dc7fPavel Grafov                mVerifyAppsOverUsbController.updatePreference();
26142817c46c0459f67cfb886320fbc457786fdd5080Jeff Sharkey                updateBugreportOptions();
261514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
261614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
261714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
261814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
26190761ffca609244eac10dd9cba8dc126add060138Benoit Goby        } else if (dialog == mAdbKeysDialog) {
26200761ffca609244eac10dd9cba8dc126add060138Benoit Goby            if (which == DialogInterface.BUTTON_POSITIVE) {
26210761ffca609244eac10dd9cba8dc126add060138Benoit Goby                try {
26220761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    IBinder b = ServiceManager.getService(Context.USB_SERVICE);
26230761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    IUsbManager service = IUsbManager.Stub.asInterface(b);
26240761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    service.clearUsbDebuggingKeys();
26250761ffca609244eac10dd9cba8dc126add060138Benoit Goby                } catch (RemoteException e) {
26260761ffca609244eac10dd9cba8dc126add060138Benoit Goby                    Log.e(TAG, "Unable to clear adb keys", e);
26270761ffca609244eac10dd9cba8dc126add060138Benoit Goby                }
26280761ffca609244eac10dd9cba8dc126add060138Benoit Goby            }
262914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
263014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (which == DialogInterface.BUTTON_POSITIVE) {
263114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mDialogClicked = true;
2632748649b006ca842af9f916f45816ee704d27a46eFan Zhang                mSettingsEnabler.enableDevelopmentSettings();
2633748649b006ca842af9f916f45816ee704d27a46eFan Zhang                setPrefsEnabledState(true);
263414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            } else {
263514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                // Reset the toggle
2636138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                mSwitchBar.setChecked(false);
263714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
2638c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        } else if (dialog == mLogpersistClearDialog) {
2639c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            if (which == DialogInterface.BUTTON_POSITIVE) {
2640c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                setLogpersistOff(true);
2641c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            } else {
2642c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn                updateLogpersistValues();
2643c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            }
2644b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
2645b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
2646b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
2647b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
2648b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
264914dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        if (dialog == mAdbDialog) {
265014dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
265114dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn                mEnableAdb.setChecked(false);
265214dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
265314dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mAdbDialog = null;
265414dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        } else if (dialog == mEnableDialog) {
265514dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            if (!mDialogClicked) {
2656138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio                mSwitchBar.setChecked(false);
265714dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            }
265814dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn            mEnableDialog = null;
2659c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn        } else if (dialog == mLogpersistClearDialog) {
2660c8b1c3ec22aa2b76c4d63ee8a76f0dd670b34e8bMark Salyzyn            mLogpersistClearDialog = null;
2661b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
2662b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
266324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
266424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
266524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
266614dc2d4b84f544c4006646615d8d352f6346111aDianne Hackborn        dismissDialogs();
266724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
266824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
266987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
267087ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    void pokeSystemProperties() {
267187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        if (!mDontPokeProperties) {
2672cdc2c5534f8815cf0fef3ece4b95c25a0423f461Romain Guy            //noinspection unchecked
267387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            (new SystemPropPoker()).execute();
267487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
267587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
267687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn
26773f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
26783f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        @Override
26793f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        public void onReceive(Context context, Intent intent) {
26803f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood            updateUsbConfigurationValues();
26813f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood        }
26823f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood    };
26833f6ef34b35e234b82e54f02703a7096e029acd49Mike Lockwood
2684c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private BroadcastReceiver mBluetoothA2dpReceiver = new BroadcastReceiver() {
2685c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        @Override
2686c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        public void onReceive(Context context, Intent intent) {
26872829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov            Log.d(TAG, "mBluetoothA2dpReceiver.onReceive intent=" + intent);
26882829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov            String action = intent.getAction();
26892829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov
26902829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov            if (BluetoothA2dp.ACTION_CODEC_CONFIG_CHANGED.equals(action)) {
26912829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov                BluetoothCodecStatus codecStatus =
26922829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov                    (BluetoothCodecStatus)intent.getParcelableExtra(BluetoothCodecStatus.EXTRA_CODEC_STATUS);
26932829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov                Log.d(TAG, "Received BluetoothCodecStatus=" + codecStatus);
26942829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov                updateBluetoothA2dpConfigurationValues();
26952829ca322ac253f421f33053abbf6eb6d9367c7ePavlin Radoslavov            }
2696c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        }
2697c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    };
2698c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2699c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov    private BluetoothProfile.ServiceListener mBluetoothA2dpServiceListener =
2700c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        new BluetoothProfile.ServiceListener() {
2701c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            public void onServiceConnected(int profile,
2702c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                                           BluetoothProfile proxy) {
2703c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                synchronized (mBluetoothA2dpLock) {
2704c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                    mBluetoothA2dp = (BluetoothA2dp) proxy;
2705c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                }
2706c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                updateBluetoothA2dpConfigurationValues();
2707c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2708c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
2709c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            public void onServiceDisconnected(int profile) {
2710c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                synchronized (mBluetoothA2dpLock) {
2711c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                    mBluetoothA2dp = null;
2712c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                }
2713c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov                updateBluetoothA2dpConfigurationValues();
2714c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov            }
2715c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov        };
2716c65956efc862c1cf882719f681822a57e0915edfPavlin Radoslavov
27173bd52ddf4c6e357b736175c1039d1234b1a99204Dan Sandler    public static class SystemPropPoker extends AsyncTask<Void, Void, Void> {
271887ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        @Override
271987ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        protected Void doInBackground(Void... params) {
272058c83824d7287ff856913e41769acc8216d22806Umair Khan            String[] services = ServiceManager.listServices();
272187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            for (String service : services) {
272287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                IBinder obj = ServiceManager.checkService(service);
272387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                if (obj != null) {
272487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    Parcel data = Parcel.obtain();
272587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    try {
272687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                        obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0);
272787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    } catch (RemoteException e) {
2728d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                    } catch (Exception e) {
27294e9f04de0a6511086f47479addb53b84c3bb9763David Braun                        Log.i(TAG, "Someone wrote a bad service '" + service
2730d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn                                + "' that doesn't like to be poked: " + e);
273187ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    }
273287ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                    data.recycle();
273387ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn                }
273487ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            }
273587ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn            return null;
273687ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn        }
273787ca70172cc25ed2195d310b71d9c652a0757b88Dianne Hackborn    }
2738caf15613c29870850da952e51aaebb8b84867c49Jeff Sharkey
2739078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey    private static boolean isPackageInstalled(Context context, String packageName) {
2740078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        try {
2741078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey            return context.getPackageManager().getPackageInfo(packageName, 0) != null;
2742078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        } catch (NameNotFoundException e) {
2743078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey            return false;
2744078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey        }
2745078a367ffd45662bb55fa7fe23159f970f6df69dJeff Sharkey    }
2746ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
2747c1d83e826e8c6a6ba6389363318880ba1a1553e7Gustav Sennton
2748ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    /**
2749ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales     * For Search.
2750ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales     */
2751ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
2752ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales            new BaseSearchIndexProvider() {
27532ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio
27542ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                private boolean isShowingDeveloperOptions(Context context) {
27552ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                    return context.getSharedPreferences(DevelopmentSettings.PREF_FILE,
27562ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                            Context.MODE_PRIVATE).getBoolean(
2757ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                            DevelopmentSettings.PREF_SHOW,
2758ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                            android.os.Build.TYPE.equals("eng"));
27592ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                }
27602ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio
2761ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                @Override
2762ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                public List<SearchIndexableResource> getXmlResourcesToIndex(
2763ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                        Context context, boolean enabled) {
27642ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio
27652ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                    if (!isShowingDeveloperOptions(context)) {
27662ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                        return null;
27672ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                    }
27682ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio
2769ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    final SearchIndexableResource sir = new SearchIndexableResource(context);
2770ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    sir.xmlResId = R.xml.development_prefs;
2771ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    return Arrays.asList(sir);
2772ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                }
2773ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales
2774ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                @Override
2775ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                public List<String> getNonIndexableKeys(Context context) {
27762ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                    if (!isShowingDeveloperOptions(context)) {
27772ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                        return null;
27782ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio                    }
27792ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio
2780ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    final List<String> keys = new ArrayList<String>();
2781ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    if (!showEnableOemUnlockPreference()) {
2782ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                        keys.add(ENABLE_OEM_UNLOCK);
2783ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    }
2784ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                    return keys;
2785ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales                }
2786ce249fe38ddf8da562a0e92c58a7bb216a23c0bbAndres Morales            };
2787bdcce705728bc46addca29736653863fe22f5659Makoto Onuki
278806517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki    private void resetShortcutManagerThrottling() {
2789bdcce705728bc46addca29736653863fe22f5659Makoto Onuki        final IShortcutService service = IShortcutService.Stub.asInterface(
2790bdcce705728bc46addca29736653863fe22f5659Makoto Onuki                ServiceManager.getService(Context.SHORTCUT_SERVICE));
279106517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki        if (service != null) {
279206517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki            try {
279306517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki                service.resetThrottling();
279406517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki                Toast.makeText(getActivity(), R.string.reset_shortcut_manager_throttling_complete,
279506517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki                        Toast.LENGTH_SHORT).show();
279606517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki            } catch (RemoteException e) {
279706517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki                Log.e(TAG, "Failed to reset rate limiting", e);
2798bdcce705728bc46addca29736653863fe22f5659Makoto Onuki            }
279906517019303eca3053ce8670d022b00e67e46ebdMakoto Onuki        }
2800bdcce705728bc46addca29736653863fe22f5659Makoto Onuki    }
28010998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng
28020998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    private void updateOemUnlockSettingDescription() {
28030998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        if (mEnableOemUnlock != null) {
28040998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            int oemUnlockSummary = R.string.oem_unlock_enable_summary;
28050998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            if (isBootloaderUnlocked()) {
28060998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng                oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_bootloader_unlocked;
28070998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            } else if (isSimLockedDevice()) {
28080998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng                oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_sim_locked_device;
280911d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang            } else if (!OemUnlockUtils.isOemUnlockAllowed(mUm)) {
281063f791a1e93967dd29625006d8cd6afb74c8d0f2Esteban Talavera                // If the device isn't SIM-locked but OEM unlock is disabled by the system via the
281163f791a1e93967dd29625006d8cd6afb74c8d0f2Esteban Talavera                // user restriction, this means either some other carrier restriction is in place or
281263f791a1e93967dd29625006d8cd6afb74c8d0f2Esteban Talavera                // the device hasn't been able to confirm which restrictions (SIM-lock or otherwise)
281363f791a1e93967dd29625006d8cd6afb74c8d0f2Esteban Talavera                // apply.
281463f791a1e93967dd29625006d8cd6afb74c8d0f2Esteban Talavera                oemUnlockSummary =
2815ee904e89f2b41bedd731b032c5bf4330679b76b2Fan Zhang                        R.string.oem_unlock_enable_disabled_summary_connectivity_or_locked;
28160998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            }
28170998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            mEnableOemUnlock.setSummary(getString(oemUnlockSummary));
28180998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        }
28190998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    }
28200998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng
28210998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    /** Returns {@code true} if the device is SIM-locked. Otherwise, returns {@code false}. */
28220998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    private boolean isSimLockedDevice() {
28230998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        int phoneCount = mTelephonyManager.getPhoneCount();
28240998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        for (int i = 0; i < phoneCount; i++) {
28250998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            if (mTelephonyManager.getAllowedCarriers(i).size() > 0) {
28260998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng                return true;
28270998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            }
28280998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        }
28290998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        return false;
28300998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    }
28310998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng
28320998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    /**
28330998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng     * Returns {@code true} if the bootloader has been unlocked. Otherwise, returns {code false}.
28340998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng     */
28350998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    private boolean isBootloaderUnlocked() {
28360998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        int flashLockState = PersistentDataBlockManager.FLASH_LOCK_UNKNOWN;
28370998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        if (mOemUnlockManager != null) {
28380998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng            flashLockState = mOemUnlockManager.getFlashLockState();
28390998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        }
28400998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng
28410998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng        return flashLockState == PersistentDataBlockManager.FLASH_LOCK_UNLOCKED;
28420998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng    }
28430998abfc8f38c10fb4db336f412617a9e1774f72Steven Ng
284411d2d68e23365cf3ee72d50cb73ad9c9a534d5c5Fan Zhang
2845afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
2846