• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      * @hide
791      */
792     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
793     public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS
794             = "android.settings.NOTIFICATION_LISTENER_SETTINGS";
795 
796     /**
797      * @hide
798      */
799     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
800     public static final String ACTION_CONDITION_PROVIDER_SETTINGS
801             = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
802 
803     /**
804      * Activity Action: Show settings for video captioning.
805      * <p>
806      * In some cases, a matching Activity may not exist, so ensure you safeguard
807      * against this.
808      * <p>
809      * Input: Nothing.
810      * <p>
811      * Output: Nothing.
812      */
813     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
814     public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
815 
816     /**
817      * Activity Action: Show the top level print settings.
818      * <p>
819      * In some cases, a matching Activity may not exist, so ensure you
820      * safeguard against this.
821      * <p>
822      * Input: Nothing.
823      * <p>
824      * Output: Nothing.
825      */
826     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
827     public static final String ACTION_PRINT_SETTINGS =
828             "android.settings.ACTION_PRINT_SETTINGS";
829 
830     /**
831      * Activity Action: Show Zen Mode configuration settings.
832      *
833      * @hide
834      */
835     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
836     public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
837 
838     /**
839      * Activity Action: Show the regulatory information screen for the device.
840      * <p>
841      * In some cases, a matching Activity may not exist, so ensure you safeguard
842      * against this.
843      * <p>
844      * Input: Nothing.
845      * <p>
846      * Output: Nothing.
847      */
848     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
849     public static final String
850             ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
851 
852     /**
853      * Activity Action: Show Device Name Settings.
854      * <p>
855      * In some cases, a matching Activity may not exist, so ensure you safeguard
856      * against this.
857      *
858      * @hide
859      */
860     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
861     public static final String DEVICE_NAME_SETTINGS = "android.settings.DEVICE_NAME";
862 
863     /**
864      * Activity Action: Show pairing settings.
865      * <p>
866      * In some cases, a matching Activity may not exist, so ensure you safeguard
867      * against this.
868      *
869      * @hide
870      */
871     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
872     public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS";
873 
874     /**
875      * Activity Action: Show battery saver settings.
876      *
877      * @hide
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 #INPUT_METHOD_SETTINGS} intent opens the keyboard layout dialog for the
988      * 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          * Whether lock-to-app will lock the keyguard when exiting.
2629          * @hide
2630          */
2631         public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked";
2632 
2633         /**
2634          * I am the lolrus.
2635          * <p>
2636          * Nonzero values indicate that the user has a bukkit.
2637          * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>.
2638          * @hide
2639          */
2640         public static final String EGG_MODE = "egg_mode";
2641 
2642         /**
2643          * Settings to backup. This is here so that it's in the same place as the settings
2644          * keys and easy to update.
2645          *
2646          * NOTE: Settings are backed up and restored in the order they appear
2647          *       in this array. If you have one setting depending on another,
2648          *       make sure that they are ordered appropriately.
2649          *
2650          * @hide
2651          */
2652         public static final String[] SETTINGS_TO_BACKUP = {
2653             STAY_ON_WHILE_PLUGGED_IN,   // moved to global
2654             WIFI_USE_STATIC_IP,
2655             WIFI_STATIC_IP,
2656             WIFI_STATIC_GATEWAY,
2657             WIFI_STATIC_NETMASK,
2658             WIFI_STATIC_DNS1,
2659             WIFI_STATIC_DNS2,
2660             BLUETOOTH_DISCOVERABILITY,
2661             BLUETOOTH_DISCOVERABILITY_TIMEOUT,
2662             DIM_SCREEN,
2663             SCREEN_OFF_TIMEOUT,
2664             SCREEN_BRIGHTNESS,
2665             SCREEN_BRIGHTNESS_MODE,
2666             SCREEN_AUTO_BRIGHTNESS_ADJ,
2667             VIBRATE_INPUT_DEVICES,
2668             MODE_RINGER_STREAMS_AFFECTED,
2669             VOLUME_VOICE,
2670             VOLUME_SYSTEM,
2671             VOLUME_RING,
2672             VOLUME_MUSIC,
2673             VOLUME_ALARM,
2674             VOLUME_NOTIFICATION,
2675             VOLUME_BLUETOOTH_SCO,
2676             VOLUME_VOICE + APPEND_FOR_LAST_AUDIBLE,
2677             VOLUME_SYSTEM + APPEND_FOR_LAST_AUDIBLE,
2678             VOLUME_RING + APPEND_FOR_LAST_AUDIBLE,
2679             VOLUME_MUSIC + APPEND_FOR_LAST_AUDIBLE,
2680             VOLUME_ALARM + APPEND_FOR_LAST_AUDIBLE,
2681             VOLUME_NOTIFICATION + APPEND_FOR_LAST_AUDIBLE,
2682             VOLUME_BLUETOOTH_SCO + APPEND_FOR_LAST_AUDIBLE,
2683             TEXT_AUTO_REPLACE,
2684             TEXT_AUTO_CAPS,
2685             TEXT_AUTO_PUNCTUATE,
2686             TEXT_SHOW_PASSWORD,
2687             AUTO_TIME,                  // moved to global
2688             AUTO_TIME_ZONE,             // moved to global
2689             TIME_12_24,
2690             DATE_FORMAT,
2691             DTMF_TONE_WHEN_DIALING,
2692             DTMF_TONE_TYPE_WHEN_DIALING,
2693             HEARING_AID,
2694             TTY_MODE,
2695             SOUND_EFFECTS_ENABLED,
2696             HAPTIC_FEEDBACK_ENABLED,
2697             POWER_SOUNDS_ENABLED,       // moved to global
2698             DOCK_SOUNDS_ENABLED,        // moved to global
2699             LOCKSCREEN_SOUNDS_ENABLED,
2700             SHOW_WEB_SUGGESTIONS,
2701             NOTIFICATION_LIGHT_PULSE,
2702             SIP_CALL_OPTIONS,
2703             SIP_RECEIVE_CALLS,
2704             POINTER_SPEED,
2705             VIBRATE_WHEN_RINGING,
2706             RINGTONE,
2707             NOTIFICATION_SOUND
2708         };
2709 
2710         /**
2711          * These entries are considered common between the personal and the managed profile,
2712          * since the managed profile doesn't get to change them.
2713          * @hide
2714          */
2715         public static final String[] CLONE_TO_MANAGED_PROFILE = {
2716             DATE_FORMAT,
2717             HAPTIC_FEEDBACK_ENABLED,
2718             SOUND_EFFECTS_ENABLED,
2719             TEXT_SHOW_PASSWORD,
2720             TIME_12_24
2721         };
2722 
2723         /**
2724          * When to use Wi-Fi calling
2725          *
2726          * @see android.telephony.TelephonyManager.WifiCallingChoices
2727          * @hide
2728          */
2729         public static final String WHEN_TO_MAKE_WIFI_CALLS = "when_to_make_wifi_calls";
2730 
2731         // Settings moved to Settings.Secure
2732 
2733         /**
2734          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED}
2735          * instead
2736          */
2737         @Deprecated
2738         public static final String ADB_ENABLED = Global.ADB_ENABLED;
2739 
2740         /**
2741          * @deprecated Use {@link android.provider.Settings.Secure#ANDROID_ID} instead
2742          */
2743         @Deprecated
2744         public static final String ANDROID_ID = Secure.ANDROID_ID;
2745 
2746         /**
2747          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
2748          */
2749         @Deprecated
2750         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
2751 
2752         /**
2753          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
2754          */
2755         @Deprecated
2756         public static final String DATA_ROAMING = Global.DATA_ROAMING;
2757 
2758         /**
2759          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
2760          */
2761         @Deprecated
2762         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
2763 
2764         /**
2765          * @deprecated Use {@link android.provider.Settings.Global#HTTP_PROXY} instead
2766          */
2767         @Deprecated
2768         public static final String HTTP_PROXY = Global.HTTP_PROXY;
2769 
2770         /**
2771          * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
2772          */
2773         @Deprecated
2774         public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
2775 
2776         /**
2777          * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED}
2778          * instead
2779          */
2780         @Deprecated
2781         public static final String LOCATION_PROVIDERS_ALLOWED = Secure.LOCATION_PROVIDERS_ALLOWED;
2782 
2783         /**
2784          * @deprecated Use {@link android.provider.Settings.Secure#LOGGING_ID} instead
2785          */
2786         @Deprecated
2787         public static final String LOGGING_ID = Secure.LOGGING_ID;
2788 
2789         /**
2790          * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
2791          */
2792         @Deprecated
2793         public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
2794 
2795         /**
2796          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_ENABLED}
2797          * instead
2798          */
2799         @Deprecated
2800         public static final String PARENTAL_CONTROL_ENABLED = Secure.PARENTAL_CONTROL_ENABLED;
2801 
2802         /**
2803          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_LAST_UPDATE}
2804          * instead
2805          */
2806         @Deprecated
2807         public static final String PARENTAL_CONTROL_LAST_UPDATE = Secure.PARENTAL_CONTROL_LAST_UPDATE;
2808 
2809         /**
2810          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_REDIRECT_URL}
2811          * instead
2812          */
2813         @Deprecated
2814         public static final String PARENTAL_CONTROL_REDIRECT_URL =
2815             Secure.PARENTAL_CONTROL_REDIRECT_URL;
2816 
2817         /**
2818          * @deprecated Use {@link android.provider.Settings.Secure#SETTINGS_CLASSNAME} instead
2819          */
2820         @Deprecated
2821         public static final String SETTINGS_CLASSNAME = Secure.SETTINGS_CLASSNAME;
2822 
2823         /**
2824          * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
2825          */
2826         @Deprecated
2827         public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
2828 
2829         /**
2830          * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
2831          */
2832         @Deprecated
2833         public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
2834 
2835        /**
2836          * @deprecated Use
2837          * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
2838          */
2839         @Deprecated
2840         public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
2841 
2842         /**
2843          * @deprecated Use
2844          * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
2845          */
2846         @Deprecated
2847         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
2848                 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
2849 
2850         /**
2851          * @deprecated Use
2852          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} instead
2853          */
2854         @Deprecated
2855         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
2856                 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
2857 
2858         /**
2859          * @deprecated Use
2860          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} instead
2861          */
2862         @Deprecated
2863         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
2864                 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
2865 
2866         /**
2867          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
2868          * instead
2869          */
2870         @Deprecated
2871         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
2872 
2873         /**
2874          * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} instead
2875          */
2876         @Deprecated
2877         public static final String WIFI_ON = Global.WIFI_ON;
2878 
2879         /**
2880          * @deprecated Use
2881          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE}
2882          * instead
2883          */
2884         @Deprecated
2885         public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
2886                 Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE;
2887 
2888         /**
2889          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_AP_COUNT} instead
2890          */
2891         @Deprecated
2892         public static final String WIFI_WATCHDOG_AP_COUNT = Secure.WIFI_WATCHDOG_AP_COUNT;
2893 
2894         /**
2895          * @deprecated Use
2896          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS} instead
2897          */
2898         @Deprecated
2899         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
2900                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS;
2901 
2902         /**
2903          * @deprecated Use
2904          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead
2905          */
2906         @Deprecated
2907         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
2908                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED;
2909 
2910         /**
2911          * @deprecated Use
2912          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS}
2913          * instead
2914          */
2915         @Deprecated
2916         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
2917                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS;
2918 
2919         /**
2920          * @deprecated Use
2921          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT} instead
2922          */
2923         @Deprecated
2924         public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
2925             Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT;
2926 
2927         /**
2928          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_MAX_AP_CHECKS}
2929          * instead
2930          */
2931         @Deprecated
2932         public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = Secure.WIFI_WATCHDOG_MAX_AP_CHECKS;
2933 
2934         /**
2935          * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
2936          */
2937         @Deprecated
2938         public static final String WIFI_WATCHDOG_ON = Global.WIFI_WATCHDOG_ON;
2939 
2940         /**
2941          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_COUNT} instead
2942          */
2943         @Deprecated
2944         public static final String WIFI_WATCHDOG_PING_COUNT = Secure.WIFI_WATCHDOG_PING_COUNT;
2945 
2946         /**
2947          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_DELAY_MS}
2948          * instead
2949          */
2950         @Deprecated
2951         public static final String WIFI_WATCHDOG_PING_DELAY_MS = Secure.WIFI_WATCHDOG_PING_DELAY_MS;
2952 
2953         /**
2954          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_TIMEOUT_MS}
2955          * instead
2956          */
2957         @Deprecated
2958         public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS =
2959             Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS;
2960     }
2961 
2962     /**
2963      * Secure system settings, containing system preferences that applications
2964      * can read but are not allowed to write.  These are for preferences that
2965      * the user must explicitly modify through the system UI or specialized
2966      * APIs for those values, not modified directly by applications.
2967      */
2968     public static final class Secure extends NameValueTable {
2969         public static final String SYS_PROP_SETTING_VERSION = "sys.settings_secure_version";
2970 
2971         /**
2972          * The content:// style URL for this table
2973          */
2974         public static final Uri CONTENT_URI =
2975             Uri.parse("content://" + AUTHORITY + "/secure");
2976 
2977         // Populated lazily, guarded by class object:
2978         private static final NameValueCache sNameValueCache = new NameValueCache(
2979                 SYS_PROP_SETTING_VERSION,
2980                 CONTENT_URI,
2981                 CALL_METHOD_GET_SECURE,
2982                 CALL_METHOD_PUT_SECURE);
2983 
2984         private static ILockSettings sLockSettings = null;
2985 
2986         private static boolean sIsSystemProcess;
2987         private static final HashSet<String> MOVED_TO_LOCK_SETTINGS;
2988         private static final HashSet<String> MOVED_TO_GLOBAL;
2989         static {
2990             MOVED_TO_LOCK_SETTINGS = new HashSet<String>(3);
2991             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_ENABLED);
2992             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_VISIBLE);
2993             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
2994 
2995             MOVED_TO_GLOBAL = new HashSet<String>();
2996             MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED);
2997             MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED);
2998             MOVED_TO_GLOBAL.add(Settings.Global.BLUETOOTH_ON);
2999             MOVED_TO_GLOBAL.add(Settings.Global.BUGREPORT_IN_POWER_MENU);
3000             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_CELL_BROADCAST_SMS);
3001             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_ROAMING_MODE);
3002             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_SUBSCRIPTION_MODE);
3003             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE);
3004             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI);
3005             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ROAMING);
3006             MOVED_TO_GLOBAL.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
3007             MOVED_TO_GLOBAL.add(Settings.Global.DEVICE_PROVISIONED);
3008             MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_DENSITY_FORCED);
3009             MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED);
3010             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
3011             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
3012             MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA);
3013             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
3014             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
3015             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES);
3016             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE);
3017             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED);
3018             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES);
3019             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL);
3020             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_REPORT_XT_OVER_DEV);
3021             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED);
3022             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE);
3023             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION);
3024             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_DELETE_AGE);
3025             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES);
3026             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_ROTATE_AGE);
3027             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION);
3028             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE);
3029             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES);
3030             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE);
3031             MOVED_TO_GLOBAL.add(Settings.Global.NETWORK_PREFERENCE);
3032             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_DIFF);
3033             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_SPACING);
3034             MOVED_TO_GLOBAL.add(Settings.Global.NTP_SERVER);
3035             MOVED_TO_GLOBAL.add(Settings.Global.NTP_TIMEOUT);
3036             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT);
3037             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
3038             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
3039             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS);
3040             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
3041             MOVED_TO_GLOBAL.add(Settings.Global.SAMPLING_PROFILER_MS);
3042             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
3043             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST);
3044             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL);
3045             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_APN);
3046             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_REQUIRED);
3047             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_SUPPORTED);
3048             MOVED_TO_GLOBAL.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
3049             MOVED_TO_GLOBAL.add(Settings.Global.USE_GOOGLE_MAIL);
3050             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_COUNTRY_CODE);
3051             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
3052             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FREQUENCY_BAND);
3053             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_IDLE_MS);
3054             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT);
3055             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
3056             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
3057             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
3058             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT);
3059             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON);
3060             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME);
3061             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SAVED_STATE);
3062             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
3063             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED);
3064             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ENHANCED_AUTO_JOIN);
3065             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORK_SHOW_RSSI);
3066             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_ON);
3067             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
3068             MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
3069             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_ENABLE);
3070             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
3071             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
3072             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
3073             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
3074             MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
3075             MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL);
3076             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD);
3077             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
3078             MOVED_TO_GLOBAL.add(Settings.Global.SEND_ACTION_APP_ERROR);
3079             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_AGE_SECONDS);
3080             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_MAX_FILES);
3081             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_KB);
3082             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_PERCENT);
3083             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_RESERVE_PERCENT);
3084             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_TAG_PREFIX);
3085             MOVED_TO_GLOBAL.add(Settings.Global.ERROR_LOGCAT_PREFIX);
3086             MOVED_TO_GLOBAL.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL);
3087             MOVED_TO_GLOBAL.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
3088             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE);
3089             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES);
3090             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES);
3091             MOVED_TO_GLOBAL.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
3092             MOVED_TO_GLOBAL.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY);
3093             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);
3094             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_SERVER);
3095             MOVED_TO_GLOBAL.add(Settings.Global.NSD_ON);
3096             MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION);
3097             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_INSTALL_LOCATION);
3098             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY);
3099             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
3100             MOVED_TO_GLOBAL.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
3101             MOVED_TO_GLOBAL.add(Settings.Global.HTTP_PROXY);
3102             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST);
3103             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT);
3104             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
3105             MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
3106             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER);
3107             MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE);
3108             MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY);
3109         }
3110 
3111         /** @hide */
getMovedKeys(HashSet<String> outKeySet)3112         public static void getMovedKeys(HashSet<String> outKeySet) {
3113             outKeySet.addAll(MOVED_TO_GLOBAL);
3114         }
3115 
3116         /**
3117          * Look up a name in the database.
3118          * @param resolver to access the database with
3119          * @param name to look up in the table
3120          * @return the corresponding value, or null if not present
3121          */
getString(ContentResolver resolver, String name)3122         public static String getString(ContentResolver resolver, String name) {
3123             return getStringForUser(resolver, name, UserHandle.myUserId());
3124         }
3125 
3126         /** @hide */
getStringForUser(ContentResolver resolver, String name, int userHandle)3127         public static String getStringForUser(ContentResolver resolver, String name,
3128                 int userHandle) {
3129             if (MOVED_TO_GLOBAL.contains(name)) {
3130                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
3131                         + " to android.provider.Settings.Global.");
3132                 return Global.getStringForUser(resolver, name, userHandle);
3133             }
3134 
3135             if (MOVED_TO_LOCK_SETTINGS.contains(name)) {
3136                 synchronized (Secure.class) {
3137                     if (sLockSettings == null) {
3138                         sLockSettings = ILockSettings.Stub.asInterface(
3139                                 (IBinder) ServiceManager.getService("lock_settings"));
3140                         sIsSystemProcess = Process.myUid() == Process.SYSTEM_UID;
3141                     }
3142                 }
3143                 if (sLockSettings != null && !sIsSystemProcess) {
3144                     try {
3145                         return sLockSettings.getString(name, "0", userHandle);
3146                     } catch (RemoteException re) {
3147                         // Fall through
3148                     }
3149                 }
3150             }
3151 
3152             return sNameValueCache.getStringForUser(resolver, name, userHandle);
3153         }
3154 
3155         /**
3156          * Store a name/value pair into the database.
3157          * @param resolver to access the database with
3158          * @param name to store
3159          * @param value to associate with the name
3160          * @return true if the value was set, false on database errors
3161          */
putString(ContentResolver resolver, String name, String value)3162         public static boolean putString(ContentResolver resolver, String name, String value) {
3163             return putStringForUser(resolver, name, value, UserHandle.myUserId());
3164         }
3165 
3166         /** @hide */
putStringForUser(ContentResolver resolver, String name, String value, int userHandle)3167         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
3168                 int userHandle) {
3169             if (LOCATION_MODE.equals(name)) {
3170                 // HACK ALERT: temporary hack to work around b/10491283.
3171                 // TODO: once b/10491283 fixed, remove this hack
3172                 return setLocationModeForUser(resolver, Integer.parseInt(value), userHandle);
3173             }
3174             if (MOVED_TO_GLOBAL.contains(name)) {
3175                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
3176                         + " to android.provider.Settings.Global");
3177                 return Global.putStringForUser(resolver, name, value, userHandle);
3178             }
3179             return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
3180         }
3181 
3182         /**
3183          * Construct the content URI for a particular name/value pair,
3184          * useful for monitoring changes with a ContentObserver.
3185          * @param name to look up in the table
3186          * @return the corresponding content URI, or null if not present
3187          */
getUriFor(String name)3188         public static Uri getUriFor(String name) {
3189             if (MOVED_TO_GLOBAL.contains(name)) {
3190                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
3191                         + " to android.provider.Settings.Global, returning global URI.");
3192                 return Global.getUriFor(Global.CONTENT_URI, name);
3193             }
3194             return getUriFor(CONTENT_URI, name);
3195         }
3196 
3197         /**
3198          * Convenience function for retrieving a single secure settings value
3199          * as an integer.  Note that internally setting values are always
3200          * stored as strings; this function converts the string to an integer
3201          * for you.  The default value will be returned if the setting is
3202          * not defined or not an integer.
3203          *
3204          * @param cr The ContentResolver to access.
3205          * @param name The name of the setting to retrieve.
3206          * @param def Value to return if the setting is not defined.
3207          *
3208          * @return The setting's current value, or 'def' if it is not defined
3209          * or not a valid integer.
3210          */
getInt(ContentResolver cr, String name, int def)3211         public static int getInt(ContentResolver cr, String name, int def) {
3212             return getIntForUser(cr, name, def, UserHandle.myUserId());
3213         }
3214 
3215         /** @hide */
getIntForUser(ContentResolver cr, String name, int def, int userHandle)3216         public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
3217             if (LOCATION_MODE.equals(name)) {
3218                 // HACK ALERT: temporary hack to work around b/10491283.
3219                 // TODO: once b/10491283 fixed, remove this hack
3220                 return getLocationModeForUser(cr, userHandle);
3221             }
3222             String v = getStringForUser(cr, name, userHandle);
3223             try {
3224                 return v != null ? Integer.parseInt(v) : def;
3225             } catch (NumberFormatException e) {
3226                 return def;
3227             }
3228         }
3229 
3230         /**
3231          * Convenience function for retrieving a single secure settings value
3232          * as an integer.  Note that internally setting values are always
3233          * stored as strings; this function converts the string to an integer
3234          * for you.
3235          * <p>
3236          * This version does not take a default value.  If the setting has not
3237          * been set, or the string value is not a number,
3238          * it throws {@link SettingNotFoundException}.
3239          *
3240          * @param cr The ContentResolver to access.
3241          * @param name The name of the setting to retrieve.
3242          *
3243          * @throws SettingNotFoundException Thrown if a setting by the given
3244          * name can't be found or the setting value is not an integer.
3245          *
3246          * @return The setting's current value.
3247          */
getInt(ContentResolver cr, String name)3248         public static int getInt(ContentResolver cr, String name)
3249                 throws SettingNotFoundException {
3250             return getIntForUser(cr, name, UserHandle.myUserId());
3251         }
3252 
3253         /** @hide */
getIntForUser(ContentResolver cr, String name, int userHandle)3254         public static int getIntForUser(ContentResolver cr, String name, int userHandle)
3255                 throws SettingNotFoundException {
3256             if (LOCATION_MODE.equals(name)) {
3257                 // HACK ALERT: temporary hack to work around b/10491283.
3258                 // TODO: once b/10491283 fixed, remove this hack
3259                 return getLocationModeForUser(cr, userHandle);
3260             }
3261             String v = getStringForUser(cr, name, userHandle);
3262             try {
3263                 return Integer.parseInt(v);
3264             } catch (NumberFormatException e) {
3265                 throw new SettingNotFoundException(name);
3266             }
3267         }
3268 
3269         /**
3270          * Convenience function for updating a single settings value as an
3271          * integer. This will either create a new entry in the table if the
3272          * given name does not exist, or modify the value of the existing row
3273          * with that name.  Note that internally setting values are always
3274          * stored as strings, so this function converts the given value to a
3275          * string before storing it.
3276          *
3277          * @param cr The ContentResolver to access.
3278          * @param name The name of the setting to modify.
3279          * @param value The new value for the setting.
3280          * @return true if the value was set, false on database errors
3281          */
putInt(ContentResolver cr, String name, int value)3282         public static boolean putInt(ContentResolver cr, String name, int value) {
3283             return putIntForUser(cr, name, value, UserHandle.myUserId());
3284         }
3285 
3286         /** @hide */
putIntForUser(ContentResolver cr, String name, int value, int userHandle)3287         public static boolean putIntForUser(ContentResolver cr, String name, int value,
3288                 int userHandle) {
3289             return putStringForUser(cr, name, Integer.toString(value), userHandle);
3290         }
3291 
3292         /**
3293          * Convenience function for retrieving a single secure settings value
3294          * as a {@code long}.  Note that internally setting values are always
3295          * stored as strings; this function converts the string to a {@code long}
3296          * for you.  The default value will be returned if the setting is
3297          * not defined or not a {@code long}.
3298          *
3299          * @param cr The ContentResolver to access.
3300          * @param name The name of the setting to retrieve.
3301          * @param def Value to return if the setting is not defined.
3302          *
3303          * @return The setting's current value, or 'def' if it is not defined
3304          * or not a valid {@code long}.
3305          */
getLong(ContentResolver cr, String name, long def)3306         public static long getLong(ContentResolver cr, String name, long def) {
3307             return getLongForUser(cr, name, def, UserHandle.myUserId());
3308         }
3309 
3310         /** @hide */
getLongForUser(ContentResolver cr, String name, long def, int userHandle)3311         public static long getLongForUser(ContentResolver cr, String name, long def,
3312                 int userHandle) {
3313             String valString = getStringForUser(cr, name, userHandle);
3314             long value;
3315             try {
3316                 value = valString != null ? Long.parseLong(valString) : def;
3317             } catch (NumberFormatException e) {
3318                 value = def;
3319             }
3320             return value;
3321         }
3322 
3323         /**
3324          * Convenience function for retrieving a single secure settings value
3325          * as a {@code long}.  Note that internally setting values are always
3326          * stored as strings; this function converts the string to a {@code long}
3327          * for you.
3328          * <p>
3329          * This version does not take a default value.  If the setting has not
3330          * been set, or the string value is not a number,
3331          * it throws {@link SettingNotFoundException}.
3332          *
3333          * @param cr The ContentResolver to access.
3334          * @param name The name of the setting to retrieve.
3335          *
3336          * @return The setting's current value.
3337          * @throws SettingNotFoundException Thrown if a setting by the given
3338          * name can't be found or the setting value is not an integer.
3339          */
getLong(ContentResolver cr, String name)3340         public static long getLong(ContentResolver cr, String name)
3341                 throws SettingNotFoundException {
3342             return getLongForUser(cr, name, UserHandle.myUserId());
3343         }
3344 
3345         /** @hide */
getLongForUser(ContentResolver cr, String name, int userHandle)3346         public static long getLongForUser(ContentResolver cr, String name, int userHandle)
3347                 throws SettingNotFoundException {
3348             String valString = getStringForUser(cr, name, userHandle);
3349             try {
3350                 return Long.parseLong(valString);
3351             } catch (NumberFormatException e) {
3352                 throw new SettingNotFoundException(name);
3353             }
3354         }
3355 
3356         /**
3357          * Convenience function for updating a secure settings value as a long
3358          * integer. This will either create a new entry in the table if the
3359          * given name does not exist, or modify the value of the existing row
3360          * with that name.  Note that internally setting values are always
3361          * stored as strings, so this function converts the given value to a
3362          * string before storing it.
3363          *
3364          * @param cr The ContentResolver to access.
3365          * @param name The name of the setting to modify.
3366          * @param value The new value for the setting.
3367          * @return true if the value was set, false on database errors
3368          */
putLong(ContentResolver cr, String name, long value)3369         public static boolean putLong(ContentResolver cr, String name, long value) {
3370             return putLongForUser(cr, name, value, UserHandle.myUserId());
3371         }
3372 
3373         /** @hide */
putLongForUser(ContentResolver cr, String name, long value, int userHandle)3374         public static boolean putLongForUser(ContentResolver cr, String name, long value,
3375                 int userHandle) {
3376             return putStringForUser(cr, name, Long.toString(value), userHandle);
3377         }
3378 
3379         /**
3380          * Convenience function for retrieving a single secure settings value
3381          * as a floating point number.  Note that internally setting values are
3382          * always stored as strings; this function converts the string to an
3383          * float for you. The default value will be returned if the setting
3384          * is not defined or not a valid float.
3385          *
3386          * @param cr The ContentResolver to access.
3387          * @param name The name of the setting to retrieve.
3388          * @param def Value to return if the setting is not defined.
3389          *
3390          * @return The setting's current value, or 'def' if it is not defined
3391          * or not a valid float.
3392          */
getFloat(ContentResolver cr, String name, float def)3393         public static float getFloat(ContentResolver cr, String name, float def) {
3394             return getFloatForUser(cr, name, def, UserHandle.myUserId());
3395         }
3396 
3397         /** @hide */
getFloatForUser(ContentResolver cr, String name, float def, int userHandle)3398         public static float getFloatForUser(ContentResolver cr, String name, float def,
3399                 int userHandle) {
3400             String v = getStringForUser(cr, name, userHandle);
3401             try {
3402                 return v != null ? Float.parseFloat(v) : def;
3403             } catch (NumberFormatException e) {
3404                 return def;
3405             }
3406         }
3407 
3408         /**
3409          * Convenience function for retrieving a single secure settings value
3410          * as a float.  Note that internally setting values are always
3411          * stored as strings; this function converts the string to a float
3412          * for you.
3413          * <p>
3414          * This version does not take a default value.  If the setting has not
3415          * been set, or the string value is not a number,
3416          * it throws {@link SettingNotFoundException}.
3417          *
3418          * @param cr The ContentResolver to access.
3419          * @param name The name of the setting to retrieve.
3420          *
3421          * @throws SettingNotFoundException Thrown if a setting by the given
3422          * name can't be found or the setting value is not a float.
3423          *
3424          * @return The setting's current value.
3425          */
getFloat(ContentResolver cr, String name)3426         public static float getFloat(ContentResolver cr, String name)
3427                 throws SettingNotFoundException {
3428             return getFloatForUser(cr, name, UserHandle.myUserId());
3429         }
3430 
3431         /** @hide */
getFloatForUser(ContentResolver cr, String name, int userHandle)3432         public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
3433                 throws SettingNotFoundException {
3434             String v = getStringForUser(cr, name, userHandle);
3435             if (v == null) {
3436                 throw new SettingNotFoundException(name);
3437             }
3438             try {
3439                 return Float.parseFloat(v);
3440             } catch (NumberFormatException e) {
3441                 throw new SettingNotFoundException(name);
3442             }
3443         }
3444 
3445         /**
3446          * Convenience function for updating a single settings value as a
3447          * floating point number. This will either create a new entry in the
3448          * table if the given name does not exist, or modify the value of the
3449          * existing row with that name.  Note that internally setting values
3450          * are always stored as strings, so this function converts the given
3451          * value to a string before storing it.
3452          *
3453          * @param cr The ContentResolver to access.
3454          * @param name The name of the setting to modify.
3455          * @param value The new value for the setting.
3456          * @return true if the value was set, false on database errors
3457          */
putFloat(ContentResolver cr, String name, float value)3458         public static boolean putFloat(ContentResolver cr, String name, float value) {
3459             return putFloatForUser(cr, name, value, UserHandle.myUserId());
3460         }
3461 
3462         /** @hide */
putFloatForUser(ContentResolver cr, String name, float value, int userHandle)3463         public static boolean putFloatForUser(ContentResolver cr, String name, float value,
3464                 int userHandle) {
3465             return putStringForUser(cr, name, Float.toString(value), userHandle);
3466         }
3467 
3468         /**
3469          * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}
3470          * instead
3471          */
3472         @Deprecated
3473         public static final String DEVELOPMENT_SETTINGS_ENABLED =
3474                 Global.DEVELOPMENT_SETTINGS_ENABLED;
3475 
3476         /**
3477          * When the user has enable the option to have a "bug report" command
3478          * in the power menu.
3479          * @deprecated Use {@link android.provider.Settings.Global#BUGREPORT_IN_POWER_MENU} instead
3480          * @hide
3481          */
3482         @Deprecated
3483         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
3484 
3485         /**
3486          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} instead
3487          */
3488         @Deprecated
3489         public static final String ADB_ENABLED = Global.ADB_ENABLED;
3490 
3491         /**
3492          * Setting to allow mock locations and location provider status to be injected into the
3493          * LocationManager service for testing purposes during application development.  These
3494          * locations and status values  override actual location and status information generated
3495          * by network, gps, or other location providers.
3496          */
3497         public static final String ALLOW_MOCK_LOCATION = "mock_location";
3498 
3499         /**
3500          * A 64-bit number (as a hex string) that is randomly
3501          * generated when the user first sets up the device and should remain
3502          * constant for the lifetime of the user's device. The value may
3503          * change if a factory reset is performed on the device.
3504          * <p class="note"><strong>Note:</strong> When a device has <a
3505          * href="{@docRoot}about/versions/android-4.2.html#MultipleUsers">multiple users</a>
3506          * (available on certain devices running Android 4.2 or higher), each user appears as a
3507          * completely separate device, so the {@code ANDROID_ID} value is unique to each
3508          * user.</p>
3509          */
3510         public static final String ANDROID_ID = "android_id";
3511 
3512         /**
3513          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
3514          */
3515         @Deprecated
3516         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
3517 
3518         /**
3519          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
3520          */
3521         @Deprecated
3522         public static final String DATA_ROAMING = Global.DATA_ROAMING;
3523 
3524         /**
3525          * Setting to record the input method used by default, holding the ID
3526          * of the desired method.
3527          */
3528         public static final String DEFAULT_INPUT_METHOD = "default_input_method";
3529 
3530         /**
3531          * Setting to record the input method subtype used by default, holding the ID
3532          * of the desired method.
3533          */
3534         public static final String SELECTED_INPUT_METHOD_SUBTYPE =
3535                 "selected_input_method_subtype";
3536 
3537         /**
3538          * Setting to record the history of input method subtype, holding the pair of ID of IME
3539          * and its last used subtype.
3540          * @hide
3541          */
3542         public static final String INPUT_METHODS_SUBTYPE_HISTORY =
3543                 "input_methods_subtype_history";
3544 
3545         /**
3546          * Setting to record the visibility of input method selector
3547          */
3548         public static final String INPUT_METHOD_SELECTOR_VISIBILITY =
3549                 "input_method_selector_visibility";
3550 
3551         /**
3552          * The currently selected voice interaction service flattened ComponentName.
3553          * @hide
3554          */
3555         public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
3556 
3557         /**
3558          * bluetooth HCI snoop log configuration
3559          * @hide
3560          */
3561         public static final String BLUETOOTH_HCI_LOG =
3562                 "bluetooth_hci_log";
3563 
3564         /**
3565          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
3566          */
3567         @Deprecated
3568         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
3569 
3570         /**
3571          * Whether the current user has been set up via setup wizard (0 = false, 1 = true)
3572          * @hide
3573          */
3574         public static final String USER_SETUP_COMPLETE = "user_setup_complete";
3575 
3576         /**
3577          * List of input methods that are currently enabled.  This is a string
3578          * containing the IDs of all enabled input methods, each ID separated
3579          * by ':'.
3580          */
3581         public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
3582 
3583         /**
3584          * List of system input methods that are currently disabled.  This is a string
3585          * containing the IDs of all disabled input methods, each ID separated
3586          * by ':'.
3587          * @hide
3588          */
3589         public static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods";
3590 
3591         /**
3592          * Whether to show the IME when a hard keyboard is connected. This is a boolean that
3593          * determines if the IME should be shown when a hard keyboard is attached.
3594          * @hide
3595          */
3596         public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
3597 
3598         /**
3599          * Host name and port for global http proxy. Uses ':' seperator for
3600          * between host and port.
3601          *
3602          * @deprecated Use {@link Global#HTTP_PROXY}
3603          */
3604         @Deprecated
3605         public static final String HTTP_PROXY = Global.HTTP_PROXY;
3606 
3607         /**
3608          * Whether applications can be installed for this user via the system's
3609          * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism.
3610          *
3611          * <p>1 = permit app installation via the system package installer intent
3612          * <p>0 = do not allow use of the package installer
3613          */
3614         public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
3615 
3616         /**
3617          * Comma-separated list of location providers that activities may access. Do not rely on
3618          * this value being present in settings.db or on ContentObserver notifications on the
3619          * corresponding Uri.
3620          *
3621          * @deprecated use {@link #LOCATION_MODE} and
3622          * {@link LocationManager#MODE_CHANGED_ACTION} (or
3623          * {@link LocationManager#PROVIDERS_CHANGED_ACTION})
3624          */
3625         @Deprecated
3626         public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
3627 
3628         /**
3629          * The degree of location access enabled by the user.
3630          * <p>
3631          * When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link
3632          * #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link
3633          * #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link
3634          * #getInt(ContentResolver, String)}, the caller must gracefully handle additional location
3635          * modes that might be added in the future.
3636          * <p>
3637          * Note: do not rely on this value being present in settings.db or on ContentObserver
3638          * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION}
3639          * to receive changes in this value.
3640          */
3641         public static final String LOCATION_MODE = "location_mode";
3642 
3643         /**
3644          * Location access disabled.
3645          */
3646         public static final int LOCATION_MODE_OFF = 0;
3647         /**
3648          * Network Location Provider disabled, but GPS and other sensors enabled.
3649          */
3650         public static final int LOCATION_MODE_SENSORS_ONLY = 1;
3651         /**
3652          * Reduced power usage, such as limiting the number of GPS updates per hour. Requests
3653          * with {@link android.location.Criteria#POWER_HIGH} may be downgraded to
3654          * {@link android.location.Criteria#POWER_MEDIUM}.
3655          */
3656         public static final int LOCATION_MODE_BATTERY_SAVING = 2;
3657         /**
3658          * Best-effort location computation allowed.
3659          */
3660         public static final int LOCATION_MODE_HIGH_ACCURACY = 3;
3661 
3662         /**
3663          * A flag containing settings used for biometric weak
3664          * @hide
3665          */
3666         public static final String LOCK_BIOMETRIC_WEAK_FLAGS =
3667                 "lock_biometric_weak_flags";
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          * Whether background data usage is allowed.
4353          *
4354          * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH},
4355          *             availability of background data depends on several
4356          *             combined factors. When background data is unavailable,
4357          *             {@link ConnectivityManager#getActiveNetworkInfo()} will
4358          *             now appear disconnected.
4359          */
4360         @Deprecated
4361         public static final String BACKGROUND_DATA = "background_data";
4362 
4363         /**
4364          * Origins for which browsers should allow geolocation by default.
4365          * The value is a space-separated list of origins.
4366          */
4367         public static final String ALLOWED_GEOLOCATION_ORIGINS
4368                 = "allowed_geolocation_origins";
4369 
4370         /**
4371          * The preferred TTY mode     0 = TTy Off, CDMA default
4372          *                            1 = TTY Full
4373          *                            2 = TTY HCO
4374          *                            3 = TTY VCO
4375          * @hide
4376          */
4377         public static final String PREFERRED_TTY_MODE =
4378                 "preferred_tty_mode";
4379 
4380         /**
4381          * Whether the enhanced voice privacy mode is enabled.
4382          * 0 = normal voice privacy
4383          * 1 = enhanced voice privacy
4384          * @hide
4385          */
4386         public static final String ENHANCED_VOICE_PRIVACY_ENABLED = "enhanced_voice_privacy_enabled";
4387 
4388         /**
4389          * Whether the TTY mode mode is enabled.
4390          * 0 = disabled
4391          * 1 = enabled
4392          * @hide
4393          */
4394         public static final String TTY_MODE_ENABLED = "tty_mode_enabled";
4395 
4396         /**
4397          * Controls whether settings backup is enabled.
4398          * Type: int ( 0 = disabled, 1 = enabled )
4399          * @hide
4400          */
4401         public static final String BACKUP_ENABLED = "backup_enabled";
4402 
4403         /**
4404          * Controls whether application data is automatically restored from backup
4405          * at install time.
4406          * Type: int ( 0 = disabled, 1 = enabled )
4407          * @hide
4408          */
4409         public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore";
4410 
4411         /**
4412          * Indicates whether settings backup has been fully provisioned.
4413          * Type: int ( 0 = unprovisioned, 1 = fully provisioned )
4414          * @hide
4415          */
4416         public static final String BACKUP_PROVISIONED = "backup_provisioned";
4417 
4418         /**
4419          * Component of the transport to use for backup/restore.
4420          * @hide
4421          */
4422         public static final String BACKUP_TRANSPORT = "backup_transport";
4423 
4424         /**
4425          * Version for which the setup wizard was last shown.  Bumped for
4426          * each release when there is new setup information to show.
4427          * @hide
4428          */
4429         public static final String LAST_SETUP_SHOWN = "last_setup_shown";
4430 
4431         /**
4432          * The interval in milliseconds after which Wi-Fi is considered idle.
4433          * When idle, it is possible for the device to be switched from Wi-Fi to
4434          * the mobile data network.
4435          * @hide
4436          * @deprecated Use {@link android.provider.Settings.Global#WIFI_IDLE_MS}
4437          * instead.
4438          */
4439         @Deprecated
4440         public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS;
4441 
4442         /**
4443          * The global search provider chosen by the user (if multiple global
4444          * search providers are installed). This will be the provider returned
4445          * by {@link SearchManager#getGlobalSearchActivity()} if it's still
4446          * installed. This setting is stored as a flattened component name as
4447          * per {@link ComponentName#flattenToString()}.
4448          *
4449          * @hide
4450          */
4451         public static final String SEARCH_GLOBAL_SEARCH_ACTIVITY =
4452                 "search_global_search_activity";
4453 
4454         /**
4455          * The number of promoted sources in GlobalSearch.
4456          * @hide
4457          */
4458         public static final String SEARCH_NUM_PROMOTED_SOURCES = "search_num_promoted_sources";
4459         /**
4460          * The maximum number of suggestions returned by GlobalSearch.
4461          * @hide
4462          */
4463         public static final String SEARCH_MAX_RESULTS_TO_DISPLAY = "search_max_results_to_display";
4464         /**
4465          * The number of suggestions GlobalSearch will ask each non-web search source for.
4466          * @hide
4467          */
4468         public static final String SEARCH_MAX_RESULTS_PER_SOURCE = "search_max_results_per_source";
4469         /**
4470          * The number of suggestions the GlobalSearch will ask the web search source for.
4471          * @hide
4472          */
4473         public static final String SEARCH_WEB_RESULTS_OVERRIDE_LIMIT =
4474                 "search_web_results_override_limit";
4475         /**
4476          * The number of milliseconds that GlobalSearch will wait for suggestions from
4477          * promoted sources before continuing with all other sources.
4478          * @hide
4479          */
4480         public static final String SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS =
4481                 "search_promoted_source_deadline_millis";
4482         /**
4483          * The number of milliseconds before GlobalSearch aborts search suggesiton queries.
4484          * @hide
4485          */
4486         public static final String SEARCH_SOURCE_TIMEOUT_MILLIS = "search_source_timeout_millis";
4487         /**
4488          * The maximum number of milliseconds that GlobalSearch shows the previous results
4489          * after receiving a new query.
4490          * @hide
4491          */
4492         public static final String SEARCH_PREFILL_MILLIS = "search_prefill_millis";
4493         /**
4494          * The maximum age of log data used for shortcuts in GlobalSearch.
4495          * @hide
4496          */
4497         public static final String SEARCH_MAX_STAT_AGE_MILLIS = "search_max_stat_age_millis";
4498         /**
4499          * The maximum age of log data used for source ranking in GlobalSearch.
4500          * @hide
4501          */
4502         public static final String SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS =
4503                 "search_max_source_event_age_millis";
4504         /**
4505          * The minimum number of impressions needed to rank a source in GlobalSearch.
4506          * @hide
4507          */
4508         public static final String SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING =
4509                 "search_min_impressions_for_source_ranking";
4510         /**
4511          * The minimum number of clicks needed to rank a source in GlobalSearch.
4512          * @hide
4513          */
4514         public static final String SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING =
4515                 "search_min_clicks_for_source_ranking";
4516         /**
4517          * The maximum number of shortcuts shown by GlobalSearch.
4518          * @hide
4519          */
4520         public static final String SEARCH_MAX_SHORTCUTS_RETURNED = "search_max_shortcuts_returned";
4521         /**
4522          * The size of the core thread pool for suggestion queries in GlobalSearch.
4523          * @hide
4524          */
4525         public static final String SEARCH_QUERY_THREAD_CORE_POOL_SIZE =
4526                 "search_query_thread_core_pool_size";
4527         /**
4528          * The maximum size of the thread pool for suggestion queries in GlobalSearch.
4529          * @hide
4530          */
4531         public static final String SEARCH_QUERY_THREAD_MAX_POOL_SIZE =
4532                 "search_query_thread_max_pool_size";
4533         /**
4534          * The size of the core thread pool for shortcut refreshing in GlobalSearch.
4535          * @hide
4536          */
4537         public static final String SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE =
4538                 "search_shortcut_refresh_core_pool_size";
4539         /**
4540          * The maximum size of the thread pool for shortcut refreshing in GlobalSearch.
4541          * @hide
4542          */
4543         public static final String SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE =
4544                 "search_shortcut_refresh_max_pool_size";
4545         /**
4546          * The maximun time that excess threads in the GlobalSeach thread pools will
4547          * wait before terminating.
4548          * @hide
4549          */
4550         public static final String SEARCH_THREAD_KEEPALIVE_SECONDS =
4551                 "search_thread_keepalive_seconds";
4552         /**
4553          * The maximum number of concurrent suggestion queries to each source.
4554          * @hide
4555          */
4556         public static final String SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT =
4557                 "search_per_source_concurrent_query_limit";
4558 
4559         /**
4560          * Whether or not alert sounds are played on MountService events. (0 = false, 1 = true)
4561          * @hide
4562          */
4563         public static final String MOUNT_PLAY_NOTIFICATION_SND = "mount_play_not_snd";
4564 
4565         /**
4566          * Whether or not UMS auto-starts on UMS host detection. (0 = false, 1 = true)
4567          * @hide
4568          */
4569         public static final String MOUNT_UMS_AUTOSTART = "mount_ums_autostart";
4570 
4571         /**
4572          * Whether or not a notification is displayed on UMS host detection. (0 = false, 1 = true)
4573          * @hide
4574          */
4575         public static final String MOUNT_UMS_PROMPT = "mount_ums_prompt";
4576 
4577         /**
4578          * Whether or not a notification is displayed while UMS is enabled. (0 = false, 1 = true)
4579          * @hide
4580          */
4581         public static final String MOUNT_UMS_NOTIFY_ENABLED = "mount_ums_notify_enabled";
4582 
4583         /**
4584          * If nonzero, ANRs in invisible background processes bring up a dialog.
4585          * Otherwise, the process will be silently killed.
4586          * @hide
4587          */
4588         public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
4589 
4590         /**
4591          * (Experimental). If nonzero, WebView uses data reduction proxy to save network
4592          * bandwidth. Otherwise, WebView does not use data reduction proxy.
4593          * @hide
4594          */
4595         public static final String WEBVIEW_DATA_REDUCTION_PROXY = "webview_data_reduction_proxy";
4596 
4597         /**
4598          * The {@link ComponentName} string of the service to be used as the voice recognition
4599          * service.
4600          *
4601          * @hide
4602          */
4603         public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service";
4604 
4605         /**
4606          * Stores whether an user has consented to have apps verified through PAM.
4607          * The value is boolean (1 or 0).
4608          *
4609          * @hide
4610          */
4611         public static final String PACKAGE_VERIFIER_USER_CONSENT =
4612             "package_verifier_user_consent";
4613 
4614         /**
4615          * The {@link ComponentName} string of the selected spell checker service which is
4616          * one of the services managed by the text service manager.
4617          *
4618          * @hide
4619          */
4620         public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
4621 
4622         /**
4623          * The {@link ComponentName} string of the selected subtype of the selected spell checker
4624          * service which is one of the services managed by the text service manager.
4625          *
4626          * @hide
4627          */
4628         public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
4629                 "selected_spell_checker_subtype";
4630 
4631         /**
4632          * The {@link ComponentName} string whether spell checker is enabled or not.
4633          *
4634          * @hide
4635          */
4636         public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
4637 
4638         /**
4639          * What happens when the user presses the Power button while in-call
4640          * and the screen is on.<br/>
4641          * <b>Values:</b><br/>
4642          * 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/>
4643          * 2 - The Power button hangs up the current call.<br/>
4644          *
4645          * @hide
4646          */
4647         public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior";
4648 
4649         /**
4650          * INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen".
4651          * @hide
4652          */
4653         public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1;
4654 
4655         /**
4656          * INCALL_POWER_BUTTON_BEHAVIOR value for "hang up".
4657          * @hide
4658          */
4659         public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2;
4660 
4661         /**
4662          * INCALL_POWER_BUTTON_BEHAVIOR default value.
4663          * @hide
4664          */
4665         public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT =
4666                 INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
4667 
4668         /**
4669          * Whether the device should wake when the wake gesture sensor detects motion.
4670          * @hide
4671          */
4672         public static final String WAKE_GESTURE_ENABLED = "wake_gesture_enabled";
4673 
4674         /**
4675          * Whether the device should doze if configured.
4676          * @hide
4677          */
4678         public static final String DOZE_ENABLED = "doze_enabled";
4679 
4680         /**
4681          * The current night mode that has been selected by the user.  Owned
4682          * and controlled by UiModeManagerService.  Constants are as per
4683          * UiModeManager.
4684          * @hide
4685          */
4686         public static final String UI_NIGHT_MODE = "ui_night_mode";
4687 
4688         /**
4689          * Whether screensavers are enabled.
4690          * @hide
4691          */
4692         public static final String SCREENSAVER_ENABLED = "screensaver_enabled";
4693 
4694         /**
4695          * The user's chosen screensaver components.
4696          *
4697          * These will be launched by the PhoneWindowManager after a timeout when not on
4698          * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1).
4699          * @hide
4700          */
4701         public static final String SCREENSAVER_COMPONENTS = "screensaver_components";
4702 
4703         /**
4704          * If screensavers are enabled, whether the screensaver should be automatically launched
4705          * when the device is inserted into a (desk) dock.
4706          * @hide
4707          */
4708         public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
4709 
4710         /**
4711          * If screensavers are enabled, whether the screensaver should be automatically launched
4712          * when the screen times out when not on battery.
4713          * @hide
4714          */
4715         public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
4716 
4717         /**
4718          * If screensavers are enabled, the default screensaver component.
4719          * @hide
4720          */
4721         public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component";
4722 
4723         /**
4724          * The default NFC payment component
4725          * @hide
4726          */
4727         public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
4728 
4729         /**
4730          * Whether NFC payment is handled by the foreground application or a default.
4731          * @hide
4732          */
4733         public static final String NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground";
4734 
4735         /**
4736          * Specifies the package name currently configured to be the primary sms application
4737          * @hide
4738          */
4739         public static final String SMS_DEFAULT_APPLICATION = "sms_default_application";
4740 
4741         /**
4742          * Name of a package that the current user has explicitly allowed to see all of that
4743          * user's notifications.
4744          *
4745          * @hide
4746          */
4747         public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
4748 
4749         /**
4750          * @hide
4751          */
4752         public static final String ENABLED_CONDITION_PROVIDERS = "enabled_condition_providers";
4753 
4754         /** @hide */
4755         public static final String BAR_SERVICE_COMPONENT = "bar_service_component";
4756 
4757         /** @hide */
4758         public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
4759 
4760         /**
4761          * This is the query URI for finding a print service to install.
4762          *
4763          * @hide
4764          */
4765         public static final String PRINT_SERVICE_SEARCH_URI = "print_service_search_uri";
4766 
4767         /**
4768          * This is the query URI for finding a NFC payment service to install.
4769          *
4770          * @hide
4771          */
4772         public static final String PAYMENT_SERVICE_SEARCH_URI = "payment_service_search_uri";
4773 
4774         /**
4775          * If enabled, apps should try to skip any introductory hints on first launch. This might
4776          * apply to users that are already familiar with the environment or temporary users.
4777          * <p>
4778          * Type : int (0 to show hints, 1 to skip showing hints)
4779          */
4780         public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
4781 
4782         /**
4783          * Persisted playback time after a user confirmation of an unsafe volume level.
4784          *
4785          * @hide
4786          */
4787         public static final String UNSAFE_VOLUME_MUSIC_ACTIVE_MS = "unsafe_volume_music_active_ms";
4788 
4789         /**
4790          * This preference enables notification display on the lockscreen.
4791          * @hide
4792          */
4793         public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
4794                 "lock_screen_show_notifications";
4795 
4796         /**
4797          * List of TV inputs that are currently hidden. This is a string
4798          * containing the IDs of all hidden TV inputs. Each ID is encoded by
4799          * {@link android.net.Uri#encode(String)} and separated by ':'.
4800          * @hide
4801          */
4802         public static final String TV_INPUT_HIDDEN_INPUTS = "tv_input_hidden_inputs";
4803 
4804         /**
4805          * List of custom TV input labels. This is a string containing <TV input id, custom name>
4806          * pairs. TV input id and custom name are encoded by {@link android.net.Uri#encode(String)}
4807          * and separated by ','. Each pair is separated by ':'.
4808          * @hide
4809          */
4810         public static final String TV_INPUT_CUSTOM_LABELS = "tv_input_custom_labels";
4811 
4812         /**
4813          * Whether automatic routing of system audio to USB audio peripheral is disabled.
4814          * The value is boolean (1 or 0), where 1 means automatic routing is disabled,
4815          * and 0 means automatic routing is enabled.
4816          *
4817          * @hide
4818          */
4819         public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
4820                 "usb_audio_automatic_routing_disabled";
4821 
4822         /**
4823          * The timeout in milliseconds before the device fully goes to sleep after
4824          * a period of inactivity.  This value sets an upper bound on how long the device
4825          * will stay awake or dreaming without user activity.  It should generally
4826          * be longer than {@link #SCREEN_OFF_TIMEOUT} as otherwise the device
4827          * will sleep before it ever has a chance to dream.
4828          * <p>
4829          * Use -1 to disable this timeout.
4830          * </p>
4831          *
4832          * @hide
4833          */
4834         public static final String SLEEP_TIMEOUT = "sleep_timeout";
4835 
4836         /**
4837          * This are the settings to be backed up.
4838          *
4839          * NOTE: Settings are backed up and restored in the order they appear
4840          *       in this array. If you have one setting depending on another,
4841          *       make sure that they are ordered appropriately.
4842          *
4843          * @hide
4844          */
4845         public static final String[] SETTINGS_TO_BACKUP = {
4846             BUGREPORT_IN_POWER_MENU,                            // moved to global
4847             ALLOW_MOCK_LOCATION,
4848             PARENTAL_CONTROL_ENABLED,
4849             PARENTAL_CONTROL_REDIRECT_URL,
4850             USB_MASS_STORAGE_ENABLED,                           // moved to global
4851             ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
4852             ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
4853             ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
4854             ACCESSIBILITY_SCRIPT_INJECTION,
4855             BACKUP_AUTO_RESTORE,
4856             ENABLED_ACCESSIBILITY_SERVICES,
4857             TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
4858             TOUCH_EXPLORATION_ENABLED,
4859             ACCESSIBILITY_ENABLED,
4860             ACCESSIBILITY_SPEAK_PASSWORD,
4861             ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED,
4862             ACCESSIBILITY_CAPTIONING_ENABLED,
4863             ACCESSIBILITY_CAPTIONING_LOCALE,
4864             ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
4865             ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
4866             ACCESSIBILITY_CAPTIONING_EDGE_TYPE,
4867             ACCESSIBILITY_CAPTIONING_EDGE_COLOR,
4868             ACCESSIBILITY_CAPTIONING_TYPEFACE,
4869             ACCESSIBILITY_CAPTIONING_FONT_SCALE,
4870             TTS_USE_DEFAULTS,
4871             TTS_DEFAULT_RATE,
4872             TTS_DEFAULT_PITCH,
4873             TTS_DEFAULT_SYNTH,
4874             TTS_DEFAULT_LANG,
4875             TTS_DEFAULT_COUNTRY,
4876             TTS_ENABLED_PLUGINS,
4877             TTS_DEFAULT_LOCALE,
4878             WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,            // moved to global
4879             WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,               // moved to global
4880             WIFI_NUM_OPEN_NETWORKS_KEPT,                        // moved to global
4881             MOUNT_PLAY_NOTIFICATION_SND,
4882             MOUNT_UMS_AUTOSTART,
4883             MOUNT_UMS_PROMPT,
4884             MOUNT_UMS_NOTIFY_ENABLED,
4885             UI_NIGHT_MODE,
4886             SLEEP_TIMEOUT
4887         };
4888 
4889         /**
4890          * These entries are considered common between the personal and the managed profile,
4891          * since the managed profile doesn't get to change them.
4892          * @hide
4893          */
4894         public static final String[] CLONE_TO_MANAGED_PROFILE = {
4895             ACCESSIBILITY_ENABLED,
4896             ALLOW_MOCK_LOCATION,
4897             ALLOWED_GEOLOCATION_ORIGINS,
4898             DEFAULT_INPUT_METHOD,
4899             ENABLED_ACCESSIBILITY_SERVICES,
4900             ENABLED_INPUT_METHODS,
4901             LOCATION_MODE,
4902             LOCATION_PROVIDERS_ALLOWED,
4903             LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
4904             SELECTED_INPUT_METHOD_SUBTYPE,
4905             SELECTED_SPELL_CHECKER,
4906             SELECTED_SPELL_CHECKER_SUBTYPE
4907         };
4908 
4909         /**
4910          * Helper method for determining if a location provider is enabled.
4911          *
4912          * @param cr the content resolver to use
4913          * @param provider the location provider to query
4914          * @return true if the provider is enabled
4915          *
4916          * @deprecated use {@link #LOCATION_MODE} or
4917          *             {@link LocationManager#isProviderEnabled(String)}
4918          */
4919         @Deprecated
isLocationProviderEnabled(ContentResolver cr, String provider)4920         public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) {
4921             return isLocationProviderEnabledForUser(cr, provider, UserHandle.myUserId());
4922         }
4923 
4924         /**
4925          * Helper method for determining if a location provider is enabled.
4926          * @param cr the content resolver to use
4927          * @param provider the location provider to query
4928          * @param userId the userId to query
4929          * @return true if the provider is enabled
4930          * @deprecated use {@link #LOCATION_MODE} or
4931          *             {@link LocationManager#isProviderEnabled(String)}
4932          * @hide
4933          */
4934         @Deprecated
isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId)4935         public static final boolean isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId) {
4936             String allowedProviders = Settings.Secure.getStringForUser(cr,
4937                     LOCATION_PROVIDERS_ALLOWED, userId);
4938             return TextUtils.delimitedStringContains(allowedProviders, ',', provider);
4939         }
4940 
4941         /**
4942          * Thread-safe method for enabling or disabling a single location provider.
4943          * @param cr the content resolver to use
4944          * @param provider the location provider to enable or disable
4945          * @param enabled true if the provider should be enabled
4946          * @deprecated use {@link #putInt(ContentResolver, String, int)} and {@link #LOCATION_MODE}
4947          */
4948         @Deprecated
setLocationProviderEnabled(ContentResolver cr, String provider, boolean enabled)4949         public static final void setLocationProviderEnabled(ContentResolver cr,
4950                 String provider, boolean enabled) {
4951             setLocationProviderEnabledForUser(cr, provider, enabled, UserHandle.myUserId());
4952         }
4953 
4954         /**
4955          * Thread-safe method for enabling or disabling a single location provider.
4956          *
4957          * @param cr the content resolver to use
4958          * @param provider the location provider to enable or disable
4959          * @param enabled true if the provider should be enabled
4960          * @param userId the userId for which to enable/disable providers
4961          * @return true if the value was set, false on database errors
4962          * @deprecated use {@link #putIntForUser(ContentResolver, String, int, int)} and
4963          *             {@link #LOCATION_MODE}
4964          * @hide
4965          */
4966         @Deprecated
setLocationProviderEnabledForUser(ContentResolver cr, String provider, boolean enabled, int userId)4967         public static final boolean setLocationProviderEnabledForUser(ContentResolver cr,
4968                 String provider, boolean enabled, int userId) {
4969             synchronized (mLocationSettingsLock) {
4970                 // to ensure thread safety, we write the provider name with a '+' or '-'
4971                 // and let the SettingsProvider handle it rather than reading and modifying
4972                 // the list of enabled providers.
4973                 if (enabled) {
4974                     provider = "+" + provider;
4975                 } else {
4976                     provider = "-" + provider;
4977                 }
4978                 return putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider,
4979                         userId);
4980             }
4981         }
4982 
4983         /**
4984          * Thread-safe method for setting the location mode to one of
4985          * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
4986          * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
4987          *
4988          * @param cr the content resolver to use
4989          * @param mode such as {@link #LOCATION_MODE_HIGH_ACCURACY}
4990          * @param userId the userId for which to change mode
4991          * @return true if the value was set, false on database errors
4992          *
4993          * @throws IllegalArgumentException if mode is not one of the supported values
4994          */
setLocationModeForUser(ContentResolver cr, int mode, int userId)4995         private static final boolean setLocationModeForUser(ContentResolver cr, int mode,
4996                 int userId) {
4997             synchronized (mLocationSettingsLock) {
4998                 boolean gps = false;
4999                 boolean network = false;
5000                 switch (mode) {
5001                     case LOCATION_MODE_OFF:
5002                         break;
5003                     case LOCATION_MODE_SENSORS_ONLY:
5004                         gps = true;
5005                         break;
5006                     case LOCATION_MODE_BATTERY_SAVING:
5007                         network = true;
5008                         break;
5009                     case LOCATION_MODE_HIGH_ACCURACY:
5010                         gps = true;
5011                         network = true;
5012                         break;
5013                     default:
5014                         throw new IllegalArgumentException("Invalid location mode: " + mode);
5015                 }
5016                 boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser(
5017                         cr, LocationManager.GPS_PROVIDER, gps, userId);
5018                 boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser(
5019                         cr, LocationManager.NETWORK_PROVIDER, network, userId);
5020                 return gpsSuccess && nlpSuccess;
5021             }
5022         }
5023 
5024         /**
5025          * Thread-safe method for reading the location mode, returns one of
5026          * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
5027          * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
5028          *
5029          * @param cr the content resolver to use
5030          * @param userId the userId for which to read the mode
5031          * @return the location mode
5032          */
getLocationModeForUser(ContentResolver cr, int userId)5033         private static final int getLocationModeForUser(ContentResolver cr, int userId) {
5034             synchronized (mLocationSettingsLock) {
5035                 boolean gpsEnabled = Settings.Secure.isLocationProviderEnabledForUser(
5036                         cr, LocationManager.GPS_PROVIDER, userId);
5037                 boolean networkEnabled = Settings.Secure.isLocationProviderEnabledForUser(
5038                         cr, LocationManager.NETWORK_PROVIDER, userId);
5039                 if (gpsEnabled && networkEnabled) {
5040                     return LOCATION_MODE_HIGH_ACCURACY;
5041                 } else if (gpsEnabled) {
5042                     return LOCATION_MODE_SENSORS_ONLY;
5043                 } else if (networkEnabled) {
5044                     return LOCATION_MODE_BATTERY_SAVING;
5045                 } else {
5046                     return LOCATION_MODE_OFF;
5047                 }
5048             }
5049         }
5050     }
5051 
5052     /**
5053      * Global system settings, containing preferences that always apply identically
5054      * to all defined users.  Applications can read these but are not allowed to write;
5055      * like the "Secure" settings, these are for preferences that the user must
5056      * explicitly modify through the system UI or specialized APIs for those values.
5057      */
5058     public static final class Global extends NameValueTable {
5059         public static final String SYS_PROP_SETTING_VERSION = "sys.settings_global_version";
5060 
5061         /**
5062          * The content:// style URL for global secure settings items.  Not public.
5063          */
5064         public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global");
5065 
5066         /**
5067          * Whether users are allowed to add more users or guest from lockscreen.
5068          * <p>
5069          * Type: int
5070          * @hide
5071          */
5072         public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked";
5073 
5074         /**
5075          * Setting whether the global gesture for enabling accessibility is enabled.
5076          * If this gesture is enabled the user will be able to perfrom it to enable
5077          * the accessibility state without visiting the settings app.
5078          * @hide
5079          */
5080         public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED =
5081                 "enable_accessibility_global_gesture_enabled";
5082 
5083         /**
5084          * Whether Airplane Mode is on.
5085          */
5086         public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
5087 
5088         /**
5089          * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio.
5090          */
5091         public static final String RADIO_BLUETOOTH = "bluetooth";
5092 
5093         /**
5094          * Constant for use in AIRPLANE_MODE_RADIOS to specify Wi-Fi radio.
5095          */
5096         public static final String RADIO_WIFI = "wifi";
5097 
5098         /**
5099          * {@hide}
5100          */
5101         public static final String RADIO_WIMAX = "wimax";
5102         /**
5103          * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio.
5104          */
5105         public static final String RADIO_CELL = "cell";
5106 
5107         /**
5108          * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio.
5109          */
5110         public static final String RADIO_NFC = "nfc";
5111 
5112         /**
5113          * A comma separated list of radios that need to be disabled when airplane mode
5114          * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are
5115          * included in the comma separated list.
5116          */
5117         public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
5118 
5119         /**
5120          * A comma separated list of radios that should to be disabled when airplane mode
5121          * is on, but can be manually reenabled by the user.  For example, if RADIO_WIFI is
5122          * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi
5123          * will be turned off when entering airplane mode, but the user will be able to reenable
5124          * Wifi in the Settings app.
5125          *
5126          * {@hide}
5127          */
5128         public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
5129 
5130         /**
5131          * The policy for deciding when Wi-Fi should go to sleep (which will in
5132          * turn switch to using the mobile data as an Internet connection).
5133          * <p>
5134          * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
5135          * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
5136          * {@link #WIFI_SLEEP_POLICY_NEVER}.
5137          */
5138         public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
5139 
5140         /**
5141          * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
5142          * policy, which is to sleep shortly after the turning off
5143          * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
5144          */
5145         public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
5146 
5147         /**
5148          * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
5149          * the device is on battery, and never go to sleep when the device is
5150          * plugged in.
5151          */
5152         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
5153 
5154         /**
5155          * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
5156          */
5157         public static final int WIFI_SLEEP_POLICY_NEVER = 2;
5158 
5159         /**
5160          * Value to specify if the user prefers the date, time and time zone
5161          * to be automatically fetched from the network (NITZ). 1=yes, 0=no
5162          */
5163         public static final String AUTO_TIME = "auto_time";
5164 
5165         /**
5166          * Value to specify if the user prefers the time zone
5167          * to be automatically fetched from the network (NITZ). 1=yes, 0=no
5168          */
5169         public static final String AUTO_TIME_ZONE = "auto_time_zone";
5170 
5171         /**
5172          * URI for the car dock "in" event sound.
5173          * @hide
5174          */
5175         public static final String CAR_DOCK_SOUND = "car_dock_sound";
5176 
5177         /**
5178          * URI for the car dock "out" event sound.
5179          * @hide
5180          */
5181         public static final String CAR_UNDOCK_SOUND = "car_undock_sound";
5182 
5183         /**
5184          * URI for the desk dock "in" event sound.
5185          * @hide
5186          */
5187         public static final String DESK_DOCK_SOUND = "desk_dock_sound";
5188 
5189         /**
5190          * URI for the desk dock "out" event sound.
5191          * @hide
5192          */
5193         public static final String DESK_UNDOCK_SOUND = "desk_undock_sound";
5194 
5195         /**
5196          * Whether to play a sound for dock events.
5197          * @hide
5198          */
5199         public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled";
5200 
5201         /**
5202          * URI for the "device locked" (keyguard shown) sound.
5203          * @hide
5204          */
5205         public static final String LOCK_SOUND = "lock_sound";
5206 
5207         /**
5208          * URI for the "device unlocked" sound.
5209          * @hide
5210          */
5211         public static final String UNLOCK_SOUND = "unlock_sound";
5212 
5213         /**
5214          * URI for the "device is trusted" sound, which is played when the device enters the trusted
5215          * state without unlocking.
5216          * @hide
5217          */
5218         public static final String TRUSTED_SOUND = "trusted_sound";
5219 
5220         /**
5221          * URI for the low battery sound file.
5222          * @hide
5223          */
5224         public static final String LOW_BATTERY_SOUND = "low_battery_sound";
5225 
5226         /**
5227          * Whether to play a sound for low-battery alerts.
5228          * @hide
5229          */
5230         public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled";
5231 
5232         /**
5233          * URI for the "wireless charging started" sound.
5234          * @hide
5235          */
5236         public static final String WIRELESS_CHARGING_STARTED_SOUND =
5237                 "wireless_charging_started_sound";
5238 
5239         /**
5240          * Whether we keep the device on while the device is plugged in.
5241          * Supported values are:
5242          * <ul>
5243          * <li>{@code 0} to never stay on while plugged in</li>
5244          * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li>
5245          * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li>
5246          * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li>
5247          * </ul>
5248          * These values can be OR-ed together.
5249          */
5250         public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
5251 
5252         /**
5253          * When the user has enable the option to have a "bug report" command
5254          * in the power menu.
5255          * @hide
5256          */
5257         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
5258 
5259         /**
5260          * Whether ADB is enabled.
5261          */
5262         public static final String ADB_ENABLED = "adb_enabled";
5263 
5264         /**
5265          * Whether Views are allowed to save their attribute data.
5266          * @hide
5267          */
5268         public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
5269 
5270         /**
5271          * Whether assisted GPS should be enabled or not.
5272          * @hide
5273          */
5274         public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled";
5275 
5276         /**
5277          * Whether bluetooth is enabled/disabled
5278          * 0=disabled. 1=enabled.
5279          */
5280         public static final String BLUETOOTH_ON = "bluetooth_on";
5281 
5282         /**
5283          * CDMA Cell Broadcast SMS
5284          *                            0 = CDMA Cell Broadcast SMS disabled
5285          *                            1 = CDMA Cell Broadcast SMS enabled
5286          * @hide
5287          */
5288         public static final String CDMA_CELL_BROADCAST_SMS =
5289                 "cdma_cell_broadcast_sms";
5290 
5291         /**
5292          * The CDMA roaming mode 0 = Home Networks, CDMA default
5293          *                       1 = Roaming on Affiliated networks
5294          *                       2 = Roaming on any networks
5295          * @hide
5296          */
5297         public static final String CDMA_ROAMING_MODE = "roaming_settings";
5298 
5299         /**
5300          * The CDMA subscription mode 0 = RUIM/SIM (default)
5301          *                                1 = NV
5302          * @hide
5303          */
5304         public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
5305 
5306         /** Inactivity timeout to track mobile data activity.
5307         *
5308         * If set to a positive integer, it indicates the inactivity timeout value in seconds to
5309         * infer the data activity of mobile network. After a period of no activity on mobile
5310         * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE}
5311         * intent is fired to indicate a transition of network status from "active" to "idle". Any
5312         * subsequent activity on mobile networks triggers the firing of {@code
5313         * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active".
5314         *
5315         * Network activity refers to transmitting or receiving data on the network interfaces.
5316         *
5317         * Tracking is disabled if set to zero or negative value.
5318         *
5319         * @hide
5320         */
5321        public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile";
5322 
5323        /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE}
5324         * but for Wifi network.
5325         * @hide
5326         */
5327        public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi";
5328 
5329        /**
5330         * Whether or not data roaming is enabled. (0 = false, 1 = true)
5331         */
5332        public static final String DATA_ROAMING = "data_roaming";
5333 
5334        /**
5335         * The value passed to a Mobile DataConnection via bringUp which defines the
5336         * number of retries to preform when setting up the initial connection. The default
5337         * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1.
5338         * @hide
5339         */
5340        public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry";
5341 
5342        /**
5343         * Whether user has enabled development settings.
5344         */
5345        public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
5346 
5347        /**
5348         * Whether the device has been provisioned (0 = false, 1 = true)
5349         */
5350        public static final String DEVICE_PROVISIONED = "device_provisioned";
5351 
5352        /**
5353         * The saved value for WindowManagerService.setForcedDisplayDensity().
5354         * One integer in dpi.  If unset, then use the real display density.
5355         * @hide
5356         */
5357        public static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
5358 
5359        /**
5360         * The saved value for WindowManagerService.setForcedDisplaySize().
5361         * Two integers separated by a comma.  If unset, then use the real display size.
5362         * @hide
5363         */
5364        public static final String DISPLAY_SIZE_FORCED = "display_size_forced";
5365 
5366        /**
5367         * The maximum size, in bytes, of a download that the download manager will transfer over
5368         * a non-wifi connection.
5369         * @hide
5370         */
5371        public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE =
5372                "download_manager_max_bytes_over_mobile";
5373 
5374        /**
5375         * The recommended maximum size, in bytes, of a download that the download manager should
5376         * transfer over a non-wifi connection. Over this size, the use will be warned, but will
5377         * have the option to start the download over the mobile connection anyway.
5378         * @hide
5379         */
5380        public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE =
5381                "download_manager_recommended_max_bytes_over_mobile";
5382 
5383        /**
5384         * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
5385         */
5386        @Deprecated
5387        public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
5388 
5389        /**
5390         * Whether HDMI control shall be enabled. If disabled, no CEC/MHL command will be
5391         * sent or processed. (0 = false, 1 = true)
5392         * @hide
5393         */
5394        public static final String HDMI_CONTROL_ENABLED = "hdmi_control_enabled";
5395 
5396        /**
5397         * Whether HDMI system audio is enabled. If enabled, TV internal speaker is muted,
5398         * and the output is redirected to AV Receiver connected via
5399         * {@Global#HDMI_SYSTEM_AUDIO_OUTPUT}.
5400         * @hide
5401         */
5402        public static final String HDMI_SYSTEM_AUDIO_ENABLED = "hdmi_system_audio_enabled";
5403 
5404        /**
5405         * Whether TV will automatically turn on upon reception of the CEC command
5406         * &lt;Text View On&gt; or &lt;Image View On&gt;. (0 = false, 1 = true)
5407         * @hide
5408         */
5409        public static final String HDMI_CONTROL_AUTO_WAKEUP_ENABLED =
5410                "hdmi_control_auto_wakeup_enabled";
5411 
5412        /**
5413         * Whether TV will also turn off other CEC devices when it goes to standby mode.
5414         * (0 = false, 1 = true)
5415         * @hide
5416         */
5417        public static final String HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED =
5418                "hdmi_control_auto_device_off_enabled";
5419 
5420        /**
5421         * Whether TV will switch to MHL port when a mobile device is plugged in.
5422         * (0 = false, 1 = true)
5423         * @hide
5424         */
5425        public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled";
5426 
5427        /**
5428         * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true)
5429         * @hide
5430         */
5431        public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled";
5432 
5433        /**
5434         * Whether mobile data connections are allowed by the user.  See
5435         * ConnectivityManager for more info.
5436         * @hide
5437         */
5438        public static final String MOBILE_DATA = "mobile_data";
5439 
5440        /** {@hide} */
5441        public static final String NETSTATS_ENABLED = "netstats_enabled";
5442        /** {@hide} */
5443        public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval";
5444        /** {@hide} */
5445        public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age";
5446        /** {@hide} */
5447        public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes";
5448        /** {@hide} */
5449        public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled";
5450        /** {@hide} */
5451        public static final String NETSTATS_REPORT_XT_OVER_DEV = "netstats_report_xt_over_dev";
5452 
5453        /** {@hide} */
5454        public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration";
5455        /** {@hide} */
5456        public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes";
5457        /** {@hide} */
5458        public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age";
5459        /** {@hide} */
5460        public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age";
5461 
5462        /** {@hide} */
5463        public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration";
5464        /** {@hide} */
5465        public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes";
5466        /** {@hide} */
5467        public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age";
5468        /** {@hide} */
5469        public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age";
5470 
5471        /** {@hide} */
5472        public static final String NETSTATS_UID_TAG_BUCKET_DURATION = "netstats_uid_tag_bucket_duration";
5473        /** {@hide} */
5474        public static final String NETSTATS_UID_TAG_PERSIST_BYTES = "netstats_uid_tag_persist_bytes";
5475        /** {@hide} */
5476        public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age";
5477        /** {@hide} */
5478        public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age";
5479 
5480        /**
5481         * User preference for which network(s) should be used. Only the
5482         * connectivity service should touch this.
5483         */
5484        public static final String NETWORK_PREFERENCE = "network_preference";
5485 
5486        /**
5487         * Which package name to use for network scoring. If null, or if the package is not a valid
5488         * scorer app, external network scores will neither be requested nor accepted.
5489         * @hide
5490         */
5491        public static final String NETWORK_SCORER_APP = "network_scorer_app";
5492 
5493        /**
5494         * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment
5495         * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
5496         * exceeded.
5497         * @hide
5498         */
5499        public static final String NITZ_UPDATE_DIFF = "nitz_update_diff";
5500 
5501        /**
5502         * The length of time in milli-seconds that automatic small adjustments to
5503         * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded.
5504         * @hide
5505         */
5506        public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing";
5507 
5508        /** Preferred NTP server. {@hide} */
5509        public static final String NTP_SERVER = "ntp_server";
5510        /** Timeout in milliseconds to wait for NTP server. {@hide} */
5511        public static final String NTP_TIMEOUT = "ntp_timeout";
5512 
5513        /**
5514         * Whether the package manager should send package verification broadcasts for verifiers to
5515         * review apps prior to installation.
5516         * 1 = request apps to be verified prior to installation, if a verifier exists.
5517         * 0 = do not verify apps before installation
5518         * @hide
5519         */
5520        public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable";
5521 
5522        /** Timeout for package verification.
5523         * @hide */
5524        public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
5525 
5526        /** Default response code for package verification.
5527         * @hide */
5528        public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response";
5529 
5530        /**
5531         * Show package verification setting in the Settings app.
5532         * 1 = show (default)
5533         * 0 = hide
5534         * @hide
5535         */
5536        public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible";
5537 
5538        /**
5539         * Run package verificaiton on apps installed through ADB/ADT/USB
5540         * 1 = perform package verification on ADB installs (default)
5541         * 0 = bypass package verification on ADB installs
5542         * @hide
5543         */
5544        public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs";
5545 
5546        /**
5547         * The interval in milliseconds at which to check packet counts on the
5548         * mobile data interface when screen is on, to detect possible data
5549         * connection problems.
5550         * @hide
5551         */
5552        public static final String PDP_WATCHDOG_POLL_INTERVAL_MS =
5553                "pdp_watchdog_poll_interval_ms";
5554 
5555        /**
5556         * The interval in milliseconds at which to check packet counts on the
5557         * mobile data interface when screen is off, to detect possible data
5558         * connection problems.
5559         * @hide
5560         */
5561        public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS =
5562                "pdp_watchdog_long_poll_interval_ms";
5563 
5564        /**
5565         * The interval in milliseconds at which to check packet counts on the
5566         * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT}
5567         * outgoing packets has been reached without incoming packets.
5568         * @hide
5569         */
5570        public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS =
5571                "pdp_watchdog_error_poll_interval_ms";
5572 
5573        /**
5574         * The number of outgoing packets sent without seeing an incoming packet
5575         * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT}
5576         * device is logged to the event log
5577         * @hide
5578         */
5579        public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT =
5580                "pdp_watchdog_trigger_packet_count";
5581 
5582        /**
5583         * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS})
5584         * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before
5585         * attempting data connection recovery.
5586         * @hide
5587         */
5588        public static final String PDP_WATCHDOG_ERROR_POLL_COUNT =
5589                "pdp_watchdog_error_poll_count";
5590 
5591        /**
5592         * The number of failed PDP reset attempts before moving to something more
5593         * drastic: re-registering to the network.
5594         * @hide
5595         */
5596        public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT =
5597                "pdp_watchdog_max_pdp_reset_fail_count";
5598 
5599        /**
5600         * A positive value indicates how often the SamplingProfiler
5601         * should take snapshots. Zero value means SamplingProfiler
5602         * is disabled.
5603         *
5604         * @hide
5605         */
5606        public static final String SAMPLING_PROFILER_MS = "sampling_profiler_ms";
5607 
5608        /**
5609         * URL to open browser on to allow user to manage a prepay account
5610         * @hide
5611         */
5612        public static final String SETUP_PREPAID_DATA_SERVICE_URL =
5613                "setup_prepaid_data_service_url";
5614 
5615        /**
5616         * URL to attempt a GET on to see if this is a prepay device
5617         * @hide
5618         */
5619        public static final String SETUP_PREPAID_DETECTION_TARGET_URL =
5620                "setup_prepaid_detection_target_url";
5621 
5622        /**
5623         * Host to check for a redirect to after an attempt to GET
5624         * SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there,
5625         * this is a prepaid device with zero balance.)
5626         * @hide
5627         */
5628        public static final String SETUP_PREPAID_DETECTION_REDIR_HOST =
5629                "setup_prepaid_detection_redir_host";
5630 
5631        /**
5632         * The interval in milliseconds at which to check the number of SMS sent out without asking
5633         * for use permit, to limit the un-authorized SMS usage.
5634         *
5635         * @hide
5636         */
5637        public static final String SMS_OUTGOING_CHECK_INTERVAL_MS =
5638                "sms_outgoing_check_interval_ms";
5639 
5640        /**
5641         * The number of outgoing SMS sent without asking for user permit (of {@link
5642         * #SMS_OUTGOING_CHECK_INTERVAL_MS}
5643         *
5644         * @hide
5645         */
5646        public static final String SMS_OUTGOING_CHECK_MAX_COUNT =
5647                "sms_outgoing_check_max_count";
5648 
5649        /**
5650         * Used to disable SMS short code confirmation - defaults to true.
5651         * True indcates we will do the check, etc.  Set to false to disable.
5652         * @see com.android.internal.telephony.SmsUsageMonitor
5653         * @hide
5654         */
5655        public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation";
5656 
5657         /**
5658          * Used to select which country we use to determine premium sms codes.
5659          * One of com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_SIM,
5660          * com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_NETWORK,
5661          * or com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_BOTH.
5662          * @hide
5663          */
5664         public static final String SMS_SHORT_CODE_RULE = "sms_short_code_rule";
5665 
5666        /**
5667         * Used to select TCP's default initial receiver window size in segments - defaults to a build config value
5668         * @hide
5669         */
5670        public static final String TCP_DEFAULT_INIT_RWND = "tcp_default_init_rwnd";
5671 
5672        /**
5673         * Used to disable Tethering on a device - defaults to true
5674         * @hide
5675         */
5676        public static final String TETHER_SUPPORTED = "tether_supported";
5677 
5678        /**
5679         * Used to require DUN APN on the device or not - defaults to a build config value
5680         * which defaults to false
5681         * @hide
5682         */
5683        public static final String TETHER_DUN_REQUIRED = "tether_dun_required";
5684 
5685        /**
5686         * Used to hold a gservices-provisioned apn value for DUN.  If set, or the
5687         * corresponding build config values are set it will override the APN DB
5688         * values.
5689         * Consists of a comma seperated list of strings:
5690         * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
5691         * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN"
5692         * @hide
5693         */
5694        public static final String TETHER_DUN_APN = "tether_dun_apn";
5695 
5696        /**
5697         * USB Mass Storage Enabled
5698         */
5699        public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
5700 
5701        /**
5702         * If this setting is set (to anything), then all references
5703         * to Gmail on the device must change to Google Mail.
5704         */
5705        public static final String USE_GOOGLE_MAIL = "use_google_mail";
5706 
5707         /**
5708          * Webview Data reduction proxy key.
5709          * @hide
5710          */
5711         public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY =
5712                 "webview_data_reduction_proxy_key";
5713 
5714        /**
5715         * Whether Wifi display is enabled/disabled
5716         * 0=disabled. 1=enabled.
5717         * @hide
5718         */
5719        public static final String WIFI_DISPLAY_ON = "wifi_display_on";
5720 
5721        /**
5722         * Whether Wifi display certification mode is enabled/disabled
5723         * 0=disabled. 1=enabled.
5724         * @hide
5725         */
5726        public static final String WIFI_DISPLAY_CERTIFICATION_ON =
5727                "wifi_display_certification_on";
5728 
5729        /**
5730         * WPS Configuration method used by Wifi display, this setting only
5731         * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled).
5732         *
5733         * Possible values are:
5734         *
5735         * WpsInfo.INVALID: use default WPS method chosen by framework
5736         * WpsInfo.PBC    : use Push button
5737         * WpsInfo.KEYPAD : use Keypad
5738         * WpsInfo.DISPLAY: use Display
5739         * @hide
5740         */
5741        public static final String WIFI_DISPLAY_WPS_CONFIG =
5742            "wifi_display_wps_config";
5743 
5744        /**
5745         * Whether to notify the user of open networks.
5746         * <p>
5747         * If not connected and the scan results have an open network, we will
5748         * put this notification up. If we attempt to connect to a network or
5749         * the open network(s) disappear, we remove the notification. When we
5750         * show the notification, we will not show it again for
5751         * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time.
5752         */
5753        public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
5754                "wifi_networks_available_notification_on";
5755        /**
5756         * {@hide}
5757         */
5758        public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON =
5759                "wimax_networks_available_notification_on";
5760 
5761        /**
5762         * Delay (in seconds) before repeating the Wi-Fi networks available notification.
5763         * Connecting to a network will reset the timer.
5764         */
5765        public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
5766                "wifi_networks_available_repeat_delay";
5767 
5768        /**
5769         * 802.11 country code in ISO 3166 format
5770         * @hide
5771         */
5772        public static final String WIFI_COUNTRY_CODE = "wifi_country_code";
5773 
5774        /**
5775         * The interval in milliseconds to issue wake up scans when wifi needs
5776         * to connect. This is necessary to connect to an access point when
5777         * device is on the move and the screen is off.
5778         * @hide
5779         */
5780        public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS =
5781                "wifi_framework_scan_interval_ms";
5782 
5783        /**
5784         * The interval in milliseconds after which Wi-Fi is considered idle.
5785         * When idle, it is possible for the device to be switched from Wi-Fi to
5786         * the mobile data network.
5787         * @hide
5788         */
5789        public static final String WIFI_IDLE_MS = "wifi_idle_ms";
5790 
5791        /**
5792         * When the number of open networks exceeds this number, the
5793         * least-recently-used excess networks will be removed.
5794         */
5795        public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
5796 
5797        /**
5798         * Whether the Wi-Fi should be on.  Only the Wi-Fi service should touch this.
5799         */
5800        public static final String WIFI_ON = "wifi_on";
5801 
5802        /**
5803         * Setting to allow scans to be enabled even wifi is turned off for connectivity.
5804         * @hide
5805         */
5806        public static final String WIFI_SCAN_ALWAYS_AVAILABLE =
5807                 "wifi_scan_always_enabled";
5808 
5809        /**
5810         * Used to save the Wifi_ON state prior to tethering.
5811         * This state will be checked to restore Wifi after
5812         * the user turns off tethering.
5813         *
5814         * @hide
5815         */
5816        public static final String WIFI_SAVED_STATE = "wifi_saved_state";
5817 
5818        /**
5819         * The interval in milliseconds to scan as used by the wifi supplicant
5820         * @hide
5821         */
5822        public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS =
5823                "wifi_supplicant_scan_interval_ms";
5824 
5825         /**
5826          * whether frameworks handles wifi auto-join
5827          * @hide
5828          */
5829        public static final String WIFI_ENHANCED_AUTO_JOIN =
5830                 "wifi_enhanced_auto_join";
5831 
5832         /**
5833          * whether settings show RSSI
5834          * @hide
5835          */
5836         public static final String WIFI_NETWORK_SHOW_RSSI =
5837                 "wifi_network_show_rssi";
5838 
5839         /**
5840         * The interval in milliseconds to scan at supplicant when p2p is connected
5841         * @hide
5842         */
5843        public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS =
5844                "wifi_scan_interval_p2p_connected_ms";
5845 
5846        /**
5847         * Whether the Wi-Fi watchdog is enabled.
5848         */
5849        public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
5850 
5851        /**
5852         * Setting to turn off poor network avoidance on Wi-Fi. Feature is enabled by default and
5853         * the setting needs to be set to 0 to disable it.
5854         * @hide
5855         */
5856        public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED =
5857                "wifi_watchdog_poor_network_test_enabled";
5858 
5859        /**
5860         * Setting to turn on suspend optimizations at screen off on Wi-Fi. Enabled by default and
5861         * needs to be set to 0 to disable it.
5862         * @hide
5863         */
5864        public static final String WIFI_SUSPEND_OPTIMIZATIONS_ENABLED =
5865                "wifi_suspend_optimizations_enabled";
5866 
5867        /**
5868         * The maximum number of times we will retry a connection to an access
5869         * point for which we have failed in acquiring an IP address from DHCP.
5870         * A value of N means that we will make N+1 connection attempts in all.
5871         */
5872        public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
5873 
5874        /**
5875         * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile
5876         * data connectivity to be established after a disconnect from Wi-Fi.
5877         */
5878        public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
5879            "wifi_mobile_data_transition_wakelock_timeout_ms";
5880 
5881        /**
5882         * The operational wifi frequency band
5883         * Set to one of {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO},
5884         * {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ} or
5885         * {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ}
5886         *
5887         * @hide
5888         */
5889        public static final String WIFI_FREQUENCY_BAND = "wifi_frequency_band";
5890 
5891        /**
5892         * The Wi-Fi peer-to-peer device name
5893         * @hide
5894         */
5895        public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
5896 
5897        /**
5898         * The min time between wifi disable and wifi enable
5899         * @hide
5900         */
5901        public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay";
5902 
5903        /**
5904         * The number of milliseconds to delay when checking for data stalls during
5905         * non-aggressive detection. (screen is turned off.)
5906         * @hide
5907         */
5908        public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
5909                "data_stall_alarm_non_aggressive_delay_in_ms";
5910 
5911        /**
5912         * The number of milliseconds to delay when checking for data stalls during
5913         * aggressive detection. (screen on or suspected data stall)
5914         * @hide
5915         */
5916        public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
5917                "data_stall_alarm_aggressive_delay_in_ms";
5918 
5919        /**
5920         * The number of milliseconds to allow the provisioning apn to remain active
5921         * @hide
5922         */
5923        public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS =
5924                "provisioning_apn_alarm_delay_in_ms";
5925 
5926        /**
5927         * The interval in milliseconds at which to check gprs registration
5928         * after the first registration mismatch of gprs and voice service,
5929         * to detect possible data network registration problems.
5930         *
5931         * @hide
5932         */
5933        public static final String GPRS_REGISTER_CHECK_PERIOD_MS =
5934                "gprs_register_check_period_ms";
5935 
5936        /**
5937         * Nonzero causes Log.wtf() to crash.
5938         * @hide
5939         */
5940        public static final String WTF_IS_FATAL = "wtf_is_fatal";
5941 
5942        /**
5943         * Ringer mode. This is used internally, changing this value will not
5944         * change the ringer mode. See AudioManager.
5945         */
5946        public static final String MODE_RINGER = "mode_ringer";
5947 
5948        /**
5949         * Overlay display devices setting.
5950         * The associated value is a specially formatted string that describes the
5951         * size and density of simulated secondary display devices.
5952         * <p>
5953         * Format: {width}x{height}/{dpi};...
5954         * </p><p>
5955         * Example:
5956         * <ul>
5957         * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li>
5958         * <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first
5959         * at 1080p and the second at 720p.</li>
5960         * <li>If the value is empty, then no overlay display devices are created.</li>
5961         * </ul></p>
5962         *
5963         * @hide
5964         */
5965        public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
5966 
5967         /**
5968          * Threshold values for the duration and level of a discharge cycle,
5969          * under which we log discharge cycle info.
5970          *
5971          * @hide
5972          */
5973         public static final String
5974                 BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold";
5975 
5976         /** @hide */
5977         public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold";
5978 
5979         /**
5980          * Flag for allowing ActivityManagerService to send ACTION_APP_ERROR
5981          * intents on application crashes and ANRs. If this is disabled, the
5982          * crash/ANR dialog will never display the "Report" button.
5983          * <p>
5984          * Type: int (0 = disallow, 1 = allow)
5985          *
5986          * @hide
5987          */
5988         public static final String SEND_ACTION_APP_ERROR = "send_action_app_error";
5989 
5990         /**
5991          * Maximum age of entries kept by {@link DropBoxManager}.
5992          *
5993          * @hide
5994          */
5995         public static final String DROPBOX_AGE_SECONDS = "dropbox_age_seconds";
5996 
5997         /**
5998          * Maximum number of entry files which {@link DropBoxManager} will keep
5999          * around.
6000          *
6001          * @hide
6002          */
6003         public static final String DROPBOX_MAX_FILES = "dropbox_max_files";
6004 
6005         /**
6006          * Maximum amount of disk space used by {@link DropBoxManager} no matter
6007          * what.
6008          *
6009          * @hide
6010          */
6011         public static final String DROPBOX_QUOTA_KB = "dropbox_quota_kb";
6012 
6013         /**
6014          * Percent of free disk (excluding reserve) which {@link DropBoxManager}
6015          * will use.
6016          *
6017          * @hide
6018          */
6019         public static final String DROPBOX_QUOTA_PERCENT = "dropbox_quota_percent";
6020 
6021         /**
6022          * Percent of total disk which {@link DropBoxManager} will never dip
6023          * into.
6024          *
6025          * @hide
6026          */
6027         public static final String DROPBOX_RESERVE_PERCENT = "dropbox_reserve_percent";
6028 
6029         /**
6030          * Prefix for per-tag dropbox disable/enable settings.
6031          *
6032          * @hide
6033          */
6034         public static final String DROPBOX_TAG_PREFIX = "dropbox:";
6035 
6036         /**
6037          * Lines of logcat to include with system crash/ANR/etc. reports, as a
6038          * prefix of the dropbox tag of the report type. For example,
6039          * "logcat_for_system_server_anr" controls the lines of logcat captured
6040          * with system server ANR reports. 0 to disable.
6041          *
6042          * @hide
6043          */
6044         public static final String ERROR_LOGCAT_PREFIX = "logcat_for_";
6045 
6046         /**
6047          * The interval in minutes after which the amount of free storage left
6048          * on the device is logged to the event log
6049          *
6050          * @hide
6051          */
6052         public static final String SYS_FREE_STORAGE_LOG_INTERVAL = "sys_free_storage_log_interval";
6053 
6054         /**
6055          * Threshold for the amount of change in disk free space required to
6056          * report the amount of free space. Used to prevent spamming the logs
6057          * when the disk free space isn't changing frequently.
6058          *
6059          * @hide
6060          */
6061         public static final String
6062                 DISK_FREE_CHANGE_REPORTING_THRESHOLD = "disk_free_change_reporting_threshold";
6063 
6064         /**
6065          * Minimum percentage of free storage on the device that is used to
6066          * determine if the device is running low on storage. The default is 10.
6067          * <p>
6068          * Say this value is set to 10, the device is considered running low on
6069          * storage if 90% or more of the device storage is filled up.
6070          *
6071          * @hide
6072          */
6073         public static final String
6074                 SYS_STORAGE_THRESHOLD_PERCENTAGE = "sys_storage_threshold_percentage";
6075 
6076         /**
6077          * Maximum byte size of the low storage threshold. This is to ensure
6078          * that {@link #SYS_STORAGE_THRESHOLD_PERCENTAGE} does not result in an
6079          * overly large threshold for large storage devices. Currently this must
6080          * be less than 2GB. This default is 500MB.
6081          *
6082          * @hide
6083          */
6084         public static final String
6085                 SYS_STORAGE_THRESHOLD_MAX_BYTES = "sys_storage_threshold_max_bytes";
6086 
6087         /**
6088          * Minimum bytes of free storage on the device before the data partition
6089          * is considered full. By default, 1 MB is reserved to avoid system-wide
6090          * SQLite disk full exceptions.
6091          *
6092          * @hide
6093          */
6094         public static final String
6095                 SYS_STORAGE_FULL_THRESHOLD_BYTES = "sys_storage_full_threshold_bytes";
6096 
6097         /**
6098          * The maximum reconnect delay for short network outages or when the
6099          * network is suspended due to phone use.
6100          *
6101          * @hide
6102          */
6103         public static final String
6104                 SYNC_MAX_RETRY_DELAY_IN_SECONDS = "sync_max_retry_delay_in_seconds";
6105 
6106         /**
6107          * The number of milliseconds to delay before sending out
6108          * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts.
6109          *
6110          * @hide
6111          */
6112         public static final String CONNECTIVITY_CHANGE_DELAY = "connectivity_change_delay";
6113 
6114 
6115         /**
6116          * Network sampling interval, in seconds. We'll generate link information
6117          * about bytes/packets sent and error rates based on data sampled in this interval
6118          *
6119          * @hide
6120          */
6121 
6122         public static final String CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS =
6123                 "connectivity_sampling_interval_in_seconds";
6124 
6125         /**
6126          * The series of successively longer delays used in retrying to download PAC file.
6127          * Last delay is used between successful PAC downloads.
6128          *
6129          * @hide
6130          */
6131         public static final String PAC_CHANGE_DELAY = "pac_change_delay";
6132 
6133         /**
6134          * Setting to turn off captive portal detection. Feature is enabled by
6135          * default and the setting needs to be set to 0 to disable it.
6136          *
6137          * @hide
6138          */
6139         public static final String
6140                 CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled";
6141 
6142         /**
6143          * The server used for captive portal detection upon a new conection. A
6144          * 204 response code from the server is used for validation.
6145          *
6146          * @hide
6147          */
6148         public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server";
6149 
6150         /**
6151          * Whether network service discovery is enabled.
6152          *
6153          * @hide
6154          */
6155         public static final String NSD_ON = "nsd_on";
6156 
6157         /**
6158          * Let user pick default install location.
6159          *
6160          * @hide
6161          */
6162         public static final String SET_INSTALL_LOCATION = "set_install_location";
6163 
6164         /**
6165          * Default install location value.
6166          * 0 = auto, let system decide
6167          * 1 = internal
6168          * 2 = sdcard
6169          * @hide
6170          */
6171         public static final String DEFAULT_INSTALL_LOCATION = "default_install_location";
6172 
6173         /**
6174          * ms during which to consume extra events related to Inet connection
6175          * condition after a transtion to fully-connected
6176          *
6177          * @hide
6178          */
6179         public static final String
6180                 INET_CONDITION_DEBOUNCE_UP_DELAY = "inet_condition_debounce_up_delay";
6181 
6182         /**
6183          * ms during which to consume extra events related to Inet connection
6184          * condtion after a transtion to partly-connected
6185          *
6186          * @hide
6187          */
6188         public static final String
6189                 INET_CONDITION_DEBOUNCE_DOWN_DELAY = "inet_condition_debounce_down_delay";
6190 
6191         /** {@hide} */
6192         public static final String
6193                 READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default";
6194 
6195         /**
6196          * Host name and port for global http proxy. Uses ':' seperator for
6197          * between host and port.
6198          */
6199         public static final String HTTP_PROXY = "http_proxy";
6200 
6201         /**
6202          * Host name for global http proxy. Set via ConnectivityManager.
6203          *
6204          * @hide
6205          */
6206         public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host";
6207 
6208         /**
6209          * Integer host port for global http proxy. Set via ConnectivityManager.
6210          *
6211          * @hide
6212          */
6213         public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port";
6214 
6215         /**
6216          * Exclusion list for global proxy. This string contains a list of
6217          * comma-separated domains where the global proxy does not apply.
6218          * Domains should be listed in a comma- separated list. Example of
6219          * acceptable formats: ".domain1.com,my.domain2.com" Use
6220          * ConnectivityManager to set/get.
6221          *
6222          * @hide
6223          */
6224         public static final String
6225                 GLOBAL_HTTP_PROXY_EXCLUSION_LIST = "global_http_proxy_exclusion_list";
6226 
6227         /**
6228          * The location PAC File for the proxy.
6229          * @hide
6230          */
6231         public static final String
6232                 GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url";
6233 
6234         /**
6235          * Enables the UI setting to allow the user to specify the global HTTP
6236          * proxy and associated exclusion list.
6237          *
6238          * @hide
6239          */
6240         public static final String SET_GLOBAL_HTTP_PROXY = "set_global_http_proxy";
6241 
6242         /**
6243          * Setting for default DNS in case nobody suggests one
6244          *
6245          * @hide
6246          */
6247         public static final String DEFAULT_DNS_SERVER = "default_dns_server";
6248 
6249         /** {@hide} */
6250         public static final String
6251                 BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_";
6252         /** {@hide} */
6253         public static final String
6254                 BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_";
6255         /** {@hide} */
6256         public static final String
6257                 BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_";
6258         /** {@hide} */
6259         public static final String
6260                 BLUETOOTH_MAP_PRIORITY_PREFIX = "bluetooth_map_priority_";
6261 
6262         /**
6263          * Get the key that retrieves a bluetooth headset's priority.
6264          * @hide
6265          */
getBluetoothHeadsetPriorityKey(String address)6266         public static final String getBluetoothHeadsetPriorityKey(String address) {
6267             return BLUETOOTH_HEADSET_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
6268         }
6269 
6270         /**
6271          * Get the key that retrieves a bluetooth a2dp sink's priority.
6272          * @hide
6273          */
getBluetoothA2dpSinkPriorityKey(String address)6274         public static final String getBluetoothA2dpSinkPriorityKey(String address) {
6275             return BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
6276         }
6277 
6278         /**
6279          * Get the key that retrieves a bluetooth Input Device's priority.
6280          * @hide
6281          */
getBluetoothInputDevicePriorityKey(String address)6282         public static final String getBluetoothInputDevicePriorityKey(String address) {
6283             return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
6284         }
6285 
6286         /**
6287          * Get the key that retrieves a bluetooth map priority.
6288          * @hide
6289          */
getBluetoothMapPriorityKey(String address)6290         public static final String getBluetoothMapPriorityKey(String address) {
6291             return BLUETOOTH_MAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
6292         }
6293         /**
6294          * Scaling factor for normal window animations. Setting to 0 will
6295          * disable window animations.
6296          */
6297         public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
6298 
6299         /**
6300          * Scaling factor for activity transition animations. Setting to 0 will
6301          * disable window animations.
6302          */
6303         public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
6304 
6305         /**
6306          * Scaling factor for Animator-based animations. This affects both the
6307          * start delay and duration of all such animations. Setting to 0 will
6308          * cause animations to end immediately. The default value is 1.
6309          */
6310         public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
6311 
6312         /**
6313          * Scaling factor for normal window animations. Setting to 0 will
6314          * disable window animations.
6315          *
6316          * @hide
6317          */
6318         public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations";
6319 
6320         /**
6321          * If 0, the compatibility mode is off for all applications.
6322          * If 1, older applications run under compatibility mode.
6323          * TODO: remove this settings before code freeze (bug/1907571)
6324          * @hide
6325          */
6326         public static final String COMPATIBILITY_MODE = "compatibility_mode";
6327 
6328         /**
6329          * CDMA only settings
6330          * Emergency Tone  0 = Off
6331          *                 1 = Alert
6332          *                 2 = Vibrate
6333          * @hide
6334          */
6335         public static final String EMERGENCY_TONE = "emergency_tone";
6336 
6337         /**
6338          * CDMA only settings
6339          * Whether the auto retry is enabled. The value is
6340          * boolean (1 or 0).
6341          * @hide
6342          */
6343         public static final String CALL_AUTO_RETRY = "call_auto_retry";
6344 
6345         /**
6346          * The preferred network mode   7 = Global
6347          *                              6 = EvDo only
6348          *                              5 = CDMA w/o EvDo
6349          *                              4 = CDMA / EvDo auto
6350          *                              3 = GSM / WCDMA auto
6351          *                              2 = WCDMA only
6352          *                              1 = GSM only
6353          *                              0 = GSM / WCDMA preferred
6354          * @hide
6355          */
6356         public static final String PREFERRED_NETWORK_MODE =
6357                 "preferred_network_mode";
6358 
6359         /**
6360          * Name of an application package to be debugged.
6361          */
6362         public static final String DEBUG_APP = "debug_app";
6363 
6364         /**
6365          * If 1, when launching DEBUG_APP it will wait for the debugger before
6366          * starting user code.  If 0, it will run normally.
6367          */
6368         public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
6369 
6370         /**
6371          * Control whether the process CPU usage meter should be shown.
6372          */
6373         public static final String SHOW_PROCESSES = "show_processes";
6374 
6375         /**
6376          * If 1 low power mode is enabled.
6377          * @hide
6378          */
6379         public static final String LOW_POWER_MODE = "low_power";
6380 
6381         /**
6382          * Battery level [1-99] at which low power mode automatically turns on.
6383          * If 0, it will not automatically turn on.
6384          * @hide
6385          */
6386         public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level";
6387 
6388          /**
6389          * If 1, the activity manager will aggressively finish activities and
6390          * processes as soon as they are no longer needed.  If 0, the normal
6391          * extended lifetime is used.
6392          */
6393         public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
6394 
6395         /**
6396          * Use Dock audio output for media:
6397          *      0 = disabled
6398          *      1 = enabled
6399          * @hide
6400          */
6401         public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled";
6402 
6403         /**
6404          * Persisted safe headphone volume management state by AudioService
6405          * @hide
6406          */
6407         public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state";
6408 
6409         /**
6410          * URL for tzinfo (time zone) updates
6411          * @hide
6412          */
6413         public static final String TZINFO_UPDATE_CONTENT_URL = "tzinfo_content_url";
6414 
6415         /**
6416          * URL for tzinfo (time zone) update metadata
6417          * @hide
6418          */
6419         public static final String TZINFO_UPDATE_METADATA_URL = "tzinfo_metadata_url";
6420 
6421         /**
6422          * URL for selinux (mandatory access control) updates
6423          * @hide
6424          */
6425         public static final String SELINUX_UPDATE_CONTENT_URL = "selinux_content_url";
6426 
6427         /**
6428          * URL for selinux (mandatory access control) update metadata
6429          * @hide
6430          */
6431         public static final String SELINUX_UPDATE_METADATA_URL = "selinux_metadata_url";
6432 
6433         /**
6434          * URL for sms short code updates
6435          * @hide
6436          */
6437         public static final String SMS_SHORT_CODES_UPDATE_CONTENT_URL =
6438                 "sms_short_codes_content_url";
6439 
6440         /**
6441          * URL for sms short code update metadata
6442          * @hide
6443          */
6444         public static final String SMS_SHORT_CODES_UPDATE_METADATA_URL =
6445                 "sms_short_codes_metadata_url";
6446 
6447         /**
6448          * URL for cert pinlist updates
6449          * @hide
6450          */
6451         public static final String CERT_PIN_UPDATE_CONTENT_URL = "cert_pin_content_url";
6452 
6453         /**
6454          * URL for cert pinlist updates
6455          * @hide
6456          */
6457         public static final String CERT_PIN_UPDATE_METADATA_URL = "cert_pin_metadata_url";
6458 
6459         /**
6460          * URL for intent firewall updates
6461          * @hide
6462          */
6463         public static final String INTENT_FIREWALL_UPDATE_CONTENT_URL =
6464                 "intent_firewall_content_url";
6465 
6466         /**
6467          * URL for intent firewall update metadata
6468          * @hide
6469          */
6470         public static final String INTENT_FIREWALL_UPDATE_METADATA_URL =
6471                 "intent_firewall_metadata_url";
6472 
6473         /**
6474          * SELinux enforcement status. If 0, permissive; if 1, enforcing.
6475          * @hide
6476          */
6477         public static final String SELINUX_STATUS = "selinux_status";
6478 
6479         /**
6480          * Developer setting to force RTL layout.
6481          * @hide
6482          */
6483         public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl";
6484 
6485         /**
6486          * Milliseconds after screen-off after which low battery sounds will be silenced.
6487          *
6488          * If zero, battery sounds will always play.
6489          * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider.
6490          *
6491          * @hide
6492          */
6493         public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout";
6494 
6495         /**
6496          * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after
6497          * the caller is done with this, they should call {@link ContentResolver#delete} to
6498          * clean up any value that they may have written.
6499          *
6500          * @hide
6501          */
6502         public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms";
6503 
6504         /**
6505          * Defines global runtime overrides to window policy.
6506          *
6507          * See {@link com.android.internal.policy.impl.PolicyControl} for value format.
6508          *
6509          * @hide
6510          */
6511         public static final String POLICY_CONTROL = "policy_control";
6512 
6513         /**
6514          * Defines global zen mode.  ZEN_MODE_OFF, ZEN_MODE_IMPORTANT_INTERRUPTIONS,
6515          * or ZEN_MODE_NO_INTERRUPTIONS.
6516          *
6517          * @hide
6518          */
6519         public static final String ZEN_MODE = "zen_mode";
6520 
6521         /** @hide */ public static final int ZEN_MODE_OFF = 0;
6522         /** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1;
6523         /** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2;
6524 
zenModeToString(int mode)6525         /** @hide */ public static String zenModeToString(int mode) {
6526             if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS";
6527             if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS";
6528             return "ZEN_MODE_OFF";
6529         }
6530 
6531         /**
6532          * Opaque value, changes when persisted zen mode configuration changes.
6533          *
6534          * @hide
6535          */
6536         public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag";
6537 
6538         /**
6539          * Defines global heads up toggle.  One of HEADS_UP_OFF, HEADS_UP_ON.
6540          *
6541          * @hide
6542          */
6543         public static final String HEADS_UP_NOTIFICATIONS_ENABLED =
6544                 "heads_up_notifications_enabled";
6545 
6546         /** @hide */ public static final int HEADS_UP_OFF = 0;
6547         /** @hide */ public static final int HEADS_UP_ON = 1;
6548 
6549         /**
6550          * The name of the device
6551          *
6552          * @hide
6553          */
6554         public static final String DEVICE_NAME = "device_name";
6555 
6556         /**
6557          * Whether it should be possible to create a guest user on the device.
6558          * <p>
6559          * Type: int (0 for disabled, 1 for enabled)
6560          * @hide
6561          */
6562         public static final String GUEST_USER_ENABLED = "guest_user_enabled";
6563 
6564         /**
6565          * Whether the NetworkScoringService has been first initialized.
6566          * <p>
6567          * Type: int (0 for false, 1 for true)
6568          * @hide
6569          */
6570         public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned";
6571 
6572         /**
6573          * Whether the user wants to be prompted for password to decrypt the device on boot.
6574          * This only matters if the storage is encrypted.
6575          * <p>
6576          * Type: int (0 for false, 1 for true)
6577          * @hide
6578          */
6579         public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
6580 
6581         /**
6582          * Settings to backup. This is here so that it's in the same place as the settings
6583          * keys and easy to update.
6584          *
6585          * These keys may be mentioned in the SETTINGS_TO_BACKUP arrays in System
6586          * and Secure as well.  This is because those tables drive both backup and
6587          * restore, and restore needs to properly whitelist keys that used to live
6588          * in those namespaces.  The keys will only actually be backed up / restored
6589          * if they are also mentioned in this table (Global.SETTINGS_TO_BACKUP).
6590          *
6591          * NOTE: Settings are backed up and restored in the order they appear
6592          *       in this array. If you have one setting depending on another,
6593          *       make sure that they are ordered appropriately.
6594          *
6595          * @hide
6596          */
6597         public static final String[] SETTINGS_TO_BACKUP = {
6598             BUGREPORT_IN_POWER_MENU,
6599             STAY_ON_WHILE_PLUGGED_IN,
6600             AUTO_TIME,
6601             AUTO_TIME_ZONE,
6602             POWER_SOUNDS_ENABLED,
6603             DOCK_SOUNDS_ENABLED,
6604             USB_MASS_STORAGE_ENABLED,
6605             ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
6606             WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
6607             WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
6608             WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED,
6609             WIFI_NUM_OPEN_NETWORKS_KEPT,
6610             EMERGENCY_TONE,
6611             CALL_AUTO_RETRY,
6612             DOCK_AUDIO_MEDIA_ENABLED
6613         };
6614 
6615         // Populated lazily, guarded by class object:
6616         private static NameValueCache sNameValueCache = new NameValueCache(
6617                     SYS_PROP_SETTING_VERSION,
6618                     CONTENT_URI,
6619                     CALL_METHOD_GET_GLOBAL,
6620                     CALL_METHOD_PUT_GLOBAL);
6621 
6622         // Certain settings have been moved from global to the per-user secure namespace
6623         private static final HashSet<String> MOVED_TO_SECURE;
6624         static {
6625             MOVED_TO_SECURE = new HashSet<String>(1);
6626             MOVED_TO_SECURE.add(Settings.Global.INSTALL_NON_MARKET_APPS);
6627         }
6628 
6629         /**
6630          * Look up a name in the database.
6631          * @param resolver to access the database with
6632          * @param name to look up in the table
6633          * @return the corresponding value, or null if not present
6634          */
getString(ContentResolver resolver, String name)6635         public static String getString(ContentResolver resolver, String name) {
6636             return getStringForUser(resolver, name, UserHandle.myUserId());
6637         }
6638 
6639         /** @hide */
getStringForUser(ContentResolver resolver, String name, int userHandle)6640         public static String getStringForUser(ContentResolver resolver, String name,
6641                 int userHandle) {
6642             if (MOVED_TO_SECURE.contains(name)) {
6643                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
6644                         + " to android.provider.Settings.Secure, returning read-only value.");
6645                 return Secure.getStringForUser(resolver, name, userHandle);
6646             }
6647             return sNameValueCache.getStringForUser(resolver, name, userHandle);
6648         }
6649 
6650         /**
6651          * Store a name/value pair into the database.
6652          * @param resolver to access the database with
6653          * @param name to store
6654          * @param value to associate with the name
6655          * @return true if the value was set, false on database errors
6656          */
putString(ContentResolver resolver, String name, String value)6657         public static boolean putString(ContentResolver resolver,
6658                 String name, String value) {
6659             return putStringForUser(resolver, name, value, UserHandle.myUserId());
6660         }
6661 
6662         /** @hide */
putStringForUser(ContentResolver resolver, String name, String value, int userHandle)6663         public static boolean putStringForUser(ContentResolver resolver,
6664                 String name, String value, int userHandle) {
6665             if (LOCAL_LOGV) {
6666                 Log.v(TAG, "Global.putString(name=" + name + ", value=" + value
6667                         + " for " + userHandle);
6668             }
6669             // Global and Secure have the same access policy so we can forward writes
6670             if (MOVED_TO_SECURE.contains(name)) {
6671                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
6672                         + " to android.provider.Settings.Secure, value is unchanged.");
6673                 return Secure.putStringForUser(resolver, name, value, userHandle);
6674             }
6675             return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
6676         }
6677 
6678         /**
6679          * Construct the content URI for a particular name/value pair,
6680          * useful for monitoring changes with a ContentObserver.
6681          * @param name to look up in the table
6682          * @return the corresponding content URI, or null if not present
6683          */
getUriFor(String name)6684         public static Uri getUriFor(String name) {
6685             return getUriFor(CONTENT_URI, name);
6686         }
6687 
6688         /**
6689          * Convenience function for retrieving a single secure settings value
6690          * as an integer.  Note that internally setting values are always
6691          * stored as strings; this function converts the string to an integer
6692          * for you.  The default value will be returned if the setting is
6693          * not defined or not an integer.
6694          *
6695          * @param cr The ContentResolver to access.
6696          * @param name The name of the setting to retrieve.
6697          * @param def Value to return if the setting is not defined.
6698          *
6699          * @return The setting's current value, or 'def' if it is not defined
6700          * or not a valid integer.
6701          */
getInt(ContentResolver cr, String name, int def)6702         public static int getInt(ContentResolver cr, String name, int def) {
6703             String v = getString(cr, name);
6704             try {
6705                 return v != null ? Integer.parseInt(v) : def;
6706             } catch (NumberFormatException e) {
6707                 return def;
6708             }
6709         }
6710 
6711         /**
6712          * Convenience function for retrieving a single secure settings value
6713          * as an integer.  Note that internally setting values are always
6714          * stored as strings; this function converts the string to an integer
6715          * for you.
6716          * <p>
6717          * This version does not take a default value.  If the setting has not
6718          * been set, or the string value is not a number,
6719          * it throws {@link SettingNotFoundException}.
6720          *
6721          * @param cr The ContentResolver to access.
6722          * @param name The name of the setting to retrieve.
6723          *
6724          * @throws SettingNotFoundException Thrown if a setting by the given
6725          * name can't be found or the setting value is not an integer.
6726          *
6727          * @return The setting's current value.
6728          */
getInt(ContentResolver cr, String name)6729         public static int getInt(ContentResolver cr, String name)
6730                 throws SettingNotFoundException {
6731             String v = getString(cr, name);
6732             try {
6733                 return Integer.parseInt(v);
6734             } catch (NumberFormatException e) {
6735                 throw new SettingNotFoundException(name);
6736             }
6737         }
6738 
6739         /**
6740          * Convenience function for updating a single settings value as an
6741          * integer. This will either create a new entry in the table if the
6742          * given name does not exist, or modify the value of the existing row
6743          * with that name.  Note that internally setting values are always
6744          * stored as strings, so this function converts the given value to a
6745          * string before storing it.
6746          *
6747          * @param cr The ContentResolver to access.
6748          * @param name The name of the setting to modify.
6749          * @param value The new value for the setting.
6750          * @return true if the value was set, false on database errors
6751          */
putInt(ContentResolver cr, String name, int value)6752         public static boolean putInt(ContentResolver cr, String name, int value) {
6753             return putString(cr, name, Integer.toString(value));
6754         }
6755 
6756         /**
6757          * Convenience function for retrieving a single secure settings value
6758          * as a {@code long}.  Note that internally setting values are always
6759          * stored as strings; this function converts the string to a {@code long}
6760          * for you.  The default value will be returned if the setting is
6761          * not defined or not a {@code long}.
6762          *
6763          * @param cr The ContentResolver to access.
6764          * @param name The name of the setting to retrieve.
6765          * @param def Value to return if the setting is not defined.
6766          *
6767          * @return The setting's current value, or 'def' if it is not defined
6768          * or not a valid {@code long}.
6769          */
getLong(ContentResolver cr, String name, long def)6770         public static long getLong(ContentResolver cr, String name, long def) {
6771             String valString = getString(cr, name);
6772             long value;
6773             try {
6774                 value = valString != null ? Long.parseLong(valString) : def;
6775             } catch (NumberFormatException e) {
6776                 value = def;
6777             }
6778             return value;
6779         }
6780 
6781         /**
6782          * Convenience function for retrieving a single secure settings value
6783          * as a {@code long}.  Note that internally setting values are always
6784          * stored as strings; this function converts the string to a {@code long}
6785          * for you.
6786          * <p>
6787          * This version does not take a default value.  If the setting has not
6788          * been set, or the string value is not a number,
6789          * it throws {@link SettingNotFoundException}.
6790          *
6791          * @param cr The ContentResolver to access.
6792          * @param name The name of the setting to retrieve.
6793          *
6794          * @return The setting's current value.
6795          * @throws SettingNotFoundException Thrown if a setting by the given
6796          * name can't be found or the setting value is not an integer.
6797          */
getLong(ContentResolver cr, String name)6798         public static long getLong(ContentResolver cr, String name)
6799                 throws SettingNotFoundException {
6800             String valString = getString(cr, name);
6801             try {
6802                 return Long.parseLong(valString);
6803             } catch (NumberFormatException e) {
6804                 throw new SettingNotFoundException(name);
6805             }
6806         }
6807 
6808         /**
6809          * Convenience function for updating a secure settings value as a long
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          */
putLong(ContentResolver cr, String name, long value)6821         public static boolean putLong(ContentResolver cr, String name, long value) {
6822             return putString(cr, name, Long.toString(value));
6823         }
6824 
6825         /**
6826          * Convenience function for retrieving a single secure settings value
6827          * as a floating point number.  Note that internally setting values are
6828          * always stored as strings; this function converts the string to an
6829          * float for you. The default value will be returned if the setting
6830          * is not defined or not a valid float.
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 float.
6838          */
getFloat(ContentResolver cr, String name, float def)6839         public static float getFloat(ContentResolver cr, String name, float def) {
6840             String v = getString(cr, name);
6841             try {
6842                 return v != null ? Float.parseFloat(v) : def;
6843             } catch (NumberFormatException e) {
6844                 return def;
6845             }
6846         }
6847 
6848         /**
6849          * Convenience function for retrieving a single secure settings value
6850          * as a float.  Note that internally setting values are always
6851          * stored as strings; this function converts the string to a float
6852          * for you.
6853          * <p>
6854          * This version does not take a default value.  If the setting has not
6855          * been set, or the string value is not a number,
6856          * it throws {@link SettingNotFoundException}.
6857          *
6858          * @param cr The ContentResolver to access.
6859          * @param name The name of the setting to retrieve.
6860          *
6861          * @throws SettingNotFoundException Thrown if a setting by the given
6862          * name can't be found or the setting value is not a float.
6863          *
6864          * @return The setting's current value.
6865          */
getFloat(ContentResolver cr, String name)6866         public static float getFloat(ContentResolver cr, String name)
6867                 throws SettingNotFoundException {
6868             String v = getString(cr, name);
6869             if (v == null) {
6870                 throw new SettingNotFoundException(name);
6871             }
6872             try {
6873                 return Float.parseFloat(v);
6874             } catch (NumberFormatException e) {
6875                 throw new SettingNotFoundException(name);
6876             }
6877         }
6878 
6879         /**
6880          * Convenience function for updating a single settings value as a
6881          * floating point number. This will either create a new entry in the
6882          * table if the given name does not exist, or modify the value of the
6883          * existing row with that name.  Note that internally setting values
6884          * are always stored as strings, so this function converts the given
6885          * value to a string before storing it.
6886          *
6887          * @param cr The ContentResolver to access.
6888          * @param name The name of the setting to modify.
6889          * @param value The new value for the setting.
6890          * @return true if the value was set, false on database errors
6891          */
putFloat(ContentResolver cr, String name, float value)6892         public static boolean putFloat(ContentResolver cr, String name, float value) {
6893             return putString(cr, name, Float.toString(value));
6894         }
6895 
6896 
6897         /**
6898           * Subscription to be used for voice call on a multi sim device. The supported values
6899           * are 0 = SUB1, 1 = SUB2 and etc.
6900           * @hide
6901           */
6902         public static final String MULTI_SIM_VOICE_CALL_SUBSCRIPTION = "multi_sim_voice_call";
6903 
6904         /**
6905           * Used to provide option to user to select subscription during dial.
6906           * The supported values are 0 = disable or 1 = enable prompt.
6907           * @hide
6908           */
6909         public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt";
6910 
6911         /**
6912           * Subscription to be used for data call on a multi sim device. The supported values
6913           * are 0 = SUB1, 1 = SUB2 and etc.
6914           * @hide
6915           */
6916         public static final String MULTI_SIM_DATA_CALL_SUBSCRIPTION = "multi_sim_data_call";
6917 
6918         /**
6919           * Subscription to be used for SMS on a multi sim device. The supported values
6920           * are 0 = SUB1, 1 = SUB2 and etc.
6921           * @hide
6922           */
6923         public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms";
6924 
6925        /**
6926           * Used to provide option to user to select subscription during send SMS.
6927           * The value 1 - enable, 0 - disable
6928           * @hide
6929           */
6930         public static final String MULTI_SIM_SMS_PROMPT = "multi_sim_sms_prompt";
6931 
6932 
6933 
6934         /** User preferred subscriptions setting.
6935           * This holds the details of the user selected subscription from the card and
6936           * the activation status. Each settings string have the coma separated values
6937           * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index
6938           * @hide
6939          */
6940         public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1",
6941                 "user_preferred_sub2","user_preferred_sub3"};
6942     }
6943 
6944     /**
6945      * User-defined bookmarks and shortcuts.  The target of each bookmark is an
6946      * Intent URL, allowing it to be either a web page or a particular
6947      * application activity.
6948      *
6949      * @hide
6950      */
6951     public static final class Bookmarks implements BaseColumns
6952     {
6953         private static final String TAG = "Bookmarks";
6954 
6955         /**
6956          * The content:// style URL for this table
6957          */
6958         public static final Uri CONTENT_URI =
6959             Uri.parse("content://" + AUTHORITY + "/bookmarks");
6960 
6961         /**
6962          * The row ID.
6963          * <p>Type: INTEGER</p>
6964          */
6965         public static final String ID = "_id";
6966 
6967         /**
6968          * Descriptive name of the bookmark that can be displayed to the user.
6969          * If this is empty, the title should be resolved at display time (use
6970          * {@link #getTitle(Context, Cursor)} any time you want to display the
6971          * title of a bookmark.)
6972          * <P>
6973          * Type: TEXT
6974          * </P>
6975          */
6976         public static final String TITLE = "title";
6977 
6978         /**
6979          * Arbitrary string (displayed to the user) that allows bookmarks to be
6980          * organized into categories.  There are some special names for
6981          * standard folders, which all start with '@'.  The label displayed for
6982          * the folder changes with the locale (via {@link #getLabelForFolder}) but
6983          * the folder name does not change so you can consistently query for
6984          * the folder regardless of the current locale.
6985          *
6986          * <P>Type: TEXT</P>
6987          *
6988          */
6989         public static final String FOLDER = "folder";
6990 
6991         /**
6992          * The Intent URL of the bookmark, describing what it points to.  This
6993          * value is given to {@link android.content.Intent#getIntent} to create
6994          * an Intent that can be launched.
6995          * <P>Type: TEXT</P>
6996          */
6997         public static final String INTENT = "intent";
6998 
6999         /**
7000          * Optional shortcut character associated with this bookmark.
7001          * <P>Type: INTEGER</P>
7002          */
7003         public static final String SHORTCUT = "shortcut";
7004 
7005         /**
7006          * The order in which the bookmark should be displayed
7007          * <P>Type: INTEGER</P>
7008          */
7009         public static final String ORDERING = "ordering";
7010 
7011         private static final String[] sIntentProjection = { INTENT };
7012         private static final String[] sShortcutProjection = { ID, SHORTCUT };
7013         private static final String sShortcutSelection = SHORTCUT + "=?";
7014 
7015         /**
7016          * Convenience function to retrieve the bookmarked Intent for a
7017          * particular shortcut key.
7018          *
7019          * @param cr The ContentResolver to query.
7020          * @param shortcut The shortcut key.
7021          *
7022          * @return Intent The bookmarked URL, or null if there is no bookmark
7023          *         matching the given shortcut.
7024          */
getIntentForShortcut(ContentResolver cr, char shortcut)7025         public static Intent getIntentForShortcut(ContentResolver cr, char shortcut)
7026         {
7027             Intent intent = null;
7028 
7029             Cursor c = cr.query(CONTENT_URI,
7030                     sIntentProjection, sShortcutSelection,
7031                     new String[] { String.valueOf((int) shortcut) }, ORDERING);
7032             // Keep trying until we find a valid shortcut
7033             try {
7034                 while (intent == null && c.moveToNext()) {
7035                     try {
7036                         String intentURI = c.getString(c.getColumnIndexOrThrow(INTENT));
7037                         intent = Intent.parseUri(intentURI, 0);
7038                     } catch (java.net.URISyntaxException e) {
7039                         // The stored URL is bad...  ignore it.
7040                     } catch (IllegalArgumentException e) {
7041                         // Column not found
7042                         Log.w(TAG, "Intent column not found", e);
7043                     }
7044                 }
7045             } finally {
7046                 if (c != null) c.close();
7047             }
7048 
7049             return intent;
7050         }
7051 
7052         /**
7053          * Add a new bookmark to the system.
7054          *
7055          * @param cr The ContentResolver to query.
7056          * @param intent The desired target of the bookmark.
7057          * @param title Bookmark title that is shown to the user; null if none
7058          *            or it should be resolved to the intent's title.
7059          * @param folder Folder in which to place the bookmark; null if none.
7060          * @param shortcut Shortcut that will invoke the bookmark; 0 if none. If
7061          *            this is non-zero and there is an existing bookmark entry
7062          *            with this same shortcut, then that existing shortcut is
7063          *            cleared (the bookmark is not removed).
7064          * @return The unique content URL for the new bookmark entry.
7065          */
add(ContentResolver cr, Intent intent, String title, String folder, char shortcut, int ordering)7066         public static Uri add(ContentResolver cr,
7067                                            Intent intent,
7068                                            String title,
7069                                            String folder,
7070                                            char shortcut,
7071                                            int ordering)
7072         {
7073             // If a shortcut is supplied, and it is already defined for
7074             // another bookmark, then remove the old definition.
7075             if (shortcut != 0) {
7076                 cr.delete(CONTENT_URI, sShortcutSelection,
7077                         new String[] { String.valueOf((int) shortcut) });
7078             }
7079 
7080             ContentValues values = new ContentValues();
7081             if (title != null) values.put(TITLE, title);
7082             if (folder != null) values.put(FOLDER, folder);
7083             values.put(INTENT, intent.toUri(0));
7084             if (shortcut != 0) values.put(SHORTCUT, (int) shortcut);
7085             values.put(ORDERING, ordering);
7086             return cr.insert(CONTENT_URI, values);
7087         }
7088 
7089         /**
7090          * Return the folder name as it should be displayed to the user.  This
7091          * takes care of localizing special folders.
7092          *
7093          * @param r Resources object for current locale; only need access to
7094          *          system resources.
7095          * @param folder The value found in the {@link #FOLDER} column.
7096          *
7097          * @return CharSequence The label for this folder that should be shown
7098          *         to the user.
7099          */
getLabelForFolder(Resources r, String folder)7100         public static CharSequence getLabelForFolder(Resources r, String folder) {
7101             return folder;
7102         }
7103 
7104         /**
7105          * Return the title as it should be displayed to the user. This takes
7106          * care of localizing bookmarks that point to activities.
7107          *
7108          * @param context A context.
7109          * @param cursor A cursor pointing to the row whose title should be
7110          *        returned. The cursor must contain at least the {@link #TITLE}
7111          *        and {@link #INTENT} columns.
7112          * @return A title that is localized and can be displayed to the user,
7113          *         or the empty string if one could not be found.
7114          */
getTitle(Context context, Cursor cursor)7115         public static CharSequence getTitle(Context context, Cursor cursor) {
7116             int titleColumn = cursor.getColumnIndex(TITLE);
7117             int intentColumn = cursor.getColumnIndex(INTENT);
7118             if (titleColumn == -1 || intentColumn == -1) {
7119                 throw new IllegalArgumentException(
7120                         "The cursor must contain the TITLE and INTENT columns.");
7121             }
7122 
7123             String title = cursor.getString(titleColumn);
7124             if (!TextUtils.isEmpty(title)) {
7125                 return title;
7126             }
7127 
7128             String intentUri = cursor.getString(intentColumn);
7129             if (TextUtils.isEmpty(intentUri)) {
7130                 return "";
7131             }
7132 
7133             Intent intent;
7134             try {
7135                 intent = Intent.parseUri(intentUri, 0);
7136             } catch (URISyntaxException e) {
7137                 return "";
7138             }
7139 
7140             PackageManager packageManager = context.getPackageManager();
7141             ResolveInfo info = packageManager.resolveActivity(intent, 0);
7142             return info != null ? info.loadLabel(packageManager) : "";
7143         }
7144     }
7145 
7146     /**
7147      * Returns the device ID that we should use when connecting to the mobile gtalk server.
7148      * This is a string like "android-0x1242", where the hex string is the Android ID obtained
7149      * from the GoogleLoginService.
7150      *
7151      * @param androidId The Android ID for this device.
7152      * @return The device ID that should be used when connecting to the mobile gtalk server.
7153      * @hide
7154      */
getGTalkDeviceId(long androidId)7155     public static String getGTalkDeviceId(long androidId) {
7156         return "android-" + Long.toHexString(androidId);
7157     }
7158 }
7159