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