Home | History | Annotate | Download | only in provider
      1 /*
      2  * Copyright (C) 2006 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.provider;
     18 
     19 import android.annotation.NonNull;
     20 import android.annotation.SdkConstant;
     21 import android.annotation.SdkConstant.SdkConstantType;
     22 import android.annotation.SystemApi;
     23 import android.annotation.TestApi;
     24 import android.app.ActivityThread;
     25 import android.app.AppOpsManager;
     26 import android.app.Application;
     27 import android.app.SearchManager;
     28 import android.app.WallpaperManager;
     29 import android.content.ComponentName;
     30 import android.content.ContentResolver;
     31 import android.content.ContentValues;
     32 import android.content.Context;
     33 import android.content.IContentProvider;
     34 import android.content.Intent;
     35 import android.content.pm.ActivityInfo;
     36 import android.content.pm.PackageManager;
     37 import android.content.pm.ResolveInfo;
     38 import android.content.res.Configuration;
     39 import android.content.res.Resources;
     40 import android.database.Cursor;
     41 import android.database.SQLException;
     42 import android.location.LocationManager;
     43 import android.net.ConnectivityManager;
     44 import android.net.Uri;
     45 import android.net.wifi.WifiManager;
     46 import android.os.BatteryManager;
     47 import android.os.Binder;
     48 import android.os.Bundle;
     49 import android.os.DropBoxManager;
     50 import android.os.IBinder;
     51 import android.os.LocaleList;
     52 import android.os.Process;
     53 import android.os.RemoteException;
     54 import android.os.ServiceManager;
     55 import android.os.UserHandle;
     56 import android.os.Build.VERSION_CODES;
     57 import android.speech.tts.TextToSpeech;
     58 import android.text.TextUtils;
     59 import android.util.AndroidException;
     60 import android.util.ArrayMap;
     61 import android.util.ArraySet;
     62 import android.util.Log;
     63 import android.util.MemoryIntArray;
     64 
     65 import com.android.internal.annotations.GuardedBy;
     66 import com.android.internal.util.ArrayUtils;
     67 import com.android.internal.widget.ILockSettings;
     68 
     69 import java.io.IOException;
     70 import java.net.URISyntaxException;
     71 import java.text.SimpleDateFormat;
     72 import java.util.HashMap;
     73 import java.util.HashSet;
     74 import java.util.Locale;
     75 import java.util.Map;
     76 import java.util.Set;
     77 
     78 /**
     79  * The Settings provider contains global system-level device preferences.
     80  */
     81 public final class Settings {
     82 
     83     // Intent actions for Settings
     84 
     85     /**
     86      * Activity Action: Show system settings.
     87      * <p>
     88      * Input: Nothing.
     89      * <p>
     90      * Output: Nothing.
     91      */
     92     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     93     public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
     94 
     95     /**
     96      * Activity Action: Show settings to allow configuration of APNs.
     97      * <p>
     98      * Input: Nothing.
     99      * <p>
    100      * Output: Nothing.
    101      */
    102     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    103     public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS";
    104 
    105     /**
    106      * Activity Action: Show settings to allow configuration of current location
    107      * sources.
    108      * <p>
    109      * In some cases, a matching Activity may not exist, so ensure you
    110      * safeguard against this.
    111      * <p>
    112      * Input: Nothing.
    113      * <p>
    114      * Output: Nothing.
    115      */
    116     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    117     public static final String ACTION_LOCATION_SOURCE_SETTINGS =
    118             "android.settings.LOCATION_SOURCE_SETTINGS";
    119 
    120     /**
    121      * Activity Action: Show settings to allow configuration of users.
    122      * <p>
    123      * In some cases, a matching Activity may not exist, so ensure you
    124      * safeguard against this.
    125      * <p>
    126      * Input: Nothing.
    127      * <p>
    128      * Output: Nothing.
    129      * @hide
    130      */
    131     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    132     public static final String ACTION_USER_SETTINGS =
    133             "android.settings.USER_SETTINGS";
    134 
    135     /**
    136      * Activity Action: Show settings to allow configuration of wireless controls
    137      * such as Wi-Fi, Bluetooth and Mobile networks.
    138      * <p>
    139      * In some cases, a matching Activity may not exist, so ensure you
    140      * safeguard against this.
    141      * <p>
    142      * Input: Nothing.
    143      * <p>
    144      * Output: Nothing.
    145      */
    146     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    147     public static final String ACTION_WIRELESS_SETTINGS =
    148             "android.settings.WIRELESS_SETTINGS";
    149 
    150     /**
    151      * Activity Action: Show tether provisioning activity.
    152      *
    153      * <p>
    154      * In some cases, a matching Activity may not exist, so ensure you
    155      * safeguard against this.
    156      * <p>
    157      * Input: {@link ConnectivityManager.EXTRA_TETHER_TYPE} should be included to specify which type
    158      * of tethering should be checked. {@link ConnectivityManager.EXTRA_PROVISION_CALLBACK} should
    159      * contain a {@link ResultReceiver} which will be called back with a tether result code.
    160      * <p>
    161      * Output: The result of the provisioning check.
    162      * {@link ConnectivityManager.TETHER_ERROR_NO_ERROR} if successful,
    163      * {@link ConnectivityManager.TETHER_ERROR_PROVISION_FAILED} for failure.
    164      *
    165      * @hide
    166      */
    167     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    168     public static final String ACTION_TETHER_PROVISIONING =
    169             "android.settings.TETHER_PROVISIONING_UI";
    170 
    171     /**
    172      * Activity Action: Show settings to allow entering/exiting airplane mode.
    173      * <p>
    174      * In some cases, a matching Activity may not exist, so ensure you
    175      * safeguard against this.
    176      * <p>
    177      * Input: Nothing.
    178      * <p>
    179      * Output: Nothing.
    180      */
    181     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    182     public static final String ACTION_AIRPLANE_MODE_SETTINGS =
    183             "android.settings.AIRPLANE_MODE_SETTINGS";
    184 
    185     /**
    186      * Activity Action: Modify Airplane mode settings using a voice command.
    187      * <p>
    188      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
    189      * <p>
    190      * This intent MUST be started using
    191      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
    192      * startVoiceActivity}.
    193      * <p>
    194      * Note: The activity implementing this intent MUST verify that
    195      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
    196      * modifying the setting.
    197      * <p>
    198      * Input: To tell which state airplane mode should be set to, add the
    199      * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified.
    200      * If the extra is not included, no changes will be made.
    201      * <p>
    202      * Output: Nothing.
    203      */
    204     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    205     public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE =
    206             "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
    207 
    208     /**
    209      * Activity Action: Show settings for accessibility modules.
    210      * <p>
    211      * In some cases, a matching Activity may not exist, so ensure you
    212      * safeguard against this.
    213      * <p>
    214      * Input: Nothing.
    215      * <p>
    216      * Output: Nothing.
    217      */
    218     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    219     public static final String ACTION_ACCESSIBILITY_SETTINGS =
    220             "android.settings.ACCESSIBILITY_SETTINGS";
    221 
    222     /**
    223      * Activity Action: Show settings to control access to usage information.
    224      * <p>
    225      * In some cases, a matching Activity may not exist, so ensure you
    226      * safeguard against this.
    227      * <p>
    228      * Input: Nothing.
    229      * <p>
    230      * Output: Nothing.
    231      */
    232     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    233     public static final String ACTION_USAGE_ACCESS_SETTINGS =
    234             "android.settings.USAGE_ACCESS_SETTINGS";
    235 
    236     /**
    237      * Activity Category: Show application settings related to usage access.
    238      * <p>
    239      * An activity that provides a user interface for adjusting usage access related
    240      * preferences for its containing application. Optional but recommended for apps that
    241      * use {@link android.Manifest.permission#PACKAGE_USAGE_STATS}.
    242      * <p>
    243      * The activity may define meta-data to describe what usage access is
    244      * used for within their app with {@link #METADATA_USAGE_ACCESS_REASON}, which
    245      * will be displayed in Settings.
    246      * <p>
    247      * Input: Nothing.
    248      * <p>
    249      * Output: Nothing.
    250      */
    251     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
    252     public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG =
    253             "android.intent.category.USAGE_ACCESS_CONFIG";
    254 
    255     /**
    256      * Metadata key: Reason for needing usage access.
    257      * <p>
    258      * A key for metadata attached to an activity that receives action
    259      * {@link #INTENT_CATEGORY_USAGE_ACCESS_CONFIG}, shown to the
    260      * user as description of how the app uses usage access.
    261      * <p>
    262      */
    263     public static final String METADATA_USAGE_ACCESS_REASON =
    264             "android.settings.metadata.USAGE_ACCESS_REASON";
    265 
    266     /**
    267      * Activity Action: Show settings to allow configuration of security and
    268      * location privacy.
    269      * <p>
    270      * In some cases, a matching Activity may not exist, so ensure you
    271      * safeguard against this.
    272      * <p>
    273      * Input: Nothing.
    274      * <p>
    275      * Output: Nothing.
    276      */
    277     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    278     public static final String ACTION_SECURITY_SETTINGS =
    279             "android.settings.SECURITY_SETTINGS";
    280 
    281     /**
    282      * Activity Action: Show trusted credentials settings, opening to the user tab,
    283      * to allow management of installed credentials.
    284      * <p>
    285      * In some cases, a matching Activity may not exist, so ensure you
    286      * safeguard against this.
    287      * <p>
    288      * Input: Nothing.
    289      * <p>
    290      * Output: Nothing.
    291      * @hide
    292      */
    293     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    294     public static final String ACTION_TRUSTED_CREDENTIALS_USER =
    295             "com.android.settings.TRUSTED_CREDENTIALS_USER";
    296 
    297     /**
    298      * Activity Action: Show dialog explaining that an installed CA cert may enable
    299      * monitoring of encrypted network traffic.
    300      * <p>
    301      * In some cases, a matching Activity may not exist, so ensure you
    302      * safeguard against this. Add {@link #EXTRA_NUMBER_OF_CERTIFICATES} extra to indicate the
    303      * number of certificates.
    304      * <p>
    305      * Input: Nothing.
    306      * <p>
    307      * Output: Nothing.
    308      * @hide
    309      */
    310     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    311     public static final String ACTION_MONITORING_CERT_INFO =
    312             "com.android.settings.MONITORING_CERT_INFO";
    313 
    314     /**
    315      * Activity Action: Show settings to allow configuration of privacy options.
    316      * <p>
    317      * In some cases, a matching Activity may not exist, so ensure you
    318      * safeguard against this.
    319      * <p>
    320      * Input: Nothing.
    321      * <p>
    322      * Output: Nothing.
    323      */
    324     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    325     public static final String ACTION_PRIVACY_SETTINGS =
    326             "android.settings.PRIVACY_SETTINGS";
    327 
    328     /**
    329      * Activity Action: Show settings to allow configuration of VPN.
    330      * <p>
    331      * In some cases, a matching Activity may not exist, so ensure you
    332      * safeguard against this.
    333      * <p>
    334      * Input: Nothing.
    335      * <p>
    336      * Output: Nothing.
    337      */
    338     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    339     public static final String ACTION_VPN_SETTINGS =
    340             "android.settings.VPN_SETTINGS";
    341 
    342     /**
    343      * Activity Action: Show settings to allow configuration of Wi-Fi.
    344      * <p>
    345      * In some cases, a matching Activity may not exist, so ensure you
    346      * safeguard against this.
    347      * <p>
    348      * Input: Nothing.
    349      * <p>
    350      * Output: Nothing.
    351 
    352      */
    353     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    354     public static final String ACTION_WIFI_SETTINGS =
    355             "android.settings.WIFI_SETTINGS";
    356 
    357     /**
    358      * Activity Action: Show settings to allow configuration of a static IP
    359      * address for Wi-Fi.
    360      * <p>
    361      * In some cases, a matching Activity may not exist, so ensure you safeguard
    362      * against this.
    363      * <p>
    364      * Input: Nothing.
    365      * <p>
    366      * Output: Nothing.
    367      */
    368     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    369     public static final String ACTION_WIFI_IP_SETTINGS =
    370             "android.settings.WIFI_IP_SETTINGS";
    371 
    372     /**
    373      * Activity Action: Show settings to allow configuration of Bluetooth.
    374      * <p>
    375      * In some cases, a matching Activity may not exist, so ensure you
    376      * safeguard against this.
    377      * <p>
    378      * Input: Nothing.
    379      * <p>
    380      * Output: Nothing.
    381      */
    382     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    383     public static final String ACTION_BLUETOOTH_SETTINGS =
    384             "android.settings.BLUETOOTH_SETTINGS";
    385 
    386     /**
    387      * Activity Action: Show settings to allow configuration of cast endpoints.
    388      * <p>
    389      * In some cases, a matching Activity may not exist, so ensure you
    390      * safeguard against this.
    391      * <p>
    392      * Input: Nothing.
    393      * <p>
    394      * Output: Nothing.
    395      */
    396     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    397     public static final String ACTION_CAST_SETTINGS =
    398             "android.settings.CAST_SETTINGS";
    399 
    400     /**
    401      * Activity Action: Show settings to allow configuration of date and time.
    402      * <p>
    403      * In some cases, a matching Activity may not exist, so ensure you
    404      * safeguard against this.
    405      * <p>
    406      * Input: Nothing.
    407      * <p>
    408      * Output: Nothing.
    409      */
    410     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    411     public static final String ACTION_DATE_SETTINGS =
    412             "android.settings.DATE_SETTINGS";
    413 
    414     /**
    415      * Activity Action: Show settings to allow configuration of sound and volume.
    416      * <p>
    417      * In some cases, a matching Activity may not exist, so ensure you
    418      * safeguard against this.
    419      * <p>
    420      * Input: Nothing.
    421      * <p>
    422      * Output: Nothing.
    423      */
    424     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    425     public static final String ACTION_SOUND_SETTINGS =
    426             "android.settings.SOUND_SETTINGS";
    427 
    428     /**
    429      * Activity Action: Show settings to allow configuration of display.
    430      * <p>
    431      * In some cases, a matching Activity may not exist, so ensure you
    432      * safeguard against this.
    433      * <p>
    434      * Input: Nothing.
    435      * <p>
    436      * Output: Nothing.
    437      */
    438     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    439     public static final String ACTION_DISPLAY_SETTINGS =
    440             "android.settings.DISPLAY_SETTINGS";
    441 
    442     /**
    443      * Activity Action: Show settings to allow configuration of Night display.
    444      * <p>
    445      * In some cases, a matching Activity may not exist, so ensure you
    446      * safeguard against this.
    447      * <p>
    448      * Input: Nothing.
    449      * <p>
    450      * Output: Nothing.
    451      *
    452      * @hide
    453      */
    454     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    455     public static final String ACTION_NIGHT_DISPLAY_SETTINGS =
    456             "android.settings.NIGHT_DISPLAY_SETTINGS";
    457 
    458     /**
    459      * Activity Action: Show settings to allow configuration of locale.
    460      * <p>
    461      * In some cases, a matching Activity may not exist, so ensure you
    462      * safeguard against this.
    463      * <p>
    464      * Input: Nothing.
    465      * <p>
    466      * Output: Nothing.
    467      */
    468     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    469     public static final String ACTION_LOCALE_SETTINGS =
    470             "android.settings.LOCALE_SETTINGS";
    471 
    472     /**
    473      * Activity Action: Show settings to configure input methods, in particular
    474      * allowing the user to enable input methods.
    475      * <p>
    476      * In some cases, a matching Activity may not exist, so ensure you
    477      * safeguard against this.
    478      * <p>
    479      * Input: Nothing.
    480      * <p>
    481      * Output: Nothing.
    482      */
    483     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    484     public static final String ACTION_VOICE_INPUT_SETTINGS =
    485             "android.settings.VOICE_INPUT_SETTINGS";
    486 
    487     /**
    488      * Activity Action: Show settings to configure input methods, in particular
    489      * allowing the user to enable input methods.
    490      * <p>
    491      * In some cases, a matching Activity may not exist, so ensure you
    492      * safeguard against this.
    493      * <p>
    494      * Input: Nothing.
    495      * <p>
    496      * Output: Nothing.
    497      */
    498     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    499     public static final String ACTION_INPUT_METHOD_SETTINGS =
    500             "android.settings.INPUT_METHOD_SETTINGS";
    501 
    502     /**
    503      * Activity Action: Show settings to enable/disable input method subtypes.
    504      * <p>
    505      * In some cases, a matching Activity may not exist, so ensure you
    506      * safeguard against this.
    507      * <p>
    508      * To tell which input method's subtypes are displayed in the settings, add
    509      * {@link #EXTRA_INPUT_METHOD_ID} extra to this Intent with the input method id.
    510      * If there is no extra in this Intent, subtypes from all installed input methods
    511      * will be displayed in the settings.
    512      *
    513      * @see android.view.inputmethod.InputMethodInfo#getId
    514      * <p>
    515      * Input: Nothing.
    516      * <p>
    517      * Output: Nothing.
    518      */
    519     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    520     public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS =
    521             "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
    522 
    523     /**
    524      * Activity Action: Show a dialog to select input method.
    525      * <p>
    526      * In some cases, a matching Activity may not exist, so ensure you
    527      * safeguard against this.
    528      * <p>
    529      * Input: Nothing.
    530      * <p>
    531      * Output: Nothing.
    532      * @hide
    533      */
    534     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    535     public static final String ACTION_SHOW_INPUT_METHOD_PICKER =
    536             "android.settings.SHOW_INPUT_METHOD_PICKER";
    537 
    538     /**
    539      * Activity Action: Show settings to manage the user input dictionary.
    540      * <p>
    541      * Starting with {@link android.os.Build.VERSION_CODES#KITKAT},
    542      * it is guaranteed there will always be an appropriate implementation for this Intent action.
    543      * In prior releases of the platform this was optional, so ensure you safeguard against it.
    544      * <p>
    545      * Input: Nothing.
    546      * <p>
    547      * Output: Nothing.
    548      */
    549     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    550     public static final String ACTION_USER_DICTIONARY_SETTINGS =
    551             "android.settings.USER_DICTIONARY_SETTINGS";
    552 
    553     /**
    554      * Activity Action: Show settings to configure the hardware keyboard.
    555      * <p>
    556      * In some cases, a matching Activity may not exist, so ensure you
    557      * safeguard against this.
    558      * <p>
    559      * Input: Nothing.
    560      * <p>
    561      * Output: Nothing.
    562      */
    563     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    564     public static final String ACTION_HARD_KEYBOARD_SETTINGS =
    565             "android.settings.HARD_KEYBOARD_SETTINGS";
    566 
    567     /**
    568      * Activity Action: Adds a word to the user dictionary.
    569      * <p>
    570      * In some cases, a matching Activity may not exist, so ensure you
    571      * safeguard against this.
    572      * <p>
    573      * Input: An extra with key <code>word</code> that contains the word
    574      * that should be added to the dictionary.
    575      * <p>
    576      * Output: Nothing.
    577      *
    578      * @hide
    579      */
    580     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    581     public static final String ACTION_USER_DICTIONARY_INSERT =
    582             "com.android.settings.USER_DICTIONARY_INSERT";
    583 
    584     /**
    585      * Activity Action: Show settings to allow configuration of application-related settings.
    586      * <p>
    587      * In some cases, a matching Activity may not exist, so ensure you
    588      * safeguard against this.
    589      * <p>
    590      * Input: Nothing.
    591      * <p>
    592      * Output: Nothing.
    593      */
    594     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    595     public static final String ACTION_APPLICATION_SETTINGS =
    596             "android.settings.APPLICATION_SETTINGS";
    597 
    598     /**
    599      * Activity Action: Show settings to allow configuration of application
    600      * development-related settings.  As of
    601      * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} this action is
    602      * a required part of the platform.
    603      * <p>
    604      * Input: Nothing.
    605      * <p>
    606      * Output: Nothing.
    607      */
    608     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    609     public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS =
    610             "android.settings.APPLICATION_DEVELOPMENT_SETTINGS";
    611 
    612     /**
    613      * Activity Action: Show settings to allow configuration of quick launch shortcuts.
    614      * <p>
    615      * In some cases, a matching Activity may not exist, so ensure you
    616      * safeguard against this.
    617      * <p>
    618      * Input: Nothing.
    619      * <p>
    620      * Output: Nothing.
    621      */
    622     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    623     public static final String ACTION_QUICK_LAUNCH_SETTINGS =
    624             "android.settings.QUICK_LAUNCH_SETTINGS";
    625 
    626     /**
    627      * Activity Action: Show settings to manage installed applications.
    628      * <p>
    629      * In some cases, a matching Activity may not exist, so ensure you
    630      * safeguard against this.
    631      * <p>
    632      * Input: Nothing.
    633      * <p>
    634      * Output: Nothing.
    635      */
    636     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    637     public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS =
    638             "android.settings.MANAGE_APPLICATIONS_SETTINGS";
    639 
    640     /**
    641      * Activity Action: Show settings to manage all applications.
    642      * <p>
    643      * In some cases, a matching Activity may not exist, so ensure you
    644      * safeguard against this.
    645      * <p>
    646      * Input: Nothing.
    647      * <p>
    648      * Output: Nothing.
    649      */
    650     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    651     public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS =
    652             "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
    653 
    654     /**
    655      * Activity Action: Show screen for controlling which apps can draw on top of other apps.
    656      * <p>
    657      * In some cases, a matching Activity may not exist, so ensure you
    658      * safeguard against this.
    659      * <p>
    660      * Input: Optionally, the Intent's data URI can specify the application package name to
    661      * directly invoke the management GUI specific to the package name. For example
    662      * "package:com.my.app".
    663      * <p>
    664      * Output: Nothing.
    665      */
    666     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    667     public static final String ACTION_MANAGE_OVERLAY_PERMISSION =
    668             "android.settings.action.MANAGE_OVERLAY_PERMISSION";
    669 
    670     /**
    671      * Activity Action: Show screen for controlling which apps are allowed to write/modify
    672      * system settings.
    673      * <p>
    674      * In some cases, a matching Activity may not exist, so ensure you
    675      * safeguard against this.
    676      * <p>
    677      * Input: Optionally, the Intent's data URI can specify the application package name to
    678      * directly invoke the management GUI specific to the package name. For example
    679      * "package:com.my.app".
    680      * <p>
    681      * Output: Nothing.
    682      */
    683     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    684     public static final String ACTION_MANAGE_WRITE_SETTINGS =
    685             "android.settings.action.MANAGE_WRITE_SETTINGS";
    686 
    687     /**
    688      * Activity Action: Show screen of details about a particular application.
    689      * <p>
    690      * In some cases, a matching Activity may not exist, so ensure you
    691      * safeguard against this.
    692      * <p>
    693      * Input: The Intent's data URI specifies the application package name
    694      * to be shown, with the "package" scheme.  That is "package:com.my.app".
    695      * <p>
    696      * Output: Nothing.
    697      */
    698     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    699     public static final String ACTION_APPLICATION_DETAILS_SETTINGS =
    700             "android.settings.APPLICATION_DETAILS_SETTINGS";
    701 
    702     /**
    703      * Activity Action: Show screen for controlling which apps can ignore battery optimizations.
    704      * <p>
    705      * Input: Nothing.
    706      * <p>
    707      * Output: Nothing.
    708      * <p>
    709      * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
    710      * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
    711      * already ignoring optimizations.  You can use
    712      * {@link #ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS} to ask the user to put you
    713      * on this list.
    714      */
    715     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    716     public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS =
    717             "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
    718 
    719     /**
    720      * Activity Action: Ask the user to allow an app to ignore battery optimizations (that is,
    721      * put them on the whitelist of apps shown by
    722      * {@link #ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}).  For an app to use this, it also
    723      * must hold the {@link android.Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}
    724      * permission.
    725      * <p><b>Note:</b> most applications should <em>not</em> use this; there are many facilities
    726      * provided by the platform for applications to operate correctly in the various power
    727      * saving modes.  This is only for unusual applications that need to deeply control their own
    728      * execution, at the potential expense of the user's battery life.  Note that these applications
    729      * greatly run the risk of showing to the user as high power consumers on their device.</p>
    730      * <p>
    731      * Input: The Intent's data URI must specify the application package name
    732      * to be shown, with the "package" scheme.  That is "package:com.my.app".
    733      * <p>
    734      * Output: Nothing.
    735      * <p>
    736      * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
    737      * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
    738      * already ignoring optimizations.
    739      */
    740     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    741     public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS =
    742             "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
    743 
    744     /**
    745      * Activity Action: Show screen for controlling background data
    746      * restrictions for a particular application.
    747      * <p>
    748      * Input: Intent's data URI set with an application name, using the
    749      * "package" schema (like "package:com.my.app").
    750      *
    751      * <p>
    752      * Output: Nothing.
    753      * <p>
    754      * Applications can also use {@link android.net.ConnectivityManager#getRestrictBackgroundStatus
    755      * ConnectivityManager#getRestrictBackgroundStatus()} to determine the
    756      * status of the background data restrictions for them.
    757      */
    758     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    759     public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS =
    760             "android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS";
    761 
    762     /**
    763      * @hide
    764      * Activity Action: Show the "app ops" settings screen.
    765      * <p>
    766      * Input: Nothing.
    767      * <p>
    768      * Output: Nothing.
    769      */
    770     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    771     public static final String ACTION_APP_OPS_SETTINGS =
    772             "android.settings.APP_OPS_SETTINGS";
    773 
    774     /**
    775      * Activity Action: Show settings for system update functionality.
    776      * <p>
    777      * In some cases, a matching Activity may not exist, so ensure you
    778      * safeguard against this.
    779      * <p>
    780      * Input: Nothing.
    781      * <p>
    782      * Output: Nothing.
    783      *
    784      * @hide
    785      */
    786     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    787     public static final String ACTION_SYSTEM_UPDATE_SETTINGS =
    788             "android.settings.SYSTEM_UPDATE_SETTINGS";
    789 
    790     /**
    791      * Activity Action: Show settings to allow configuration of sync settings.
    792      * <p>
    793      * In some cases, a matching Activity may not exist, so ensure you
    794      * safeguard against this.
    795      * <p>
    796      * The account types available to add via the add account button may be restricted by adding an
    797      * {@link #EXTRA_AUTHORITIES} extra to this Intent with one or more syncable content provider's
    798      * authorities. Only account types which can sync with that content provider will be offered to
    799      * the user.
    800      * <p>
    801      * Input: Nothing.
    802      * <p>
    803      * Output: Nothing.
    804      */
    805     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    806     public static final String ACTION_SYNC_SETTINGS =
    807             "android.settings.SYNC_SETTINGS";
    808 
    809     /**
    810      * Activity Action: Show add account screen for creating a new account.
    811      * <p>
    812      * In some cases, a matching Activity may not exist, so ensure you
    813      * safeguard against this.
    814      * <p>
    815      * The account types available to add may be restricted by adding an {@link #EXTRA_AUTHORITIES}
    816      * extra to the Intent with one or more syncable content provider's authorities.  Only account
    817      * types which can sync with that content provider will be offered to the user.
    818      * <p>
    819      * Account types can also be filtered by adding an {@link #EXTRA_ACCOUNT_TYPES} extra to the
    820      * Intent with one or more account types.
    821      * <p>
    822      * Input: Nothing.
    823      * <p>
    824      * Output: Nothing.
    825      */
    826     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    827     public static final String ACTION_ADD_ACCOUNT =
    828             "android.settings.ADD_ACCOUNT_SETTINGS";
    829 
    830     /**
    831      * Activity Action: Show settings for selecting the network operator.
    832      * <p>
    833      * In some cases, a matching Activity may not exist, so ensure you
    834      * safeguard against this.
    835      * <p>
    836      * Input: Nothing.
    837      * <p>
    838      * Output: Nothing.
    839      */
    840     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    841     public static final String ACTION_NETWORK_OPERATOR_SETTINGS =
    842             "android.settings.NETWORK_OPERATOR_SETTINGS";
    843 
    844     /**
    845      * Activity Action: Show settings for selection of 2G/3G.
    846      * <p>
    847      * In some cases, a matching Activity may not exist, so ensure you
    848      * safeguard against this.
    849      * <p>
    850      * Input: Nothing.
    851      * <p>
    852      * Output: Nothing.
    853      */
    854     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    855     public static final String ACTION_DATA_ROAMING_SETTINGS =
    856             "android.settings.DATA_ROAMING_SETTINGS";
    857 
    858     /**
    859      * Activity Action: Show settings for internal storage.
    860      * <p>
    861      * In some cases, a matching Activity may not exist, so ensure you
    862      * safeguard against this.
    863      * <p>
    864      * Input: Nothing.
    865      * <p>
    866      * Output: Nothing.
    867      */
    868     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    869     public static final String ACTION_INTERNAL_STORAGE_SETTINGS =
    870             "android.settings.INTERNAL_STORAGE_SETTINGS";
    871     /**
    872      * Activity Action: Show settings for memory card storage.
    873      * <p>
    874      * In some cases, a matching Activity may not exist, so ensure you
    875      * safeguard against this.
    876      * <p>
    877      * Input: Nothing.
    878      * <p>
    879      * Output: Nothing.
    880      */
    881     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    882     public static final String ACTION_MEMORY_CARD_SETTINGS =
    883             "android.settings.MEMORY_CARD_SETTINGS";
    884 
    885     /**
    886      * Activity Action: Show settings for global search.
    887      * <p>
    888      * In some cases, a matching Activity may not exist, so ensure you
    889      * safeguard against this.
    890      * <p>
    891      * Input: Nothing.
    892      * <p>
    893      * Output: Nothing
    894      */
    895     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    896     public static final String ACTION_SEARCH_SETTINGS =
    897         "android.search.action.SEARCH_SETTINGS";
    898 
    899     /**
    900      * Activity Action: Show general device information settings (serial
    901      * number, software version, phone number, etc.).
    902      * <p>
    903      * In some cases, a matching Activity may not exist, so ensure you
    904      * safeguard against this.
    905      * <p>
    906      * Input: Nothing.
    907      * <p>
    908      * Output: Nothing
    909      */
    910     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    911     public static final String ACTION_DEVICE_INFO_SETTINGS =
    912         "android.settings.DEVICE_INFO_SETTINGS";
    913 
    914     /**
    915      * Activity Action: Show NFC settings.
    916      * <p>
    917      * This shows UI that allows NFC to be turned on or off.
    918      * <p>
    919      * In some cases, a matching Activity may not exist, so ensure you
    920      * safeguard against this.
    921      * <p>
    922      * Input: Nothing.
    923      * <p>
    924      * Output: Nothing
    925      * @see android.nfc.NfcAdapter#isEnabled()
    926      */
    927     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    928     public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
    929 
    930     /**
    931      * Activity Action: Show NFC Sharing settings.
    932      * <p>
    933      * This shows UI that allows NDEF Push (Android Beam) to be turned on or
    934      * off.
    935      * <p>
    936      * In some cases, a matching Activity may not exist, so ensure you
    937      * safeguard against this.
    938      * <p>
    939      * Input: Nothing.
    940      * <p>
    941      * Output: Nothing
    942      * @see android.nfc.NfcAdapter#isNdefPushEnabled()
    943      */
    944     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    945     public static final String ACTION_NFCSHARING_SETTINGS =
    946         "android.settings.NFCSHARING_SETTINGS";
    947 
    948     /**
    949      * Activity Action: Show NFC Tap & Pay settings
    950      * <p>
    951      * This shows UI that allows the user to configure Tap&Pay
    952      * settings.
    953      * <p>
    954      * In some cases, a matching Activity may not exist, so ensure you
    955      * safeguard against this.
    956      * <p>
    957      * Input: Nothing.
    958      * <p>
    959      * Output: Nothing
    960      */
    961     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    962     public static final String ACTION_NFC_PAYMENT_SETTINGS =
    963         "android.settings.NFC_PAYMENT_SETTINGS";
    964 
    965     /**
    966      * Activity Action: Show Daydream settings.
    967      * <p>
    968      * In some cases, a matching Activity may not exist, so ensure you
    969      * safeguard against this.
    970      * <p>
    971      * Input: Nothing.
    972      * <p>
    973      * Output: Nothing.
    974      * @see android.service.dreams.DreamService
    975      */
    976     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    977     public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
    978 
    979     /**
    980      * Activity Action: Show Notification listener settings.
    981      * <p>
    982      * In some cases, a matching Activity may not exist, so ensure you
    983      * safeguard against this.
    984      * <p>
    985      * Input: Nothing.
    986      * <p>
    987      * Output: Nothing.
    988      * @see android.service.notification.NotificationListenerService
    989      */
    990     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    991     public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS
    992             = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
    993 
    994     /**
    995      * Activity Action: Show Do Not Disturb access settings.
    996      * <p>
    997      * Users can grant and deny access to Do Not Disturb configuration from here.
    998      * See {@link android.app.NotificationManager#isNotificationPolicyAccessGranted()} for more
    999      * details.
   1000      * <p>
   1001      * Input: Nothing.
   1002      * <p>
   1003      * Output: Nothing.
   1004      */
   1005     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1006     public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
   1007             = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS";
   1008 
   1009     /**
   1010      * @hide
   1011      */
   1012     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1013     public static final String ACTION_CONDITION_PROVIDER_SETTINGS
   1014             = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
   1015 
   1016     /**
   1017      * Activity Action: Show settings for video captioning.
   1018      * <p>
   1019      * In some cases, a matching Activity may not exist, so ensure you safeguard
   1020      * against this.
   1021      * <p>
   1022      * Input: Nothing.
   1023      * <p>
   1024      * Output: Nothing.
   1025      */
   1026     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1027     public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
   1028 
   1029     /**
   1030      * Activity Action: Show the top level print settings.
   1031      * <p>
   1032      * In some cases, a matching Activity may not exist, so ensure you
   1033      * safeguard against this.
   1034      * <p>
   1035      * Input: Nothing.
   1036      * <p>
   1037      * Output: Nothing.
   1038      */
   1039     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1040     public static final String ACTION_PRINT_SETTINGS =
   1041             "android.settings.ACTION_PRINT_SETTINGS";
   1042 
   1043     /**
   1044      * Activity Action: Show Zen Mode configuration settings.
   1045      *
   1046      * @hide
   1047      */
   1048     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1049     public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
   1050 
   1051     /**
   1052      * Activity Action: Show Zen Mode priority configuration settings.
   1053      *
   1054      * @hide
   1055      */
   1056     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1057     public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS
   1058             = "android.settings.ZEN_MODE_PRIORITY_SETTINGS";
   1059 
   1060     /**
   1061      * Activity Action: Show Zen Mode automation configuration settings.
   1062      *
   1063      * @hide
   1064      */
   1065     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1066     public static final String ACTION_ZEN_MODE_AUTOMATION_SETTINGS
   1067             = "android.settings.ZEN_MODE_AUTOMATION_SETTINGS";
   1068 
   1069     /**
   1070      * Activity Action: Modify do not disturb mode settings.
   1071      * <p>
   1072      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
   1073      * <p>
   1074      * This intent MUST be started using
   1075      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
   1076      * startVoiceActivity}.
   1077      * <p>
   1078      * Note: The Activity implementing this intent MUST verify that
   1079      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}.
   1080      * returns true before modifying the setting.
   1081      * <p>
   1082      * Input: The optional {@link #EXTRA_DO_NOT_DISTURB_MODE_MINUTES} extra can be used to indicate
   1083      * how long the user wishes to avoid interruptions for. The optional
   1084      * {@link #EXTRA_DO_NOT_DISTURB_MODE_ENABLED} extra can be to indicate if the user is
   1085      * enabling or disabling do not disturb mode. If either extra is not included, the
   1086      * user maybe asked to provide the value.
   1087      * <p>
   1088      * Output: Nothing.
   1089      */
   1090     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1091     public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE =
   1092             "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE";
   1093 
   1094     /**
   1095      * Activity Action: Show Zen Mode schedule rule configuration settings.
   1096      *
   1097      * @hide
   1098      */
   1099     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1100     public static final String ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS
   1101             = "android.settings.ZEN_MODE_SCHEDULE_RULE_SETTINGS";
   1102 
   1103     /**
   1104      * Activity Action: Show Zen Mode event rule configuration settings.
   1105      *
   1106      * @hide
   1107      */
   1108     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1109     public static final String ACTION_ZEN_MODE_EVENT_RULE_SETTINGS
   1110             = "android.settings.ZEN_MODE_EVENT_RULE_SETTINGS";
   1111 
   1112     /**
   1113      * Activity Action: Show Zen Mode external rule configuration settings.
   1114      *
   1115      * @hide
   1116      */
   1117     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1118     public static final String ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS
   1119             = "android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS";
   1120 
   1121     /**
   1122      * Activity Action: Show the regulatory information screen for the device.
   1123      * <p>
   1124      * In some cases, a matching Activity may not exist, so ensure you safeguard
   1125      * against this.
   1126      * <p>
   1127      * Input: Nothing.
   1128      * <p>
   1129      * Output: Nothing.
   1130      */
   1131     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1132     public static final String
   1133             ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
   1134 
   1135     /**
   1136      * Activity Action: Show Device Name Settings.
   1137      * <p>
   1138      * In some cases, a matching Activity may not exist, so ensure you safeguard
   1139      * against this.
   1140      *
   1141      * @hide
   1142      */
   1143     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1144     public static final String DEVICE_NAME_SETTINGS = "android.settings.DEVICE_NAME";
   1145 
   1146     /**
   1147      * Activity Action: Show pairing settings.
   1148      * <p>
   1149      * In some cases, a matching Activity may not exist, so ensure you safeguard
   1150      * against this.
   1151      *
   1152      * @hide
   1153      */
   1154     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1155     public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS";
   1156 
   1157     /**
   1158      * Activity Action: Show battery saver settings.
   1159      * <p>
   1160      * In some cases, a matching Activity may not exist, so ensure you safeguard
   1161      * against this.
   1162      */
   1163     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1164     public static final String ACTION_BATTERY_SAVER_SETTINGS
   1165             = "android.settings.BATTERY_SAVER_SETTINGS";
   1166 
   1167     /**
   1168      * Activity Action: Modify Battery Saver mode setting using a voice command.
   1169      * <p>
   1170      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
   1171      * <p>
   1172      * This intent MUST be started using
   1173      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
   1174      * startVoiceActivity}.
   1175      * <p>
   1176      * Note: The activity implementing this intent MUST verify that
   1177      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
   1178      * modifying the setting.
   1179      * <p>
   1180      * Input: To tell which state batter saver mode should be set to, add the
   1181      * {@link #EXTRA_BATTERY_SAVER_MODE_ENABLED} extra to this Intent with the state specified.
   1182      * If the extra is not included, no changes will be made.
   1183      * <p>
   1184      * Output: Nothing.
   1185      */
   1186     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1187     public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE =
   1188             "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE";
   1189 
   1190     /**
   1191      * Activity Action: Show Home selection settings. If there are multiple activities
   1192      * that can satisfy the {@link Intent#CATEGORY_HOME} intent, this screen allows you
   1193      * to pick your preferred activity.
   1194      */
   1195     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1196     public static final String ACTION_HOME_SETTINGS
   1197             = "android.settings.HOME_SETTINGS";
   1198 
   1199 
   1200 
   1201     /**
   1202      * Activity Action: Show Default apps settings.
   1203      * <p>
   1204      * In some cases, a matching Activity may not exist, so ensure you
   1205      * safeguard against this.
   1206      * <p>
   1207      * Input: Nothing.
   1208      * <p>
   1209      * Output: Nothing.
   1210      */
   1211     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1212     public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS
   1213             = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
   1214 
   1215     /**
   1216      * Activity Action: Show notification settings.
   1217      *
   1218      * @hide
   1219      */
   1220     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1221     public static final String ACTION_NOTIFICATION_SETTINGS
   1222             = "android.settings.NOTIFICATION_SETTINGS";
   1223 
   1224     /**
   1225      * Activity Action: Show notification settings for a single app.
   1226      *
   1227      * @hide
   1228      */
   1229     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1230     public static final String ACTION_APP_NOTIFICATION_SETTINGS
   1231             = "android.settings.APP_NOTIFICATION_SETTINGS";
   1232 
   1233     /**
   1234      * Activity Action: Show notification redaction settings.
   1235      *
   1236      * @hide
   1237      */
   1238     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1239     public static final String ACTION_APP_NOTIFICATION_REDACTION
   1240             = "android.settings.ACTION_APP_NOTIFICATION_REDACTION";
   1241 
   1242     /** @hide */ public static final String EXTRA_APP_UID = "app_uid";
   1243     /** @hide */ public static final String EXTRA_APP_PACKAGE = "app_package";
   1244 
   1245     /**
   1246      * Activity Action: Show a dialog with disabled by policy message.
   1247      * <p> If an user action is disabled by policy, this dialog can be triggered to let
   1248      * the user know about this.
   1249      * <p>
   1250      * Input: Nothing.
   1251      * <p>
   1252      * Output: Nothing.
   1253      *
   1254      * @hide
   1255      */
   1256     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1257     public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS
   1258             = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
   1259 
   1260     /**
   1261      * Activity Action: Show a dialog for remote bugreport flow.
   1262      * <p>
   1263      * Input: Nothing.
   1264      * <p>
   1265      * Output: Nothing.
   1266      *
   1267      * @hide
   1268      */
   1269     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1270     public static final String ACTION_SHOW_REMOTE_BUGREPORT_DIALOG
   1271             = "android.settings.SHOW_REMOTE_BUGREPORT_DIALOG";
   1272 
   1273     /**
   1274      * Activity Action: Show VR listener settings.
   1275      * <p>
   1276      * Input: Nothing.
   1277      * <p>
   1278      * Output: Nothing.
   1279      *
   1280      * @see android.service.vr.VrListenerService
   1281      */
   1282     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1283     public static final String ACTION_VR_LISTENER_SETTINGS
   1284             = "android.settings.VR_LISTENER_SETTINGS";
   1285 
   1286     /**
   1287      * Activity Action: Allows user to select current webview implementation.
   1288      * <p>
   1289      * Input: Nothing.
   1290      * <p>
   1291      * Output: Nothing.
   1292      */
   1293     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
   1294     public static final String ACTION_WEBVIEW_SETTINGS = "android.settings.WEBVIEW_SETTINGS";
   1295 
   1296     // End of Intent actions for Settings
   1297 
   1298     /**
   1299      * @hide - Private call() method on SettingsProvider to read from 'system' table.
   1300      */
   1301     public static final String CALL_METHOD_GET_SYSTEM = "GET_system";
   1302 
   1303     /**
   1304      * @hide - Private call() method on SettingsProvider to read from 'secure' table.
   1305      */
   1306     public static final String CALL_METHOD_GET_SECURE = "GET_secure";
   1307 
   1308     /**
   1309      * @hide - Private call() method on SettingsProvider to read from 'global' table.
   1310      */
   1311     public static final String CALL_METHOD_GET_GLOBAL = "GET_global";
   1312 
   1313     /**
   1314      * @hide - Specifies that the caller of the fast-path call()-based flow tracks
   1315      * the settings generation in order to cache values locally. If this key is
   1316      * mapped to a <code>null</code> string extra in the request bundle, the response
   1317      * bundle will contain the same key mapped to a parcelable extra which would be
   1318      * an {@link android.util.MemoryIntArray}. The response will also contain an
   1319      * integer mapped to the {@link #CALL_METHOD_GENERATION_INDEX_KEY} which is the
   1320      * index in the array clients should use to lookup the generation. For efficiency
   1321      * the caller should request the generation tracking memory array only if it
   1322      * doesn't already have it.
   1323      *
   1324      * @see #CALL_METHOD_GENERATION_INDEX_KEY
   1325      */
   1326     public static final String CALL_METHOD_TRACK_GENERATION_KEY = "_track_generation";
   1327 
   1328     /**
   1329      * @hide Key with the location in the {@link android.util.MemoryIntArray} where
   1330      * to look up the generation id of the backing table. The value is an integer.
   1331      *
   1332      * @see #CALL_METHOD_TRACK_GENERATION_KEY
   1333      */
   1334     public static final String CALL_METHOD_GENERATION_INDEX_KEY = "_generation_index";
   1335 
   1336     /**
   1337      * @hide Key with the settings table generation. The value is an integer.
   1338      *
   1339      * @see #CALL_METHOD_TRACK_GENERATION_KEY
   1340      */
   1341     public static final String CALL_METHOD_GENERATION_KEY = "_generation";
   1342 
   1343     /**
   1344      * @hide - User handle argument extra to the fast-path call()-based requests
   1345      */
   1346     public static final String CALL_METHOD_USER_KEY = "_user";
   1347 
   1348     /** @hide - Private call() method to write to 'system' table */
   1349     public static final String CALL_METHOD_PUT_SYSTEM = "PUT_system";
   1350 
   1351     /** @hide - Private call() method to write to 'secure' table */
   1352     public static final String CALL_METHOD_PUT_SECURE = "PUT_secure";
   1353 
   1354     /** @hide - Private call() method to write to 'global' table */
   1355     public static final String CALL_METHOD_PUT_GLOBAL= "PUT_global";
   1356 
   1357     /**
   1358      * Activity Extra: Limit available options in launched activity based on the given authority.
   1359      * <p>
   1360      * This can be passed as an extra field in an Activity Intent with one or more syncable content
   1361      * provider's authorities as a String[]. This field is used by some intents to alter the
   1362      * behavior of the called activity.
   1363      * <p>
   1364      * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types available based
   1365      * on the authority given.
   1366      */
   1367     public static final String EXTRA_AUTHORITIES = "authorities";
   1368 
   1369     /**
   1370      * Activity Extra: Limit available options in launched activity based on the given account
   1371      * types.
   1372      * <p>
   1373      * This can be passed as an extra field in an Activity Intent with one or more account types
   1374      * as a String[]. This field is used by some intents to alter the behavior of the called
   1375      * activity.
   1376      * <p>
   1377      * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types to the specified
   1378      * list.
   1379      */
   1380     public static final String EXTRA_ACCOUNT_TYPES = "account_types";
   1381 
   1382     public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
   1383 
   1384     /**
   1385      * Activity Extra: The device identifier to act upon.
   1386      * <p>
   1387      * This can be passed as an extra field in an Activity Intent with a single
   1388      * InputDeviceIdentifier. This field is used by some activities to jump straight into the
   1389      * settings for the given device.
   1390      * <p>
   1391      * Example: The {@link #ACTION_INPUT_METHOD_SETTINGS} intent opens the keyboard layout
   1392      * dialog for the given device.
   1393      * @hide
   1394      */
   1395     public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier";
   1396 
   1397     /**
   1398      * Activity Extra: Enable or disable Airplane Mode.
   1399      * <p>
   1400      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE}
   1401      * intent as a boolean to indicate if it should be enabled.
   1402      */
   1403     public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
   1404 
   1405     /**
   1406      * Activity Extra: Enable or disable Battery saver mode.
   1407      * <p>
   1408      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE}
   1409      * intent as a boolean to indicate if it should be enabled.
   1410      */
   1411     public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED =
   1412             "android.settings.extra.battery_saver_mode_enabled";
   1413 
   1414     /**
   1415      * Activity Extra: Enable or disable Do Not Disturb mode.
   1416      * <p>
   1417      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
   1418      * intent as a boolean to indicate if it should be enabled.
   1419      */
   1420     public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED =
   1421             "android.settings.extra.do_not_disturb_mode_enabled";
   1422 
   1423     /**
   1424      * Activity Extra: How many minutes to enable do not disturb mode for.
   1425      * <p>
   1426      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
   1427      * intent to indicate how long do not disturb mode should be enabled for.
   1428      */
   1429     public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES =
   1430             "android.settings.extra.do_not_disturb_mode_minutes";
   1431 
   1432     /**
   1433      * Activity Extra: Number of certificates
   1434      * <p>
   1435      * This can be passed as an extra field to the {@link #ACTION_MONITORING_CERT_INFO}
   1436      * intent to indicate the number of certificates
   1437      * @hide
   1438      */
   1439     public static final String EXTRA_NUMBER_OF_CERTIFICATES =
   1440             "android.settings.extra.number_of_certificates";
   1441 
   1442     private static final String JID_RESOURCE_PREFIX = "android";
   1443 
   1444     public static final String AUTHORITY = "settings";
   1445 
   1446     private static final String TAG = "Settings";
   1447     private static final boolean LOCAL_LOGV = false;
   1448 
   1449     // Lock ensures that when enabling/disabling the master location switch, we don't end up
   1450     // with a partial enable/disable state in multi-threaded situations.
   1451     private static final Object mLocationSettingsLock = new Object();
   1452 
   1453     public static class SettingNotFoundException extends AndroidException {
   1454         public SettingNotFoundException(String msg) {
   1455             super(msg);
   1456         }
   1457     }
   1458 
   1459     /**
   1460      * Common base for tables of name/value settings.
   1461      */
   1462     public static class NameValueTable implements BaseColumns {
   1463         public static final String NAME = "name";
   1464         public static final String VALUE = "value";
   1465 
   1466         protected static boolean putString(ContentResolver resolver, Uri uri,
   1467                 String name, String value) {
   1468             // The database will take care of replacing duplicates.
   1469             try {
   1470                 ContentValues values = new ContentValues();
   1471                 values.put(NAME, name);
   1472                 values.put(VALUE, value);
   1473                 resolver.insert(uri, values);
   1474                 return true;
   1475             } catch (SQLException e) {
   1476                 Log.w(TAG, "Can't set key " + name + " in " + uri, e);
   1477                 return false;
   1478             }
   1479         }
   1480 
   1481         public static Uri getUriFor(Uri uri, String name) {
   1482             return Uri.withAppendedPath(uri, name);
   1483         }
   1484     }
   1485 
   1486     private static final class GenerationTracker {
   1487         private final MemoryIntArray mArray;
   1488         private final Runnable mErrorHandler;
   1489         private final int mIndex;
   1490         private int mCurrentGeneration;
   1491 
   1492         public GenerationTracker(@NonNull MemoryIntArray array, int index,
   1493                 int generation, Runnable errorHandler) {
   1494             mArray = array;
   1495             mIndex = index;
   1496             mErrorHandler = errorHandler;
   1497             mCurrentGeneration = generation;
   1498         }
   1499 
   1500         public boolean isGenerationChanged() {
   1501             final int currentGeneration = readCurrentGeneration();
   1502             if (currentGeneration >= 0) {
   1503                 if (currentGeneration == mCurrentGeneration) {
   1504                     return false;
   1505                 }
   1506                 mCurrentGeneration = currentGeneration;
   1507             }
   1508             return true;
   1509         }
   1510 
   1511         private int readCurrentGeneration() {
   1512             try {
   1513                 return mArray.get(mIndex);
   1514             } catch (IOException e) {
   1515                 Log.e(TAG, "Error getting current generation", e);
   1516                 if (mErrorHandler != null) {
   1517                     mErrorHandler.run();
   1518                 }
   1519             }
   1520             return -1;
   1521         }
   1522 
   1523         public void destroy() {
   1524             try {
   1525                 mArray.close();
   1526             } catch (IOException e) {
   1527                 Log.e(TAG, "Error closing backing array", e);
   1528                 if (mErrorHandler != null) {
   1529                     mErrorHandler.run();
   1530                 }
   1531             }
   1532         }
   1533     }
   1534 
   1535     // Thread-safe.
   1536     private static class NameValueCache {
   1537         private static final boolean DEBUG = false;
   1538 
   1539         private final Uri mUri;
   1540 
   1541         private static final String[] SELECT_VALUE =
   1542             new String[] { Settings.NameValueTable.VALUE };
   1543         private static final String NAME_EQ_PLACEHOLDER = "name=?";
   1544 
   1545         // Must synchronize on 'this' to access mValues and mValuesVersion.
   1546         private final HashMap<String, String> mValues = new HashMap<String, String>();
   1547 
   1548         // Initially null; set lazily and held forever.  Synchronized on 'this'.
   1549         private IContentProvider mContentProvider = null;
   1550 
   1551         // The method we'll call (or null, to not use) on the provider
   1552         // for the fast path of retrieving settings.
   1553         private final String mCallGetCommand;
   1554         private final String mCallSetCommand;
   1555 
   1556         @GuardedBy("this")
   1557         private GenerationTracker mGenerationTracker;
   1558 
   1559         public NameValueCache(Uri uri, String getCommand, String setCommand) {
   1560             mUri = uri;
   1561             mCallGetCommand = getCommand;
   1562             mCallSetCommand = setCommand;
   1563         }
   1564 
   1565         private IContentProvider lazyGetProvider(ContentResolver cr) {
   1566             IContentProvider cp = null;
   1567             synchronized (NameValueCache.this) {
   1568                 cp = mContentProvider;
   1569                 if (cp == null) {
   1570                     cp = mContentProvider = cr.acquireProvider(mUri.getAuthority());
   1571                 }
   1572             }
   1573             return cp;
   1574         }
   1575 
   1576         public boolean putStringForUser(ContentResolver cr, String name, String value,
   1577                 final int userHandle) {
   1578             try {
   1579                 Bundle arg = new Bundle();
   1580                 arg.putString(Settings.NameValueTable.VALUE, value);
   1581                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
   1582                 IContentProvider cp = lazyGetProvider(cr);
   1583                 cp.call(cr.getPackageName(), mCallSetCommand, name, arg);
   1584             } catch (RemoteException e) {
   1585                 Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
   1586                 return false;
   1587             }
   1588             return true;
   1589         }
   1590 
   1591         public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
   1592             final boolean isSelf = (userHandle == UserHandle.myUserId());
   1593             if (isSelf) {
   1594                 synchronized (NameValueCache.this) {
   1595                     if (mGenerationTracker != null) {
   1596                         if (mGenerationTracker.isGenerationChanged()) {
   1597                             if (DEBUG) {
   1598                                 Log.i(TAG, "Generation changed for type:"
   1599                                         + mUri.getPath() + " in package:"
   1600                                         + cr.getPackageName() +" and user:" + userHandle);
   1601                             }
   1602                             mValues.clear();
   1603                         } else if (mValues.containsKey(name)) {
   1604                             return mValues.get(name);
   1605                         }
   1606                     }
   1607                 }
   1608             } else {
   1609                 if (LOCAL_LOGV) Log.v(TAG, "get setting for user " + userHandle
   1610                         + " by user " + UserHandle.myUserId() + " so skipping cache");
   1611             }
   1612 
   1613             IContentProvider cp = lazyGetProvider(cr);
   1614 
   1615             // Try the fast path first, not using query().  If this
   1616             // fails (alternate Settings provider that doesn't support
   1617             // this interface?) then we fall back to the query/table
   1618             // interface.
   1619             if (mCallGetCommand != null) {
   1620                 try {
   1621                     Bundle args = null;
   1622                     if (!isSelf) {
   1623                         args = new Bundle();
   1624                         args.putInt(CALL_METHOD_USER_KEY, userHandle);
   1625                     }
   1626                     boolean needsGenerationTracker = false;
   1627                     synchronized (NameValueCache.this) {
   1628                         if (isSelf && mGenerationTracker == null) {
   1629                             needsGenerationTracker = true;
   1630                             if (args == null) {
   1631                                 args = new Bundle();
   1632                             }
   1633                             args.putString(CALL_METHOD_TRACK_GENERATION_KEY, null);
   1634                             if (DEBUG) {
   1635                                 Log.i(TAG, "Requested generation tracker for type: "+ mUri.getPath()
   1636                                         + " in package:" + cr.getPackageName() +" and user:"
   1637                                         + userHandle);
   1638                             }
   1639                         }
   1640                     }
   1641                     Bundle b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
   1642                     if (b != null) {
   1643                         String value = b.getString(Settings.NameValueTable.VALUE);
   1644                         // Don't update our cache for reads of other users' data
   1645                         if (isSelf) {
   1646                             synchronized (NameValueCache.this) {
   1647                                 if (needsGenerationTracker) {
   1648                                     MemoryIntArray array = b.getParcelable(
   1649                                             CALL_METHOD_TRACK_GENERATION_KEY);
   1650                                     final int index = b.getInt(
   1651                                             CALL_METHOD_GENERATION_INDEX_KEY, -1);
   1652                                     if (array != null && index >= 0) {
   1653                                         final int generation = b.getInt(
   1654                                                 CALL_METHOD_GENERATION_KEY, 0);
   1655                                         if (DEBUG) {
   1656                                             Log.i(TAG, "Received generation tracker for type:"
   1657                                                     + mUri.getPath() + " in package:"
   1658                                                     + cr.getPackageName() + " and user:"
   1659                                                     + userHandle + " with index:" + index);
   1660                                         }
   1661                                         mGenerationTracker = new GenerationTracker(array, index,
   1662                                                 generation, () -> {
   1663                                             synchronized (NameValueCache.this) {
   1664                                                 Log.e(TAG, "Error accessing generation"
   1665                                                         + " tracker - removing");
   1666                                                 if (mGenerationTracker != null) {
   1667                                                     GenerationTracker generationTracker =
   1668                                                             mGenerationTracker;
   1669                                                     mGenerationTracker = null;
   1670                                                     generationTracker.destroy();
   1671                                                     mValues.clear();
   1672                                                 }
   1673                                             }
   1674                                         });
   1675                                     }
   1676                                 }
   1677                                 mValues.put(name, value);
   1678                             }
   1679                         } else {
   1680                             if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
   1681                                     + " by " + UserHandle.myUserId()
   1682                                     + " so not updating cache");
   1683                         }
   1684                         return value;
   1685                     }
   1686                     // If the response Bundle is null, we fall through
   1687                     // to the query interface below.
   1688                 } catch (RemoteException e) {
   1689                     // Not supported by the remote side?  Fall through
   1690                     // to query().
   1691                 }
   1692             }
   1693 
   1694             Cursor c = null;
   1695             try {
   1696                 c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE, NAME_EQ_PLACEHOLDER,
   1697                              new String[]{name}, null, null);
   1698                 if (c == null) {
   1699                     Log.w(TAG, "Can't get key " + name + " from " + mUri);
   1700                     return null;
   1701                 }
   1702 
   1703                 String value = c.moveToNext() ? c.getString(0) : null;
   1704                 synchronized (NameValueCache.this) {
   1705                     mValues.put(name, value);
   1706                 }
   1707                 if (LOCAL_LOGV) {
   1708                     Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " +
   1709                             name + " = " + (value == null ? "(null)" : value));
   1710                 }
   1711                 return value;
   1712             } catch (RemoteException e) {
   1713                 Log.w(TAG, "Can't get key " + name + " from " + mUri, e);
   1714                 return null;  // Return null, but don't cache it.
   1715             } finally {
   1716                 if (c != null) c.close();
   1717             }
   1718         }
   1719     }
   1720 
   1721     /**
   1722      * Checks if the specified context can draw on top of other apps. As of API
   1723      * level 23, an app cannot draw on top of other apps unless it declares the
   1724      * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its
   1725      * manifest, <em>and</em> the user specifically grants the app this
   1726      * capability. To prompt the user to grant this approval, the app must send an
   1727      * intent with the action
   1728      * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}, which
   1729      * causes the system to display a permission management screen.
   1730      *
   1731      * @param context App context.
   1732      * @return true if the specified context can draw on top of other apps, false otherwise
   1733      */
   1734     public static boolean canDrawOverlays(Context context) {
   1735         return Settings.isCallingPackageAllowedToDrawOverlays(context, Process.myUid(),
   1736                 context.getOpPackageName(), false);
   1737     }
   1738 
   1739     /**
   1740      * System settings, containing miscellaneous system preferences.  This
   1741      * table holds simple name/value pairs.  There are convenience
   1742      * functions for accessing individual settings entries.
   1743      */
   1744     public static final class System extends NameValueTable {
   1745         private static final float DEFAULT_FONT_SCALE = 1.0f;
   1746 
   1747         /** @hide */
   1748         public static interface Validator {
   1749             public boolean validate(String value);
   1750         }
   1751 
   1752         /**
   1753          * The content:// style URL for this table
   1754          */
   1755         public static final Uri CONTENT_URI =
   1756             Uri.parse("content://" + AUTHORITY + "/system");
   1757 
   1758         private static final NameValueCache sNameValueCache = new NameValueCache(
   1759                 CONTENT_URI,
   1760                 CALL_METHOD_GET_SYSTEM,
   1761                 CALL_METHOD_PUT_SYSTEM);
   1762 
   1763         private static final HashSet<String> MOVED_TO_SECURE;
   1764         static {
   1765             MOVED_TO_SECURE = new HashSet<String>(30);
   1766             MOVED_TO_SECURE.add(Secure.ANDROID_ID);
   1767             MOVED_TO_SECURE.add(Secure.HTTP_PROXY);
   1768             MOVED_TO_SECURE.add(Secure.LOCATION_PROVIDERS_ALLOWED);
   1769             MOVED_TO_SECURE.add(Secure.LOCK_BIOMETRIC_WEAK_FLAGS);
   1770             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_ENABLED);
   1771             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_VISIBLE);
   1772             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
   1773             MOVED_TO_SECURE.add(Secure.LOGGING_ID);
   1774             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_ENABLED);
   1775             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_LAST_UPDATE);
   1776             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_REDIRECT_URL);
   1777             MOVED_TO_SECURE.add(Secure.SETTINGS_CLASSNAME);
   1778             MOVED_TO_SECURE.add(Secure.USE_GOOGLE_MAIL);
   1779             MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
   1780             MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
   1781             MOVED_TO_SECURE.add(Secure.WIFI_NUM_OPEN_NETWORKS_KEPT);
   1782             MOVED_TO_SECURE.add(Secure.WIFI_ON);
   1783             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE);
   1784             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_AP_COUNT);
   1785             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS);
   1786             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED);
   1787             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS);
   1788             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT);
   1789             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_MAX_AP_CHECKS);
   1790             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ON);
   1791             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT);
   1792             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS);
   1793             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS);
   1794 
   1795             // At one time in System, then Global, but now back in Secure
   1796             MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS);
   1797         }
   1798 
   1799         private static final HashSet<String> MOVED_TO_GLOBAL;
   1800         private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL;
   1801         static {
   1802             MOVED_TO_GLOBAL = new HashSet<String>();
   1803             MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<String>();
   1804 
   1805             // these were originally in system but migrated to secure in the past,
   1806             // so are duplicated in the Secure.* namespace
   1807             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED);
   1808             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON);
   1809             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING);
   1810             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED);
   1811             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
   1812             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY);
   1813 
   1814             // these are moving directly from system to global
   1815             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_ON);
   1816             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_RADIOS);
   1817             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
   1818             MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME);
   1819             MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME_ZONE);
   1820             MOVED_TO_GLOBAL.add(Settings.Global.CAR_DOCK_SOUND);
   1821             MOVED_TO_GLOBAL.add(Settings.Global.CAR_UNDOCK_SOUND);
   1822             MOVED_TO_GLOBAL.add(Settings.Global.DESK_DOCK_SOUND);
   1823             MOVED_TO_GLOBAL.add(Settings.Global.DESK_UNDOCK_SOUND);
   1824             MOVED_TO_GLOBAL.add(Settings.Global.DOCK_SOUNDS_ENABLED);
   1825             MOVED_TO_GLOBAL.add(Settings.Global.LOCK_SOUND);
   1826             MOVED_TO_GLOBAL.add(Settings.Global.UNLOCK_SOUND);
   1827             MOVED_TO_GLOBAL.add(Settings.Global.LOW_BATTERY_SOUND);
   1828             MOVED_TO_GLOBAL.add(Settings.Global.POWER_SOUNDS_ENABLED);
   1829             MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
   1830             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY);
   1831             MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER);
   1832             MOVED_TO_GLOBAL.add(Settings.Global.WINDOW_ANIMATION_SCALE);
   1833             MOVED_TO_GLOBAL.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
   1834             MOVED_TO_GLOBAL.add(Settings.Global.ANIMATOR_DURATION_SCALE);
   1835             MOVED_TO_GLOBAL.add(Settings.Global.FANCY_IME_ANIMATIONS);
   1836             MOVED_TO_GLOBAL.add(Settings.Global.COMPATIBILITY_MODE);
   1837             MOVED_TO_GLOBAL.add(Settings.Global.EMERGENCY_TONE);
   1838             MOVED_TO_GLOBAL.add(Settings.Global.CALL_AUTO_RETRY);
   1839             MOVED_TO_GLOBAL.add(Settings.Global.DEBUG_APP);
   1840             MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER);
   1841             MOVED_TO_GLOBAL.add(Settings.Global.SHOW_PROCESSES);
   1842             MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
   1843             MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_CONTENT_URL);
   1844             MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_METADATA_URL);
   1845             MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_CONTENT_URL);
   1846             MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_METADATA_URL);
   1847             MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL);
   1848             MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL);
   1849             MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL);
   1850             MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL);
   1851         }
   1852 
   1853         private static final Validator sBooleanValidator =
   1854                 new DiscreteValueValidator(new String[] {"0", "1"});
   1855 
   1856         private static final Validator sNonNegativeIntegerValidator = new Validator() {
   1857             @Override
   1858             public boolean validate(String value) {
   1859                 try {
   1860                     return Integer.parseInt(value) >= 0;
   1861                 } catch (NumberFormatException e) {
   1862                     return false;
   1863                 }
   1864             }
   1865         };
   1866 
   1867         private static final Validator sUriValidator = new Validator() {
   1868             @Override
   1869             public boolean validate(String value) {
   1870                 try {
   1871                     Uri.decode(value);
   1872                     return true;
   1873                 } catch (IllegalArgumentException e) {
   1874                     return false;
   1875                 }
   1876             }
   1877         };
   1878 
   1879         private static final Validator sLenientIpAddressValidator = new Validator() {
   1880             private static final int MAX_IPV6_LENGTH = 45;
   1881 
   1882             @Override
   1883             public boolean validate(String value) {
   1884                 return value.length() <= MAX_IPV6_LENGTH;
   1885             }
   1886         };
   1887 
   1888         /** @hide */
   1889         public static void getMovedToGlobalSettings(Set<String> outKeySet) {
   1890             outKeySet.addAll(MOVED_TO_GLOBAL);
   1891             outKeySet.addAll(MOVED_TO_SECURE_THEN_GLOBAL);
   1892         }
   1893 
   1894         /** @hide */
   1895         public static void getMovedToSecureSettings(Set<String> outKeySet) {
   1896             outKeySet.addAll(MOVED_TO_SECURE);
   1897         }
   1898 
   1899         /** @hide */
   1900         public static void getNonLegacyMovedKeys(HashSet<String> outKeySet) {
   1901             outKeySet.addAll(MOVED_TO_GLOBAL);
   1902         }
   1903 
   1904         /**
   1905          * Look up a name in the database.
   1906          * @param resolver to access the database with
   1907          * @param name to look up in the table
   1908          * @return the corresponding value, or null if not present
   1909          */
   1910         public static String getString(ContentResolver resolver, String name) {
   1911             return getStringForUser(resolver, name, UserHandle.myUserId());
   1912         }
   1913 
   1914         /** @hide */
   1915         public static String getStringForUser(ContentResolver resolver, String name,
   1916                 int userHandle) {
   1917             if (MOVED_TO_SECURE.contains(name)) {
   1918                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1919                         + " to android.provider.Settings.Secure, returning read-only value.");
   1920                 return Secure.getStringForUser(resolver, name, userHandle);
   1921             }
   1922             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
   1923                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1924                         + " to android.provider.Settings.Global, returning read-only value.");
   1925                 return Global.getStringForUser(resolver, name, userHandle);
   1926             }
   1927             return sNameValueCache.getStringForUser(resolver, name, userHandle);
   1928         }
   1929 
   1930         /**
   1931          * Store a name/value pair into the database.
   1932          * @param resolver to access the database with
   1933          * @param name to store
   1934          * @param value to associate with the name
   1935          * @return true if the value was set, false on database errors
   1936          */
   1937         public static boolean putString(ContentResolver resolver, String name, String value) {
   1938             return putStringForUser(resolver, name, value, UserHandle.myUserId());
   1939         }
   1940 
   1941         /** @hide */
   1942         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
   1943                 int userHandle) {
   1944             if (MOVED_TO_SECURE.contains(name)) {
   1945                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1946                         + " to android.provider.Settings.Secure, value is unchanged.");
   1947                 return false;
   1948             }
   1949             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
   1950                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1951                         + " to android.provider.Settings.Global, value is unchanged.");
   1952                 return false;
   1953             }
   1954             return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
   1955         }
   1956 
   1957         /**
   1958          * Construct the content URI for a particular name/value pair,
   1959          * useful for monitoring changes with a ContentObserver.
   1960          * @param name to look up in the table
   1961          * @return the corresponding content URI, or null if not present
   1962          */
   1963         public static Uri getUriFor(String name) {
   1964             if (MOVED_TO_SECURE.contains(name)) {
   1965                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1966                     + " to android.provider.Settings.Secure, returning Secure URI.");
   1967                 return Secure.getUriFor(Secure.CONTENT_URI, name);
   1968             }
   1969             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
   1970                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   1971                         + " to android.provider.Settings.Global, returning read-only global URI.");
   1972                 return Global.getUriFor(Global.CONTENT_URI, name);
   1973             }
   1974             return getUriFor(CONTENT_URI, name);
   1975         }
   1976 
   1977         /**
   1978          * Convenience function for retrieving a single system settings value
   1979          * as an integer.  Note that internally setting values are always
   1980          * stored as strings; this function converts the string to an integer
   1981          * for you.  The default value will be returned if the setting is
   1982          * not defined or not an integer.
   1983          *
   1984          * @param cr The ContentResolver to access.
   1985          * @param name The name of the setting to retrieve.
   1986          * @param def Value to return if the setting is not defined.
   1987          *
   1988          * @return The setting's current value, or 'def' if it is not defined
   1989          * or not a valid integer.
   1990          */
   1991         public static int getInt(ContentResolver cr, String name, int def) {
   1992             return getIntForUser(cr, name, def, UserHandle.myUserId());
   1993         }
   1994 
   1995         /** @hide */
   1996         public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
   1997             String v = getStringForUser(cr, name, userHandle);
   1998             try {
   1999                 return v != null ? Integer.parseInt(v) : def;
   2000             } catch (NumberFormatException e) {
   2001                 return def;
   2002             }
   2003         }
   2004 
   2005         /**
   2006          * Convenience function for retrieving a single system settings value
   2007          * as an integer.  Note that internally setting values are always
   2008          * stored as strings; this function converts the string to an integer
   2009          * for you.
   2010          * <p>
   2011          * This version does not take a default value.  If the setting has not
   2012          * been set, or the string value is not a number,
   2013          * it throws {@link SettingNotFoundException}.
   2014          *
   2015          * @param cr The ContentResolver to access.
   2016          * @param name The name of the setting to retrieve.
   2017          *
   2018          * @throws SettingNotFoundException Thrown if a setting by the given
   2019          * name can't be found or the setting value is not an integer.
   2020          *
   2021          * @return The setting's current value.
   2022          */
   2023         public static int getInt(ContentResolver cr, String name)
   2024                 throws SettingNotFoundException {
   2025             return getIntForUser(cr, name, UserHandle.myUserId());
   2026         }
   2027 
   2028         /** @hide */
   2029         public static int getIntForUser(ContentResolver cr, String name, int userHandle)
   2030                 throws SettingNotFoundException {
   2031             String v = getStringForUser(cr, name, userHandle);
   2032             try {
   2033                 return Integer.parseInt(v);
   2034             } catch (NumberFormatException e) {
   2035                 throw new SettingNotFoundException(name);
   2036             }
   2037         }
   2038 
   2039         /**
   2040          * Convenience function for updating a single settings value as an
   2041          * integer. This will either create a new entry in the table if the
   2042          * given name does not exist, or modify the value of the existing row
   2043          * with that name.  Note that internally setting values are always
   2044          * stored as strings, so this function converts the given value to a
   2045          * string before storing it.
   2046          *
   2047          * @param cr The ContentResolver to access.
   2048          * @param name The name of the setting to modify.
   2049          * @param value The new value for the setting.
   2050          * @return true if the value was set, false on database errors
   2051          */
   2052         public static boolean putInt(ContentResolver cr, String name, int value) {
   2053             return putIntForUser(cr, name, value, UserHandle.myUserId());
   2054         }
   2055 
   2056         /** @hide */
   2057         public static boolean putIntForUser(ContentResolver cr, String name, int value,
   2058                 int userHandle) {
   2059             return putStringForUser(cr, name, Integer.toString(value), userHandle);
   2060         }
   2061 
   2062         /**
   2063          * Convenience function for retrieving a single system settings value
   2064          * as a {@code long}.  Note that internally setting values are always
   2065          * stored as strings; this function converts the string to a {@code long}
   2066          * for you.  The default value will be returned if the setting is
   2067          * not defined or not a {@code long}.
   2068          *
   2069          * @param cr The ContentResolver to access.
   2070          * @param name The name of the setting to retrieve.
   2071          * @param def Value to return if the setting is not defined.
   2072          *
   2073          * @return The setting's current value, or 'def' if it is not defined
   2074          * or not a valid {@code long}.
   2075          */
   2076         public static long getLong(ContentResolver cr, String name, long def) {
   2077             return getLongForUser(cr, name, def, UserHandle.myUserId());
   2078         }
   2079 
   2080         /** @hide */
   2081         public static long getLongForUser(ContentResolver cr, String name, long def,
   2082                 int userHandle) {
   2083             String valString = getStringForUser(cr, name, userHandle);
   2084             long value;
   2085             try {
   2086                 value = valString != null ? Long.parseLong(valString) : def;
   2087             } catch (NumberFormatException e) {
   2088                 value = def;
   2089             }
   2090             return value;
   2091         }
   2092 
   2093         /**
   2094          * Convenience function for retrieving a single system settings value
   2095          * as a {@code long}.  Note that internally setting values are always
   2096          * stored as strings; this function converts the string to a {@code long}
   2097          * for you.
   2098          * <p>
   2099          * This version does not take a default value.  If the setting has not
   2100          * been set, or the string value is not a number,
   2101          * it throws {@link SettingNotFoundException}.
   2102          *
   2103          * @param cr The ContentResolver to access.
   2104          * @param name The name of the setting to retrieve.
   2105          *
   2106          * @return The setting's current value.
   2107          * @throws SettingNotFoundException Thrown if a setting by the given
   2108          * name can't be found or the setting value is not an integer.
   2109          */
   2110         public static long getLong(ContentResolver cr, String name)
   2111                 throws SettingNotFoundException {
   2112             return getLongForUser(cr, name, UserHandle.myUserId());
   2113         }
   2114 
   2115         /** @hide */
   2116         public static long getLongForUser(ContentResolver cr, String name, int userHandle)
   2117                 throws SettingNotFoundException {
   2118             String valString = getStringForUser(cr, name, userHandle);
   2119             try {
   2120                 return Long.parseLong(valString);
   2121             } catch (NumberFormatException e) {
   2122                 throw new SettingNotFoundException(name);
   2123             }
   2124         }
   2125 
   2126         /**
   2127          * Convenience function for updating a single settings value as a long
   2128          * integer. This will either create a new entry in the table if the
   2129          * given name does not exist, or modify the value of the existing row
   2130          * with that name.  Note that internally setting values are always
   2131          * stored as strings, so this function converts the given value to a
   2132          * string before storing it.
   2133          *
   2134          * @param cr The ContentResolver to access.
   2135          * @param name The name of the setting to modify.
   2136          * @param value The new value for the setting.
   2137          * @return true if the value was set, false on database errors
   2138          */
   2139         public static boolean putLong(ContentResolver cr, String name, long value) {
   2140             return putLongForUser(cr, name, value, UserHandle.myUserId());
   2141         }
   2142 
   2143         /** @hide */
   2144         public static boolean putLongForUser(ContentResolver cr, String name, long value,
   2145                 int userHandle) {
   2146             return putStringForUser(cr, name, Long.toString(value), userHandle);
   2147         }
   2148 
   2149         /**
   2150          * Convenience function for retrieving a single system settings value
   2151          * as a floating point number.  Note that internally setting values are
   2152          * always stored as strings; this function converts the string to an
   2153          * float for you. The default value will be returned if the setting
   2154          * is not defined or not a valid float.
   2155          *
   2156          * @param cr The ContentResolver to access.
   2157          * @param name The name of the setting to retrieve.
   2158          * @param def Value to return if the setting is not defined.
   2159          *
   2160          * @return The setting's current value, or 'def' if it is not defined
   2161          * or not a valid float.
   2162          */
   2163         public static float getFloat(ContentResolver cr, String name, float def) {
   2164             return getFloatForUser(cr, name, def, UserHandle.myUserId());
   2165         }
   2166 
   2167         /** @hide */
   2168         public static float getFloatForUser(ContentResolver cr, String name, float def,
   2169                 int userHandle) {
   2170             String v = getStringForUser(cr, name, userHandle);
   2171             try {
   2172                 return v != null ? Float.parseFloat(v) : def;
   2173             } catch (NumberFormatException e) {
   2174                 return def;
   2175             }
   2176         }
   2177 
   2178         /**
   2179          * Convenience function for retrieving a single system settings value
   2180          * as a float.  Note that internally setting values are always
   2181          * stored as strings; this function converts the string to a float
   2182          * for you.
   2183          * <p>
   2184          * This version does not take a default value.  If the setting has not
   2185          * been set, or the string value is not a number,
   2186          * it throws {@link SettingNotFoundException}.
   2187          *
   2188          * @param cr The ContentResolver to access.
   2189          * @param name The name of the setting to retrieve.
   2190          *
   2191          * @throws SettingNotFoundException Thrown if a setting by the given
   2192          * name can't be found or the setting value is not a float.
   2193          *
   2194          * @return The setting's current value.
   2195          */
   2196         public static float getFloat(ContentResolver cr, String name)
   2197                 throws SettingNotFoundException {
   2198             return getFloatForUser(cr, name, UserHandle.myUserId());
   2199         }
   2200 
   2201         /** @hide */
   2202         public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
   2203                 throws SettingNotFoundException {
   2204             String v = getStringForUser(cr, name, userHandle);
   2205             if (v == null) {
   2206                 throw new SettingNotFoundException(name);
   2207             }
   2208             try {
   2209                 return Float.parseFloat(v);
   2210             } catch (NumberFormatException e) {
   2211                 throw new SettingNotFoundException(name);
   2212             }
   2213         }
   2214 
   2215         /**
   2216          * Convenience function for updating a single settings value as a
   2217          * floating point number. This will either create a new entry in the
   2218          * table if the given name does not exist, or modify the value of the
   2219          * existing row with that name.  Note that internally setting values
   2220          * are always stored as strings, so this function converts the given
   2221          * value to a string before storing it.
   2222          *
   2223          * @param cr The ContentResolver to access.
   2224          * @param name The name of the setting to modify.
   2225          * @param value The new value for the setting.
   2226          * @return true if the value was set, false on database errors
   2227          */
   2228         public static boolean putFloat(ContentResolver cr, String name, float value) {
   2229             return putFloatForUser(cr, name, value, UserHandle.myUserId());
   2230         }
   2231 
   2232         /** @hide */
   2233         public static boolean putFloatForUser(ContentResolver cr, String name, float value,
   2234                 int userHandle) {
   2235             return putStringForUser(cr, name, Float.toString(value), userHandle);
   2236         }
   2237 
   2238         /**
   2239          * Convenience function to read all of the current
   2240          * configuration-related settings into a
   2241          * {@link Configuration} object.
   2242          *
   2243          * @param cr The ContentResolver to access.
   2244          * @param outConfig Where to place the configuration settings.
   2245          */
   2246         public static void getConfiguration(ContentResolver cr, Configuration outConfig) {
   2247             adjustConfigurationForUser(cr, outConfig, UserHandle.myUserId(),
   2248                     false /* updateSettingsIfEmpty */);
   2249         }
   2250 
   2251         /** @hide */
   2252         public static void adjustConfigurationForUser(ContentResolver cr, Configuration outConfig,
   2253                 int userHandle, boolean updateSettingsIfEmpty) {
   2254             outConfig.fontScale = Settings.System.getFloatForUser(
   2255                     cr, FONT_SCALE, DEFAULT_FONT_SCALE, userHandle);
   2256             if (outConfig.fontScale < 0) {
   2257                 outConfig.fontScale = DEFAULT_FONT_SCALE;
   2258             }
   2259 
   2260             final String localeValue =
   2261                     Settings.System.getStringForUser(cr, SYSTEM_LOCALES, userHandle);
   2262             if (localeValue != null) {
   2263                 outConfig.setLocales(LocaleList.forLanguageTags(localeValue));
   2264             } else {
   2265                 // Do not update configuration with emtpy settings since we need to take over the
   2266                 // locale list of previous user if the settings value is empty. This happens when a
   2267                 // new user is created.
   2268 
   2269                 if (updateSettingsIfEmpty) {
   2270                     // Make current configuration persistent. This is necessary the first time a
   2271                     // user log in. At the first login, the configuration settings are empty, so we
   2272                     // need to store the adjusted configuration as the initial settings.
   2273                     Settings.System.putStringForUser(
   2274                             cr, SYSTEM_LOCALES, outConfig.getLocales().toLanguageTags(),
   2275                             userHandle);
   2276                 }
   2277             }
   2278         }
   2279 
   2280         /**
   2281          * @hide Erase the fields in the Configuration that should be applied
   2282          * by the settings.
   2283          */
   2284         public static void clearConfiguration(Configuration inoutConfig) {
   2285             inoutConfig.fontScale = 0;
   2286             if (!inoutConfig.userSetLocale && !inoutConfig.getLocales().isEmpty()) {
   2287                 inoutConfig.clearLocales();
   2288             }
   2289         }
   2290 
   2291         /**
   2292          * Convenience function to write a batch of configuration-related
   2293          * settings from a {@link Configuration} object.
   2294          *
   2295          * @param cr The ContentResolver to access.
   2296          * @param config The settings to write.
   2297          * @return true if the values were set, false on database errors
   2298          */
   2299         public static boolean putConfiguration(ContentResolver cr, Configuration config) {
   2300             return putConfigurationForUser(cr, config, UserHandle.myUserId());
   2301         }
   2302 
   2303         /** @hide */
   2304         public static boolean putConfigurationForUser(ContentResolver cr, Configuration config,
   2305                 int userHandle) {
   2306             return Settings.System.putFloatForUser(cr, FONT_SCALE, config.fontScale, userHandle) &&
   2307                     Settings.System.putStringForUser(
   2308                             cr, SYSTEM_LOCALES, config.getLocales().toLanguageTags(), userHandle);
   2309         }
   2310 
   2311         /** @hide */
   2312         public static boolean hasInterestingConfigurationChanges(int changes) {
   2313             return (changes & ActivityInfo.CONFIG_FONT_SCALE) != 0 ||
   2314                     (changes & ActivityInfo.CONFIG_LOCALE) != 0;
   2315         }
   2316 
   2317         /** @deprecated - Do not use */
   2318         @Deprecated
   2319         public static boolean getShowGTalkServiceStatus(ContentResolver cr) {
   2320             return getShowGTalkServiceStatusForUser(cr, UserHandle.myUserId());
   2321         }
   2322 
   2323         /**
   2324          * @hide
   2325          * @deprecated - Do not use
   2326          */
   2327         public static boolean getShowGTalkServiceStatusForUser(ContentResolver cr,
   2328                 int userHandle) {
   2329             return getIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, 0, userHandle) != 0;
   2330         }
   2331 
   2332         /** @deprecated - Do not use */
   2333         @Deprecated
   2334         public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
   2335             setShowGTalkServiceStatusForUser(cr, flag, UserHandle.myUserId());
   2336         }
   2337 
   2338         /**
   2339          * @hide
   2340          * @deprecated - Do not use
   2341          */
   2342         @Deprecated
   2343         public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag,
   2344                 int userHandle) {
   2345             putIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, flag ? 1 : 0, userHandle);
   2346         }
   2347 
   2348         private static final class DiscreteValueValidator implements Validator {
   2349             private final String[] mValues;
   2350 
   2351             public DiscreteValueValidator(String[] values) {
   2352                 mValues = values;
   2353             }
   2354 
   2355             @Override
   2356             public boolean validate(String value) {
   2357                 return ArrayUtils.contains(mValues, value);
   2358             }
   2359         }
   2360 
   2361         private static final class InclusiveIntegerRangeValidator implements Validator {
   2362             private final int mMin;
   2363             private final int mMax;
   2364 
   2365             public InclusiveIntegerRangeValidator(int min, int max) {
   2366                 mMin = min;
   2367                 mMax = max;
   2368             }
   2369 
   2370             @Override
   2371             public boolean validate(String value) {
   2372                 try {
   2373                     final int intValue = Integer.parseInt(value);
   2374                     return intValue >= mMin && intValue <= mMax;
   2375                 } catch (NumberFormatException e) {
   2376                     return false;
   2377                 }
   2378             }
   2379         }
   2380 
   2381         private static final class InclusiveFloatRangeValidator implements Validator {
   2382             private final float mMin;
   2383             private final float mMax;
   2384 
   2385             public InclusiveFloatRangeValidator(float min, float max) {
   2386                 mMin = min;
   2387                 mMax = max;
   2388             }
   2389 
   2390             @Override
   2391             public boolean validate(String value) {
   2392                 try {
   2393                     final float floatValue = Float.parseFloat(value);
   2394                     return floatValue >= mMin && floatValue <= mMax;
   2395                 } catch (NumberFormatException e) {
   2396                     return false;
   2397                 }
   2398             }
   2399         }
   2400 
   2401         /**
   2402          * @deprecated Use {@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} instead
   2403          */
   2404         @Deprecated
   2405         public static final String STAY_ON_WHILE_PLUGGED_IN = Global.STAY_ON_WHILE_PLUGGED_IN;
   2406 
   2407         /**
   2408          * What happens when the user presses the end call button if they're not
   2409          * on a call.<br/>
   2410          * <b>Values:</b><br/>
   2411          * 0 - The end button does nothing.<br/>
   2412          * 1 - The end button goes to the home screen.<br/>
   2413          * 2 - The end button puts the device to sleep and locks the keyguard.<br/>
   2414          * 3 - The end button goes to the home screen.  If the user is already on the
   2415          * home screen, it puts the device to sleep.
   2416          */
   2417         public static final String END_BUTTON_BEHAVIOR = "end_button_behavior";
   2418 
   2419         private static final Validator END_BUTTON_BEHAVIOR_VALIDATOR =
   2420                 new InclusiveIntegerRangeValidator(0, 3);
   2421 
   2422         /**
   2423          * END_BUTTON_BEHAVIOR value for "go home".
   2424          * @hide
   2425          */
   2426         public static final int END_BUTTON_BEHAVIOR_HOME = 0x1;
   2427 
   2428         /**
   2429          * END_BUTTON_BEHAVIOR value for "go to sleep".
   2430          * @hide
   2431          */
   2432         public static final int END_BUTTON_BEHAVIOR_SLEEP = 0x2;
   2433 
   2434         /**
   2435          * END_BUTTON_BEHAVIOR default value.
   2436          * @hide
   2437          */
   2438         public static final int END_BUTTON_BEHAVIOR_DEFAULT = END_BUTTON_BEHAVIOR_SLEEP;
   2439 
   2440         /**
   2441          * Is advanced settings mode turned on. 0 == no, 1 == yes
   2442          * @hide
   2443          */
   2444         public static final String ADVANCED_SETTINGS = "advanced_settings";
   2445 
   2446         private static final Validator ADVANCED_SETTINGS_VALIDATOR = sBooleanValidator;
   2447 
   2448         /**
   2449          * ADVANCED_SETTINGS default value.
   2450          * @hide
   2451          */
   2452         public static final int ADVANCED_SETTINGS_DEFAULT = 0;
   2453 
   2454         /**
   2455          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
   2456          */
   2457         @Deprecated
   2458         public static final String AIRPLANE_MODE_ON = Global.AIRPLANE_MODE_ON;
   2459 
   2460         /**
   2461          * @deprecated Use {@link android.provider.Settings.Global#RADIO_BLUETOOTH} instead
   2462          */
   2463         @Deprecated
   2464         public static final String RADIO_BLUETOOTH = Global.RADIO_BLUETOOTH;
   2465 
   2466         /**
   2467          * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIFI} instead
   2468          */
   2469         @Deprecated
   2470         public static final String RADIO_WIFI = Global.RADIO_WIFI;
   2471 
   2472         /**
   2473          * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIMAX} instead
   2474          * {@hide}
   2475          */
   2476         @Deprecated
   2477         public static final String RADIO_WIMAX = Global.RADIO_WIMAX;
   2478 
   2479         /**
   2480          * @deprecated Use {@link android.provider.Settings.Global#RADIO_CELL} instead
   2481          */
   2482         @Deprecated
   2483         public static final String RADIO_CELL = Global.RADIO_CELL;
   2484 
   2485         /**
   2486          * @deprecated Use {@link android.provider.Settings.Global#RADIO_NFC} instead
   2487          */
   2488         @Deprecated
   2489         public static final String RADIO_NFC = Global.RADIO_NFC;
   2490 
   2491         /**
   2492          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_RADIOS} instead
   2493          */
   2494         @Deprecated
   2495         public static final String AIRPLANE_MODE_RADIOS = Global.AIRPLANE_MODE_RADIOS;
   2496 
   2497         /**
   2498          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_TOGGLEABLE_RADIOS} instead
   2499          *
   2500          * {@hide}
   2501          */
   2502         @Deprecated
   2503         public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS =
   2504                 Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS;
   2505 
   2506         /**
   2507          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY} instead
   2508          */
   2509         @Deprecated
   2510         public static final String WIFI_SLEEP_POLICY = Global.WIFI_SLEEP_POLICY;
   2511 
   2512         /**
   2513          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_DEFAULT} instead
   2514          */
   2515         @Deprecated
   2516         public static final int WIFI_SLEEP_POLICY_DEFAULT = Global.WIFI_SLEEP_POLICY_DEFAULT;
   2517 
   2518         /**
   2519          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED} instead
   2520          */
   2521         @Deprecated
   2522         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED =
   2523                 Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED;
   2524 
   2525         /**
   2526          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER} instead
   2527          */
   2528         @Deprecated
   2529         public static final int WIFI_SLEEP_POLICY_NEVER = Global.WIFI_SLEEP_POLICY_NEVER;
   2530 
   2531         /**
   2532          * @deprecated Use {@link android.provider.Settings.Global#MODE_RINGER} instead
   2533          */
   2534         @Deprecated
   2535         public static final String MODE_RINGER = Global.MODE_RINGER;
   2536 
   2537         /**
   2538          * Whether to use static IP and other static network attributes.
   2539          * <p>
   2540          * Set to 1 for true and 0 for false.
   2541          *
   2542          * @deprecated Use {@link WifiManager} instead
   2543          */
   2544         @Deprecated
   2545         public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip";
   2546 
   2547         private static final Validator WIFI_USE_STATIC_IP_VALIDATOR = sBooleanValidator;
   2548 
   2549         /**
   2550          * The static IP address.
   2551          * <p>
   2552          * Example: "192.168.1.51"
   2553          *
   2554          * @deprecated Use {@link WifiManager} instead
   2555          */
   2556         @Deprecated
   2557         public static final String WIFI_STATIC_IP = "wifi_static_ip";
   2558 
   2559         private static final Validator WIFI_STATIC_IP_VALIDATOR = sLenientIpAddressValidator;
   2560 
   2561         /**
   2562          * If using static IP, the gateway's IP address.
   2563          * <p>
   2564          * Example: "192.168.1.1"
   2565          *
   2566          * @deprecated Use {@link WifiManager} instead
   2567          */
   2568         @Deprecated
   2569         public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway";
   2570 
   2571         private static final Validator WIFI_STATIC_GATEWAY_VALIDATOR = sLenientIpAddressValidator;
   2572 
   2573         /**
   2574          * If using static IP, the net mask.
   2575          * <p>
   2576          * Example: "255.255.255.0"
   2577          *
   2578          * @deprecated Use {@link WifiManager} instead
   2579          */
   2580         @Deprecated
   2581         public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask";
   2582 
   2583         private static final Validator WIFI_STATIC_NETMASK_VALIDATOR = sLenientIpAddressValidator;
   2584 
   2585         /**
   2586          * If using static IP, the primary DNS's IP address.
   2587          * <p>
   2588          * Example: "192.168.1.1"
   2589          *
   2590          * @deprecated Use {@link WifiManager} instead
   2591          */
   2592         @Deprecated
   2593         public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1";
   2594 
   2595         private static final Validator WIFI_STATIC_DNS1_VALIDATOR = sLenientIpAddressValidator;
   2596 
   2597         /**
   2598          * If using static IP, the secondary DNS's IP address.
   2599          * <p>
   2600          * Example: "192.168.1.2"
   2601          *
   2602          * @deprecated Use {@link WifiManager} instead
   2603          */
   2604         @Deprecated
   2605         public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2";
   2606 
   2607         private static final Validator WIFI_STATIC_DNS2_VALIDATOR = sLenientIpAddressValidator;
   2608 
   2609         /**
   2610          * Determines whether remote devices may discover and/or connect to
   2611          * this device.
   2612          * <P>Type: INT</P>
   2613          * 2 -- discoverable and connectable
   2614          * 1 -- connectable but not discoverable
   2615          * 0 -- neither connectable nor discoverable
   2616          */
   2617         public static final String BLUETOOTH_DISCOVERABILITY =
   2618             "bluetooth_discoverability";
   2619 
   2620         private static final Validator BLUETOOTH_DISCOVERABILITY_VALIDATOR =
   2621                 new InclusiveIntegerRangeValidator(0, 2);
   2622 
   2623         /**
   2624          * Bluetooth discoverability timeout.  If this value is nonzero, then
   2625          * Bluetooth becomes discoverable for a certain number of seconds,
   2626          * after which is becomes simply connectable.  The value is in seconds.
   2627          */
   2628         public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT =
   2629             "bluetooth_discoverability_timeout";
   2630 
   2631         private static final Validator BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR =
   2632                 sNonNegativeIntegerValidator;
   2633 
   2634         /**
   2635          * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_ENABLED}
   2636          * instead
   2637          */
   2638         @Deprecated
   2639         public static final String LOCK_PATTERN_ENABLED = Secure.LOCK_PATTERN_ENABLED;
   2640 
   2641         /**
   2642          * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_VISIBLE}
   2643          * instead
   2644          */
   2645         @Deprecated
   2646         public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
   2647 
   2648         /**
   2649          * @deprecated Use
   2650          * {@link android.provider.Settings.Secure#LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED}
   2651          * instead
   2652          */
   2653         @Deprecated
   2654         public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED =
   2655             "lock_pattern_tactile_feedback_enabled";
   2656 
   2657         /**
   2658          * A formatted string of the next alarm that is set, or the empty string
   2659          * if there is no alarm set.
   2660          *
   2661          * @deprecated Use {@link android.app.AlarmManager#getNextAlarmClock()}.
   2662          */
   2663         @Deprecated
   2664         public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
   2665 
   2666         private static final Validator NEXT_ALARM_FORMATTED_VALIDATOR = new Validator() {
   2667             private static final int MAX_LENGTH = 1000;
   2668 
   2669             @Override
   2670             public boolean validate(String value) {
   2671                 // TODO: No idea what the correct format is.
   2672                 return value == null || value.length() < MAX_LENGTH;
   2673             }
   2674         };
   2675 
   2676         /**
   2677          * Scaling factor for fonts, float.
   2678          */
   2679         public static final String FONT_SCALE = "font_scale";
   2680 
   2681         private static final Validator FONT_SCALE_VALIDATOR = new Validator() {
   2682             @Override
   2683             public boolean validate(String value) {
   2684                 try {
   2685                     return Float.parseFloat(value) >= 0;
   2686                 } catch (NumberFormatException e) {
   2687                     return false;
   2688                 }
   2689             }
   2690         };
   2691 
   2692         /**
   2693          * The serialized system locale value.
   2694          *
   2695          * Do not use this value directory.
   2696          * To get system locale, use {@link LocaleList#getDefault} instead.
   2697          * To update system locale, use {@link com.android.internal.app.LocalePicker#updateLocales}
   2698          * instead.
   2699          * @hide
   2700          */
   2701         public static final String SYSTEM_LOCALES = "system_locales";
   2702 
   2703 
   2704         /**
   2705          * Name of an application package to be debugged.
   2706          *
   2707          * @deprecated Use {@link Global#DEBUG_APP} instead
   2708          */
   2709         @Deprecated
   2710         public static final String DEBUG_APP = Global.DEBUG_APP;
   2711 
   2712         /**
   2713          * If 1, when launching DEBUG_APP it will wait for the debugger before
   2714          * starting user code.  If 0, it will run normally.
   2715          *
   2716          * @deprecated Use {@link Global#WAIT_FOR_DEBUGGER} instead
   2717          */
   2718         @Deprecated
   2719         public static final String WAIT_FOR_DEBUGGER = Global.WAIT_FOR_DEBUGGER;
   2720 
   2721         /**
   2722          * Whether or not to dim the screen. 0=no  1=yes
   2723          * @deprecated This setting is no longer used.
   2724          */
   2725         @Deprecated
   2726         public static final String DIM_SCREEN = "dim_screen";
   2727 
   2728         private static final Validator DIM_SCREEN_VALIDATOR = sBooleanValidator;
   2729 
   2730         /**
   2731          * The amount of time in milliseconds before the device goes to sleep or begins
   2732          * to dream after a period of inactivity.  This value is also known as the
   2733          * user activity timeout period since the screen isn't necessarily turned off
   2734          * when it expires.
   2735          */
   2736         public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
   2737 
   2738         private static final Validator SCREEN_OFF_TIMEOUT_VALIDATOR = sNonNegativeIntegerValidator;
   2739 
   2740         /**
   2741          * The screen backlight brightness between 0 and 255.
   2742          */
   2743         public static final String SCREEN_BRIGHTNESS = "screen_brightness";
   2744 
   2745         private static final Validator SCREEN_BRIGHTNESS_VALIDATOR =
   2746                 new InclusiveIntegerRangeValidator(0, 255);
   2747 
   2748         /**
   2749          * Control whether to enable automatic brightness mode.
   2750          */
   2751         public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
   2752 
   2753         private static final Validator SCREEN_BRIGHTNESS_MODE_VALIDATOR = sBooleanValidator;
   2754 
   2755         /**
   2756          * Adjustment to auto-brightness to make it generally more (>0.0 <1.0)
   2757          * or less (<0.0 >-1.0) bright.
   2758          * @hide
   2759          */
   2760         public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj";
   2761 
   2762         private static final Validator SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR =
   2763                 new InclusiveFloatRangeValidator(-1, 1);
   2764 
   2765         /**
   2766          * SCREEN_BRIGHTNESS_MODE value for manual mode.
   2767          */
   2768         public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0;
   2769 
   2770         /**
   2771          * SCREEN_BRIGHTNESS_MODE value for automatic mode.
   2772          */
   2773         public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1;
   2774 
   2775         /**
   2776          * Control whether the process CPU usage meter should be shown.
   2777          *
   2778          * @deprecated Use {@link Global#SHOW_PROCESSES} instead
   2779          */
   2780         @Deprecated
   2781         public static final String SHOW_PROCESSES = Global.SHOW_PROCESSES;
   2782 
   2783         /**
   2784          * If 1, the activity manager will aggressively finish activities and
   2785          * processes as soon as they are no longer needed.  If 0, the normal
   2786          * extended lifetime is used.
   2787          *
   2788          * @deprecated Use {@link Global#ALWAYS_FINISH_ACTIVITIES} instead
   2789          */
   2790         @Deprecated
   2791         public static final String ALWAYS_FINISH_ACTIVITIES = Global.ALWAYS_FINISH_ACTIVITIES;
   2792 
   2793         /**
   2794          * Determines which streams are affected by ringer mode changes. The
   2795          * stream type's bit should be set to 1 if it should be muted when going
   2796          * into an inaudible ringer mode.
   2797          */
   2798         public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
   2799 
   2800         private static final Validator MODE_RINGER_STREAMS_AFFECTED_VALIDATOR =
   2801                 sNonNegativeIntegerValidator;
   2802 
   2803         /**
   2804           * Determines which streams are affected by mute. The
   2805           * stream type's bit should be set to 1 if it should be muted when a mute request
   2806           * is received.
   2807           */
   2808         public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
   2809 
   2810         private static final Validator MUTE_STREAMS_AFFECTED_VALIDATOR =
   2811                 sNonNegativeIntegerValidator;
   2812 
   2813         /**
   2814          * Whether vibrate is on for different events. This is used internally,
   2815          * changing this value will not change the vibrate. See AudioManager.
   2816          */
   2817         public static final String VIBRATE_ON = "vibrate_on";
   2818 
   2819         private static final Validator VIBRATE_ON_VALIDATOR = sBooleanValidator;
   2820 
   2821         /**
   2822          * If 1, redirects the system vibrator to all currently attached input devices
   2823          * that support vibration.  If there are no such input devices, then the system
   2824          * vibrator is used instead.
   2825          * If 0, does not register the system vibrator.
   2826          *
   2827          * This setting is mainly intended to provide a compatibility mechanism for
   2828          * applications that only know about the system vibrator and do not use the
   2829          * input device vibrator API.
   2830          *
   2831          * @hide
   2832          */
   2833         public static final String VIBRATE_INPUT_DEVICES = "vibrate_input_devices";
   2834 
   2835         private static final Validator VIBRATE_INPUT_DEVICES_VALIDATOR = sBooleanValidator;
   2836 
   2837         /**
   2838          * Ringer volume. This is used internally, changing this value will not
   2839          * change the volume. See AudioManager.
   2840          *
   2841          * @removed Not used by anything since API 2.
   2842          */
   2843         public static final String VOLUME_RING = "volume_ring";
   2844 
   2845         /**
   2846          * System/notifications volume. This is used internally, changing this
   2847          * value will not change the volume. See AudioManager.
   2848          *
   2849          * @removed Not used by anything since API 2.
   2850          */
   2851         public static final String VOLUME_SYSTEM = "volume_system";
   2852 
   2853         /**
   2854          * Voice call volume. This is used internally, changing this value will
   2855          * not change the volume. See AudioManager.
   2856          *
   2857          * @removed Not used by anything since API 2.
   2858          */
   2859         public static final String VOLUME_VOICE = "volume_voice";
   2860 
   2861         /**
   2862          * Music/media/gaming volume. This is used internally, changing this
   2863          * value will not change the volume. See AudioManager.
   2864          *
   2865          * @removed Not used by anything since API 2.
   2866          */
   2867         public static final String VOLUME_MUSIC = "volume_music";
   2868 
   2869         /**
   2870          * Alarm volume. This is used internally, changing this
   2871          * value will not change the volume. See AudioManager.
   2872          *
   2873          * @removed Not used by anything since API 2.
   2874          */
   2875         public static final String VOLUME_ALARM = "volume_alarm";
   2876 
   2877         /**
   2878          * Notification volume. This is used internally, changing this
   2879          * value will not change the volume. See AudioManager.
   2880          *
   2881          * @removed Not used by anything since API 2.
   2882          */
   2883         public static final String VOLUME_NOTIFICATION = "volume_notification";
   2884 
   2885         /**
   2886          * Bluetooth Headset volume. This is used internally, changing this value will
   2887          * not change the volume. See AudioManager.
   2888          *
   2889          * @removed Not used by anything since API 2.
   2890          */
   2891         public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
   2892 
   2893         /**
   2894          * Master volume (float in the range 0.0f to 1.0f).
   2895          *
   2896          * @hide
   2897          */
   2898         public static final String VOLUME_MASTER = "volume_master";
   2899 
   2900         /**
   2901          * Master mono (int 1 = mono, 0 = normal).
   2902          *
   2903          * @hide
   2904          */
   2905         public static final String MASTER_MONO = "master_mono";
   2906 
   2907         private static final Validator MASTER_MONO_VALIDATOR = sBooleanValidator;
   2908 
   2909         /**
   2910          * Whether the notifications should use the ring volume (value of 1) or
   2911          * a separate notification volume (value of 0). In most cases, users
   2912          * will have this enabled so the notification and ringer volumes will be
   2913          * the same. However, power users can disable this and use the separate
   2914          * notification volume control.
   2915          * <p>
   2916          * Note: This is a one-off setting that will be removed in the future
   2917          * when there is profile support. For this reason, it is kept hidden
   2918          * from the public APIs.
   2919          *
   2920          * @hide
   2921          * @deprecated
   2922          */
   2923         @Deprecated
   2924         public static final String NOTIFICATIONS_USE_RING_VOLUME =
   2925             "notifications_use_ring_volume";
   2926 
   2927         private static final Validator NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR = sBooleanValidator;
   2928 
   2929         /**
   2930          * Whether silent mode should allow vibration feedback. This is used
   2931          * internally in AudioService and the Sound settings activity to
   2932          * coordinate decoupling of vibrate and silent modes. This setting
   2933          * will likely be removed in a future release with support for
   2934          * audio/vibe feedback profiles.
   2935          *
   2936          * Not used anymore. On devices with vibrator, the user explicitly selects
   2937          * silent or vibrate mode.
   2938          * Kept for use by legacy database upgrade code in DatabaseHelper.
   2939          * @hide
   2940          */
   2941         public static final String VIBRATE_IN_SILENT = "vibrate_in_silent";
   2942 
   2943         private static final Validator VIBRATE_IN_SILENT_VALIDATOR = sBooleanValidator;
   2944 
   2945         /**
   2946          * The mapping of stream type (integer) to its setting.
   2947          *
   2948          * @removed  Not used by anything since API 2.
   2949          */
   2950         public static final String[] VOLUME_SETTINGS = {
   2951             VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
   2952             VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO
   2953         };
   2954 
   2955         /**
   2956          * Appended to various volume related settings to record the previous
   2957          * values before they the settings were affected by a silent/vibrate
   2958          * ringer mode change.
   2959          *
   2960          * @removed  Not used by anything since API 2.
   2961          */
   2962         public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
   2963 
   2964         /**
   2965          * Persistent store for the system-wide default ringtone URI.
   2966          * <p>
   2967          * If you need to play the default ringtone at any given time, it is recommended
   2968          * you give {@link #DEFAULT_RINGTONE_URI} to the media player.  It will resolve
   2969          * to the set default ringtone at the time of playing.
   2970          *
   2971          * @see #DEFAULT_RINGTONE_URI
   2972          */
   2973         public static final String RINGTONE = "ringtone";
   2974 
   2975         private static final Validator RINGTONE_VALIDATOR = sUriValidator;
   2976 
   2977         /**
   2978          * A {@link Uri} that will point to the current default ringtone at any
   2979          * given time.
   2980          * <p>
   2981          * If the current default ringtone is in the DRM provider and the caller
   2982          * does not have permission, the exception will be a
   2983          * FileNotFoundException.
   2984          */
   2985         public static final Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE);
   2986 
   2987         /** {@hide} */
   2988         public static final String RINGTONE_CACHE = "ringtone_cache";
   2989         /** {@hide} */
   2990         public static final Uri RINGTONE_CACHE_URI = getUriFor(RINGTONE_CACHE);
   2991 
   2992         /**
   2993          * Persistent store for the system-wide default notification sound.
   2994          *
   2995          * @see #RINGTONE
   2996          * @see #DEFAULT_NOTIFICATION_URI
   2997          */
   2998         public static final String NOTIFICATION_SOUND = "notification_sound";
   2999 
   3000         private static final Validator NOTIFICATION_SOUND_VALIDATOR = sUriValidator;
   3001 
   3002         /**
   3003          * A {@link Uri} that will point to the current default notification
   3004          * sound at any given time.
   3005          *
   3006          * @see #DEFAULT_RINGTONE_URI
   3007          */
   3008         public static final Uri DEFAULT_NOTIFICATION_URI = getUriFor(NOTIFICATION_SOUND);
   3009 
   3010         /** {@hide} */
   3011         public static final String NOTIFICATION_SOUND_CACHE = "notification_sound_cache";
   3012         /** {@hide} */
   3013         public static final Uri NOTIFICATION_SOUND_CACHE_URI = getUriFor(NOTIFICATION_SOUND_CACHE);
   3014 
   3015         /**
   3016          * Persistent store for the system-wide default alarm alert.
   3017          *
   3018          * @see #RINGTONE
   3019          * @see #DEFAULT_ALARM_ALERT_URI
   3020          */
   3021         public static final String ALARM_ALERT = "alarm_alert";
   3022 
   3023         private static final Validator ALARM_ALERT_VALIDATOR = sUriValidator;
   3024 
   3025         /**
   3026          * A {@link Uri} that will point to the current default alarm alert at
   3027          * any given time.
   3028          *
   3029          * @see #DEFAULT_ALARM_ALERT_URI
   3030          */
   3031         public static final Uri DEFAULT_ALARM_ALERT_URI = getUriFor(ALARM_ALERT);
   3032 
   3033         /** {@hide} */
   3034         public static final String ALARM_ALERT_CACHE = "alarm_alert_cache";
   3035         /** {@hide} */
   3036         public static final Uri ALARM_ALERT_CACHE_URI = getUriFor(ALARM_ALERT_CACHE);
   3037 
   3038         /**
   3039          * Persistent store for the system default media button event receiver.
   3040          *
   3041          * @hide
   3042          */
   3043         public static final String MEDIA_BUTTON_RECEIVER = "media_button_receiver";
   3044 
   3045         private static final Validator MEDIA_BUTTON_RECEIVER_VALIDATOR = new Validator() {
   3046             @Override
   3047             public boolean validate(String value) {
   3048                 try {
   3049                     ComponentName.unflattenFromString(value);
   3050                     return true;
   3051                 } catch (NullPointerException e) {
   3052                     return false;
   3053                 }
   3054             }
   3055         };
   3056 
   3057         /**
   3058          * Setting to enable Auto Replace (AutoText) in text editors. 1 = On, 0 = Off
   3059          */
   3060         public static final String TEXT_AUTO_REPLACE = "auto_replace";
   3061 
   3062         private static final Validator TEXT_AUTO_REPLACE_VALIDATOR = sBooleanValidator;
   3063 
   3064         /**
   3065          * Setting to enable Auto Caps in text editors. 1 = On, 0 = Off
   3066          */
   3067         public static final String TEXT_AUTO_CAPS = "auto_caps";
   3068 
   3069         private static final Validator TEXT_AUTO_CAPS_VALIDATOR = sBooleanValidator;
   3070 
   3071         /**
   3072          * Setting to enable Auto Punctuate in text editors. 1 = On, 0 = Off. This
   3073          * feature converts two spaces to a "." and space.
   3074          */
   3075         public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate";
   3076 
   3077         private static final Validator TEXT_AUTO_PUNCTUATE_VALIDATOR = sBooleanValidator;
   3078 
   3079         /**
   3080          * Setting to showing password characters in text editors. 1 = On, 0 = Off
   3081          */
   3082         public static final String TEXT_SHOW_PASSWORD = "show_password";
   3083 
   3084         private static final Validator TEXT_SHOW_PASSWORD_VALIDATOR = sBooleanValidator;
   3085 
   3086         public static final String SHOW_GTALK_SERVICE_STATUS =
   3087                 "SHOW_GTALK_SERVICE_STATUS";
   3088 
   3089         private static final Validator SHOW_GTALK_SERVICE_STATUS_VALIDATOR = sBooleanValidator;
   3090 
   3091         /**
   3092          * Name of activity to use for wallpaper on the home screen.
   3093          *
   3094          * @deprecated Use {@link WallpaperManager} instead.
   3095          */
   3096         @Deprecated
   3097         public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
   3098 
   3099         private static final Validator WALLPAPER_ACTIVITY_VALIDATOR = new Validator() {
   3100             private static final int MAX_LENGTH = 1000;
   3101 
   3102             @Override
   3103             public boolean validate(String value) {
   3104                 if (value != null && value.length() > MAX_LENGTH) {
   3105                     return false;
   3106                 }
   3107                 return ComponentName.unflattenFromString(value) != null;
   3108             }
   3109         };
   3110 
   3111         /**
   3112          * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME}
   3113          * instead
   3114          */
   3115         @Deprecated
   3116         public static final String AUTO_TIME = Global.AUTO_TIME;
   3117 
   3118         /**
   3119          * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME_ZONE}
   3120          * instead
   3121          */
   3122         @Deprecated
   3123         public static final String AUTO_TIME_ZONE = Global.AUTO_TIME_ZONE;
   3124 
   3125         /**
   3126          * Display times as 12 or 24 hours
   3127          *   12
   3128          *   24
   3129          */
   3130         public static final String TIME_12_24 = "time_12_24";
   3131 
   3132         /** @hide */
   3133         public static final Validator TIME_12_24_VALIDATOR =
   3134                 new DiscreteValueValidator(new String[] {"12", "24"});
   3135 
   3136         /**
   3137          * Date format string
   3138          *   mm/dd/yyyy
   3139          *   dd/mm/yyyy
   3140          *   yyyy/mm/dd
   3141          */
   3142         public static final String DATE_FORMAT = "date_format";
   3143 
   3144         /** @hide */
   3145         public static final Validator DATE_FORMAT_VALIDATOR = new Validator() {
   3146             @Override
   3147             public boolean validate(String value) {
   3148                 try {
   3149                     new SimpleDateFormat(value);
   3150                     return true;
   3151                 } catch (IllegalArgumentException e) {
   3152                     return false;
   3153                 }
   3154             }
   3155         };
   3156 
   3157         /**
   3158          * Whether the setup wizard has been run before (on first boot), or if
   3159          * it still needs to be run.
   3160          *
   3161          * nonzero = it has been run in the past
   3162          * 0 = it has not been run in the past
   3163          */
   3164         public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
   3165 
   3166         /** @hide */
   3167         public static final Validator SETUP_WIZARD_HAS_RUN_VALIDATOR = sBooleanValidator;
   3168 
   3169         /**
   3170          * Scaling factor for normal window animations. Setting to 0 will disable window
   3171          * animations.
   3172          *
   3173          * @deprecated Use {@link Global#WINDOW_ANIMATION_SCALE} instead
   3174          */
   3175         @Deprecated
   3176         public static final String WINDOW_ANIMATION_SCALE = Global.WINDOW_ANIMATION_SCALE;
   3177 
   3178         /**
   3179          * Scaling factor for activity transition animations. Setting to 0 will disable window
   3180          * animations.
   3181          *
   3182          * @deprecated Use {@link Global#TRANSITION_ANIMATION_SCALE} instead
   3183          */
   3184         @Deprecated
   3185         public static final String TRANSITION_ANIMATION_SCALE = Global.TRANSITION_ANIMATION_SCALE;
   3186 
   3187         /**
   3188          * Scaling factor for Animator-based animations. This affects both the start delay and
   3189          * duration of all such animations. Setting to 0 will cause animations to end immediately.
   3190          * The default value is 1.
   3191          *
   3192          * @deprecated Use {@link Global#ANIMATOR_DURATION_SCALE} instead
   3193          */
   3194         @Deprecated
   3195         public static final String ANIMATOR_DURATION_SCALE = Global.ANIMATOR_DURATION_SCALE;
   3196 
   3197         /**
   3198          * Control whether the accelerometer will be used to change screen
   3199          * orientation.  If 0, it will not be used unless explicitly requested
   3200          * by the application; if 1, it will be used by default unless explicitly
   3201          * disabled by the application.
   3202          */
   3203         public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation";
   3204 
   3205         /** @hide */
   3206         public static final Validator ACCELEROMETER_ROTATION_VALIDATOR = sBooleanValidator;
   3207 
   3208         /**
   3209          * Default screen rotation when no other policy applies.
   3210          * When {@link #ACCELEROMETER_ROTATION} is zero and no on-screen Activity expresses a
   3211          * preference, this rotation value will be used. Must be one of the
   3212          * {@link android.view.Surface#ROTATION_0 Surface rotation constants}.
   3213          *
   3214          * @see android.view.Display#getRotation
   3215          */
   3216         public static final String USER_ROTATION = "user_rotation";
   3217 
   3218         /** @hide */
   3219         public static final Validator USER_ROTATION_VALIDATOR =
   3220                 new InclusiveIntegerRangeValidator(0, 3);
   3221 
   3222         /**
   3223          * Control whether the rotation lock toggle in the System UI should be hidden.
   3224          * Typically this is done for accessibility purposes to make it harder for
   3225          * the user to accidentally toggle the rotation lock while the display rotation
   3226          * has been locked for accessibility.
   3227          *
   3228          * If 0, then rotation lock toggle is not hidden for accessibility (although it may be
   3229          * unavailable for other reasons).  If 1, then the rotation lock toggle is hidden.
   3230          *
   3231          * @hide
   3232          */
   3233         public static final String HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY =
   3234                 "hide_rotation_lock_toggle_for_accessibility";
   3235 
   3236         /** @hide */
   3237         public static final Validator HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR =
   3238                 sBooleanValidator;
   3239 
   3240         /**
   3241          * Whether the phone vibrates when it is ringing due to an incoming call. This will
   3242          * be used by Phone and Setting apps; it shouldn't affect other apps.
   3243          * The value is boolean (1 or 0).
   3244          *
   3245          * Note: this is not same as "vibrate on ring", which had been available until ICS.
   3246          * It was about AudioManager's setting and thus affected all the applications which
   3247          * relied on the setting, while this is purely about the vibration setting for incoming
   3248          * calls.
   3249          */
   3250         public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
   3251 
   3252         /** @hide */
   3253         public static final Validator VIBRATE_WHEN_RINGING_VALIDATOR = sBooleanValidator;
   3254 
   3255         /**
   3256          * Whether the audible DTMF tones are played by the dialer when dialing. The value is
   3257          * boolean (1 or 0).
   3258          */
   3259         public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone";
   3260 
   3261         /** @hide */
   3262         public static final Validator DTMF_TONE_WHEN_DIALING_VALIDATOR = sBooleanValidator;
   3263 
   3264         /**
   3265          * CDMA only settings
   3266          * DTMF tone type played by the dialer when dialing.
   3267          *                 0 = Normal
   3268          *                 1 = Long
   3269          */
   3270         public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
   3271 
   3272         /** @hide */
   3273         public static final Validator DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR = sBooleanValidator;
   3274 
   3275         /**
   3276          * Whether the hearing aid is enabled. The value is
   3277          * boolean (1 or 0).
   3278          * @hide
   3279          */
   3280         public static final String HEARING_AID = "hearing_aid";
   3281 
   3282         /** @hide */
   3283         public static final Validator HEARING_AID_VALIDATOR = sBooleanValidator;
   3284 
   3285         /**
   3286          * CDMA only settings
   3287          * TTY Mode
   3288          * 0 = OFF
   3289          * 1 = FULL
   3290          * 2 = VCO
   3291          * 3 = HCO
   3292          * @hide
   3293          */
   3294         public static final String TTY_MODE = "tty_mode";
   3295 
   3296         /** @hide */
   3297         public static final Validator TTY_MODE_VALIDATOR = new InclusiveIntegerRangeValidator(0, 3);
   3298 
   3299         /**
   3300          * Whether the sounds effects (key clicks, lid open ...) are enabled. The value is
   3301          * boolean (1 or 0).
   3302          */
   3303         public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
   3304 
   3305         /** @hide */
   3306         public static final Validator SOUND_EFFECTS_ENABLED_VALIDATOR = sBooleanValidator;
   3307 
   3308         /**
   3309          * Whether the haptic feedback (long presses, ...) are enabled. The value is
   3310          * boolean (1 or 0).
   3311          */
   3312         public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled";
   3313 
   3314         /** @hide */
   3315         public static final Validator HAPTIC_FEEDBACK_ENABLED_VALIDATOR = sBooleanValidator;
   3316 
   3317         /**
   3318          * @deprecated Each application that shows web suggestions should have its own
   3319          * setting for this.
   3320          */
   3321         @Deprecated
   3322         public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
   3323 
   3324         /** @hide */
   3325         public static final Validator SHOW_WEB_SUGGESTIONS_VALIDATOR = sBooleanValidator;
   3326 
   3327         /**
   3328          * Whether the notification LED should repeatedly flash when a notification is
   3329          * pending. The value is boolean (1 or 0).
   3330          * @hide
   3331          */
   3332         public static final String NOTIFICATION_LIGHT_PULSE = "notification_light_pulse";
   3333 
   3334         /** @hide */
   3335         public static final Validator NOTIFICATION_LIGHT_PULSE_VALIDATOR = sBooleanValidator;
   3336 
   3337         /**
   3338          * Show pointer location on screen?
   3339          * 0 = no
   3340          * 1 = yes
   3341          * @hide
   3342          */
   3343         public static final String POINTER_LOCATION = "pointer_location";
   3344 
   3345         /** @hide */
   3346         public static final Validator POINTER_LOCATION_VALIDATOR = sBooleanValidator;
   3347 
   3348         /**
   3349          * Show touch positions on screen?
   3350          * 0 = no
   3351          * 1 = yes
   3352          * @hide
   3353          */
   3354         public static final String SHOW_TOUCHES = "show_touches";
   3355 
   3356         /** @hide */
   3357         public static final Validator SHOW_TOUCHES_VALIDATOR = sBooleanValidator;
   3358 
   3359         /**
   3360          * Log raw orientation data from
   3361          * {@link com.android.server.policy.WindowOrientationListener} for use with the
   3362          * orientationplot.py tool.
   3363          * 0 = no
   3364          * 1 = yes
   3365          * @hide
   3366          */
   3367         public static final String WINDOW_ORIENTATION_LISTENER_LOG =
   3368                 "window_orientation_listener_log";
   3369 
   3370         /** @hide */
   3371         public static final Validator WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR = sBooleanValidator;
   3372 
   3373         /**
   3374          * @deprecated Use {@link android.provider.Settings.Global#POWER_SOUNDS_ENABLED}
   3375          * instead
   3376          * @hide
   3377          */
   3378         @Deprecated
   3379         public static final String POWER_SOUNDS_ENABLED = Global.POWER_SOUNDS_ENABLED;
   3380 
   3381         /**
   3382          * @deprecated Use {@link android.provider.Settings.Global#DOCK_SOUNDS_ENABLED}
   3383          * instead
   3384          * @hide
   3385          */
   3386         @Deprecated
   3387         public static final String DOCK_SOUNDS_ENABLED = Global.DOCK_SOUNDS_ENABLED;
   3388 
   3389         /**
   3390          * Whether to play sounds when the keyguard is shown and dismissed.
   3391          * @hide
   3392          */
   3393         public static final String LOCKSCREEN_SOUNDS_ENABLED = "lockscreen_sounds_enabled";
   3394 
   3395         /** @hide */
   3396         public static final Validator LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR = sBooleanValidator;
   3397 
   3398         /**
   3399          * Whether the lockscreen should be completely disabled.
   3400          * @hide
   3401          */
   3402         public static final String LOCKSCREEN_DISABLED = "lockscreen.disabled";
   3403 
   3404         /** @hide */
   3405         public static final Validator LOCKSCREEN_DISABLED_VALIDATOR = sBooleanValidator;
   3406 
   3407         /**
   3408          * @deprecated Use {@link android.provider.Settings.Global#LOW_BATTERY_SOUND}
   3409          * instead
   3410          * @hide
   3411          */
   3412         @Deprecated
   3413         public static final String LOW_BATTERY_SOUND = Global.LOW_BATTERY_SOUND;
   3414 
   3415         /**
   3416          * @deprecated Use {@link android.provider.Settings.Global#DESK_DOCK_SOUND}
   3417          * instead
   3418          * @hide
   3419          */
   3420         @Deprecated
   3421         public static final String DESK_DOCK_SOUND = Global.DESK_DOCK_SOUND;
   3422 
   3423         /**
   3424          * @deprecated Use {@link android.provider.Settings.Global#DESK_UNDOCK_SOUND}
   3425          * instead
   3426          * @hide
   3427          */
   3428         @Deprecated
   3429         public static final String DESK_UNDOCK_SOUND = Global.DESK_UNDOCK_SOUND;
   3430 
   3431         /**
   3432          * @deprecated Use {@link android.provider.Settings.Global#CAR_DOCK_SOUND}
   3433          * instead
   3434          * @hide
   3435          */
   3436         @Deprecated
   3437         public static final String CAR_DOCK_SOUND = Global.CAR_DOCK_SOUND;
   3438 
   3439         /**
   3440          * @deprecated Use {@link android.provider.Settings.Global#CAR_UNDOCK_SOUND}
   3441          * instead
   3442          * @hide
   3443          */
   3444         @Deprecated
   3445         public static final String CAR_UNDOCK_SOUND = Global.CAR_UNDOCK_SOUND;
   3446 
   3447         /**
   3448          * @deprecated Use {@link android.provider.Settings.Global#LOCK_SOUND}
   3449          * instead
   3450          * @hide
   3451          */
   3452         @Deprecated
   3453         public static final String LOCK_SOUND = Global.LOCK_SOUND;
   3454 
   3455         /**
   3456          * @deprecated Use {@link android.provider.Settings.Global#UNLOCK_SOUND}
   3457          * instead
   3458          * @hide
   3459          */
   3460         @Deprecated
   3461         public static final String UNLOCK_SOUND = Global.UNLOCK_SOUND;
   3462 
   3463         /**
   3464          * Receive incoming SIP calls?
   3465          * 0 = no
   3466          * 1 = yes
   3467          * @hide
   3468          */
   3469         public static final String SIP_RECEIVE_CALLS = "sip_receive_calls";
   3470 
   3471         /** @hide */
   3472         public static final Validator SIP_RECEIVE_CALLS_VALIDATOR = sBooleanValidator;
   3473 
   3474         /**
   3475          * Call Preference String.
   3476          * "SIP_ALWAYS" : Always use SIP with network access
   3477          * "SIP_ADDRESS_ONLY" : Only if destination is a SIP address
   3478          * @hide
   3479          */
   3480         public static final String SIP_CALL_OPTIONS = "sip_call_options";
   3481 
   3482         /** @hide */
   3483         public static final Validator SIP_CALL_OPTIONS_VALIDATOR = new DiscreteValueValidator(
   3484                 new String[] {"SIP_ALWAYS", "SIP_ADDRESS_ONLY"});
   3485 
   3486         /**
   3487          * One of the sip call options: Always use SIP with network access.
   3488          * @hide
   3489          */
   3490         public static final String SIP_ALWAYS = "SIP_ALWAYS";
   3491 
   3492         /** @hide */
   3493         public static final Validator SIP_ALWAYS_VALIDATOR = sBooleanValidator;
   3494 
   3495         /**
   3496          * One of the sip call options: Only if destination is a SIP address.
   3497          * @hide
   3498          */
   3499         public static final String SIP_ADDRESS_ONLY = "SIP_ADDRESS_ONLY";
   3500 
   3501         /** @hide */
   3502         public static final Validator SIP_ADDRESS_ONLY_VALIDATOR = sBooleanValidator;
   3503 
   3504         /**
   3505          * @deprecated Use SIP_ALWAYS or SIP_ADDRESS_ONLY instead.  Formerly used to indicate that
   3506          * the user should be prompted each time a call is made whether it should be placed using
   3507          * SIP.  The {@link com.android.providers.settings.DatabaseHelper} replaces this with
   3508          * SIP_ADDRESS_ONLY.
   3509          * @hide
   3510          */
   3511         @Deprecated
   3512         public static final String SIP_ASK_ME_EACH_TIME = "SIP_ASK_ME_EACH_TIME";
   3513 
   3514         /** @hide */
   3515         public static final Validator SIP_ASK_ME_EACH_TIME_VALIDATOR = sBooleanValidator;
   3516 
   3517         /**
   3518          * Pointer speed setting.
   3519          * This is an integer value in a range between -7 and +7, so there are 15 possible values.
   3520          *   -7 = slowest
   3521          *    0 = default speed
   3522          *   +7 = fastest
   3523          * @hide
   3524          */
   3525         public static final String POINTER_SPEED = "pointer_speed";
   3526 
   3527         /** @hide */
   3528         public static final Validator POINTER_SPEED_VALIDATOR =
   3529                 new InclusiveFloatRangeValidator(-7, 7);
   3530 
   3531         /**
   3532          * Whether lock-to-app will be triggered by long-press on recents.
   3533          * @hide
   3534          */
   3535         public static final String LOCK_TO_APP_ENABLED = "lock_to_app_enabled";
   3536 
   3537         /** @hide */
   3538         public static final Validator LOCK_TO_APP_ENABLED_VALIDATOR = sBooleanValidator;
   3539 
   3540         /**
   3541          * I am the lolrus.
   3542          * <p>
   3543          * Nonzero values indicate that the user has a bukkit.
   3544          * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>.
   3545          * @hide
   3546          */
   3547         public static final String EGG_MODE = "egg_mode";
   3548 
   3549         /** @hide */
   3550         public static final Validator EGG_MODE_VALIDATOR = new Validator() {
   3551             @Override
   3552             public boolean validate(String value) {
   3553                 try {
   3554                     return Long.parseLong(value) >= 0;
   3555                 } catch (NumberFormatException e) {
   3556                     return false;
   3557                 }
   3558             }
   3559         };
   3560 
   3561         /**
   3562          * IMPORTANT: If you add a new public settings you also have to add it to
   3563          * PUBLIC_SETTINGS below. If the new setting is hidden you have to add
   3564          * it to PRIVATE_SETTINGS below. Also add a validator that can validate
   3565          * the setting value. See an example above.
   3566          */
   3567 
   3568         /**
   3569          * Settings to backup. This is here so that it's in the same place as the settings
   3570          * keys and easy to update.
   3571          *
   3572          * NOTE: Settings are backed up and restored in the order they appear
   3573          *       in this array. If you have one setting depending on another,
   3574          *       make sure that they are ordered appropriately.
   3575          *
   3576          * @hide
   3577          */
   3578         public static final String[] SETTINGS_TO_BACKUP = {
   3579             STAY_ON_WHILE_PLUGGED_IN,   // moved to global
   3580             WIFI_USE_STATIC_IP,
   3581             WIFI_STATIC_IP,
   3582             WIFI_STATIC_GATEWAY,
   3583             WIFI_STATIC_NETMASK,
   3584             WIFI_STATIC_DNS1,
   3585             WIFI_STATIC_DNS2,
   3586             BLUETOOTH_DISCOVERABILITY,
   3587             BLUETOOTH_DISCOVERABILITY_TIMEOUT,
   3588             FONT_SCALE,
   3589             DIM_SCREEN,
   3590             SCREEN_OFF_TIMEOUT,
   3591             SCREEN_BRIGHTNESS,
   3592             SCREEN_BRIGHTNESS_MODE,
   3593             SCREEN_AUTO_BRIGHTNESS_ADJ,
   3594             VIBRATE_INPUT_DEVICES,
   3595             MODE_RINGER_STREAMS_AFFECTED,
   3596             TEXT_AUTO_REPLACE,
   3597             TEXT_AUTO_CAPS,
   3598             TEXT_AUTO_PUNCTUATE,
   3599             TEXT_SHOW_PASSWORD,
   3600             AUTO_TIME,                  // moved to global
   3601             AUTO_TIME_ZONE,             // moved to global
   3602             TIME_12_24,
   3603             DATE_FORMAT,
   3604             DTMF_TONE_WHEN_DIALING,
   3605             DTMF_TONE_TYPE_WHEN_DIALING,
   3606             HEARING_AID,
   3607             TTY_MODE,
   3608             MASTER_MONO,
   3609             SOUND_EFFECTS_ENABLED,
   3610             HAPTIC_FEEDBACK_ENABLED,
   3611             POWER_SOUNDS_ENABLED,       // moved to global
   3612             DOCK_SOUNDS_ENABLED,        // moved to global
   3613             LOCKSCREEN_SOUNDS_ENABLED,
   3614             SHOW_WEB_SUGGESTIONS,
   3615             SIP_CALL_OPTIONS,
   3616             SIP_RECEIVE_CALLS,
   3617             POINTER_SPEED,
   3618             VIBRATE_WHEN_RINGING,
   3619             RINGTONE,
   3620             LOCK_TO_APP_ENABLED,
   3621             NOTIFICATION_SOUND,
   3622             ACCELEROMETER_ROTATION
   3623         };
   3624 
   3625         /**
   3626          * These are all public system settings
   3627          *
   3628          * @hide
   3629          */
   3630         public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>();
   3631         static {
   3632             PUBLIC_SETTINGS.add(END_BUTTON_BEHAVIOR);
   3633             PUBLIC_SETTINGS.add(WIFI_USE_STATIC_IP);
   3634             PUBLIC_SETTINGS.add(WIFI_STATIC_IP);
   3635             PUBLIC_SETTINGS.add(WIFI_STATIC_GATEWAY);
   3636             PUBLIC_SETTINGS.add(WIFI_STATIC_NETMASK);
   3637             PUBLIC_SETTINGS.add(WIFI_STATIC_DNS1);
   3638             PUBLIC_SETTINGS.add(WIFI_STATIC_DNS2);
   3639             PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY);
   3640             PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY_TIMEOUT);
   3641             PUBLIC_SETTINGS.add(NEXT_ALARM_FORMATTED);
   3642             PUBLIC_SETTINGS.add(FONT_SCALE);
   3643             PUBLIC_SETTINGS.add(DIM_SCREEN);
   3644             PUBLIC_SETTINGS.add(SCREEN_OFF_TIMEOUT);
   3645             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS);
   3646             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_MODE);
   3647             PUBLIC_SETTINGS.add(MODE_RINGER_STREAMS_AFFECTED);
   3648             PUBLIC_SETTINGS.add(MUTE_STREAMS_AFFECTED);
   3649             PUBLIC_SETTINGS.add(VIBRATE_ON);
   3650             PUBLIC_SETTINGS.add(VOLUME_RING);
   3651             PUBLIC_SETTINGS.add(VOLUME_SYSTEM);
   3652             PUBLIC_SETTINGS.add(VOLUME_VOICE);
   3653             PUBLIC_SETTINGS.add(VOLUME_MUSIC);
   3654             PUBLIC_SETTINGS.add(VOLUME_ALARM);
   3655             PUBLIC_SETTINGS.add(VOLUME_NOTIFICATION);
   3656             PUBLIC_SETTINGS.add(VOLUME_BLUETOOTH_SCO);
   3657             PUBLIC_SETTINGS.add(RINGTONE);
   3658             PUBLIC_SETTINGS.add(NOTIFICATION_SOUND);
   3659             PUBLIC_SETTINGS.add(ALARM_ALERT);
   3660             PUBLIC_SETTINGS.add(TEXT_AUTO_REPLACE);
   3661             PUBLIC_SETTINGS.add(TEXT_AUTO_CAPS);
   3662             PUBLIC_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
   3663             PUBLIC_SETTINGS.add(TEXT_SHOW_PASSWORD);
   3664             PUBLIC_SETTINGS.add(SHOW_GTALK_SERVICE_STATUS);
   3665             PUBLIC_SETTINGS.add(WALLPAPER_ACTIVITY);
   3666             PUBLIC_SETTINGS.add(TIME_12_24);
   3667             PUBLIC_SETTINGS.add(DATE_FORMAT);
   3668             PUBLIC_SETTINGS.add(SETUP_WIZARD_HAS_RUN);
   3669             PUBLIC_SETTINGS.add(ACCELEROMETER_ROTATION);
   3670             PUBLIC_SETTINGS.add(USER_ROTATION);
   3671             PUBLIC_SETTINGS.add(DTMF_TONE_WHEN_DIALING);
   3672             PUBLIC_SETTINGS.add(SOUND_EFFECTS_ENABLED);
   3673             PUBLIC_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
   3674             PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS);
   3675             PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING);
   3676         }
   3677 
   3678         /**
   3679          * These are all hidden system settings.
   3680          *
   3681          * @hide
   3682          */
   3683         public static final Set<String> PRIVATE_SETTINGS = new ArraySet<>();
   3684         static {
   3685             PRIVATE_SETTINGS.add(WIFI_USE_STATIC_IP);
   3686             PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
   3687             PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
   3688             PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
   3689             PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
   3690             PRIVATE_SETTINGS.add(VOLUME_MASTER);
   3691             PRIVATE_SETTINGS.add(MASTER_MONO);
   3692             PRIVATE_SETTINGS.add(NOTIFICATIONS_USE_RING_VOLUME);
   3693             PRIVATE_SETTINGS.add(VIBRATE_IN_SILENT);
   3694             PRIVATE_SETTINGS.add(MEDIA_BUTTON_RECEIVER);
   3695             PRIVATE_SETTINGS.add(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY);
   3696             PRIVATE_SETTINGS.add(DTMF_TONE_TYPE_WHEN_DIALING);
   3697             PRIVATE_SETTINGS.add(HEARING_AID);
   3698             PRIVATE_SETTINGS.add(TTY_MODE);
   3699             PRIVATE_SETTINGS.add(NOTIFICATION_LIGHT_PULSE);
   3700             PRIVATE_SETTINGS.add(POINTER_LOCATION);
   3701             PRIVATE_SETTINGS.add(SHOW_TOUCHES);
   3702             PRIVATE_SETTINGS.add(WINDOW_ORIENTATION_LISTENER_LOG);
   3703             PRIVATE_SETTINGS.add(POWER_SOUNDS_ENABLED);
   3704             PRIVATE_SETTINGS.add(DOCK_SOUNDS_ENABLED);
   3705             PRIVATE_SETTINGS.add(LOCKSCREEN_SOUNDS_ENABLED);
   3706             PRIVATE_SETTINGS.add(LOCKSCREEN_DISABLED);
   3707             PRIVATE_SETTINGS.add(LOW_BATTERY_SOUND);
   3708             PRIVATE_SETTINGS.add(DESK_DOCK_SOUND);
   3709             PRIVATE_SETTINGS.add(DESK_UNDOCK_SOUND);
   3710             PRIVATE_SETTINGS.add(CAR_DOCK_SOUND);
   3711             PRIVATE_SETTINGS.add(CAR_UNDOCK_SOUND);
   3712             PRIVATE_SETTINGS.add(LOCK_SOUND);
   3713             PRIVATE_SETTINGS.add(UNLOCK_SOUND);
   3714             PRIVATE_SETTINGS.add(SIP_RECEIVE_CALLS);
   3715             PRIVATE_SETTINGS.add(SIP_CALL_OPTIONS);
   3716             PRIVATE_SETTINGS.add(SIP_ALWAYS);
   3717             PRIVATE_SETTINGS.add(SIP_ADDRESS_ONLY);
   3718             PRIVATE_SETTINGS.add(SIP_ASK_ME_EACH_TIME);
   3719             PRIVATE_SETTINGS.add(POINTER_SPEED);
   3720             PRIVATE_SETTINGS.add(LOCK_TO_APP_ENABLED);
   3721             PRIVATE_SETTINGS.add(EGG_MODE);
   3722         }
   3723 
   3724         /**
   3725          * These are all public system settings
   3726          *
   3727          * @hide
   3728          */
   3729         public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
   3730         static {
   3731             VALIDATORS.put(END_BUTTON_BEHAVIOR,END_BUTTON_BEHAVIOR_VALIDATOR);
   3732             VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR);
   3733             VALIDATORS.put(BLUETOOTH_DISCOVERABILITY, BLUETOOTH_DISCOVERABILITY_VALIDATOR);
   3734             VALIDATORS.put(BLUETOOTH_DISCOVERABILITY_TIMEOUT,
   3735                     BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR);
   3736             VALIDATORS.put(NEXT_ALARM_FORMATTED, NEXT_ALARM_FORMATTED_VALIDATOR);
   3737             VALIDATORS.put(FONT_SCALE, FONT_SCALE_VALIDATOR);
   3738             VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR);
   3739             VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR);
   3740             VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR);
   3741             VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR);
   3742             VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR);
   3743             VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR);
   3744             VALIDATORS.put(VIBRATE_ON, VIBRATE_ON_VALIDATOR);
   3745             VALIDATORS.put(RINGTONE, RINGTONE_VALIDATOR);
   3746             VALIDATORS.put(NOTIFICATION_SOUND, NOTIFICATION_SOUND_VALIDATOR);
   3747             VALIDATORS.put(ALARM_ALERT, ALARM_ALERT_VALIDATOR);
   3748             VALIDATORS.put(TEXT_AUTO_REPLACE, TEXT_AUTO_REPLACE_VALIDATOR);
   3749             VALIDATORS.put(TEXT_AUTO_CAPS, TEXT_AUTO_CAPS_VALIDATOR);
   3750             VALIDATORS.put(TEXT_AUTO_PUNCTUATE, TEXT_AUTO_PUNCTUATE_VALIDATOR);
   3751             VALIDATORS.put(TEXT_SHOW_PASSWORD, TEXT_SHOW_PASSWORD_VALIDATOR);
   3752             VALIDATORS.put(SHOW_GTALK_SERVICE_STATUS, SHOW_GTALK_SERVICE_STATUS_VALIDATOR);
   3753             VALIDATORS.put(WALLPAPER_ACTIVITY, WALLPAPER_ACTIVITY_VALIDATOR);
   3754             VALIDATORS.put(TIME_12_24, TIME_12_24_VALIDATOR);
   3755             VALIDATORS.put(DATE_FORMAT, DATE_FORMAT_VALIDATOR);
   3756             VALIDATORS.put(SETUP_WIZARD_HAS_RUN, SETUP_WIZARD_HAS_RUN_VALIDATOR);
   3757             VALIDATORS.put(ACCELEROMETER_ROTATION, ACCELEROMETER_ROTATION_VALIDATOR);
   3758             VALIDATORS.put(USER_ROTATION, USER_ROTATION_VALIDATOR);
   3759             VALIDATORS.put(DTMF_TONE_WHEN_DIALING, DTMF_TONE_WHEN_DIALING_VALIDATOR);
   3760             VALIDATORS.put(SOUND_EFFECTS_ENABLED, SOUND_EFFECTS_ENABLED_VALIDATOR);
   3761             VALIDATORS.put(HAPTIC_FEEDBACK_ENABLED, HAPTIC_FEEDBACK_ENABLED_VALIDATOR);
   3762             VALIDATORS.put(SHOW_WEB_SUGGESTIONS, SHOW_WEB_SUGGESTIONS_VALIDATOR);
   3763             VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR);
   3764             VALIDATORS.put(END_BUTTON_BEHAVIOR, END_BUTTON_BEHAVIOR_VALIDATOR);
   3765             VALIDATORS.put(ADVANCED_SETTINGS, ADVANCED_SETTINGS_VALIDATOR);
   3766             VALIDATORS.put(SCREEN_AUTO_BRIGHTNESS_ADJ, SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR);
   3767             VALIDATORS.put(VIBRATE_INPUT_DEVICES, VIBRATE_INPUT_DEVICES_VALIDATOR);
   3768             VALIDATORS.put(MASTER_MONO, MASTER_MONO_VALIDATOR);
   3769             VALIDATORS.put(NOTIFICATIONS_USE_RING_VOLUME, NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR);
   3770             VALIDATORS.put(VIBRATE_IN_SILENT, VIBRATE_IN_SILENT_VALIDATOR);
   3771             VALIDATORS.put(MEDIA_BUTTON_RECEIVER, MEDIA_BUTTON_RECEIVER_VALIDATOR);
   3772             VALIDATORS.put(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY,
   3773                     HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR);
   3774             VALIDATORS.put(VIBRATE_WHEN_RINGING, VIBRATE_WHEN_RINGING_VALIDATOR);
   3775             VALIDATORS.put(DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR);
   3776             VALIDATORS.put(HEARING_AID, HEARING_AID_VALIDATOR);
   3777             VALIDATORS.put(TTY_MODE, TTY_MODE_VALIDATOR);
   3778             VALIDATORS.put(NOTIFICATION_LIGHT_PULSE, NOTIFICATION_LIGHT_PULSE_VALIDATOR);
   3779             VALIDATORS.put(POINTER_LOCATION, POINTER_LOCATION_VALIDATOR);
   3780             VALIDATORS.put(SHOW_TOUCHES, SHOW_TOUCHES_VALIDATOR);
   3781             VALIDATORS.put(WINDOW_ORIENTATION_LISTENER_LOG,
   3782                     WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR);
   3783             VALIDATORS.put(LOCKSCREEN_SOUNDS_ENABLED, LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR);
   3784             VALIDATORS.put(LOCKSCREEN_DISABLED, LOCKSCREEN_DISABLED_VALIDATOR);
   3785             VALIDATORS.put(SIP_RECEIVE_CALLS, SIP_RECEIVE_CALLS_VALIDATOR);
   3786             VALIDATORS.put(SIP_CALL_OPTIONS, SIP_CALL_OPTIONS_VALIDATOR);
   3787             VALIDATORS.put(SIP_ALWAYS, SIP_ALWAYS_VALIDATOR);
   3788             VALIDATORS.put(SIP_ADDRESS_ONLY, SIP_ADDRESS_ONLY_VALIDATOR);
   3789             VALIDATORS.put(SIP_ASK_ME_EACH_TIME, SIP_ASK_ME_EACH_TIME_VALIDATOR);
   3790             VALIDATORS.put(POINTER_SPEED, POINTER_SPEED_VALIDATOR);
   3791             VALIDATORS.put(LOCK_TO_APP_ENABLED, LOCK_TO_APP_ENABLED_VALIDATOR);
   3792             VALIDATORS.put(EGG_MODE, EGG_MODE_VALIDATOR);
   3793             VALIDATORS.put(WIFI_STATIC_IP, WIFI_STATIC_IP_VALIDATOR);
   3794             VALIDATORS.put(WIFI_STATIC_GATEWAY, WIFI_STATIC_GATEWAY_VALIDATOR);
   3795             VALIDATORS.put(WIFI_STATIC_NETMASK, WIFI_STATIC_NETMASK_VALIDATOR);
   3796             VALIDATORS.put(WIFI_STATIC_DNS1, WIFI_STATIC_DNS1_VALIDATOR);
   3797             VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR);
   3798         }
   3799 
   3800         /**
   3801          * These entries are considered common between the personal and the managed profile,
   3802          * since the managed profile doesn't get to change them.
   3803          */
   3804         private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
   3805         static {
   3806             CLONE_TO_MANAGED_PROFILE.add(DATE_FORMAT);
   3807             CLONE_TO_MANAGED_PROFILE.add(HAPTIC_FEEDBACK_ENABLED);
   3808             CLONE_TO_MANAGED_PROFILE.add(SOUND_EFFECTS_ENABLED);
   3809             CLONE_TO_MANAGED_PROFILE.add(TEXT_SHOW_PASSWORD);
   3810             CLONE_TO_MANAGED_PROFILE.add(TIME_12_24);
   3811         }
   3812 
   3813         /** @hide */
   3814         public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
   3815             outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
   3816         }
   3817 
   3818         /**
   3819          * When to use Wi-Fi calling
   3820          *
   3821          * @see android.telephony.TelephonyManager.WifiCallingChoices
   3822          * @hide
   3823          */
   3824         public static final String WHEN_TO_MAKE_WIFI_CALLS = "when_to_make_wifi_calls";
   3825 
   3826         // Settings moved to Settings.Secure
   3827 
   3828         /**
   3829          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED}
   3830          * instead
   3831          */
   3832         @Deprecated
   3833         public static final String ADB_ENABLED = Global.ADB_ENABLED;
   3834 
   3835         /**
   3836          * @deprecated Use {@link android.provider.Settings.Secure#ANDROID_ID} instead
   3837          */
   3838         @Deprecated
   3839         public static final String ANDROID_ID = Secure.ANDROID_ID;
   3840 
   3841         /**
   3842          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
   3843          */
   3844         @Deprecated
   3845         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
   3846 
   3847         /**
   3848          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
   3849          */
   3850         @Deprecated
   3851         public static final String DATA_ROAMING = Global.DATA_ROAMING;
   3852 
   3853         /**
   3854          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
   3855          */
   3856         @Deprecated
   3857         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
   3858 
   3859         /**
   3860          * @deprecated Use {@link android.provider.Settings.Global#HTTP_PROXY} instead
   3861          */
   3862         @Deprecated
   3863         public static final String HTTP_PROXY = Global.HTTP_PROXY;
   3864 
   3865         /**
   3866          * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
   3867          */
   3868         @Deprecated
   3869         public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
   3870 
   3871         /**
   3872          * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED}
   3873          * instead
   3874          */
   3875         @Deprecated
   3876         public static final String LOCATION_PROVIDERS_ALLOWED = Secure.LOCATION_PROVIDERS_ALLOWED;
   3877 
   3878         /**
   3879          * @deprecated Use {@link android.provider.Settings.Secure#LOGGING_ID} instead
   3880          */
   3881         @Deprecated
   3882         public static final String LOGGING_ID = Secure.LOGGING_ID;
   3883 
   3884         /**
   3885          * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
   3886          */
   3887         @Deprecated
   3888         public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
   3889 
   3890         /**
   3891          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_ENABLED}
   3892          * instead
   3893          */
   3894         @Deprecated
   3895         public static final String PARENTAL_CONTROL_ENABLED = Secure.PARENTAL_CONTROL_ENABLED;
   3896 
   3897         /**
   3898          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_LAST_UPDATE}
   3899          * instead
   3900          */
   3901         @Deprecated
   3902         public static final String PARENTAL_CONTROL_LAST_UPDATE = Secure.PARENTAL_CONTROL_LAST_UPDATE;
   3903 
   3904         /**
   3905          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_REDIRECT_URL}
   3906          * instead
   3907          */
   3908         @Deprecated
   3909         public static final String PARENTAL_CONTROL_REDIRECT_URL =
   3910             Secure.PARENTAL_CONTROL_REDIRECT_URL;
   3911 
   3912         /**
   3913          * @deprecated Use {@link android.provider.Settings.Secure#SETTINGS_CLASSNAME} instead
   3914          */
   3915         @Deprecated
   3916         public static final String SETTINGS_CLASSNAME = Secure.SETTINGS_CLASSNAME;
   3917 
   3918         /**
   3919          * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
   3920          */
   3921         @Deprecated
   3922         public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
   3923 
   3924         /**
   3925          * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
   3926          */
   3927         @Deprecated
   3928         public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
   3929 
   3930        /**
   3931          * @deprecated Use
   3932          * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
   3933          */
   3934         @Deprecated
   3935         public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
   3936 
   3937         /**
   3938          * @deprecated Use
   3939          * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
   3940          */
   3941         @Deprecated
   3942         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
   3943                 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
   3944 
   3945         /**
   3946          * @deprecated Use
   3947          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} instead
   3948          */
   3949         @Deprecated
   3950         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
   3951                 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
   3952 
   3953         /**
   3954          * @deprecated Use
   3955          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} instead
   3956          */
   3957         @Deprecated
   3958         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
   3959                 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
   3960 
   3961         /**
   3962          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
   3963          * instead
   3964          */
   3965         @Deprecated
   3966         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
   3967 
   3968         /**
   3969          * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} instead
   3970          */
   3971         @Deprecated
   3972         public static final String WIFI_ON = Global.WIFI_ON;
   3973 
   3974         /**
   3975          * @deprecated Use
   3976          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE}
   3977          * instead
   3978          */
   3979         @Deprecated
   3980         public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
   3981                 Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE;
   3982 
   3983         /**
   3984          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_AP_COUNT} instead
   3985          */
   3986         @Deprecated
   3987         public static final String WIFI_WATCHDOG_AP_COUNT = Secure.WIFI_WATCHDOG_AP_COUNT;
   3988 
   3989         /**
   3990          * @deprecated Use
   3991          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS} instead
   3992          */
   3993         @Deprecated
   3994         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
   3995                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS;
   3996 
   3997         /**
   3998          * @deprecated Use
   3999          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead
   4000          */
   4001         @Deprecated
   4002         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
   4003                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED;
   4004 
   4005         /**
   4006          * @deprecated Use
   4007          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS}
   4008          * instead
   4009          */
   4010         @Deprecated
   4011         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
   4012                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS;
   4013 
   4014         /**
   4015          * @deprecated Use
   4016          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT} instead
   4017          */
   4018         @Deprecated
   4019         public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
   4020             Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT;
   4021 
   4022         /**
   4023          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_MAX_AP_CHECKS}
   4024          * instead
   4025          */
   4026         @Deprecated
   4027         public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = Secure.WIFI_WATCHDOG_MAX_AP_CHECKS;
   4028 
   4029         /**
   4030          * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
   4031          */
   4032         @Deprecated
   4033         public static final String WIFI_WATCHDOG_ON = Global.WIFI_WATCHDOG_ON;
   4034 
   4035         /**
   4036          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_COUNT} instead
   4037          */
   4038         @Deprecated
   4039         public static final String WIFI_WATCHDOG_PING_COUNT = Secure.WIFI_WATCHDOG_PING_COUNT;
   4040 
   4041         /**
   4042          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_DELAY_MS}
   4043          * instead
   4044          */
   4045         @Deprecated
   4046         public static final String WIFI_WATCHDOG_PING_DELAY_MS = Secure.WIFI_WATCHDOG_PING_DELAY_MS;
   4047 
   4048         /**
   4049          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_TIMEOUT_MS}
   4050          * instead
   4051          */
   4052         @Deprecated
   4053         public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS =
   4054             Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS;
   4055 
   4056         /**
   4057          * Checks if the specified app can modify system settings. As of API
   4058          * level 23, an app cannot modify system settings unless it declares the
   4059          * {@link android.Manifest.permission#WRITE_SETTINGS}
   4060          * permission in its manifest, <em>and</em> the user specifically grants
   4061          * the app this capability. To prompt the user to grant this approval,
   4062          * the app must send an intent with the action {@link
   4063          * android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}, which causes
   4064          * the system to display a permission management screen.
   4065          *
   4066          * @param context App context.
   4067          * @return true if the calling app can write to system settings, false otherwise
   4068          */
   4069         public static boolean canWrite(Context context) {
   4070             return isCallingPackageAllowedToWriteSettings(context, Process.myUid(),
   4071                     context.getOpPackageName(), false);
   4072         }
   4073     }
   4074 
   4075     /**
   4076      * Secure system settings, containing system preferences that applications
   4077      * can read but are not allowed to write.  These are for preferences that
   4078      * the user must explicitly modify through the system UI or specialized
   4079      * APIs for those values, not modified directly by applications.
   4080      */
   4081     public static final class Secure extends NameValueTable {
   4082         /**
   4083          * The content:// style URL for this table
   4084          */
   4085         public static final Uri CONTENT_URI =
   4086             Uri.parse("content://" + AUTHORITY + "/secure");
   4087 
   4088         // Populated lazily, guarded by class object:
   4089         private static final NameValueCache sNameValueCache = new NameValueCache(
   4090                 CONTENT_URI,
   4091                 CALL_METHOD_GET_SECURE,
   4092                 CALL_METHOD_PUT_SECURE);
   4093 
   4094         private static ILockSettings sLockSettings = null;
   4095 
   4096         private static boolean sIsSystemProcess;
   4097         private static final HashSet<String> MOVED_TO_LOCK_SETTINGS;
   4098         private static final HashSet<String> MOVED_TO_GLOBAL;
   4099         static {
   4100             MOVED_TO_LOCK_SETTINGS = new HashSet<String>(3);
   4101             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_ENABLED);
   4102             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_VISIBLE);
   4103             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
   4104 
   4105             MOVED_TO_GLOBAL = new HashSet<String>();
   4106             MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED);
   4107             MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED);
   4108             MOVED_TO_GLOBAL.add(Settings.Global.BLUETOOTH_ON);
   4109             MOVED_TO_GLOBAL.add(Settings.Global.BUGREPORT_IN_POWER_MENU);
   4110             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_CELL_BROADCAST_SMS);
   4111             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_ROAMING_MODE);
   4112             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_SUBSCRIPTION_MODE);
   4113             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE);
   4114             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI);
   4115             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ROAMING);
   4116             MOVED_TO_GLOBAL.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
   4117             MOVED_TO_GLOBAL.add(Settings.Global.DEVICE_PROVISIONED);
   4118             MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED);
   4119             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
   4120             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
   4121             MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA);
   4122             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
   4123             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
   4124             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES);
   4125             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE);
   4126             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED);
   4127             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES);
   4128             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL);
   4129             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED);
   4130             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE);
   4131             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION);
   4132             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_DELETE_AGE);
   4133             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES);
   4134             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_ROTATE_AGE);
   4135             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION);
   4136             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE);
   4137             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES);
   4138             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE);
   4139             MOVED_TO_GLOBAL.add(Settings.Global.NETWORK_PREFERENCE);
   4140             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_DIFF);
   4141             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_SPACING);
   4142             MOVED_TO_GLOBAL.add(Settings.Global.NTP_SERVER);
   4143             MOVED_TO_GLOBAL.add(Settings.Global.NTP_TIMEOUT);
   4144             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT);
   4145             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
   4146             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
   4147             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS);
   4148             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
   4149             MOVED_TO_GLOBAL.add(Settings.Global.SAMPLING_PROFILER_MS);
   4150             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
   4151             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST);
   4152             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL);
   4153             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_APN);
   4154             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_REQUIRED);
   4155             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_SUPPORTED);
   4156             MOVED_TO_GLOBAL.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
   4157             MOVED_TO_GLOBAL.add(Settings.Global.USE_GOOGLE_MAIL);
   4158             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_COUNTRY_CODE);
   4159             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
   4160             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FREQUENCY_BAND);
   4161             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_IDLE_MS);
   4162             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT);
   4163             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
   4164             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
   4165             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
   4166             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT);
   4167             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON);
   4168             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME);
   4169             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SAVED_STATE);
   4170             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
   4171             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED);
   4172             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED);
   4173             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ENHANCED_AUTO_JOIN);
   4174             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORK_SHOW_RSSI);
   4175             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_ON);
   4176             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
   4177             MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
   4178             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_ENABLE);
   4179             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
   4180             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
   4181             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
   4182             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
   4183             MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
   4184             MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL);
   4185             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD);
   4186             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
   4187             MOVED_TO_GLOBAL.add(Settings.Global.SEND_ACTION_APP_ERROR);
   4188             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_AGE_SECONDS);
   4189             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_MAX_FILES);
   4190             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_KB);
   4191             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_PERCENT);
   4192             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_RESERVE_PERCENT);
   4193             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_TAG_PREFIX);
   4194             MOVED_TO_GLOBAL.add(Settings.Global.ERROR_LOGCAT_PREFIX);
   4195             MOVED_TO_GLOBAL.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL);
   4196             MOVED_TO_GLOBAL.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
   4197             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE);
   4198             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES);
   4199             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES);
   4200             MOVED_TO_GLOBAL.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
   4201             MOVED_TO_GLOBAL.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY);
   4202             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);
   4203             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_SERVER);
   4204             MOVED_TO_GLOBAL.add(Settings.Global.NSD_ON);
   4205             MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION);
   4206             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_INSTALL_LOCATION);
   4207             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY);
   4208             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
   4209             MOVED_TO_GLOBAL.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
   4210             MOVED_TO_GLOBAL.add(Settings.Global.HTTP_PROXY);
   4211             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST);
   4212             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT);
   4213             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
   4214             MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
   4215             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER);
   4216             MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE);
   4217             MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY);
   4218         }
   4219 
   4220         /** @hide */
   4221         public static void getMovedToGlobalSettings(Set<String> outKeySet) {
   4222             outKeySet.addAll(MOVED_TO_GLOBAL);
   4223         }
   4224 
   4225         /**
   4226          * Look up a name in the database.
   4227          * @param resolver to access the database with
   4228          * @param name to look up in the table
   4229          * @return the corresponding value, or null if not present
   4230          */
   4231         public static String getString(ContentResolver resolver, String name) {
   4232             return getStringForUser(resolver, name, UserHandle.myUserId());
   4233         }
   4234 
   4235         /** @hide */
   4236         public static String getStringForUser(ContentResolver resolver, String name,
   4237                 int userHandle) {
   4238             if (MOVED_TO_GLOBAL.contains(name)) {
   4239                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
   4240                         + " to android.provider.Settings.Global.");
   4241                 return Global.getStringForUser(resolver, name, userHandle);
   4242             }
   4243 
   4244             if (MOVED_TO_LOCK_SETTINGS.contains(name)) {
   4245                 synchronized (Secure.class) {
   4246                     if (sLockSettings == null) {
   4247                         sLockSettings = ILockSettings.Stub.asInterface(
   4248                                 (IBinder) ServiceManager.getService("lock_settings"));
   4249                         sIsSystemProcess = Process.myUid() == Process.SYSTEM_UID;
   4250                     }
   4251                 }
   4252                 if (sLockSettings != null && !sIsSystemProcess) {
   4253                     // No context; use the ActivityThread's context as an approximation for
   4254                     // determining the target API level.
   4255                     Application application = ActivityThread.currentApplication();
   4256 
   4257                     boolean isPreMnc = application != null
   4258                             && application.getApplicationInfo() != null
   4259                             && application.getApplicationInfo().targetSdkVersion
   4260                             <= VERSION_CODES.LOLLIPOP_MR1;
   4261                     if (isPreMnc) {
   4262                         try {
   4263                             return sLockSettings.getString(name, "0", userHandle);
   4264                         } catch (RemoteException re) {
   4265                             // Fall through
   4266                         }
   4267                     } else {
   4268                         throw new SecurityException("Settings.Secure." + name
   4269                                 + " is deprecated and no longer accessible."
   4270                                 + " See API documentation for potential replacements.");
   4271                     }
   4272                 }
   4273             }
   4274 
   4275             return sNameValueCache.getStringForUser(resolver, name, userHandle);
   4276         }
   4277 
   4278         /**
   4279          * Store a name/value pair into the database.
   4280          * @param resolver to access the database with
   4281          * @param name to store
   4282          * @param value to associate with the name
   4283          * @return true if the value was set, false on database errors
   4284          */
   4285         public static boolean putString(ContentResolver resolver, String name, String value) {
   4286             return putStringForUser(resolver, name, value, UserHandle.myUserId());
   4287         }
   4288 
   4289         /** @hide */
   4290         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
   4291                 int userHandle) {
   4292             if (LOCATION_MODE.equals(name)) {
   4293                 // HACK ALERT: temporary hack to work around b/10491283.
   4294                 // TODO: once b/10491283 fixed, remove this hack
   4295                 return setLocationModeForUser(resolver, Integer.parseInt(value), userHandle);
   4296             }
   4297             if (MOVED_TO_GLOBAL.contains(name)) {
   4298                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
   4299                         + " to android.provider.Settings.Global");
   4300                 return Global.putStringForUser(resolver, name, value, userHandle);
   4301             }
   4302             return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
   4303         }
   4304 
   4305         /**
   4306          * Construct the content URI for a particular name/value pair,
   4307          * useful for monitoring changes with a ContentObserver.
   4308          * @param name to look up in the table
   4309          * @return the corresponding content URI, or null if not present
   4310          */
   4311         public static Uri getUriFor(String name) {
   4312             if (MOVED_TO_GLOBAL.contains(name)) {
   4313                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
   4314                         + " to android.provider.Settings.Global, returning global URI.");
   4315                 return Global.getUriFor(Global.CONTENT_URI, name);
   4316             }
   4317             return getUriFor(CONTENT_URI, name);
   4318         }
   4319 
   4320         /**
   4321          * Convenience function for retrieving a single secure settings value
   4322          * as an integer.  Note that internally setting values are always
   4323          * stored as strings; this function converts the string to an integer
   4324          * for you.  The default value will be returned if the setting is
   4325          * not defined or not an integer.
   4326          *
   4327          * @param cr The ContentResolver to access.
   4328          * @param name The name of the setting to retrieve.
   4329          * @param def Value to return if the setting is not defined.
   4330          *
   4331          * @return The setting's current value, or 'def' if it is not defined
   4332          * or not a valid integer.
   4333          */
   4334         public static int getInt(ContentResolver cr, String name, int def) {
   4335             return getIntForUser(cr, name, def, UserHandle.myUserId());
   4336         }
   4337 
   4338         /** @hide */
   4339         public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
   4340             if (LOCATION_MODE.equals(name)) {
   4341                 // HACK ALERT: temporary hack to work around b/10491283.
   4342                 // TODO: once b/10491283 fixed, remove this hack
   4343                 return getLocationModeForUser(cr, userHandle);
   4344             }
   4345             String v = getStringForUser(cr, name, userHandle);
   4346             try {
   4347                 return v != null ? Integer.parseInt(v) : def;
   4348             } catch (NumberFormatException e) {
   4349                 return def;
   4350             }
   4351         }
   4352 
   4353         /**
   4354          * Convenience function for retrieving a single secure settings value
   4355          * as an integer.  Note that internally setting values are always
   4356          * stored as strings; this function converts the string to an integer
   4357          * for you.
   4358          * <p>
   4359          * This version does not take a default value.  If the setting has not
   4360          * been set, or the string value is not a number,
   4361          * it throws {@link SettingNotFoundException}.
   4362          *
   4363          * @param cr The ContentResolver to access.
   4364          * @param name The name of the setting to retrieve.
   4365          *
   4366          * @throws SettingNotFoundException Thrown if a setting by the given
   4367          * name can't be found or the setting value is not an integer.
   4368          *
   4369          * @return The setting's current value.
   4370          */
   4371         public static int getInt(ContentResolver cr, String name)
   4372                 throws SettingNotFoundException {
   4373             return getIntForUser(cr, name, UserHandle.myUserId());
   4374         }
   4375 
   4376         /** @hide */
   4377         public static int getIntForUser(ContentResolver cr, String name, int userHandle)
   4378                 throws SettingNotFoundException {
   4379             if (LOCATION_MODE.equals(name)) {
   4380                 // HACK ALERT: temporary hack to work around b/10491283.
   4381                 // TODO: once b/10491283 fixed, remove this hack
   4382                 return getLocationModeForUser(cr, userHandle);
   4383             }
   4384             String v = getStringForUser(cr, name, userHandle);
   4385             try {
   4386                 return Integer.parseInt(v);
   4387             } catch (NumberFormatException e) {
   4388                 throw new SettingNotFoundException(name);
   4389             }
   4390         }
   4391 
   4392         /**
   4393          * Convenience function for updating a single settings value as an
   4394          * integer. This will either create a new entry in the table if the
   4395          * given name does not exist, or modify the value of the existing row
   4396          * with that name.  Note that internally setting values are always
   4397          * stored as strings, so this function converts the given value to a
   4398          * string before storing it.
   4399          *
   4400          * @param cr The ContentResolver to access.
   4401          * @param name The name of the setting to modify.
   4402          * @param value The new value for the setting.
   4403          * @return true if the value was set, false on database errors
   4404          */
   4405         public static boolean putInt(ContentResolver cr, String name, int value) {
   4406             return putIntForUser(cr, name, value, UserHandle.myUserId());
   4407         }
   4408 
   4409         /** @hide */
   4410         public static boolean putIntForUser(ContentResolver cr, String name, int value,
   4411                 int userHandle) {
   4412             return putStringForUser(cr, name, Integer.toString(value), userHandle);
   4413         }
   4414 
   4415         /**
   4416          * Convenience function for retrieving a single secure settings value
   4417          * as a {@code long}.  Note that internally setting values are always
   4418          * stored as strings; this function converts the string to a {@code long}
   4419          * for you.  The default value will be returned if the setting is
   4420          * not defined or not a {@code long}.
   4421          *
   4422          * @param cr The ContentResolver to access.
   4423          * @param name The name of the setting to retrieve.
   4424          * @param def Value to return if the setting is not defined.
   4425          *
   4426          * @return The setting's current value, or 'def' if it is not defined
   4427          * or not a valid {@code long}.
   4428          */
   4429         public static long getLong(ContentResolver cr, String name, long def) {
   4430             return getLongForUser(cr, name, def, UserHandle.myUserId());
   4431         }
   4432 
   4433         /** @hide */
   4434         public static long getLongForUser(ContentResolver cr, String name, long def,
   4435                 int userHandle) {
   4436             String valString = getStringForUser(cr, name, userHandle);
   4437             long value;
   4438             try {
   4439                 value = valString != null ? Long.parseLong(valString) : def;
   4440             } catch (NumberFormatException e) {
   4441                 value = def;
   4442             }
   4443             return value;
   4444         }
   4445 
   4446         /**
   4447          * Convenience function for retrieving a single secure settings value
   4448          * as a {@code long}.  Note that internally setting values are always
   4449          * stored as strings; this function converts the string to a {@code long}
   4450          * for you.
   4451          * <p>
   4452          * This version does not take a default value.  If the setting has not
   4453          * been set, or the string value is not a number,
   4454          * it throws {@link SettingNotFoundException}.
   4455          *
   4456          * @param cr The ContentResolver to access.
   4457          * @param name The name of the setting to retrieve.
   4458          *
   4459          * @return The setting's current value.
   4460          * @throws SettingNotFoundException Thrown if a setting by the given
   4461          * name can't be found or the setting value is not an integer.
   4462          */
   4463         public static long getLong(ContentResolver cr, String name)
   4464                 throws SettingNotFoundException {
   4465             return getLongForUser(cr, name, UserHandle.myUserId());
   4466         }
   4467 
   4468         /** @hide */
   4469         public static long getLongForUser(ContentResolver cr, String name, int userHandle)
   4470                 throws SettingNotFoundException {
   4471             String valString = getStringForUser(cr, name, userHandle);
   4472             try {
   4473                 return Long.parseLong(valString);
   4474             } catch (NumberFormatException e) {
   4475                 throw new SettingNotFoundException(name);
   4476             }
   4477         }
   4478 
   4479         /**
   4480          * Convenience function for updating a secure settings value as a long
   4481          * integer. This will either create a new entry in the table if the
   4482          * given name does not exist, or modify the value of the existing row
   4483          * with that name.  Note that internally setting values are always
   4484          * stored as strings, so this function converts the given value to a
   4485          * string before storing it.
   4486          *
   4487          * @param cr The ContentResolver to access.
   4488          * @param name The name of the setting to modify.
   4489          * @param value The new value for the setting.
   4490          * @return true if the value was set, false on database errors
   4491          */
   4492         public static boolean putLong(ContentResolver cr, String name, long value) {
   4493             return putLongForUser(cr, name, value, UserHandle.myUserId());
   4494         }
   4495 
   4496         /** @hide */
   4497         public static boolean putLongForUser(ContentResolver cr, String name, long value,
   4498                 int userHandle) {
   4499             return putStringForUser(cr, name, Long.toString(value), userHandle);
   4500         }
   4501 
   4502         /**
   4503          * Convenience function for retrieving a single secure settings value
   4504          * as a floating point number.  Note that internally setting values are
   4505          * always stored as strings; this function converts the string to an
   4506          * float for you. The default value will be returned if the setting
   4507          * is not defined or not a valid float.
   4508          *
   4509          * @param cr The ContentResolver to access.
   4510          * @param name The name of the setting to retrieve.
   4511          * @param def Value to return if the setting is not defined.
   4512          *
   4513          * @return The setting's current value, or 'def' if it is not defined
   4514          * or not a valid float.
   4515          */
   4516         public static float getFloat(ContentResolver cr, String name, float def) {
   4517             return getFloatForUser(cr, name, def, UserHandle.myUserId());
   4518         }
   4519 
   4520         /** @hide */
   4521         public static float getFloatForUser(ContentResolver cr, String name, float def,
   4522                 int userHandle) {
   4523             String v = getStringForUser(cr, name, userHandle);
   4524             try {
   4525                 return v != null ? Float.parseFloat(v) : def;
   4526             } catch (NumberFormatException e) {
   4527                 return def;
   4528             }
   4529         }
   4530 
   4531         /**
   4532          * Convenience function for retrieving a single secure settings value
   4533          * as a float.  Note that internally setting values are always
   4534          * stored as strings; this function converts the string to a float
   4535          * for you.
   4536          * <p>
   4537          * This version does not take a default value.  If the setting has not
   4538          * been set, or the string value is not a number,
   4539          * it throws {@link SettingNotFoundException}.
   4540          *
   4541          * @param cr The ContentResolver to access.
   4542          * @param name The name of the setting to retrieve.
   4543          *
   4544          * @throws SettingNotFoundException Thrown if a setting by the given
   4545          * name can't be found or the setting value is not a float.
   4546          *
   4547          * @return The setting's current value.
   4548          */
   4549         public static float getFloat(ContentResolver cr, String name)
   4550                 throws SettingNotFoundException {
   4551             return getFloatForUser(cr, name, UserHandle.myUserId());
   4552         }
   4553 
   4554         /** @hide */
   4555         public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
   4556                 throws SettingNotFoundException {
   4557             String v = getStringForUser(cr, name, userHandle);
   4558             if (v == null) {
   4559                 throw new SettingNotFoundException(name);
   4560             }
   4561             try {
   4562                 return Float.parseFloat(v);
   4563             } catch (NumberFormatException e) {
   4564                 throw new SettingNotFoundException(name);
   4565             }
   4566         }
   4567 
   4568         /**
   4569          * Convenience function for updating a single settings value as a
   4570          * floating point number. This will either create a new entry in the
   4571          * table if the given name does not exist, or modify the value of the
   4572          * existing row with that name.  Note that internally setting values
   4573          * are always stored as strings, so this function converts the given
   4574          * value to a string before storing it.
   4575          *
   4576          * @param cr The ContentResolver to access.
   4577          * @param name The name of the setting to modify.
   4578          * @param value The new value for the setting.
   4579          * @return true if the value was set, false on database errors
   4580          */
   4581         public static boolean putFloat(ContentResolver cr, String name, float value) {
   4582             return putFloatForUser(cr, name, value, UserHandle.myUserId());
   4583         }
   4584 
   4585         /** @hide */
   4586         public static boolean putFloatForUser(ContentResolver cr, String name, float value,
   4587                 int userHandle) {
   4588             return putStringForUser(cr, name, Float.toString(value), userHandle);
   4589         }
   4590 
   4591         /**
   4592          * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}
   4593          * instead
   4594          */
   4595         @Deprecated
   4596         public static final String DEVELOPMENT_SETTINGS_ENABLED =
   4597                 Global.DEVELOPMENT_SETTINGS_ENABLED;
   4598 
   4599         /**
   4600          * When the user has enable the option to have a "bug report" command
   4601          * in the power menu.
   4602          * @deprecated Use {@link android.provider.Settings.Global#BUGREPORT_IN_POWER_MENU} instead
   4603          * @hide
   4604          */
   4605         @Deprecated
   4606         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
   4607 
   4608         /**
   4609          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} instead
   4610          */
   4611         @Deprecated
   4612         public static final String ADB_ENABLED = Global.ADB_ENABLED;
   4613 
   4614         /**
   4615          * Setting to allow mock locations and location provider status to be injected into the
   4616          * LocationManager service for testing purposes during application development.  These
   4617          * locations and status values  override actual location and status information generated
   4618          * by network, gps, or other location providers.
   4619          *
   4620          * @deprecated This settings is not used anymore.
   4621          */
   4622         @Deprecated
   4623         public static final String ALLOW_MOCK_LOCATION = "mock_location";
   4624 
   4625         /**
   4626          * A 64-bit number (as a hex string) that is randomly
   4627          * generated when the user first sets up the device and should remain
   4628          * constant for the lifetime of the user's device. The value may
   4629          * change if a factory reset is performed on the device.
   4630          * <p class="note"><strong>Note:</strong> When a device has <a
   4631          * href="{@docRoot}about/versions/android-4.2.html#MultipleUsers">multiple users</a>
   4632          * (available on certain devices running Android 4.2 or higher), each user appears as a
   4633          * completely separate device, so the {@code ANDROID_ID} value is unique to each
   4634          * user.</p>
   4635          */
   4636         public static final String ANDROID_ID = "android_id";
   4637 
   4638         /**
   4639          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
   4640          */
   4641         @Deprecated
   4642         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
   4643 
   4644         /**
   4645          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
   4646          */
   4647         @Deprecated
   4648         public static final String DATA_ROAMING = Global.DATA_ROAMING;
   4649 
   4650         /**
   4651          * Setting to record the input method used by default, holding the ID
   4652          * of the desired method.
   4653          */
   4654         public static final String DEFAULT_INPUT_METHOD = "default_input_method";
   4655 
   4656         /**
   4657          * Setting to record the input method subtype used by default, holding the ID
   4658          * of the desired method.
   4659          */
   4660         public static final String SELECTED_INPUT_METHOD_SUBTYPE =
   4661                 "selected_input_method_subtype";
   4662 
   4663         /**
   4664          * Setting to record the history of input method subtype, holding the pair of ID of IME
   4665          * and its last used subtype.
   4666          * @hide
   4667          */
   4668         public static final String INPUT_METHODS_SUBTYPE_HISTORY =
   4669                 "input_methods_subtype_history";
   4670 
   4671         /**
   4672          * Setting to record the visibility of input method selector
   4673          */
   4674         public static final String INPUT_METHOD_SELECTOR_VISIBILITY =
   4675                 "input_method_selector_visibility";
   4676 
   4677         /**
   4678          * The currently selected voice interaction service flattened ComponentName.
   4679          * @hide
   4680          */
   4681         @TestApi
   4682         public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
   4683 
   4684         /**
   4685          * bluetooth HCI snoop log configuration
   4686          * @hide
   4687          */
   4688         public static final String BLUETOOTH_HCI_LOG =
   4689                 "bluetooth_hci_log";
   4690 
   4691         /**
   4692          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
   4693          */
   4694         @Deprecated
   4695         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
   4696 
   4697         /**
   4698          * Whether the current user has been set up via setup wizard (0 = false, 1 = true)
   4699          * @hide
   4700          */
   4701         public static final String USER_SETUP_COMPLETE = "user_setup_complete";
   4702 
   4703         /**
   4704          * Prefix for category name that marks whether a suggested action from that category was
   4705          * completed.
   4706          * @hide
   4707          */
   4708         public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category.";
   4709 
   4710         /**
   4711          * List of input methods that are currently enabled.  This is a string
   4712          * containing the IDs of all enabled input methods, each ID separated
   4713          * by ':'.
   4714          */
   4715         public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
   4716 
   4717         /**
   4718          * List of system input methods that are currently disabled.  This is a string
   4719          * containing the IDs of all disabled input methods, each ID separated
   4720          * by ':'.
   4721          * @hide
   4722          */
   4723         public static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods";
   4724 
   4725         /**
   4726          * Whether to show the IME when a hard keyboard is connected. This is a boolean that
   4727          * determines if the IME should be shown when a hard keyboard is attached.
   4728          * @hide
   4729          */
   4730         public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
   4731 
   4732         /**
   4733          * Host name and port for global http proxy. Uses ':' seperator for
   4734          * between host and port.
   4735          *
   4736          * @deprecated Use {@link Global#HTTP_PROXY}
   4737          */
   4738         @Deprecated
   4739         public static final String HTTP_PROXY = Global.HTTP_PROXY;
   4740 
   4741         /**
   4742          * Package designated as always-on VPN provider.
   4743          *
   4744          * @hide
   4745          */
   4746         public static final String ALWAYS_ON_VPN_APP = "always_on_vpn_app";
   4747 
   4748         /**
   4749          * Whether to block networking outside of VPN connections while always-on is set.
   4750          * @see #ALWAYS_ON_VPN_APP
   4751          *
   4752          * @hide
   4753          */
   4754         public static final String ALWAYS_ON_VPN_LOCKDOWN = "always_on_vpn_lockdown";
   4755 
   4756         /**
   4757          * Whether applications can be installed for this user via the system's
   4758          * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism.
   4759          *
   4760          * <p>1 = permit app installation via the system package installer intent
   4761          * <p>0 = do not allow use of the package installer
   4762          */
   4763         public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
   4764 
   4765         /**
   4766          * Comma-separated list of location providers that activities may access. Do not rely on
   4767          * this value being present in settings.db or on ContentObserver notifications on the
   4768          * corresponding Uri.
   4769          *
   4770          * @deprecated use {@link #LOCATION_MODE} and
   4771          * {@link LocationManager#MODE_CHANGED_ACTION} (or
   4772          * {@link LocationManager#PROVIDERS_CHANGED_ACTION})
   4773          */
   4774         @Deprecated
   4775         public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
   4776 
   4777         /**
   4778          * The degree of location access enabled by the user.
   4779          * <p>
   4780          * When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link
   4781          * #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link
   4782          * #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link
   4783          * #getInt(ContentResolver, String)}, the caller must gracefully handle additional location
   4784          * modes that might be added in the future.
   4785          * <p>
   4786          * Note: do not rely on this value being present in settings.db or on ContentObserver
   4787          * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION}
   4788          * to receive changes in this value.
   4789          */
   4790         public static final String LOCATION_MODE = "location_mode";
   4791         /**
   4792          * Stores the previous location mode when {@link #LOCATION_MODE} is set to
   4793          * {@link #LOCATION_MODE_OFF}
   4794          * @hide
   4795          */
   4796         public static final String LOCATION_PREVIOUS_MODE = "location_previous_mode";
   4797 
   4798         /**
   4799          * Sets all location providers to the previous states before location was turned off.
   4800          * @hide
   4801          */
   4802         public static final int LOCATION_MODE_PREVIOUS = -1;
   4803         /**
   4804          * Location access disabled.
   4805          */
   4806         public static final int LOCATION_MODE_OFF = 0;
   4807         /**
   4808          * Network Location Provider disabled, but GPS and other sensors enabled.
   4809          */
   4810         public static final int LOCATION_MODE_SENSORS_ONLY = 1;
   4811         /**
   4812          * Reduced power usage, such as limiting the number of GPS updates per hour. Requests
   4813          * with {@link android.location.Criteria#POWER_HIGH} may be downgraded to
   4814          * {@link android.location.Criteria#POWER_MEDIUM}.
   4815          */
   4816         public static final int LOCATION_MODE_BATTERY_SAVING = 2;
   4817         /**
   4818          * Best-effort location computation allowed.
   4819          */
   4820         public static final int LOCATION_MODE_HIGH_ACCURACY = 3;
   4821 
   4822         /**
   4823          * A flag containing settings used for biometric weak
   4824          * @hide
   4825          */
   4826         @Deprecated
   4827         public static final String LOCK_BIOMETRIC_WEAK_FLAGS =
   4828                 "lock_biometric_weak_flags";
   4829 
   4830         /**
   4831          * Whether lock-to-app will lock the keyguard when exiting.
   4832          * @hide
   4833          */
   4834         public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked";
   4835 
   4836         /**
   4837          * Whether autolock is enabled (0 = false, 1 = true)
   4838          *
   4839          * @deprecated Use {@link android.app.KeyguardManager} to determine the state and security
   4840          *             level of the keyguard. Accessing this setting from an app that is targeting
   4841          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
   4842          */
   4843         @Deprecated
   4844         public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
   4845 
   4846         /**
   4847          * Whether lock pattern is visible as user enters (0 = false, 1 = true)
   4848          *
   4849          * @deprecated Accessing this setting from an app that is targeting
   4850          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
   4851          */
   4852         @Deprecated
   4853         public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
   4854 
   4855         /**
   4856          * Whether lock pattern will vibrate as user enters (0 = false, 1 =
   4857          * true)
   4858          *
   4859          * @deprecated Starting in {@link VERSION_CODES#JELLY_BEAN_MR1} the
   4860          *             lockscreen uses
   4861          *             {@link Settings.System#HAPTIC_FEEDBACK_ENABLED}.
   4862          *             Accessing this setting from an app that is targeting
   4863          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
   4864          */
   4865         @Deprecated
   4866         public static final String
   4867                 LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
   4868 
   4869         /**
   4870          * This preference allows the device to be locked given time after screen goes off,
   4871          * subject to current DeviceAdmin policy limits.
   4872          * @hide
   4873          */
   4874         public static final String LOCK_SCREEN_LOCK_AFTER_TIMEOUT = "lock_screen_lock_after_timeout";
   4875 
   4876 
   4877         /**
   4878          * This preference contains the string that shows for owner info on LockScreen.
   4879          * @hide
   4880          * @deprecated
   4881          */
   4882         public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info";
   4883 
   4884         /**
   4885          * Ids of the user-selected appwidgets on the lockscreen (comma-delimited).
   4886          * @hide
   4887          */
   4888         @Deprecated
   4889         public static final String LOCK_SCREEN_APPWIDGET_IDS =
   4890             "lock_screen_appwidget_ids";
   4891 
   4892         /**
   4893          * Id of the appwidget shown on the lock screen when appwidgets are disabled.
   4894          * @hide
   4895          */
   4896         @Deprecated
   4897         public static final String LOCK_SCREEN_FALLBACK_APPWIDGET_ID =
   4898             "lock_screen_fallback_appwidget_id";
   4899 
   4900         /**
   4901          * Index of the lockscreen appwidget to restore, -1 if none.
   4902          * @hide
   4903          */
   4904         @Deprecated
   4905         public static final String LOCK_SCREEN_STICKY_APPWIDGET =
   4906             "lock_screen_sticky_appwidget";
   4907 
   4908         /**
   4909          * This preference enables showing the owner info on LockScreen.
   4910          * @hide
   4911          * @deprecated
   4912          */
   4913         public static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
   4914             "lock_screen_owner_info_enabled";
   4915 
   4916         /**
   4917          * When set by a user, allows notifications to be shown atop a securely locked screen
   4918          * in their full "private" form (same as when the device is unlocked).
   4919          * @hide
   4920          */
   4921         public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
   4922                 "lock_screen_allow_private_notifications";
   4923 
   4924         /**
   4925          * When set by a user, allows notification remote input atop a securely locked screen
   4926          * without having to unlock
   4927          * @hide
   4928          */
   4929         public static final String LOCK_SCREEN_ALLOW_REMOTE_INPUT =
   4930                 "lock_screen_allow_remote_input";
   4931 
   4932         /**
   4933          * Set by the system to track if the user needs to see the call to action for
   4934          * the lockscreen notification policy.
   4935          * @hide
   4936          */
   4937         public static final String SHOW_NOTE_ABOUT_NOTIFICATION_HIDING =
   4938                 "show_note_about_notification_hiding";
   4939 
   4940         /**
   4941          * Set to 1 by the system after trust agents have been initialized.
   4942          * @hide
   4943          */
   4944         public static final String TRUST_AGENTS_INITIALIZED =
   4945                 "trust_agents_initialized";
   4946 
   4947         /**
   4948          * The Logging ID (a unique 64-bit value) as a hex string.
   4949          * Used as a pseudonymous identifier for logging.
   4950          * @deprecated This identifier is poorly initialized and has
   4951          * many collisions.  It should not be used.
   4952          */
   4953         @Deprecated
   4954         public static final String LOGGING_ID = "logging_id";
   4955 
   4956         /**
   4957          * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
   4958          */
   4959         @Deprecated
   4960         public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
   4961 
   4962         /**
   4963          * No longer supported.
   4964          */
   4965         public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
   4966 
   4967         /**
   4968          * No longer supported.
   4969          */
   4970         public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
   4971 
   4972         /**
   4973          * No longer supported.
   4974          */
   4975         public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
   4976 
   4977         /**
   4978          * Settings classname to launch when Settings is clicked from All
   4979          * Applications.  Needed because of user testing between the old
   4980          * and new Settings apps.
   4981          */
   4982         // TODO: 881807
   4983         public static final String SETTINGS_CLASSNAME = "settings_classname";
   4984 
   4985         /**
   4986          * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
   4987          */
   4988         @Deprecated
   4989         public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
   4990 
   4991         /**
   4992          * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
   4993          */
   4994         @Deprecated
   4995         public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
   4996 
   4997         /**
   4998          * If accessibility is enabled.
   4999          */
   5000         public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled";
   5001 
   5002         /**
   5003          * If touch exploration is enabled.
   5004          */
   5005         public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
   5006 
   5007         /**
   5008          * List of the enabled accessibility providers.
   5009          */
   5010         public static final String ENABLED_ACCESSIBILITY_SERVICES =
   5011             "enabled_accessibility_services";
   5012 
   5013         /**
   5014          * List of the accessibility services to which the user has granted
   5015          * permission to put the device into touch exploration mode.
   5016          *
   5017          * @hide
   5018          */
   5019         public static final String TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES =
   5020             "touch_exploration_granted_accessibility_services";
   5021 
   5022         /**
   5023          * Whether to speak passwords while in accessibility mode.
   5024          */
   5025         public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
   5026 
   5027         /**
   5028          * Whether to draw text with high contrast while in accessibility mode.
   5029          *
   5030          * @hide
   5031          */
   5032         public static final String ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED =
   5033                 "high_text_contrast_enabled";
   5034 
   5035         /**
   5036          * If injection of accessibility enhancing JavaScript screen-reader
   5037          * is enabled.
   5038          * <p>
   5039          *   Note: The JavaScript based screen-reader is served by the
   5040          *   Google infrastructure and enable users with disabilities to
   5041          *   efficiently navigate in and explore web content.
   5042          * </p>
   5043          * <p>
   5044          *   This property represents a boolean value.
   5045          * </p>
   5046          * @hide
   5047          */
   5048         public static final String ACCESSIBILITY_SCRIPT_INJECTION =
   5049             "accessibility_script_injection";
   5050 
   5051         /**
   5052          * The URL for the injected JavaScript based screen-reader used
   5053          * for providing accessibility of content in WebView.
   5054          * <p>
   5055          *   Note: The JavaScript based screen-reader is served by the
   5056          *   Google infrastructure and enable users with disabilities to
   5057          *   efficiently navigate in and explore web content.
   5058          * </p>
   5059          * <p>
   5060          *   This property represents a string value.
   5061          * </p>
   5062          * @hide
   5063          */
   5064         public static final String ACCESSIBILITY_SCREEN_READER_URL =
   5065             "accessibility_script_injection_url";
   5066 
   5067         /**
   5068          * Key bindings for navigation in built-in accessibility support for web content.
   5069          * <p>
   5070          *   Note: These key bindings are for the built-in accessibility navigation for
   5071          *   web content which is used as a fall back solution if JavaScript in a WebView
   5072          *   is not enabled or the user has not opted-in script injection from Google.
   5073          * </p>
   5074          * <p>
   5075          *   The bindings are separated by semi-colon. A binding is a mapping from
   5076          *   a key to a sequence of actions (for more details look at
   5077          *   android.webkit.AccessibilityInjector). A key is represented as the hexademical
   5078          *   string representation of an integer obtained from a meta state (optional) shifted
   5079          *   sixteen times left and bitwise ored with a key code. An action is represented
   5080          *   as a hexademical string representation of an integer where the first two digits
   5081          *   are navigation action index, the second, the third, and the fourth digit pairs
   5082          *   represent the action arguments. The separate actions in a binding are colon
   5083          *   separated. The key and the action sequence it maps to are separated by equals.
   5084          * </p>
   5085          * <p>
   5086          *   For example, the binding below maps the DPAD right button to traverse the
   5087          *   current navigation axis once without firing an accessibility event and to
   5088          *   perform the same traversal again but to fire an event:
   5089          *   <code>
   5090          *     0x16=0x01000100:0x01000101;
   5091          *   </code>
   5092          * </p>
   5093          * <p>
   5094          *   The goal of this binding is to enable dynamic rebinding of keys to
   5095          *   navigation actions for web content without requiring a framework change.
   5096          * </p>
   5097          * <p>
   5098          *   This property represents a string value.
   5099          * </p>
   5100          * @hide
   5101          */
   5102         public static final String ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS =
   5103             "accessibility_web_content_key_bindings";
   5104 
   5105         /**
   5106          * Setting that specifies whether the display magnification is enabled.
   5107          * Display magnifications allows the user to zoom in the display content
   5108          * and is targeted to low vision users. The current magnification scale
   5109          * is controlled by {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}.
   5110          *
   5111          * @hide
   5112          */
   5113         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED =
   5114                 "accessibility_display_magnification_enabled";
   5115 
   5116         /**
   5117          * Setting that specifies what the display magnification scale is.
   5118          * Display magnifications allows the user to zoom in the display
   5119          * content and is targeted to low vision users. Whether a display
   5120          * magnification is performed is controlled by
   5121          * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED}
   5122          *
   5123          * @hide
   5124          */
   5125         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE =
   5126                 "accessibility_display_magnification_scale";
   5127 
   5128         /**
   5129          * Setting that specifies whether the display magnification should be
   5130          * automatically updated. If this fearture is enabled the system will
   5131          * exit magnification mode or pan the viewport when a context change
   5132          * occurs. For example, on staring a new activity or rotating the screen,
   5133          * the system may zoom out so the user can see the new context he is in.
   5134          * Another example is on showing a window that is not visible in the
   5135          * magnified viewport the system may pan the viewport to make the window
   5136          * the has popped up so the user knows that the context has changed.
   5137          * Whether a screen magnification is performed is controlled by
   5138          * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED}
   5139          *
   5140          * @hide
   5141          */
   5142         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE =
   5143                 "accessibility_display_magnification_auto_update";
   5144 
   5145         /**
   5146          * Setting that specifies what mode the soft keyboard is in (default or hidden). Can be
   5147          * modified from an AccessibilityService using the SoftKeyboardController.
   5148          *
   5149          * @hide
   5150          */
   5151         public static final String ACCESSIBILITY_SOFT_KEYBOARD_MODE =
   5152                 "accessibility_soft_keyboard_mode";
   5153 
   5154         /**
   5155          * Default soft keyboard behavior.
   5156          *
   5157          * @hide
   5158          */
   5159         public static final int SHOW_MODE_AUTO = 0;
   5160 
   5161         /**
   5162          * Soft keyboard is never shown.
   5163          *
   5164          * @hide
   5165          */
   5166         public static final int SHOW_MODE_HIDDEN = 1;
   5167 
   5168         /**
   5169          * Setting that specifies whether timed text (captions) should be
   5170          * displayed in video content. Text display properties are controlled by
   5171          * the following settings:
   5172          * <ul>
   5173          * <li>{@link #ACCESSIBILITY_CAPTIONING_LOCALE}
   5174          * <li>{@link #ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR}
   5175          * <li>{@link #ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR}
   5176          * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_COLOR}
   5177          * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_TYPE}
   5178          * <li>{@link #ACCESSIBILITY_CAPTIONING_TYPEFACE}
   5179          * <li>{@link #ACCESSIBILITY_CAPTIONING_FONT_SCALE}
   5180          * </ul>
   5181          *
   5182          * @hide
   5183          */
   5184         public static final String ACCESSIBILITY_CAPTIONING_ENABLED =
   5185                 "accessibility_captioning_enabled";
   5186 
   5187         /**
   5188          * Setting that specifies the language for captions as a locale string,
   5189          * e.g. en_US.
   5190          *
   5191          * @see java.util.Locale#toString
   5192          * @hide
   5193          */
   5194         public static final String ACCESSIBILITY_CAPTIONING_LOCALE =
   5195                 "accessibility_captioning_locale";
   5196 
   5197         /**
   5198          * Integer property that specifies the preset style for captions, one
   5199          * of:
   5200          * <ul>
   5201          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESET_CUSTOM}
   5202          * <li>a valid index of {@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESETS}
   5203          * </ul>
   5204          *
   5205          * @see java.util.Locale#toString
   5206          * @hide
   5207          */
   5208         public static final String ACCESSIBILITY_CAPTIONING_PRESET =
   5209                 "accessibility_captioning_preset";
   5210 
   5211         /**
   5212          * Integer property that specifes the background color for captions as a
   5213          * packed 32-bit color.
   5214          *
   5215          * @see android.graphics.Color#argb
   5216          * @hide
   5217          */
   5218         public static final String ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR =
   5219                 "accessibility_captioning_background_color";
   5220 
   5221         /**
   5222          * Integer property that specifes the foreground color for captions as a
   5223          * packed 32-bit color.
   5224          *
   5225          * @see android.graphics.Color#argb
   5226          * @hide
   5227          */
   5228         public static final String ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR =
   5229                 "accessibility_captioning_foreground_color";
   5230 
   5231         /**
   5232          * Integer property that specifes the edge type for captions, one of:
   5233          * <ul>
   5234          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_NONE}
   5235          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_OUTLINE}
   5236          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_DROP_SHADOW}
   5237          * </ul>
   5238          *
   5239          * @see #ACCESSIBILITY_CAPTIONING_EDGE_COLOR
   5240          * @hide
   5241          */
   5242         public static final String ACCESSIBILITY_CAPTIONING_EDGE_TYPE =
   5243                 "accessibility_captioning_edge_type";
   5244 
   5245         /**
   5246          * Integer property that specifes the edge color for captions as a
   5247          * packed 32-bit color.
   5248          *
   5249          * @see #ACCESSIBILITY_CAPTIONING_EDGE_TYPE
   5250          * @see android.graphics.Color#argb
   5251          * @hide
   5252          */
   5253         public static final String ACCESSIBILITY_CAPTIONING_EDGE_COLOR =
   5254                 "accessibility_captioning_edge_color";
   5255 
   5256         /**
   5257          * Integer property that specifes the window color for captions as a
   5258          * packed 32-bit color.
   5259          *
   5260          * @see android.graphics.Color#argb
   5261          * @hide
   5262          */
   5263         public static final String ACCESSIBILITY_CAPTIONING_WINDOW_COLOR =
   5264                 "accessibility_captioning_window_color";
   5265 
   5266         /**
   5267          * String property that specifies the typeface for captions, one of:
   5268          * <ul>
   5269          * <li>DEFAULT
   5270          * <li>MONOSPACE
   5271          * <li>SANS_SERIF
   5272          * <li>SERIF
   5273          * </ul>
   5274          *
   5275          * @see android.graphics.Typeface
   5276          * @hide
   5277          */
   5278         public static final String ACCESSIBILITY_CAPTIONING_TYPEFACE =
   5279                 "accessibility_captioning_typeface";
   5280 
   5281         /**
   5282          * Floating point property that specifies font scaling for captions.
   5283          *
   5284          * @hide
   5285          */
   5286         public static final String ACCESSIBILITY_CAPTIONING_FONT_SCALE =
   5287                 "accessibility_captioning_font_scale";
   5288 
   5289         /**
   5290          * Setting that specifies whether display color inversion is enabled.
   5291          */
   5292         public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED =
   5293                 "accessibility_display_inversion_enabled";
   5294 
   5295         /**
   5296          * Setting that specifies whether display color space adjustment is
   5297          * enabled.
   5298          *
   5299          * @hide
   5300          */
   5301         public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED =
   5302                 "accessibility_display_daltonizer_enabled";
   5303 
   5304         /**
   5305          * Integer property that specifies the type of color space adjustment to
   5306          * perform. Valid values are defined in AccessibilityManager.
   5307          *
   5308          * @hide
   5309          */
   5310         public static final String ACCESSIBILITY_DISPLAY_DALTONIZER =
   5311                 "accessibility_display_daltonizer";
   5312 
   5313         /**
   5314          * Setting that specifies whether automatic click when the mouse pointer stops moving is
   5315          * enabled.
   5316          *
   5317          * @hide
   5318          */
   5319         public static final String ACCESSIBILITY_AUTOCLICK_ENABLED =
   5320                 "accessibility_autoclick_enabled";
   5321 
   5322         /**
   5323          * Integer setting specifying amount of time in ms the mouse pointer has to stay still
   5324          * before performing click when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set.
   5325          *
   5326          * @see #ACCESSIBILITY_AUTOCLICK_ENABLED
   5327          * @hide
   5328          */
   5329         public static final String ACCESSIBILITY_AUTOCLICK_DELAY =
   5330                 "accessibility_autoclick_delay";
   5331 
   5332         /**
   5333          * Whether or not larger size icons are used for the pointer of mouse/trackpad for
   5334          * accessibility.
   5335          * (0 = false, 1 = true)
   5336          * @hide
   5337          */
   5338         public static final String ACCESSIBILITY_LARGE_POINTER_ICON =
   5339                 "accessibility_large_pointer_icon";
   5340 
   5341         /**
   5342          * The timeout for considering a press to be a long press in milliseconds.
   5343          * @hide
   5344          */
   5345         public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
   5346 
   5347         /**
   5348          * List of the enabled print services.
   5349          *
   5350          * N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade
   5351          * from pre-N.
   5352          *
   5353          * @hide
   5354          */
   5355         public static final String ENABLED_PRINT_SERVICES =
   5356             "enabled_print_services";
   5357 
   5358         /**
   5359          * List of the disabled print services.
   5360          *
   5361          * @hide
   5362          */
   5363         public static final String DISABLED_PRINT_SERVICES =
   5364             "disabled_print_services";
   5365 
   5366         /**
   5367          * The saved value for WindowManagerService.setForcedDisplayDensity()
   5368          * formatted as a single integer representing DPI. If unset, then use
   5369          * the real display density.
   5370          *
   5371          * @hide
   5372          */
   5373         public static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
   5374 
   5375         /**
   5376          * Setting to always use the default text-to-speech settings regardless
   5377          * of the application settings.
   5378          * 1 = override application settings,
   5379          * 0 = use application settings (if specified).
   5380          *
   5381          * @deprecated  The value of this setting is no longer respected by
   5382          * the framework text to speech APIs as of the Ice Cream Sandwich release.
   5383          */
   5384         @Deprecated
   5385         public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
   5386 
   5387         /**
   5388          * Default text-to-speech engine speech rate. 100 = 1x
   5389          */
   5390         public static final String TTS_DEFAULT_RATE = "tts_default_rate";
   5391 
   5392         /**
   5393          * Default text-to-speech engine pitch. 100 = 1x
   5394          */
   5395         public static final String TTS_DEFAULT_PITCH = "tts_default_pitch";
   5396 
   5397         /**
   5398          * Default text-to-speech engine.
   5399          */
   5400         public static final String TTS_DEFAULT_SYNTH = "tts_default_synth";
   5401 
   5402         /**
   5403          * Default text-to-speech language.
   5404          *
   5405          * @deprecated this setting is no longer in use, as of the Ice Cream
   5406          * Sandwich release. Apps should never need to read this setting directly,
   5407          * instead can query the TextToSpeech framework classes for the default
   5408          * locale. {@link TextToSpeech#getLanguage()}.
   5409          */
   5410         @Deprecated
   5411         public static final String TTS_DEFAULT_LANG = "tts_default_lang";
   5412 
   5413         /**
   5414          * Default text-to-speech country.
   5415          *
   5416          * @deprecated this setting is no longer in use, as of the Ice Cream
   5417          * Sandwich release. Apps should never need to read this setting directly,
   5418          * instead can query the TextToSpeech framework classes for the default
   5419          * locale. {@link TextToSpeech#getLanguage()}.
   5420          */
   5421         @Deprecated
   5422         public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
   5423 
   5424         /**
   5425          * Default text-to-speech locale variant.
   5426          *
   5427          * @deprecated this setting is no longer in use, as of the Ice Cream
   5428          * Sandwich release. Apps should never need to read this setting directly,
   5429          * instead can query the TextToSpeech framework classes for the
   5430          * locale that is in use {@link TextToSpeech#getLanguage()}.
   5431          */
   5432         @Deprecated
   5433         public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
   5434 
   5435         /**
   5436          * Stores the default tts locales on a per engine basis. Stored as
   5437          * a comma seperated list of values, each value being of the form
   5438          * {@code engine_name:locale} for example,
   5439          * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}. This
   5440          * supersedes {@link #TTS_DEFAULT_LANG}, {@link #TTS_DEFAULT_COUNTRY} and
   5441          * {@link #TTS_DEFAULT_VARIANT}. Apps should never need to read this
   5442          * setting directly, and can query the TextToSpeech framework classes
   5443          * for the locale that is in use.
   5444          *
   5445          * @hide
   5446          */
   5447         public static final String TTS_DEFAULT_LOCALE = "tts_default_locale";
   5448 
   5449         /**
   5450          * Space delimited list of plugin packages that are enabled.
   5451          */
   5452         public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
   5453 
   5454         /**
   5455          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON}
   5456          * instead.
   5457          */
   5458         @Deprecated
   5459         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
   5460                 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
   5461 
   5462         /**
   5463          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY}
   5464          * instead.
   5465          */
   5466         @Deprecated
   5467         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
   5468                 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
   5469 
   5470         /**
   5471          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
   5472          * instead.
   5473          */
   5474         @Deprecated
   5475         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT =
   5476                 Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
   5477 
   5478         /**
   5479          * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON}
   5480          * instead.
   5481          */
   5482         @Deprecated
   5483         public static final String WIFI_ON = Global.WIFI_ON;
   5484 
   5485         /**
   5486          * The acceptable packet loss percentage (range 0 - 100) before trying
   5487          * another AP on the same network.
   5488          * @deprecated This setting is not used.
   5489          */
   5490         @Deprecated
   5491         public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
   5492                 "wifi_watchdog_acceptable_packet_loss_percentage";
   5493 
   5494         /**
   5495          * The number of access points required for a network in order for the
   5496          * watchdog to monitor it.
   5497          * @deprecated This setting is not used.
   5498          */
   5499         @Deprecated
   5500         public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
   5501 
   5502         /**
   5503          * The delay between background checks.
   5504          * @deprecated This setting is not used.
   5505          */
   5506         @Deprecated
   5507         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
   5508                 "wifi_watchdog_background_check_delay_ms";
   5509 
   5510         /**
   5511          * Whether the Wi-Fi watchdog is enabled for background checking even
   5512          * after it thinks the user has connected to a good access point.
   5513          * @deprecated This setting is not used.
   5514          */
   5515         @Deprecated
   5516         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
   5517                 "wifi_watchdog_background_check_enabled";
   5518 
   5519         /**
   5520          * The timeout for a background ping
   5521          * @deprecated This setting is not used.
   5522          */
   5523         @Deprecated
   5524         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
   5525                 "wifi_watchdog_background_check_timeout_ms";
   5526 
   5527         /**
   5528          * The number of initial pings to perform that *may* be ignored if they
   5529          * fail. Again, if these fail, they will *not* be used in packet loss
   5530          * calculation. For example, one network always seemed to time out for
   5531          * the first couple pings, so this is set to 3 by default.
   5532          * @deprecated This setting is not used.
   5533          */
   5534         @Deprecated
   5535         public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
   5536             "wifi_watchdog_initial_ignored_ping_count";
   5537 
   5538         /**
   5539          * The maximum number of access points (per network) to attempt to test.
   5540          * If this number is reached, the watchdog will no longer monitor the
   5541          * initial connection state for the network. This is a safeguard for
   5542          * networks containing multiple APs whose DNS does not respond to pings.
   5543          * @deprecated This setting is not used.
   5544          */
   5545         @Deprecated
   5546         public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
   5547 
   5548         /**
   5549          * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
   5550          */
   5551         @Deprecated
   5552         public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
   5553 
   5554         /**
   5555          * A comma-separated list of SSIDs for which the Wi-Fi watchdog should be enabled.
   5556          * @deprecated This setting is not used.
   5557          */
   5558         @Deprecated
   5559         public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
   5560 
   5561         /**
   5562          * The number of pings to test if an access point is a good connection.
   5563          * @deprecated This setting is not used.
   5564          */
   5565         @Deprecated
   5566         public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
   5567 
   5568         /**
   5569          * The delay between pings.
   5570          * @deprecated This setting is not used.
   5571          */
   5572         @Deprecated
   5573         public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
   5574 
   5575         /**
   5576          * The timeout per ping.
   5577          * @deprecated This setting is not used.
   5578          */
   5579         @Deprecated
   5580         public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
   5581 
   5582         /**
   5583          * @deprecated Use
   5584          * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
   5585          */
   5586         @Deprecated
   5587         public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
   5588 
   5589         /**
   5590          * @deprecated Use
   5591          * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
   5592          */
   5593         @Deprecated
   5594         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
   5595                 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
   5596 
   5597         /**
   5598          * The number of milliseconds to hold on to a PendingIntent based request. This delay gives
   5599          * the receivers of the PendingIntent an opportunity to make a new network request before
   5600          * the Network satisfying the request is potentially removed.
   5601          *
   5602          * @hide
   5603          */
   5604         public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS =
   5605                 "connectivity_release_pending_intent_delay_ms";
   5606 
   5607         /**
   5608          * Whether background data usage is allowed.
   5609          *
   5610          * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH},
   5611          *             availability of background data depends on several
   5612          *             combined factors. When background data is unavailable,
   5613          *             {@link ConnectivityManager#getActiveNetworkInfo()} will
   5614          *             now appear disconnected.
   5615          */
   5616         @Deprecated
   5617         public static final String BACKGROUND_DATA = "background_data";
   5618 
   5619         /**
   5620          * Origins for which browsers should allow geolocation by default.
   5621          * The value is a space-separated list of origins.
   5622          */
   5623         public static final String ALLOWED_GEOLOCATION_ORIGINS
   5624                 = "allowed_geolocation_origins";
   5625 
   5626         /**
   5627          * The preferred TTY mode     0 = TTy Off, CDMA default
   5628          *                            1 = TTY Full
   5629          *                            2 = TTY HCO
   5630          *                            3 = TTY VCO
   5631          * @hide
   5632          */
   5633         public static final String PREFERRED_TTY_MODE =
   5634                 "preferred_tty_mode";
   5635 
   5636         /**
   5637          * Whether the enhanced voice privacy mode is enabled.
   5638          * 0 = normal voice privacy
   5639          * 1 = enhanced voice privacy
   5640          * @hide
   5641          */
   5642         public static final String ENHANCED_VOICE_PRIVACY_ENABLED = "enhanced_voice_privacy_enabled";
   5643 
   5644         /**
   5645          * Whether the TTY mode mode is enabled.
   5646          * 0 = disabled
   5647          * 1 = enabled
   5648          * @hide
   5649          */
   5650         public static final String TTY_MODE_ENABLED = "tty_mode_enabled";
   5651 
   5652         /**
   5653          * Controls whether settings backup is enabled.
   5654          * Type: int ( 0 = disabled, 1 = enabled )
   5655          * @hide
   5656          */
   5657         public static final String BACKUP_ENABLED = "backup_enabled";
   5658 
   5659         /**
   5660          * Controls whether application data is automatically restored from backup
   5661          * at install time.
   5662          * Type: int ( 0 = disabled, 1 = enabled )
   5663          * @hide
   5664          */
   5665         public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore";
   5666 
   5667         /**
   5668          * Indicates whether settings backup has been fully provisioned.
   5669          * Type: int ( 0 = unprovisioned, 1 = fully provisioned )
   5670          * @hide
   5671          */
   5672         public static final String BACKUP_PROVISIONED = "backup_provisioned";
   5673 
   5674         /**
   5675          * Component of the transport to use for backup/restore.
   5676          * @hide
   5677          */
   5678         public static final String BACKUP_TRANSPORT = "backup_transport";
   5679 
   5680         /**
   5681          * Version for which the setup wizard was last shown.  Bumped for
   5682          * each release when there is new setup information to show.
   5683          * @hide
   5684          */
   5685         public static final String LAST_SETUP_SHOWN = "last_setup_shown";
   5686 
   5687         /**
   5688          * The interval in milliseconds after which Wi-Fi is considered idle.
   5689          * When idle, it is possible for the device to be switched from Wi-Fi to
   5690          * the mobile data network.
   5691          * @hide
   5692          * @deprecated Use {@link android.provider.Settings.Global#WIFI_IDLE_MS}
   5693          * instead.
   5694          */
   5695         @Deprecated
   5696         public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS;
   5697 
   5698         /**
   5699          * The global search provider chosen by the user (if multiple global
   5700          * search providers are installed). This will be the provider returned
   5701          * by {@link SearchManager#getGlobalSearchActivity()} if it's still
   5702          * installed. This setting is stored as a flattened component name as
   5703          * per {@link ComponentName#flattenToString()}.
   5704          *
   5705          * @hide
   5706          */
   5707         public static final String SEARCH_GLOBAL_SEARCH_ACTIVITY =
   5708                 "search_global_search_activity";
   5709 
   5710         /**
   5711          * The number of promoted sources in GlobalSearch.
   5712          * @hide
   5713          */
   5714         public static final String SEARCH_NUM_PROMOTED_SOURCES = "search_num_promoted_sources";
   5715         /**
   5716          * The maximum number of suggestions returned by GlobalSearch.
   5717          * @hide
   5718          */
   5719         public static final String SEARCH_MAX_RESULTS_TO_DISPLAY = "search_max_results_to_display";
   5720         /**
   5721          * The number of suggestions GlobalSearch will ask each non-web search source for.
   5722          * @hide
   5723          */
   5724         public static final String SEARCH_MAX_RESULTS_PER_SOURCE = "search_max_results_per_source";
   5725         /**
   5726          * The number of suggestions the GlobalSearch will ask the web search source for.
   5727          * @hide
   5728          */
   5729         public static final String SEARCH_WEB_RESULTS_OVERRIDE_LIMIT =
   5730                 "search_web_results_override_limit";
   5731         /**
   5732          * The number of milliseconds that GlobalSearch will wait for suggestions from
   5733          * promoted sources before continuing with all other sources.
   5734          * @hide
   5735          */
   5736         public static final String SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS =
   5737                 "search_promoted_source_deadline_millis";
   5738         /**
   5739          * The number of milliseconds before GlobalSearch aborts search suggesiton queries.
   5740          * @hide
   5741          */
   5742         public static final String SEARCH_SOURCE_TIMEOUT_MILLIS = "search_source_timeout_millis";
   5743         /**
   5744          * The maximum number of milliseconds that GlobalSearch shows the previous results
   5745          * after receiving a new query.
   5746          * @hide
   5747          */
   5748         public static final String SEARCH_PREFILL_MILLIS = "search_prefill_millis";
   5749         /**
   5750          * The maximum age of log data used for shortcuts in GlobalSearch.
   5751          * @hide
   5752          */
   5753         public static final String SEARCH_MAX_STAT_AGE_MILLIS = "search_max_stat_age_millis";
   5754         /**
   5755          * The maximum age of log data used for source ranking in GlobalSearch.
   5756          * @hide
   5757          */
   5758         public static final String SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS =
   5759                 "search_max_source_event_age_millis";
   5760         /**
   5761          * The minimum number of impressions needed to rank a source in GlobalSearch.
   5762          * @hide
   5763          */
   5764         public static final String SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING =
   5765                 "search_min_impressions_for_source_ranking";
   5766         /**
   5767          * The minimum number of clicks needed to rank a source in GlobalSearch.
   5768          * @hide
   5769          */
   5770         public static final String SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING =
   5771                 "search_min_clicks_for_source_ranking";
   5772         /**
   5773          * The maximum number of shortcuts shown by GlobalSearch.
   5774          * @hide
   5775          */
   5776         public static final String SEARCH_MAX_SHORTCUTS_RETURNED = "search_max_shortcuts_returned";
   5777         /**
   5778          * The size of the core thread pool for suggestion queries in GlobalSearch.
   5779          * @hide
   5780          */
   5781         public static final String SEARCH_QUERY_THREAD_CORE_POOL_SIZE =
   5782                 "search_query_thread_core_pool_size";
   5783         /**
   5784          * The maximum size of the thread pool for suggestion queries in GlobalSearch.
   5785          * @hide
   5786          */
   5787         public static final String SEARCH_QUERY_THREAD_MAX_POOL_SIZE =
   5788                 "search_query_thread_max_pool_size";
   5789         /**
   5790          * The size of the core thread pool for shortcut refreshing in GlobalSearch.
   5791          * @hide
   5792          */
   5793         public static final String SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE =
   5794                 "search_shortcut_refresh_core_pool_size";
   5795         /**
   5796          * The maximum size of the thread pool for shortcut refreshing in GlobalSearch.
   5797          * @hide
   5798          */
   5799         public static final String SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE =
   5800                 "search_shortcut_refresh_max_pool_size";
   5801         /**
   5802          * The maximun time that excess threads in the GlobalSeach thread pools will
   5803          * wait before terminating.
   5804          * @hide
   5805          */
   5806         public static final String SEARCH_THREAD_KEEPALIVE_SECONDS =
   5807                 "search_thread_keepalive_seconds";
   5808         /**
   5809          * The maximum number of concurrent suggestion queries to each source.
   5810          * @hide
   5811          */
   5812         public static final String SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT =
   5813                 "search_per_source_concurrent_query_limit";
   5814 
   5815         /**
   5816          * Whether or not alert sounds are played on MountService events. (0 = false, 1 = true)
   5817          * @hide
   5818          */
   5819         public static final String MOUNT_PLAY_NOTIFICATION_SND = "mount_play_not_snd";
   5820 
   5821         /**
   5822          * Whether or not UMS auto-starts on UMS host detection. (0 = false, 1 = true)
   5823          * @hide
   5824          */
   5825         public static final String MOUNT_UMS_AUTOSTART = "mount_ums_autostart";
   5826 
   5827         /**
   5828          * Whether or not a notification is displayed on UMS host detection. (0 = false, 1 = true)
   5829          * @hide
   5830          */
   5831         public static final String MOUNT_UMS_PROMPT = "mount_ums_prompt";
   5832 
   5833         /**
   5834          * Whether or not a notification is displayed while UMS is enabled. (0 = false, 1 = true)
   5835          * @hide
   5836          */
   5837         public static final String MOUNT_UMS_NOTIFY_ENABLED = "mount_ums_notify_enabled";
   5838 
   5839         /**
   5840          * If nonzero, ANRs in invisible background processes bring up a dialog.
   5841          * Otherwise, the process will be silently killed.
   5842          * @hide
   5843          */
   5844         public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
   5845 
   5846         /**
   5847          * The {@link ComponentName} string of the service to be used as the voice recognition
   5848          * service.
   5849          *
   5850          * @hide
   5851          */
   5852         public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service";
   5853 
   5854         /**
   5855          * Stores whether an user has consented to have apps verified through PAM.
   5856          * The value is boolean (1 or 0).
   5857          *
   5858          * @hide
   5859          */
   5860         public static final String PACKAGE_VERIFIER_USER_CONSENT =
   5861             "package_verifier_user_consent";
   5862 
   5863         /**
   5864          * The {@link ComponentName} string of the selected spell checker service which is
   5865          * one of the services managed by the text service manager.
   5866          *
   5867          * @hide
   5868          */
   5869         public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
   5870 
   5871         /**
   5872          * The {@link ComponentName} string of the selected subtype of the selected spell checker
   5873          * service which is one of the services managed by the text service manager.
   5874          *
   5875          * @hide
   5876          */
   5877         public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
   5878                 "selected_spell_checker_subtype";
   5879 
   5880         /**
   5881          * The {@link ComponentName} string whether spell checker is enabled or not.
   5882          *
   5883          * @hide
   5884          */
   5885         public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
   5886 
   5887         /**
   5888          * What happens when the user presses the Power button while in-call
   5889          * and the screen is on.<br/>
   5890          * <b>Values:</b><br/>
   5891          * 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/>
   5892          * 2 - The Power button hangs up the current call.<br/>
   5893          *
   5894          * @hide
   5895          */
   5896         public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior";
   5897 
   5898         /**
   5899          * INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen".
   5900          * @hide
   5901          */
   5902         public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1;
   5903 
   5904         /**
   5905          * INCALL_POWER_BUTTON_BEHAVIOR value for "hang up".
   5906          * @hide
   5907          */
   5908         public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2;
   5909 
   5910         /**
   5911          * INCALL_POWER_BUTTON_BEHAVIOR default value.
   5912          * @hide
   5913          */
   5914         public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT =
   5915                 INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
   5916 
   5917         /**
   5918          * Whether the device should wake when the wake gesture sensor detects motion.
   5919          * @hide
   5920          */
   5921         public static final String WAKE_GESTURE_ENABLED = "wake_gesture_enabled";
   5922 
   5923         /**
   5924          * Whether the device should doze if configured.
   5925          * @hide
   5926          */
   5927         public static final String DOZE_ENABLED = "doze_enabled";
   5928 
   5929         /**
   5930          * The current night mode that has been selected by the user.  Owned
   5931          * and controlled by UiModeManagerService.  Constants are as per
   5932          * UiModeManager.
   5933          * @hide
   5934          */
   5935         public static final String UI_NIGHT_MODE = "ui_night_mode";
   5936 
   5937         /**
   5938          * Whether screensavers are enabled.
   5939          * @hide
   5940          */
   5941         public static final String SCREENSAVER_ENABLED = "screensaver_enabled";
   5942 
   5943         /**
   5944          * The user's chosen screensaver components.
   5945          *
   5946          * These will be launched by the PhoneWindowManager after a timeout when not on
   5947          * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1).
   5948          * @hide
   5949          */
   5950         public static final String SCREENSAVER_COMPONENTS = "screensaver_components";
   5951 
   5952         /**
   5953          * If screensavers are enabled, whether the screensaver should be automatically launched
   5954          * when the device is inserted into a (desk) dock.
   5955          * @hide
   5956          */
   5957         public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
   5958 
   5959         /**
   5960          * If screensavers are enabled, whether the screensaver should be automatically launched
   5961          * when the screen times out when not on battery.
   5962          * @hide
   5963          */
   5964         public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
   5965 
   5966         /**
   5967          * If screensavers are enabled, the default screensaver component.
   5968          * @hide
   5969          */
   5970         public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component";
   5971 
   5972         /**
   5973          * The default NFC payment component
   5974          * @hide
   5975          */
   5976         public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
   5977 
   5978         /**
   5979          * Whether NFC payment is handled by the foreground application or a default.
   5980          * @hide
   5981          */
   5982         public static final String NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground";
   5983 
   5984         /**
   5985          * Specifies the package name currently configured to be the primary sms application
   5986          * @hide
   5987          */
   5988         public static final String SMS_DEFAULT_APPLICATION = "sms_default_application";
   5989 
   5990         /**
   5991          * Specifies the package name currently configured to be the default dialer application
   5992          * @hide
   5993          */
   5994         public static final String DIALER_DEFAULT_APPLICATION = "dialer_default_application";
   5995 
   5996         /**
   5997          * Specifies the package name currently configured to be the emergency assistance application
   5998          *
   5999          * @see android.telephony.TelephonyManager#ACTION_EMERGENCY_ASSISTANCE
   6000          *
   6001          * @hide
   6002          */
   6003         public static final String EMERGENCY_ASSISTANCE_APPLICATION = "emergency_assistance_application";
   6004 
   6005         /**
   6006          * Specifies whether the current app context on scren (assist data) will be sent to the
   6007          * assist application (active voice interaction service).
   6008          *
   6009          * @hide
   6010          */
   6011         public static final String ASSIST_STRUCTURE_ENABLED = "assist_structure_enabled";
   6012 
   6013         /**
   6014          * Specifies whether a screenshot of the screen contents will be sent to the assist
   6015          * application (active voice interaction service).
   6016          *
   6017          * @hide
   6018          */
   6019         public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled";
   6020 
   6021         /**
   6022          * Specifies whether the screen will show an animation if screen contents are sent to the
   6023          * assist application (active voice interaction service).
   6024          *
   6025          * Note that the disclosure will be forced for third-party assistants or if the device
   6026          * does not support disabling it.
   6027          *
   6028          * @hide
   6029          */
   6030         public static final String ASSIST_DISCLOSURE_ENABLED = "assist_disclosure_enabled";
   6031 
   6032         /**
   6033          * Names of the service components that the current user has explicitly allowed to
   6034          * see all of the user's notifications, separated by ':'.
   6035          *
   6036          * @hide
   6037          */
   6038         public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
   6039 
   6040         /**
   6041          * Names of the packages that the current user has explicitly allowed to
   6042          * manage notification policy configuration, separated by ':'.
   6043          *
   6044          * @hide
   6045          */
   6046         @TestApi
   6047         public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES =
   6048                 "enabled_notification_policy_access_packages";
   6049 
   6050         /** @hide */
   6051         public static final String BAR_SERVICE_COMPONENT = "bar_service_component";
   6052 
   6053         /** @hide */
   6054         public static final String VOLUME_CONTROLLER_SERVICE_COMPONENT
   6055                 = "volume_controller_service_component";
   6056 
   6057         /** @hide */
   6058         public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
   6059 
   6060         /**
   6061          * This is the query URI for finding a print service to install.
   6062          *
   6063          * @hide
   6064          */
   6065         public static final String PRINT_SERVICE_SEARCH_URI = "print_service_search_uri";
   6066 
   6067         /**
   6068          * This is the query URI for finding a NFC payment service to install.
   6069          *
   6070          * @hide
   6071          */
   6072         public static final String PAYMENT_SERVICE_SEARCH_URI = "payment_service_search_uri";
   6073 
   6074         /**
   6075          * If enabled, apps should try to skip any introductory hints on first launch. This might
   6076          * apply to users that are already familiar with the environment or temporary users.
   6077          * <p>
   6078          * Type : int (0 to show hints, 1 to skip showing hints)
   6079          */
   6080         public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
   6081 
   6082         /**
   6083          * Persisted playback time after a user confirmation of an unsafe volume level.
   6084          *
   6085          * @hide
   6086          */
   6087         public static final String UNSAFE_VOLUME_MUSIC_ACTIVE_MS = "unsafe_volume_music_active_ms";
   6088 
   6089         /**
   6090          * This preference enables notification display on the lockscreen.
   6091          * @hide
   6092          */
   6093         public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
   6094                 "lock_screen_show_notifications";
   6095 
   6096         /**
   6097          * List of TV inputs that are currently hidden. This is a string
   6098          * containing the IDs of all hidden TV inputs. Each ID is encoded by
   6099          * {@link android.net.Uri#encode(String)} and separated by ':'.
   6100          * @hide
   6101          */
   6102         public static final String TV_INPUT_HIDDEN_INPUTS = "tv_input_hidden_inputs";
   6103 
   6104         /**
   6105          * List of custom TV input labels. This is a string containing <TV input id, custom name>
   6106          * pairs. TV input id and custom name are encoded by {@link android.net.Uri#encode(String)}
   6107          * and separated by ','. Each pair is separated by ':'.
   6108          * @hide
   6109          */
   6110         public static final String TV_INPUT_CUSTOM_LABELS = "tv_input_custom_labels";
   6111 
   6112         /**
   6113          * Whether automatic routing of system audio to USB audio peripheral is disabled.
   6114          * The value is boolean (1 or 0), where 1 means automatic routing is disabled,
   6115          * and 0 means automatic routing is enabled.
   6116          *
   6117          * @hide
   6118          */
   6119         public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
   6120                 "usb_audio_automatic_routing_disabled";
   6121 
   6122         /**
   6123          * The timeout in milliseconds before the device fully goes to sleep after
   6124          * a period of inactivity.  This value sets an upper bound on how long the device
   6125          * will stay awake or dreaming without user activity.  It should generally
   6126          * be longer than {@link Settings.System#SCREEN_OFF_TIMEOUT} as otherwise the device
   6127          * will sleep before it ever has a chance to dream.
   6128          * <p>
   6129          * Use -1 to disable this timeout.
   6130          * </p>
   6131          *
   6132          * @hide
   6133          */
   6134         public static final String SLEEP_TIMEOUT = "sleep_timeout";
   6135 
   6136         /**
   6137          * Controls whether double tap to wake is enabled.
   6138          * @hide
   6139          */
   6140         public static final String DOUBLE_TAP_TO_WAKE = "double_tap_to_wake";
   6141 
   6142         /**
   6143          * The current assistant component. It could be a voice interaction service,
   6144          * or an activity that handles ACTION_ASSIST, or empty which means using the default
   6145          * handling.
   6146          *
   6147          * @hide
   6148          */
   6149         public static final String ASSISTANT = "assistant";
   6150 
   6151         /**
   6152          * Whether the camera launch gesture should be disabled.
   6153          *
   6154          * @hide
   6155          */
   6156         public static final String CAMERA_GESTURE_DISABLED = "camera_gesture_disabled";
   6157 
   6158         /**
   6159          * Whether the camera launch gesture to double tap the power button when the screen is off
   6160          * should be disabled.
   6161          *
   6162          * @hide
   6163          */
   6164         public static final String CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED =
   6165                 "camera_double_tap_power_gesture_disabled";
   6166 
   6167         /**
   6168          * Whether the camera double twist gesture to flip between front and back mode should be
   6169          * enabled.
   6170          *
   6171          * @hide
   6172          */
   6173         public static final String CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED =
   6174                 "camera_double_twist_to_flip_enabled";
   6175 
   6176         /**
   6177          * Control whether Night display is currently activated.
   6178          * @hide
   6179          */
   6180         public static final String NIGHT_DISPLAY_ACTIVATED = "night_display_activated";
   6181 
   6182         /**
   6183          * Control whether Night display will automatically activate/deactivate.
   6184          * @hide
   6185          */
   6186         public static final String NIGHT_DISPLAY_AUTO_MODE = "night_display_auto_mode";
   6187 
   6188         /**
   6189          * Custom time when Night display is scheduled to activate.
   6190          * Represented as milliseconds from midnight (e.g. 79200000 == 10pm).
   6191          * @hide
   6192          */
   6193         public static final String NIGHT_DISPLAY_CUSTOM_START_TIME = "night_display_custom_start_time";
   6194 
   6195         /**
   6196          * Custom time when Night display is scheduled to deactivate.
   6197          * Represented as milliseconds from midnight (e.g. 21600000 == 6am).
   6198          * @hide
   6199          */
   6200         public static final String NIGHT_DISPLAY_CUSTOM_END_TIME = "night_display_custom_end_time";
   6201 
   6202         /**
   6203          * Whether brightness should automatically adjust based on twilight state.
   6204          * @hide
   6205          */
   6206         public static final String BRIGHTNESS_USE_TWILIGHT = "brightness_use_twilight";
   6207 
   6208         /**
   6209          * Names of the service components that the current user has explicitly allowed to
   6210          * be a VR mode listener, separated by ':'.
   6211          *
   6212          * @hide
   6213          */
   6214         public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
   6215 
   6216         /**
   6217          * Behavior of the display while in VR mode.
   6218          *
   6219          * One of {@link #VR_DISPLAY_MODE_LOW_PERSISTENCE} or {@link #VR_DISPLAY_MODE_OFF}.
   6220          *
   6221          * @hide
   6222          */
   6223         public static final String VR_DISPLAY_MODE = "vr_display_mode";
   6224 
   6225         /**
   6226          * Lower the display persistence while the system is in VR mode.
   6227          *
   6228          * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
   6229          *
   6230          * @hide.
   6231          */
   6232         public static final int VR_DISPLAY_MODE_LOW_PERSISTENCE = 0;
   6233 
   6234         /**
   6235          * Do not alter the display persistence while the system is in VR mode.
   6236          *
   6237          * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
   6238          *
   6239          * @hide.
   6240          */
   6241         public static final int VR_DISPLAY_MODE_OFF = 1;
   6242 
   6243         /**
   6244          * Whether CarrierAppUtils#disableCarrierAppsUntilPrivileged has been executed at least
   6245          * once.
   6246          *
   6247          * <p>This is used to ensure that we only take one pass which will disable apps that are not
   6248          * privileged (if any). From then on, we only want to enable apps (when a matching SIM is
   6249          * inserted), to avoid disabling an app that the user might actively be using.
   6250          *
   6251          * <p>Will be set to 1 once executed.
   6252          *
   6253          * @hide
   6254          */
   6255         public static final String CARRIER_APPS_HANDLED = "carrier_apps_handled";
   6256 
   6257         /**
   6258          * Whether parent user can access remote contact in managed profile.
   6259          *
   6260          * @hide
   6261          */
   6262         public static final String MANAGED_PROFILE_CONTACT_REMOTE_SEARCH =
   6263                 "managed_profile_contact_remote_search";
   6264 
   6265         /**
   6266          * Whether or not the automatic storage manager is enabled and should run on the device.
   6267          *
   6268          * @hide
   6269          */
   6270         public static final String AUTOMATIC_STORAGE_MANAGER_ENABLED =
   6271                 "automatic_storage_manager_enabled";
   6272 
   6273         /**
   6274          * How many days of information for the automatic storage manager to retain on the device.
   6275          *
   6276          * @hide
   6277          */
   6278         public static final String AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN =
   6279                 "automatic_storage_manager_days_to_retain";
   6280 
   6281         /**
   6282          * Default number of days of information for the automatic storage manager to retain.
   6283          *
   6284          * @hide
   6285          */
   6286         public static final int AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_DEFAULT = 90;
   6287 
   6288         /**
   6289          * How many bytes the automatic storage manager has cleared out.
   6290          *
   6291          * @hide
   6292          */
   6293         public static final String AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED =
   6294                 "automatic_storage_manager_bytes_cleared";
   6295 
   6296 
   6297         /**
   6298          * Last run time for the automatic storage manager.
   6299          *
   6300          * @hide
   6301          */
   6302         public static final String AUTOMATIC_STORAGE_MANAGER_LAST_RUN =
   6303                 "automatic_storage_manager_last_run";
   6304 
   6305 
   6306         /**
   6307          * Whether SystemUI navigation keys is enabled.
   6308          * @hide
   6309          */
   6310         public static final String SYSTEM_NAVIGATION_KEYS_ENABLED =
   6311                 "system_navigation_keys_enabled";
   6312 
   6313         /**
   6314          * Holds comma separated list of ordering of QS tiles.
   6315          * @hide
   6316          */
   6317         public static final String QS_TILES = "sysui_qs_tiles";
   6318 
   6319         /**
   6320          * Whether preloaded APKs have been installed for the user.
   6321          * @hide
   6322          */
   6323         public static final String DEMO_USER_SETUP_COMPLETE
   6324                 = "demo_user_setup_complete";
   6325 
   6326         /**
   6327          * This are the settings to be backed up.
   6328          *
   6329          * NOTE: Settings are backed up and restored in the order they appear
   6330          *       in this array. If you have one setting depending on another,
   6331          *       make sure that they are ordered appropriately.
   6332          *
   6333          * @hide
   6334          */
   6335         public static final String[] SETTINGS_TO_BACKUP = {
   6336             BUGREPORT_IN_POWER_MENU,                            // moved to global
   6337             ALLOW_MOCK_LOCATION,
   6338             PARENTAL_CONTROL_ENABLED,
   6339             PARENTAL_CONTROL_REDIRECT_URL,
   6340             USB_MASS_STORAGE_ENABLED,                           // moved to global
   6341             ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
   6342             ACCESSIBILITY_DISPLAY_DALTONIZER,
   6343             ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
   6344             ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
   6345             ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
   6346             ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
   6347             ACCESSIBILITY_SCRIPT_INJECTION,
   6348             ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
   6349             ENABLED_ACCESSIBILITY_SERVICES,
   6350             ENABLED_NOTIFICATION_LISTENERS,
   6351             ENABLED_VR_LISTENERS,
   6352             ENABLED_INPUT_METHODS,
   6353             TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
   6354             TOUCH_EXPLORATION_ENABLED,
   6355             ACCESSIBILITY_ENABLED,
   6356             ACCESSIBILITY_SPEAK_PASSWORD,
   6357             ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED,
   6358             ACCESSIBILITY_CAPTIONING_PRESET,
   6359             ACCESSIBILITY_CAPTIONING_ENABLED,
   6360             ACCESSIBILITY_CAPTIONING_LOCALE,
   6361             ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
   6362             ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
   6363             ACCESSIBILITY_CAPTIONING_EDGE_TYPE,
   6364             ACCESSIBILITY_CAPTIONING_EDGE_COLOR,
   6365             ACCESSIBILITY_CAPTIONING_TYPEFACE,
   6366             ACCESSIBILITY_CAPTIONING_FONT_SCALE,
   6367             ACCESSIBILITY_CAPTIONING_WINDOW_COLOR,
   6368             TTS_USE_DEFAULTS,
   6369             TTS_DEFAULT_RATE,
   6370             TTS_DEFAULT_PITCH,
   6371             TTS_DEFAULT_SYNTH,
   6372             TTS_DEFAULT_LANG,
   6373             TTS_DEFAULT_COUNTRY,
   6374             TTS_ENABLED_PLUGINS,
   6375             TTS_DEFAULT_LOCALE,
   6376             SHOW_IME_WITH_HARD_KEYBOARD,
   6377             WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,            // moved to global
   6378             WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,               // moved to global
   6379             WIFI_NUM_OPEN_NETWORKS_KEPT,                        // moved to global
   6380             SELECTED_SPELL_CHECKER,
   6381             SELECTED_SPELL_CHECKER_SUBTYPE,
   6382             SPELL_CHECKER_ENABLED,
   6383             MOUNT_PLAY_NOTIFICATION_SND,
   6384             MOUNT_UMS_AUTOSTART,
   6385             MOUNT_UMS_PROMPT,
   6386             MOUNT_UMS_NOTIFY_ENABLED,
   6387             SLEEP_TIMEOUT,
   6388             DOUBLE_TAP_TO_WAKE,
   6389             WAKE_GESTURE_ENABLED,
   6390             LONG_PRESS_TIMEOUT,
   6391             CAMERA_GESTURE_DISABLED,
   6392             ACCESSIBILITY_AUTOCLICK_ENABLED,
   6393             ACCESSIBILITY_AUTOCLICK_DELAY,
   6394             ACCESSIBILITY_LARGE_POINTER_ICON,
   6395             PREFERRED_TTY_MODE,
   6396             ENHANCED_VOICE_PRIVACY_ENABLED,
   6397             TTY_MODE_ENABLED,
   6398             INCALL_POWER_BUTTON_BEHAVIOR,
   6399             NIGHT_DISPLAY_CUSTOM_START_TIME,
   6400             NIGHT_DISPLAY_CUSTOM_END_TIME,
   6401             NIGHT_DISPLAY_AUTO_MODE,
   6402             NIGHT_DISPLAY_ACTIVATED,
   6403             CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED,
   6404             CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
   6405             SYSTEM_NAVIGATION_KEYS_ENABLED,
   6406             QS_TILES,
   6407         };
   6408 
   6409         /**
   6410          * These entries are considered common between the personal and the managed profile,
   6411          * since the managed profile doesn't get to change them.
   6412          */
   6413         private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
   6414 
   6415         static {
   6416             CLONE_TO_MANAGED_PROFILE.add(ACCESSIBILITY_ENABLED);
   6417             CLONE_TO_MANAGED_PROFILE.add(ALLOW_MOCK_LOCATION);
   6418             CLONE_TO_MANAGED_PROFILE.add(ALLOWED_GEOLOCATION_ORIGINS);
   6419             CLONE_TO_MANAGED_PROFILE.add(DEFAULT_INPUT_METHOD);
   6420             CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES);
   6421             CLONE_TO_MANAGED_PROFILE.add(ENABLED_INPUT_METHODS);
   6422             CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE);
   6423             CLONE_TO_MANAGED_PROFILE.add(LOCATION_PREVIOUS_MODE);
   6424             CLONE_TO_MANAGED_PROFILE.add(LOCATION_PROVIDERS_ALLOWED);
   6425             CLONE_TO_MANAGED_PROFILE.add(SELECTED_INPUT_METHOD_SUBTYPE);
   6426             CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER);
   6427             CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER_SUBTYPE);
   6428         }
   6429 
   6430         /** @hide */
   6431         public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
   6432             outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
   6433         }
   6434 
   6435         /**
   6436          * Helper method for determining if a location provider is enabled.
   6437          *
   6438          * @param cr the content resolver to use
   6439          * @param provider the location provider to query
   6440          * @return true if the provider is enabled
   6441          *
   6442          * @deprecated use {@link #LOCATION_MODE} or
   6443          *             {@link LocationManager#isProviderEnabled(String)}
   6444          */
   6445         @Deprecated
   6446         public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) {
   6447             return isLocationProviderEnabledForUser(cr, provider, UserHandle.myUserId());
   6448         }
   6449 
   6450         /**
   6451          * Helper method for determining if a location provider is enabled.
   6452          * @param cr the content resolver to use
   6453          * @param provider the location provider to query
   6454          * @param userId the userId to query
   6455          * @return true if the provider is enabled
   6456          * @deprecated use {@link #LOCATION_MODE} or
   6457          *             {@link LocationManager#isProviderEnabled(String)}
   6458          * @hide
   6459          */
   6460         @Deprecated
   6461         public static final boolean isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId) {
   6462             String allowedProviders = Settings.Secure.getStringForUser(cr,
   6463                     LOCATION_PROVIDERS_ALLOWED, userId);
   6464             return TextUtils.delimitedStringContains(allowedProviders, ',', provider);
   6465         }
   6466 
   6467         /**
   6468          * Thread-safe method for enabling or disabling a single location provider.
   6469          * @param cr the content resolver to use
   6470          * @param provider the location provider to enable or disable
   6471          * @param enabled true if the provider should be enabled
   6472          * @deprecated use {@link #putInt(ContentResolver, String, int)} and {@link #LOCATION_MODE}
   6473          */
   6474         @Deprecated
   6475         public static final void setLocationProviderEnabled(ContentResolver cr,
   6476                 String provider, boolean enabled) {
   6477             setLocationProviderEnabledForUser(cr, provider, enabled, UserHandle.myUserId());
   6478         }
   6479 
   6480         /**
   6481          * Thread-safe method for enabling or disabling a single location provider.
   6482          *
   6483          * @param cr the content resolver to use
   6484          * @param provider the location provider to enable or disable
   6485          * @param enabled true if the provider should be enabled
   6486          * @param userId the userId for which to enable/disable providers
   6487          * @return true if the value was set, false on database errors
   6488          * @deprecated use {@link #putIntForUser(ContentResolver, String, int, int)} and
   6489          *             {@link #LOCATION_MODE}
   6490          * @hide
   6491          */
   6492         @Deprecated
   6493         public static final boolean setLocationProviderEnabledForUser(ContentResolver cr,
   6494                 String provider, boolean enabled, int userId) {
   6495             synchronized (mLocationSettingsLock) {
   6496                 // to ensure thread safety, we write the provider name with a '+' or '-'
   6497                 // and let the SettingsProvider handle it rather than reading and modifying
   6498                 // the list of enabled providers.
   6499                 if (enabled) {
   6500                     provider = "+" + provider;
   6501                 } else {
   6502                     provider = "-" + provider;
   6503                 }
   6504                 return putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider,
   6505                         userId);
   6506             }
   6507         }
   6508 
   6509         /**
   6510          * Saves the current location mode into {@link #LOCATION_PREVIOUS_MODE}.
   6511          */
   6512         private static final boolean saveLocationModeForUser(ContentResolver cr, int userId) {
   6513             final int mode = getLocationModeForUser(cr, userId);
   6514             return putIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE, mode, userId);
   6515         }
   6516 
   6517         /**
   6518          * Restores the current location mode from {@link #LOCATION_PREVIOUS_MODE}.
   6519          */
   6520         private static final boolean restoreLocationModeForUser(ContentResolver cr, int userId) {
   6521             int mode = getIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE,
   6522                     LOCATION_MODE_HIGH_ACCURACY, userId);
   6523             // Make sure that the previous mode is never "off". Otherwise the user won't be able to
   6524             // turn on location any longer.
   6525             if (mode == LOCATION_MODE_OFF) {
   6526                 mode = LOCATION_MODE_HIGH_ACCURACY;
   6527             }
   6528             return setLocationModeForUser(cr, mode, userId);
   6529         }
   6530 
   6531         /**
   6532          * Thread-safe method for setting the location mode to one of
   6533          * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
   6534          * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
   6535          *
   6536          * @param cr the content resolver to use
   6537          * @param mode such as {@link #LOCATION_MODE_HIGH_ACCURACY}
   6538          * @param userId the userId for which to change mode
   6539          * @return true if the value was set, false on database errors
   6540          *
   6541          * @throws IllegalArgumentException if mode is not one of the supported values
   6542          */
   6543         private static final boolean setLocationModeForUser(ContentResolver cr, int mode,
   6544                 int userId) {
   6545             synchronized (mLocationSettingsLock) {
   6546                 boolean gps = false;
   6547                 boolean network = false;
   6548                 switch (mode) {
   6549                     case LOCATION_MODE_PREVIOUS:
   6550                         // Retrieve the actual mode and set to that mode.
   6551                         return restoreLocationModeForUser(cr, userId);
   6552                     case LOCATION_MODE_OFF:
   6553                         saveLocationModeForUser(cr, userId);
   6554                         break;
   6555                     case LOCATION_MODE_SENSORS_ONLY:
   6556                         gps = true;
   6557                         break;
   6558                     case LOCATION_MODE_BATTERY_SAVING:
   6559                         network = true;
   6560                         break;
   6561                     case LOCATION_MODE_HIGH_ACCURACY:
   6562                         gps = true;
   6563                         network = true;
   6564                         break;
   6565                     default:
   6566                         throw new IllegalArgumentException("Invalid location mode: " + mode);
   6567                 }
   6568                 // Note it's important that we set the NLP mode first. The Google implementation
   6569                 // of NLP clears its NLP consent setting any time it receives a
   6570                 // LocationManager.PROVIDERS_CHANGED_ACTION broadcast and NLP is disabled. Also,
   6571                 // it shows an NLP consent dialog any time it receives the broadcast, NLP is
   6572                 // enabled, and the NLP consent is not set. If 1) we were to enable GPS first,
   6573                 // 2) a setup wizard has its own NLP consent UI that sets the NLP consent setting,
   6574                 // and 3) the receiver happened to complete before we enabled NLP, then the Google
   6575                 // NLP would detect the attempt to enable NLP and show a redundant NLP consent
   6576                 // dialog. Then the people who wrote the setup wizard would be sad.
   6577                 boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser(
   6578                         cr, LocationManager.NETWORK_PROVIDER, network, userId);
   6579                 boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser(
   6580                         cr, LocationManager.GPS_PROVIDER, gps, userId);
   6581                 return gpsSuccess && nlpSuccess;
   6582             }
   6583         }
   6584 
   6585         /**
   6586          * Thread-safe method for reading the location mode, returns one of
   6587          * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
   6588          * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
   6589          *
   6590          * @param cr the content resolver to use
   6591          * @param userId the userId for which to read the mode
   6592          * @return the location mode
   6593          */
   6594         private static final int getLocationModeForUser(ContentResolver cr, int userId) {
   6595             synchronized (mLocationSettingsLock) {
   6596                 boolean gpsEnabled = Settings.Secure.isLocationProviderEnabledForUser(
   6597                         cr, LocationManager.GPS_PROVIDER, userId);
   6598                 boolean networkEnabled = Settings.Secure.isLocationProviderEnabledForUser(
   6599                         cr, LocationManager.NETWORK_PROVIDER, userId);
   6600                 if (gpsEnabled && networkEnabled) {
   6601                     return LOCATION_MODE_HIGH_ACCURACY;
   6602                 } else if (gpsEnabled) {
   6603                     return LOCATION_MODE_SENSORS_ONLY;
   6604                 } else if (networkEnabled) {
   6605                     return LOCATION_MODE_BATTERY_SAVING;
   6606                 } else {
   6607                     return LOCATION_MODE_OFF;
   6608                 }
   6609             }
   6610         }
   6611     }
   6612 
   6613     /**
   6614      * Global system settings, containing preferences that always apply identically
   6615      * to all defined users.  Applications can read these but are not allowed to write;
   6616      * like the "Secure" settings, these are for preferences that the user must
   6617      * explicitly modify through the system UI or specialized APIs for those values.
   6618      */
   6619     public static final class Global extends NameValueTable {
   6620         /**
   6621          * The content:// style URL for global secure settings items.  Not public.
   6622          */
   6623         public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global");
   6624 
   6625         /**
   6626          * Whether users are allowed to add more users or guest from lockscreen.
   6627          * <p>
   6628          * Type: int
   6629          * @hide
   6630          */
   6631         public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked";
   6632 
   6633         /**
   6634          * Setting whether the global gesture for enabling accessibility is enabled.
   6635          * If this gesture is enabled the user will be able to perfrom it to enable
   6636          * the accessibility state without visiting the settings app.
   6637          * @hide
   6638          */
   6639         public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED =
   6640                 "enable_accessibility_global_gesture_enabled";
   6641 
   6642         /**
   6643          * Whether Airplane Mode is on.
   6644          */
   6645         public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
   6646 
   6647         /**
   6648          * Whether Theater Mode is on.
   6649          * {@hide}
   6650          */
   6651         @SystemApi
   6652         public static final String THEATER_MODE_ON = "theater_mode_on";
   6653 
   6654         /**
   6655          * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio.
   6656          */
   6657         public static final String RADIO_BLUETOOTH = "bluetooth";
   6658 
   6659         /**
   6660          * Constant for use in AIRPLANE_MODE_RADIOS to specify Wi-Fi radio.
   6661          */
   6662         public static final String RADIO_WIFI = "wifi";
   6663 
   6664         /**
   6665          * {@hide}
   6666          */
   6667         public static final String RADIO_WIMAX = "wimax";
   6668         /**
   6669          * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio.
   6670          */
   6671         public static final String RADIO_CELL = "cell";
   6672 
   6673         /**
   6674          * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio.
   6675          */
   6676         public static final String RADIO_NFC = "nfc";
   6677 
   6678         /**
   6679          * A comma separated list of radios that need to be disabled when airplane mode
   6680          * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are
   6681          * included in the comma separated list.
   6682          */
   6683         public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
   6684 
   6685         /**
   6686          * A comma separated list of radios that should to be disabled when airplane mode
   6687          * is on, but can be manually reenabled by the user.  For example, if RADIO_WIFI is
   6688          * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi
   6689          * will be turned off when entering airplane mode, but the user will be able to reenable
   6690          * Wifi in the Settings app.
   6691          *
   6692          * {@hide}
   6693          */
   6694         public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
   6695 
   6696         /**
   6697          * A Long representing a bitmap of profiles that should be disabled when bluetooth starts.
   6698          * See {@link android.bluetooth.BluetoothProfile}.
   6699          * {@hide}
   6700          */
   6701         public static final String BLUETOOTH_DISABLED_PROFILES = "bluetooth_disabled_profiles";
   6702 
   6703         /**
   6704          * A semi-colon separated list of Bluetooth interoperability workarounds.
   6705          * Each entry is a partial Bluetooth device address string and an integer representing
   6706          * the feature to be disabled, separated by a comma. The integer must correspond
   6707          * to a interoperability feature as defined in "interop.h" in /system/bt.
   6708          * <p>
   6709          * Example: <br/>
   6710          *   "00:11:22,0;01:02:03:04,2"
   6711          * @hide
   6712          */
   6713        public static final String BLUETOOTH_INTEROPERABILITY_LIST = "bluetooth_interoperability_list";
   6714 
   6715         /**
   6716          * The policy for deciding when Wi-Fi should go to sleep (which will in
   6717          * turn switch to using the mobile data as an Internet connection).
   6718          * <p>
   6719          * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
   6720          * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
   6721          * {@link #WIFI_SLEEP_POLICY_NEVER}.
   6722          */
   6723         public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
   6724 
   6725         /**
   6726          * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
   6727          * policy, which is to sleep shortly after the turning off
   6728          * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
   6729          */
   6730         public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
   6731 
   6732         /**
   6733          * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
   6734          * the device is on battery, and never go to sleep when the device is
   6735          * plugged in.
   6736          */
   6737         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
   6738 
   6739         /**
   6740          * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
   6741          */
   6742         public static final int WIFI_SLEEP_POLICY_NEVER = 2;
   6743 
   6744         /**
   6745          * Value to specify if the user prefers the date, time and time zone
   6746          * to be automatically fetched from the network (NITZ). 1=yes, 0=no
   6747          */
   6748         public static final String AUTO_TIME = "auto_time";
   6749 
   6750         /**
   6751          * Value to specify if the user prefers the time zone
   6752          * to be automatically fetched from the network (NITZ). 1=yes, 0=no
   6753          */
   6754         public static final String AUTO_TIME_ZONE = "auto_time_zone";
   6755 
   6756         /**
   6757          * URI for the car dock "in" event sound.
   6758          * @hide
   6759          */
   6760         public static final String CAR_DOCK_SOUND = "car_dock_sound";
   6761 
   6762         /**
   6763          * URI for the car dock "out" event sound.
   6764          * @hide
   6765          */
   6766         public static final String CAR_UNDOCK_SOUND = "car_undock_sound";
   6767 
   6768         /**
   6769          * URI for the desk dock "in" event sound.
   6770          * @hide
   6771          */
   6772         public static final String DESK_DOCK_SOUND = "desk_dock_sound";
   6773 
   6774         /**
   6775          * URI for the desk dock "out" event sound.
   6776          * @hide
   6777          */
   6778         public static final String DESK_UNDOCK_SOUND = "desk_undock_sound";
   6779 
   6780         /**
   6781          * Whether to play a sound for dock events.
   6782          * @hide
   6783          */
   6784         public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled";
   6785 
   6786         /**
   6787          * URI for the "device locked" (keyguard shown) sound.
   6788          * @hide
   6789          */
   6790         public static final String LOCK_SOUND = "lock_sound";
   6791 
   6792         /**
   6793          * URI for the "device unlocked" sound.
   6794          * @hide
   6795          */
   6796         public static final String UNLOCK_SOUND = "unlock_sound";
   6797 
   6798         /**
   6799          * URI for the "device is trusted" sound, which is played when the device enters the trusted
   6800          * state without unlocking.
   6801          * @hide
   6802          */
   6803         public static final String TRUSTED_SOUND = "trusted_sound";
   6804 
   6805         /**
   6806          * URI for the low battery sound file.
   6807          * @hide
   6808          */
   6809         public static final String LOW_BATTERY_SOUND = "low_battery_sound";
   6810 
   6811         /**
   6812          * Whether to play a sound for low-battery alerts.
   6813          * @hide
   6814          */
   6815         public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled";
   6816 
   6817         /**
   6818          * URI for the "wireless charging started" sound.
   6819          * @hide
   6820          */
   6821         public static final String WIRELESS_CHARGING_STARTED_SOUND =
   6822                 "wireless_charging_started_sound";
   6823 
   6824         /**
   6825          * Whether to play a sound for charging events.
   6826          * @hide
   6827          */
   6828         public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled";
   6829 
   6830         /**
   6831          * Whether we keep the device on while the device is plugged in.
   6832          * Supported values are:
   6833          * <ul>
   6834          * <li>{@code 0} to never stay on while plugged in</li>
   6835          * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li>
   6836          * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li>
   6837          * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li>
   6838          * </ul>
   6839          * These values can be OR-ed together.
   6840          */
   6841         public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
   6842 
   6843         /**
   6844          * When the user has enable the option to have a "bug report" command
   6845          * in the power menu.
   6846          * @hide
   6847          */
   6848         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
   6849 
   6850         /**
   6851          * Whether ADB is enabled.
   6852          */
   6853         public static final String ADB_ENABLED = "adb_enabled";
   6854 
   6855         /**
   6856          * Whether Views are allowed to save their attribute data.
   6857          * @hide
   6858          */
   6859         public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
   6860 
   6861         /**
   6862          * Whether assisted GPS should be enabled or not.
   6863          * @hide
   6864          */
   6865         public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled";
   6866 
   6867         /**
   6868          * Whether bluetooth is enabled/disabled
   6869          * 0=disabled. 1=enabled.
   6870          */
   6871         public static final String BLUETOOTH_ON = "bluetooth_on";
   6872 
   6873         /**
   6874          * CDMA Cell Broadcast SMS
   6875          *                            0 = CDMA Cell Broadcast SMS disabled
   6876          *                            1 = CDMA Cell Broadcast SMS enabled
   6877          * @hide
   6878          */
   6879         public static final String CDMA_CELL_BROADCAST_SMS =
   6880                 "cdma_cell_broadcast_sms";
   6881 
   6882         /**
   6883          * The CDMA roaming mode 0 = Home Networks, CDMA default
   6884          *                       1 = Roaming on Affiliated networks
   6885          *                       2 = Roaming on any networks
   6886          * @hide
   6887          */
   6888         public static final String CDMA_ROAMING_MODE = "roaming_settings";
   6889 
   6890         /**
   6891          * The CDMA subscription mode 0 = RUIM/SIM (default)
   6892          *                                1 = NV
   6893          * @hide
   6894          */
   6895         public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
   6896 
   6897         /** Inactivity timeout to track mobile data activity.
   6898         *
   6899         * If set to a positive integer, it indicates the inactivity timeout value in seconds to
   6900         * infer the data activity of mobile network. After a period of no activity on mobile
   6901         * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE}
   6902         * intent is fired to indicate a transition of network status from "active" to "idle". Any
   6903         * subsequent activity on mobile networks triggers the firing of {@code
   6904         * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active".
   6905         *
   6906         * Network activity refers to transmitting or receiving data on the network interfaces.
   6907         *
   6908         * Tracking is disabled if set to zero or negative value.
   6909         *
   6910         * @hide
   6911         */
   6912        public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile";
   6913 
   6914        /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE}
   6915         * but for Wifi network.
   6916         * @hide
   6917         */
   6918        public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi";
   6919 
   6920        /**
   6921         * Whether or not data roaming is enabled. (0 = false, 1 = true)
   6922         */
   6923        public static final String DATA_ROAMING = "data_roaming";
   6924 
   6925        /**
   6926         * The value passed to a Mobile DataConnection via bringUp which defines the
   6927         * number of retries to preform when setting up the initial connection. The default
   6928         * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1.
   6929         * @hide
   6930         */
   6931        public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry";
   6932 
   6933        /**
   6934         * Whether any package can be on external storage. When this is true, any
   6935         * package, regardless of manifest values, is a candidate for installing
   6936         * or moving onto external storage. (0 = false, 1 = true)
   6937         * @hide
   6938         */
   6939        public static final String FORCE_ALLOW_ON_EXTERNAL = "force_allow_on_external";
   6940 
   6941         /**
   6942          * Whether any activity can be resized. When this is true, any
   6943          * activity, regardless of manifest values, can be resized for multi-window.
   6944          * (0 = false, 1 = true)
   6945          * @hide
   6946          */
   6947         public static final String DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES
   6948                 = "force_resizable_activities";
   6949 
   6950         /**
   6951          * Whether to enable experimental freeform support for windows.
   6952          * @hide
   6953          */
   6954         public static final String DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT
   6955                 = "enable_freeform_support";
   6956 
   6957        /**
   6958         * Whether user has enabled development settings.
   6959         */
   6960        public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
   6961 
   6962        /**
   6963         * Whether the device has been provisioned (0 = false, 1 = true).
   6964         * <p>On a multiuser device with a separate system user, the screen may be locked
   6965         * as soon as this is set to true and further activities cannot be launched on the
   6966         * system user unless they are marked to show over keyguard.
   6967         */
   6968        public static final String DEVICE_PROVISIONED = "device_provisioned";
   6969 
   6970        /**
   6971         * Whether mobile data should be allowed while the device is being provisioned.
   6972         * This allows the provisioning process to turn off mobile data before the user
   6973         * has an opportunity to set things up, preventing other processes from burning
   6974         * precious bytes before wifi is setup.
   6975         * (0 = false, 1 = true)
   6976         * @hide
   6977         */
   6978        public static final String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED =
   6979                "device_provisioning_mobile_data";
   6980 
   6981        /**
   6982         * The saved value for WindowManagerService.setForcedDisplaySize().
   6983         * Two integers separated by a comma.  If unset, then use the real display size.
   6984         * @hide
   6985         */
   6986        public static final String DISPLAY_SIZE_FORCED = "display_size_forced";
   6987 
   6988        /**
   6989         * The saved value for WindowManagerService.setForcedDisplayScalingMode().
   6990         * 0 or unset if scaling is automatic, 1 if scaling is disabled.
   6991         * @hide
   6992         */
   6993        public static final String DISPLAY_SCALING_FORCE = "display_scaling_force";
   6994 
   6995        /**
   6996         * The maximum size, in bytes, of a download that the download manager will transfer over
   6997         * a non-wifi connection.
   6998         * @hide
   6999         */
   7000        public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE =
   7001                "download_manager_max_bytes_over_mobile";
   7002 
   7003        /**
   7004         * The recommended maximum size, in bytes, of a download that the download manager should
   7005         * transfer over a non-wifi connection. Over this size, the use will be warned, but will
   7006         * have the option to start the download over the mobile connection anyway.
   7007         * @hide
   7008         */
   7009        public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE =
   7010                "download_manager_recommended_max_bytes_over_mobile";
   7011 
   7012        /**
   7013         * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
   7014         */
   7015        @Deprecated
   7016        public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
   7017 
   7018        /**
   7019         * Whether HDMI control shall be enabled. If disabled, no CEC/MHL command will be
   7020         * sent or processed. (0 = false, 1 = true)
   7021         * @hide
   7022         */
   7023        public static final String HDMI_CONTROL_ENABLED = "hdmi_control_enabled";
   7024 
   7025        /**
   7026         * Whether HDMI system audio is enabled. If enabled, TV internal speaker is muted,
   7027         * and the output is redirected to AV Receiver connected via
   7028         * {@Global#HDMI_SYSTEM_AUDIO_OUTPUT}.
   7029         * @hide
   7030         */
   7031        public static final String HDMI_SYSTEM_AUDIO_ENABLED = "hdmi_system_audio_enabled";
   7032 
   7033        /**
   7034         * Whether TV will automatically turn on upon reception of the CEC command
   7035         * &lt;Text View On&gt; or &lt;Image View On&gt;. (0 = false, 1 = true)
   7036         * @hide
   7037         */
   7038        public static final String HDMI_CONTROL_AUTO_WAKEUP_ENABLED =
   7039                "hdmi_control_auto_wakeup_enabled";
   7040 
   7041        /**
   7042         * Whether TV will also turn off other CEC devices when it goes to standby mode.
   7043         * (0 = false, 1 = true)
   7044         * @hide
   7045         */
   7046        public static final String HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED =
   7047                "hdmi_control_auto_device_off_enabled";
   7048 
   7049        /**
   7050         * Whether TV will switch to MHL port when a mobile device is plugged in.
   7051         * (0 = false, 1 = true)
   7052         * @hide
   7053         */
   7054        public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled";
   7055 
   7056        /**
   7057         * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true)
   7058         * @hide
   7059         */
   7060        public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled";
   7061 
   7062        /**
   7063         * Whether mobile data connections are allowed by the user.  See
   7064         * ConnectivityManager for more info.
   7065         * @hide
   7066         */
   7067        public static final String MOBILE_DATA = "mobile_data";
   7068 
   7069        /**
   7070         * Whether the mobile data connection should remain active even when higher
   7071         * priority networks like WiFi are active, to help make network switching faster.
   7072         *
   7073         * See ConnectivityService for more info.
   7074         *
   7075         * (0 = disabled, 1 = enabled)
   7076         * @hide
   7077         */
   7078        public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
   7079 
   7080        /** {@hide} */
   7081        public static final String NETSTATS_ENABLED = "netstats_enabled";
   7082        /** {@hide} */
   7083        public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval";
   7084        /** {@hide} */
   7085        public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age";
   7086        /** {@hide} */
   7087        public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes";
   7088        /** {@hide} */
   7089        public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled";
   7090 
   7091        /** {@hide} */
   7092        public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration";
   7093        /** {@hide} */
   7094        public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes";
   7095        /** {@hide} */
   7096        public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age";
   7097        /** {@hide} */
   7098        public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age";
   7099 
   7100        /** {@hide} */
   7101        public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration";
   7102        /** {@hide} */
   7103        public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes";
   7104        /** {@hide} */
   7105        public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age";
   7106        /** {@hide} */
   7107        public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age";
   7108 
   7109        /** {@hide} */
   7110        public static final String NETSTATS_UID_TAG_BUCKET_DURATION = "netstats_uid_tag_bucket_duration";
   7111        /** {@hide} */
   7112        public static final String NETSTATS_UID_TAG_PERSIST_BYTES = "netstats_uid_tag_persist_bytes";
   7113        /** {@hide} */
   7114        public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age";
   7115        /** {@hide} */
   7116        public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age";
   7117 
   7118        /**
   7119         * User preference for which network(s) should be used. Only the
   7120         * connectivity service should touch this.
   7121         */
   7122        public static final String NETWORK_PREFERENCE = "network_preference";
   7123 
   7124        /**
   7125         * Which package name to use for network scoring. If null, or if the package is not a valid
   7126         * scorer app, external network scores will neither be requested nor accepted.
   7127         * @hide
   7128         */
   7129        public static final String NETWORK_SCORER_APP = "network_scorer_app";
   7130 
   7131        /**
   7132         * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment
   7133         * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
   7134         * exceeded.
   7135         * @hide
   7136         */
   7137        public static final String NITZ_UPDATE_DIFF = "nitz_update_diff";
   7138 
   7139        /**
   7140         * The length of time in milli-seconds that automatic small adjustments to
   7141         * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded.
   7142         * @hide
   7143         */
   7144        public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing";
   7145 
   7146        /** Preferred NTP server. {@hide} */
   7147        public static final String NTP_SERVER = "ntp_server";
   7148        /** Timeout in milliseconds to wait for NTP server. {@hide} */
   7149        public static final String NTP_TIMEOUT = "ntp_timeout";
   7150 
   7151        /** {@hide} */
   7152        public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval";
   7153 
   7154        /**
   7155         * Sample validity in seconds to configure for the system DNS resolver.
   7156         * {@hide}
   7157         */
   7158        public static final String DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS =
   7159                "dns_resolver_sample_validity_seconds";
   7160 
   7161        /**
   7162         * Success threshold in percent for use with the system DNS resolver.
   7163         * {@hide}
   7164         */
   7165        public static final String DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT =
   7166                 "dns_resolver_success_threshold_percent";
   7167 
   7168        /**
   7169         * Minimum number of samples needed for statistics to be considered meaningful in the
   7170         * system DNS resolver.
   7171         * {@hide}
   7172         */
   7173        public static final String DNS_RESOLVER_MIN_SAMPLES = "dns_resolver_min_samples";
   7174 
   7175        /**
   7176         * Maximum number taken into account for statistics purposes in the system DNS resolver.
   7177         * {@hide}
   7178         */
   7179        public static final String DNS_RESOLVER_MAX_SAMPLES = "dns_resolver_max_samples";
   7180 
   7181        /**
   7182         * Whether to disable the automatic scheduling of system updates.
   7183         * 1 = system updates won't be automatically scheduled (will always
   7184         * present notification instead).
   7185         * 0 = system updates will be automatically scheduled. (default)
   7186         * @hide
   7187         */
   7188        @SystemApi
   7189        public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update";
   7190 
   7191        /**
   7192         * Whether the package manager should send package verification broadcasts for verifiers to
   7193         * review apps prior to installation.
   7194         * 1 = request apps to be verified prior to installation, if a verifier exists.
   7195         * 0 = do not verify apps before installation
   7196         * @hide
   7197         */
   7198        public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable";
   7199 
   7200        /** Timeout for package verification.
   7201         * @hide */
   7202        public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
   7203 
   7204        /** Default response code for package verification.
   7205         * @hide */
   7206        public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response";
   7207 
   7208        /**
   7209         * Show package verification setting in the Settings app.
   7210         * 1 = show (default)
   7211         * 0 = hide
   7212         * @hide
   7213         */
   7214        public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible";
   7215 
   7216        /**
   7217         * Run package verification on apps installed through ADB/ADT/USB
   7218         * 1 = perform package verification on ADB installs (default)
   7219         * 0 = bypass package verification on ADB installs
   7220         * @hide
   7221         */
   7222        public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs";
   7223 
   7224        /**
   7225         * Time since last fstrim (milliseconds) after which we force one to happen
   7226         * during device startup.  If unset, the default is 3 days.
   7227         * @hide
   7228         */
   7229        public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval";
   7230 
   7231        /**
   7232         * The interval in milliseconds at which to check packet counts on the
   7233         * mobile data interface when screen is on, to detect possible data
   7234         * connection problems.
   7235         * @hide
   7236         */
   7237        public static final String PDP_WATCHDOG_POLL_INTERVAL_MS =
   7238                "pdp_watchdog_poll_interval_ms";
   7239 
   7240        /**
   7241         * The interval in milliseconds at which to check packet counts on the
   7242         * mobile data interface when screen is off, to detect possible data
   7243         * connection problems.
   7244         * @hide
   7245         */
   7246        public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS =
   7247                "pdp_watchdog_long_poll_interval_ms";
   7248 
   7249        /**
   7250         * The interval in milliseconds at which to check packet counts on the
   7251         * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT}
   7252         * outgoing packets has been reached without incoming packets.
   7253         * @hide
   7254         */
   7255        public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS =
   7256                "pdp_watchdog_error_poll_interval_ms";
   7257 
   7258        /**
   7259         * The number of outgoing packets sent without seeing an incoming packet
   7260         * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT}
   7261         * device is logged to the event log
   7262         * @hide
   7263         */
   7264        public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT =
   7265                "pdp_watchdog_trigger_packet_count";
   7266 
   7267        /**
   7268         * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS})
   7269         * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before
   7270         * attempting data connection recovery.
   7271         * @hide
   7272         */
   7273        public static final String PDP_WATCHDOG_ERROR_POLL_COUNT =
   7274                "pdp_watchdog_error_poll_count";
   7275 
   7276        /**
   7277         * The number of failed PDP reset attempts before moving to something more
   7278         * drastic: re-registering to the network.
   7279         * @hide
   7280         */
   7281        public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT =
   7282                "pdp_watchdog_max_pdp_reset_fail_count";
   7283 
   7284        /**
   7285         * A positive value indicates how often the SamplingProfiler
   7286         * should take snapshots. Zero value means SamplingProfiler
   7287         * is disabled.
   7288         *
   7289         * @hide
   7290         */
   7291        public static final String