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.Manifest;
20 import android.annotation.CallbackExecutor;
21 import android.annotation.IntDef;
22 import android.annotation.IntRange;
23 import android.annotation.NonNull;
24 import android.annotation.Nullable;
25 import android.annotation.PermissionMethod;
26 import android.annotation.PermissionName;
27 import android.annotation.RequiresPermission;
28 import android.annotation.SdkConstant;
29 import android.annotation.SdkConstant.SdkConstantType;
30 import android.annotation.SuppressLint;
31 import android.annotation.SystemApi;
32 import android.annotation.TestApi;
33 import android.annotation.UserIdInt;
34 import android.app.Activity;
35 import android.app.ActivityThread;
36 import android.app.AppOpsManager;
37 import android.app.Application;
38 import android.app.AutomaticZenRule;
39 import android.app.NotificationChannel;
40 import android.app.NotificationManager;
41 import android.app.SearchManager;
42 import android.app.WallpaperManager;
43 import android.compat.annotation.UnsupportedAppUsage;
44 import android.content.ComponentName;
45 import android.content.ContentResolver;
46 import android.content.ContentValues;
47 import android.content.Context;
48 import android.content.IContentProvider;
49 import android.content.Intent;
50 import android.content.pm.ActivityInfo;
51 import android.content.pm.ApplicationInfo;
52 import android.content.pm.PackageManager;
53 import android.content.pm.ResolveInfo;
54 import android.content.res.Configuration;
55 import android.content.res.Resources;
56 import android.database.ContentObserver;
57 import android.database.Cursor;
58 import android.database.SQLException;
59 import android.location.ILocationManager;
60 import android.location.LocationManager;
61 import android.media.AudioManager;
62 import android.net.ConnectivityManager;
63 import android.net.NetworkScoreManager;
64 import android.net.Uri;
65 import android.net.wifi.SoftApConfiguration;
66 import android.net.wifi.WifiManager;
67 import android.net.wifi.p2p.WifiP2pManager;
68 import android.os.BatteryManager;
69 import android.os.Binder;
70 import android.os.Build;
71 import android.os.Build.VERSION_CODES;
72 import android.os.Bundle;
73 import android.os.DropBoxManager;
74 import android.os.IBinder;
75 import android.os.LocaleList;
76 import android.os.PowerManager;
77 import android.os.PowerManager.AutoPowerSaveModeTriggers;
78 import android.os.Process;
79 import android.os.RemoteCallback;
80 import android.os.RemoteException;
81 import android.os.ResultReceiver;
82 import android.os.ServiceManager;
83 import android.os.UserHandle;
84 import android.speech.tts.TextToSpeech;
85 import android.telephony.TelephonyManager;
86 import android.text.TextUtils;
87 import android.util.AndroidException;
88 import android.util.ArrayMap;
89 import android.util.ArraySet;
90 import android.util.Log;
91 import android.util.MemoryIntArray;
92 import android.util.Slog;
93 import android.view.Display;
94 import android.view.MotionEvent;
95 import android.view.ViewConfiguration;
96 import android.view.Window;
97 import android.view.WindowManager.LayoutParams;
98 import android.widget.Editor;
99 
100 import com.android.internal.annotations.GuardedBy;
101 import com.android.internal.util.Preconditions;
102 
103 import java.io.IOException;
104 import java.lang.annotation.ElementType;
105 import java.lang.annotation.Retention;
106 import java.lang.annotation.RetentionPolicy;
107 import java.lang.annotation.Target;
108 import java.lang.reflect.Field;
109 import java.net.URISyntaxException;
110 import java.util.ArrayList;
111 import java.util.HashMap;
112 import java.util.HashSet;
113 import java.util.List;
114 import java.util.Map;
115 import java.util.Objects;
116 import java.util.Set;
117 import java.util.concurrent.Executor;
118 import java.util.function.Consumer;
119 
120 /**
121  * The Settings provider contains global system-level device preferences.
122  */
123 public final class Settings {
124     /** @hide */
125     public static final boolean DEFAULT_OVERRIDEABLE_BY_RESTORE = false;
126 
127     // Intent actions for Settings
128 
129     /**
130      * Activity Action: Show system settings.
131      * <p>
132      * Input: Nothing.
133      * <p>
134      * Output: Nothing.
135      */
136     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
137     public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
138 
139     /**
140      * Activity Action: Show settings to allow configuration of APNs.
141      * <p>
142      * Input: Nothing.
143      * <p>
144      * Output: Nothing.
145      *
146      * <p class="note">
147      * In some cases, a matching Activity may not exist, so ensure you
148      * safeguard against this.
149      */
150     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
151     public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS";
152 
153     /**
154      * Activity Action: Show settings to allow configuration of current location
155      * sources.
156      * <p>
157      * In some cases, a matching Activity may not exist, so ensure you
158      * safeguard against this.
159      * <p>
160      * Input: Nothing.
161      * <p>
162      * Output: Nothing.
163      */
164     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
165     public static final String ACTION_LOCATION_SOURCE_SETTINGS =
166             "android.settings.LOCATION_SOURCE_SETTINGS";
167 
168     /**
169      * Activity Action: Show settings to allow configuration of location controller extra package.
170      * <p>
171      * In some cases, a matching Activity may not exist, so ensure you
172      * safeguard against this.
173      * <p>
174      * Input: Nothing.
175      * <p>
176      * Output: Nothing.
177      *
178      * @hide
179      */
180     @SystemApi
181     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
182     public static final String ACTION_LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS =
183             "android.settings.LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS";
184 
185     /**
186      * Activity Action: Show scanning settings to allow configuration of Wi-Fi
187      * and Bluetooth scanning settings.
188      * <p>
189      * In some cases, a matching Activity may not exist, so ensure you
190      * safeguard against this.
191      * <p>
192      * Input: Nothing.
193      * <p>
194      * Output: Nothing.
195      * @hide
196      */
197     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
198     public static final String ACTION_LOCATION_SCANNING_SETTINGS =
199             "android.settings.LOCATION_SCANNING_SETTINGS";
200 
201     /**
202      * Activity Action: Show settings to manage creation/deletion of cloned apps.
203      * <p>
204      * In some cases, a matching Activity may not exist, so ensure you
205      * safeguard against this.
206      * <p>
207      * Input: Nothing.
208      * <p>
209      * Output: Nothing.
210      * @hide
211      */
212     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
213     public static final String ACTION_MANAGE_CLONED_APPS_SETTINGS =
214             "android.settings.MANAGE_CLONED_APPS_SETTINGS";
215 
216     /**
217      * Activity Action: Show settings to allow configuration of users.
218      * <p>
219      * In some cases, a matching Activity may not exist, so ensure you
220      * safeguard against this.
221      * <p>
222      * Input: Nothing.
223      * <p>
224      * Output: Nothing.
225      * @hide
226      */
227     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
228     @SystemApi
229     public static final String ACTION_USER_SETTINGS =
230             "android.settings.USER_SETTINGS";
231 
232     /**
233      * Activity Action: Show settings to allow configuration of wireless controls
234      * such as Wi-Fi, Bluetooth and Mobile networks.
235      * <p>
236      * In some cases, a matching Activity may not exist, so ensure you
237      * safeguard against this.
238      * <p>
239      * Input: Nothing.
240      * <p>
241      * Output: Nothing.
242      */
243     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
244     public static final String ACTION_WIRELESS_SETTINGS =
245             "android.settings.WIRELESS_SETTINGS";
246 
247     /**
248      * Activity Action: Show tether provisioning activity.
249      *
250      * <p>
251      * In some cases, a matching Activity may not exist, so ensure you
252      * safeguard against this.
253      * <p>
254      * Input: {@link ConnectivityManager#EXTRA_TETHER_TYPE} should be included to specify which type
255      * of tethering should be checked. {@link ConnectivityManager#EXTRA_PROVISION_CALLBACK} should
256      * contain a {@link ResultReceiver} which will be called back with a tether result code.
257      * <p>
258      * Output: The result of the provisioning check.
259      * {@link ConnectivityManager#TETHER_ERROR_NO_ERROR} if successful,
260      * {@link ConnectivityManager#TETHER_ERROR_PROVISION_FAILED} for failure.
261      *
262      * @hide
263      */
264     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
265     @SystemApi
266     public static final String ACTION_TETHER_PROVISIONING_UI =
267             "android.settings.TETHER_PROVISIONING_UI";
268 
269     /**
270      * Activity Action: Show a dialog activity to notify tethering is NOT supported by carrier.
271      *
272      * When {@link android.telephony.CarrierConfigManager#KEY_CARRIER_SUPPORTS_TETHERING_BOOL}
273      * is false, and tethering is started by Settings, this dialog activity will be started to
274      * tell the user that tethering is not supported by carrier.
275      *
276      * @hide
277      */
278     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
279     @SystemApi
280     public static final String ACTION_TETHER_UNSUPPORTED_CARRIER_UI =
281             "android.settings.TETHER_UNSUPPORTED_CARRIER_UI";
282 
283     /**
284      * Activity Action: Show settings to allow entering/exiting airplane mode.
285      * <p>
286      * In some cases, a matching Activity may not exist, so ensure you
287      * safeguard against this.
288      * <p>
289      * Input: Nothing.
290      * <p>
291      * Output: Nothing.
292      */
293     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
294     public static final String ACTION_AIRPLANE_MODE_SETTINGS =
295             "android.settings.AIRPLANE_MODE_SETTINGS";
296 
297     /**
298      * Activity Action: Show mobile data usage list.
299      * <p>
300      * Input: {@link EXTRA_NETWORK_TEMPLATE} and {@link EXTRA_SUB_ID} should be included to specify
301      * how and what mobile data statistics should be collected.
302      * <p>
303      * Output: Nothing
304      * @hide
305      */
306     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
307     public static final String ACTION_MOBILE_DATA_USAGE =
308             "android.settings.MOBILE_DATA_USAGE";
309 
310     /** @hide */
311     public static final String EXTRA_NETWORK_TEMPLATE = "network_template";
312 
313     /**
314      * Activity Action: Show One-handed mode Settings page.
315      * <p>
316      * Input: Nothing
317      * <p>
318      * Output: Nothing
319      * @hide
320      */
321     public static final String ACTION_ONE_HANDED_SETTINGS =
322             "android.settings.action.ONE_HANDED_SETTINGS";
323     /**
324      * The return values for {@link Settings.Config#set}
325      * @hide
326      */
327     @IntDef(prefix = "SET_ALL_RESULT_",
328             value = { SET_ALL_RESULT_FAILURE, SET_ALL_RESULT_SUCCESS, SET_ALL_RESULT_DISABLED })
329     @Retention(RetentionPolicy.SOURCE)
330     @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
331     public @interface SetAllResult {}
332 
333     /**
334      * A return value for {@link #KEY_CONFIG_SET_ALL_RETURN}, indicates failure.
335      * @hide
336      */
337     public static final int SET_ALL_RESULT_FAILURE = 0;
338 
339     /**
340      * A return value for {@link #KEY_CONFIG_SET_ALL_RETURN}, indicates success.
341      * @hide
342      */
343     public static final int SET_ALL_RESULT_SUCCESS = 1;
344 
345     /**
346      * A return value for {@link #KEY_CONFIG_SET_ALL_RETURN}, indicates a set all is disabled.
347      * @hide
348      */
349     public static final int SET_ALL_RESULT_DISABLED = 2;
350 
351     /** @hide */
352     public static final String KEY_CONFIG_SET_ALL_RETURN = "config_set_all_return";
353 
354     /** @hide */
355     public static final String KEY_CONFIG_GET_SYNC_DISABLED_MODE_RETURN =
356             "config_get_sync_disabled_mode_return";
357 
358     /**
359      * An int extra specifying a subscription ID.
360      *
361      * @see android.telephony.SubscriptionInfo#getSubscriptionId
362      */
363     public static final String EXTRA_SUB_ID = "android.provider.extra.SUB_ID";
364 
365     /**
366      * Activity Action: Modify Airplane mode settings using a voice command.
367      * <p>
368      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
369      * <p>
370      * This intent MUST be started using
371      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
372      * startVoiceActivity}.
373      * <p>
374      * Note: The activity implementing this intent MUST verify that
375      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
376      * modifying the setting.
377      * <p>
378      * Input: To tell which state airplane mode should be set to, add the
379      * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified.
380      * If the extra is not included, no changes will be made.
381      * <p>
382      * Output: Nothing.
383      */
384     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
385     public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE =
386             "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
387 
388     /**
389      * Activity Action: Show settings for accessibility modules.
390      * <p>
391      * In some cases, a matching Activity may not exist, so ensure you
392      * safeguard against this.
393      * <p>
394      * Input: Nothing.
395      * <p>
396      * Output: Nothing.
397      */
398     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
399     public static final String ACTION_ACCESSIBILITY_SETTINGS =
400             "android.settings.ACCESSIBILITY_SETTINGS";
401 
402     /**
403      * Activity Action: Show detail settings of a particular accessibility service.
404      * <p>
405      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
406      * <p>
407      * Input: {@link Intent#EXTRA_COMPONENT_NAME} must specify the accessibility service component
408      * name to be shown.
409      * <p>
410      * Output: Nothing.
411      * @hide
412      **/
413     @SystemApi
414     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
415     public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS =
416             "android.settings.ACCESSIBILITY_DETAILS_SETTINGS";
417 
418     /**
419      * Activity Action: Show settings to allow configuration of accessibility color and motion.
420      * <p>
421      * In some cases, a matching Activity may not exist, so ensure you
422      * safeguard against this.
423      * <p>
424      * Input: Nothing.
425      * <p>
426      * Output: Nothing.
427      * @hide
428      */
429     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
430     public static final String ACTION_ACCESSIBILITY_COLOR_MOTION_SETTINGS =
431             "android.settings.ACCESSIBILITY_COLOR_MOTION_SETTINGS";
432 
433     /**
434      * Activity Action: Show settings to allow configuration of Reduce Bright Colors.
435      * <p>
436      * In some cases, a matching Activity may not exist, so ensure you
437      * safeguard against this.
438      * <p>
439      * Input: Nothing.
440      * <p>
441      * Output: Nothing.
442      * @hide
443      */
444     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
445     public static final String ACTION_REDUCE_BRIGHT_COLORS_SETTINGS =
446             "android.settings.REDUCE_BRIGHT_COLORS_SETTINGS";
447 
448     /**
449      * Activity Action: Show settings to allow configuration of Color correction.
450      * <p>
451      * In some cases, a matching Activity may not exist, so ensure you
452      * safeguard against this.
453      * <p>
454      * Input: Nothing.
455      * <p>
456      * Output: Nothing.
457      * @hide
458      */
459     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
460     public static final String ACTION_COLOR_CORRECTION_SETTINGS =
461             "com.android.settings.ACCESSIBILITY_COLOR_SPACE_SETTINGS";
462 
463     /**
464      * Activity Action: Show settings to allow configuration of Color inversion.
465      * <p>
466      * In some cases, a matching Activity may not exist, so ensure you
467      * safeguard against this.
468      * <p>
469      * Input: Nothing.
470      * <p>
471      * Output: Nothing.
472      * @hide
473      */
474     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
475     public static final String ACTION_COLOR_INVERSION_SETTINGS =
476             "android.settings.COLOR_INVERSION_SETTINGS";
477 
478     /**
479      * Activity Action: Show settings to allow configuration of text reading.
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      * @hide
488      */
489     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
490     public static final String ACTION_TEXT_READING_SETTINGS =
491             "android.settings.TEXT_READING_SETTINGS";
492 
493     /**
494      * Activity Action: Show settings to control access to usage information.
495      * <p>
496      * In some cases, a matching Activity may not exist, so ensure you
497      * safeguard against this.
498      * <p>
499      * Input: Nothing.
500      * <p>
501      * Output: Nothing.
502      */
503     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
504     public static final String ACTION_USAGE_ACCESS_SETTINGS =
505             "android.settings.USAGE_ACCESS_SETTINGS";
506 
507     /**
508      * Activity Category: Show application settings related to usage access.
509      * <p>
510      * An activity that provides a user interface for adjusting usage access related
511      * preferences for its containing application. Optional but recommended for apps that
512      * use {@link android.Manifest.permission#PACKAGE_USAGE_STATS}.
513      * <p>
514      * The activity may define meta-data to describe what usage access is
515      * used for within their app with {@link #METADATA_USAGE_ACCESS_REASON}, which
516      * will be displayed in Settings.
517      * <p>
518      * Input: Nothing.
519      * <p>
520      * Output: Nothing.
521      */
522     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
523     public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG =
524             "android.intent.category.USAGE_ACCESS_CONFIG";
525 
526     /**
527      * Metadata key: Reason for needing usage access.
528      * <p>
529      * A key for metadata attached to an activity that receives action
530      * {@link #INTENT_CATEGORY_USAGE_ACCESS_CONFIG}, shown to the
531      * user as description of how the app uses usage access.
532      * <p>
533      */
534     public static final String METADATA_USAGE_ACCESS_REASON =
535             "android.settings.metadata.USAGE_ACCESS_REASON";
536 
537     /**
538      * Activity Action: Show settings to allow configuration of security and
539      * location privacy.
540      * <p>
541      * In some cases, a matching Activity may not exist, so ensure you
542      * safeguard against this.
543      * <p>
544      * Input: Nothing.
545      * <p>
546      * Output: Nothing.
547      */
548     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
549     public static final String ACTION_SECURITY_SETTINGS =
550             "android.settings.SECURITY_SETTINGS";
551 
552     /**
553      * Activity Action: Show settings to allow configuration of trusted external sources
554      *
555      * Input: Optionally, the Intent's data URI can specify the application package name to
556      * directly invoke the management GUI specific to the package name. For example
557      * "package:com.my.app".
558      * <p>
559      * Output: Nothing.
560      */
561     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
562     public static final String ACTION_MANAGE_UNKNOWN_APP_SOURCES =
563             "android.settings.MANAGE_UNKNOWN_APP_SOURCES";
564 
565     /**
566      * Activity Action: Show settings to allow configuration of
567      * {@link Manifest.permission#SCHEDULE_EXACT_ALARM} permission
568      *
569      * Input: Optionally, the Intent's data URI can specify the application package name to
570      * directly invoke the management GUI specific to the package name. For example
571      * "package:com.my.app".
572      * <p>
573      * Output: When a package data uri is passed as input, the activity result is set to
574      * {@link android.app.Activity#RESULT_OK} if the permission was granted to the app. Otherwise,
575      * the result is set to {@link android.app.Activity#RESULT_CANCELED}.
576      */
577     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
578     public static final String ACTION_REQUEST_SCHEDULE_EXACT_ALARM =
579             "android.settings.REQUEST_SCHEDULE_EXACT_ALARM";
580 
581     /**
582      * Activity Action: Show settings to allow configuration of
583      * {@link Manifest.permission#MANAGE_MEDIA} permission
584      *
585      * Input: Optionally, the Intent's data URI can specify the application package name to
586      * directly invoke the management GUI specific to the package name. For example
587      * "package:com.my.app".
588      * <p>
589      * Output: Nothing.
590      */
591     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
592     public static final String ACTION_REQUEST_MANAGE_MEDIA =
593             "android.settings.REQUEST_MANAGE_MEDIA";
594 
595     /**
596      * Activity Action: Show settings to allow configuration of
597      * {@link Manifest.permission#RUN_USER_INITIATED_JOBS} permission
598      *
599      * Input: Optionally, the Intent's data URI can specify the application package name to
600      * directly invoke the management GUI specific to the package name. For example
601      * "package:com.my.app".
602      * <p>
603      * Output: When a package data uri is passed as input, the activity result is set to
604      * {@link android.app.Activity#RESULT_OK} if the permission was granted to the app. Otherwise,
605      * the result is set to {@link android.app.Activity#RESULT_CANCELED}.
606      *
607      * @hide
608      */
609     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
610     public static final String ACTION_MANAGE_APP_LONG_RUNNING_JOBS =
611             "android.settings.MANAGE_APP_LONG_RUNNING_JOBS";
612 
613     /**
614      * Activity Action: Show settings to allow configuration of cross-profile access for apps
615      *
616      * Input: Optionally, the Intent's data URI can specify the application package name to
617      * directly invoke the management GUI specific to the package name. For example
618      * "package:com.my.app".
619      * <p>
620      * Output: Nothing.
621      *
622      * @hide
623      */
624     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
625     public static final String ACTION_MANAGE_CROSS_PROFILE_ACCESS =
626             "android.settings.MANAGE_CROSS_PROFILE_ACCESS";
627 
628     /**
629      * Activity Action: Show the "Open by Default" page in a particular application's details page.
630      * <p>
631      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
632      * <p>
633      * Input: The Intent's data URI specifies the application package name
634      * to be shown, with the "package" scheme. That is "package:com.my.app".
635      * <p>
636      * Output: Nothing.
637      */
638     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
639     public static final String ACTION_APP_OPEN_BY_DEFAULT_SETTINGS =
640             "android.settings.APP_OPEN_BY_DEFAULT_SETTINGS";
641 
642     /**
643      * Activity Action: Show trusted credentials settings, opening to the user tab,
644      * to allow management of installed credentials.
645      * <p>
646      * In some cases, a matching Activity may not exist, so ensure you
647      * safeguard against this.
648      * <p>
649      * Input: Nothing.
650      * <p>
651      * Output: Nothing.
652      * @hide
653      */
654     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
655     @UnsupportedAppUsage
656     public static final String ACTION_TRUSTED_CREDENTIALS_USER =
657             "com.android.settings.TRUSTED_CREDENTIALS_USER";
658 
659     /**
660      * Activity Action: Show dialog explaining that an installed CA cert may enable
661      * monitoring of encrypted network traffic.
662      * <p>
663      * In some cases, a matching Activity may not exist, so ensure you
664      * safeguard against this. Add {@link #EXTRA_NUMBER_OF_CERTIFICATES} extra to indicate the
665      * number of certificates.
666      * <p>
667      * Input: Nothing.
668      * <p>
669      * Output: Nothing.
670      * @hide
671      */
672     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
673     public static final String ACTION_MONITORING_CERT_INFO =
674             "com.android.settings.MONITORING_CERT_INFO";
675 
676     /**
677      * Activity Action: Show settings to allow configuration of privacy options.
678      * <p>
679      * In some cases, a matching Activity may not exist, so ensure you
680      * safeguard against this.
681      * <p>
682      * Input: Nothing.
683      * <p>
684      * Output: Nothing.
685      */
686     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
687     public static final String ACTION_PRIVACY_SETTINGS =
688             "android.settings.PRIVACY_SETTINGS";
689 
690     /**
691      * Activity Action: Show settings to allow configuration of VPN.
692      * <p>
693      * In some cases, a matching Activity may not exist, so ensure you
694      * safeguard against this.
695      * <p>
696      * Input: Nothing.
697      * <p>
698      * Output: Nothing.
699      */
700     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
701     public static final String ACTION_VPN_SETTINGS =
702             "android.settings.VPN_SETTINGS";
703 
704     /**
705      * Activity Action: Show settings to allow configuration of Wi-Fi.
706      * <p>
707      * In some cases, a matching Activity may not exist, so ensure you
708      * safeguard against this.
709      * <p>
710      * Input: Nothing.
711      * <p>
712      * Output: Nothing.
713      */
714     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
715     public static final String ACTION_WIFI_SETTINGS =
716             "android.settings.WIFI_SETTINGS";
717 
718     /**
719      * Activity Action: Show settings to allow configuration of Advanced memory protection.
720      * <p>
721      * Memory Tagging Extension (MTE) is a CPU extension that allows to protect against certain
722      * classes of security problems at a small runtime performance cost overhead.
723      * <p>
724      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
725      * <p>
726      * Input: Nothing.
727      * <p>
728      * Output: Nothing.
729      */
730     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
731     public static final String ACTION_ADVANCED_MEMORY_PROTECTION_SETTINGS =
732             "android.settings.ADVANCED_MEMORY_PROTECTION_SETTINGS";
733 
734     /**
735      * Activity Action: Show settings to allow configuration of a static IP
736      * address for Wi-Fi.
737      * <p>
738      * In some cases, a matching Activity may not exist, so ensure you safeguard
739      * against this.
740      * <p>
741      * Input: Nothing.
742      * <p>
743      * Output: Nothing.
744      */
745     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
746     public static final String ACTION_WIFI_IP_SETTINGS =
747             "android.settings.WIFI_IP_SETTINGS";
748 
749     /**
750      * Activity Action: Show setting page to process a Wi-Fi Easy Connect (aka DPP) URI and start
751      * configuration. This intent should be used when you want to use this device to take on the
752      * configurator role for an IoT/other device. When provided with a valid DPP URI
753      * string, Settings will open a Wi-Fi selection screen for the user to indicate which network
754      * they would like to configure the device specified in the DPP URI string and
755      * carry them through the rest of the flow for provisioning the device.
756      * <p>
757      * In some cases, a matching Activity may not exist, so ensure to safeguard against this by
758      * checking {@link WifiManager#isEasyConnectSupported()}.
759      * <p>
760      * Input: The Intent's data URI specifies bootstrapping information for authenticating and
761      * provisioning the peer, and uses a "DPP" scheme. The URI should be attached to the intent
762      * using {@link Intent#setData(Uri)}. The calling app can obtain a DPP URI in any
763      * way, e.g. by scanning a QR code or other out-of-band methods. The calling app may also
764      * attach the {@link #EXTRA_EASY_CONNECT_BAND_LIST} extra to provide information
765      * about the bands supported by the enrollee device.
766      * <p>
767      * Output: After calling {@link android.app.Activity#startActivityForResult}, the callback
768      * {@code onActivityResult} will have resultCode {@link android.app.Activity#RESULT_OK} if
769      * the Wi-Fi Easy Connect configuration succeeded and the user tapped the 'Done' button, or
770      * {@link android.app.Activity#RESULT_CANCELED} if the operation failed and user tapped the
771      * 'Cancel' button. In case the operation has failed, a status code from
772      * {@link android.net.wifi.EasyConnectStatusCallback} {@code EASY_CONNECT_EVENT_FAILURE_*} will
773      * be returned as an Extra {@link #EXTRA_EASY_CONNECT_ERROR_CODE}. Easy Connect R2
774      * Enrollees report additional details about the error they encountered, which will be
775      * provided in the {@link #EXTRA_EASY_CONNECT_ATTEMPTED_SSID},
776      * {@link #EXTRA_EASY_CONNECT_CHANNEL_LIST}, and {@link #EXTRA_EASY_CONNECT_BAND_LIST}.
777      */
778     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
779     public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_URI =
780             "android.settings.PROCESS_WIFI_EASY_CONNECT_URI";
781 
782     /**
783      * Activity Extra: The Easy Connect operation error code
784      * <p>
785      * An extra returned on the result intent received when using the
786      * {@link #ACTION_PROCESS_WIFI_EASY_CONNECT_URI} intent to launch the Easy Connect Operation.
787      * This extra contains the integer error code of the operation - one of
788      * {@link android.net.wifi.EasyConnectStatusCallback} {@code EASY_CONNECT_EVENT_FAILURE_*}. If
789      * there is no error, i.e. if the operation returns {@link android.app.Activity#RESULT_OK},
790      * then this extra is not attached to the result intent.
791      * <p>
792      * Use the {@link Intent#hasExtra(String)} to determine whether the extra is attached and
793      * {@link Intent#getIntExtra(String, int)} to obtain the error code data.
794      */
795     public static final String EXTRA_EASY_CONNECT_ERROR_CODE =
796             "android.provider.extra.EASY_CONNECT_ERROR_CODE";
797 
798     /**
799      * Activity Extra: The SSID that the Enrollee tried to connect to.
800      * <p>
801      * An extra returned on the result intent received when using the {@link
802      * #ACTION_PROCESS_WIFI_EASY_CONNECT_URI} intent to launch the Easy Connect Operation. This
803      * extra contains the SSID of the Access Point that the remote Enrollee tried to connect to.
804      * This value is populated only by remote R2 devices, and only for the following error codes:
805      * {@link android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK}
806      * {@link android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION}.
807      * Therefore, always check if this extra is available using {@link Intent#hasExtra(String)}. If
808      * there is no error, i.e. if the operation returns {@link android.app.Activity#RESULT_OK}, then
809      * this extra is not attached to the result intent.
810      * <p>
811      * Use the {@link Intent#getStringExtra(String)} to obtain the SSID.
812      */
813     public static final String EXTRA_EASY_CONNECT_ATTEMPTED_SSID =
814             "android.provider.extra.EASY_CONNECT_ATTEMPTED_SSID";
815 
816     /**
817      * Activity Extra: The Channel List that the Enrollee used to scan a network.
818      * <p>
819      * An extra returned on the result intent received when using the {@link
820      * #ACTION_PROCESS_WIFI_EASY_CONNECT_URI} intent to launch the Easy Connect Operation. This
821      * extra contains the channel list that the Enrollee scanned for a network. This value is
822      * populated only by remote R2 devices, and only for the following error code: {@link
823      * android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK}.
824      * Therefore, always check if this extra is available using {@link Intent#hasExtra(String)}. If
825      * there is no error, i.e. if the operation returns {@link android.app.Activity#RESULT_OK}, then
826      * this extra is not attached to the result intent. The list is JSON formatted, as an array
827      * (Wi-Fi global operating classes) of arrays (Wi-Fi channels).
828      * <p>
829      * Use the {@link Intent#getStringExtra(String)} to obtain the list.
830      */
831     public static final String EXTRA_EASY_CONNECT_CHANNEL_LIST =
832             "android.provider.extra.EASY_CONNECT_CHANNEL_LIST";
833 
834     /**
835      * Activity Extra: The Band List that the Enrollee supports.
836      * <p>
837      * This extra contains the bands the Enrollee supports, expressed as the Global Operating
838      * Class, see Table E-4 in IEEE Std 802.11-2016 Global operating classes. It is used both as
839      * input, to configure the Easy Connect operation and as output of the operation.
840      * <p>
841      * As input: an optional extra to be attached to the
842      * {@link #ACTION_PROCESS_WIFI_EASY_CONNECT_URI}. If attached, it indicates the bands which
843      * the remote device (enrollee, device-to-be-configured) supports. The Settings operation
844      * may take this into account when presenting the user with list of networks configurations
845      * to be used. The calling app may obtain this information in any out-of-band method. The
846      * information should be attached as an array of raw integers - using the
847      * {@link Intent#putExtra(String, int[])}.
848      * <p>
849      * As output: an extra returned on the result intent received when using the
850      * {@link #ACTION_PROCESS_WIFI_EASY_CONNECT_URI} intent to launch the Easy Connect Operation
851      * . This value is populated only by remote R2 devices, and only for the following error
852      * codes:
853      * {@link android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK},
854      * {@link android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION},
855      * or
856      * {@link android.net.wifi.EasyConnectStatusCallback#EASY_CONNECT_EVENT_FAILURE_ENROLLEE_REJECTED_CONFIGURATION}.
857      * Therefore, always check if this extra is available using {@link Intent#hasExtra(String)}.
858      * If there is no error, i.e. if the operation returns {@link android.app.Activity#RESULT_OK}
859      * , then this extra is not attached to the result intent.
860      * <p>
861      * Use the {@link Intent#getIntArrayExtra(String)} to obtain the list.
862      */
863     public static final String EXTRA_EASY_CONNECT_BAND_LIST =
864             "android.provider.extra.EASY_CONNECT_BAND_LIST";
865 
866     /**
867      * Activity Action: Show settings to allow configuration of data and view data usage.
868      * <p>
869      * In some cases, a matching Activity may not exist, so ensure you
870      * safeguard against this.
871      * <p>
872      * Input: Nothing.
873      * <p>
874      * Output: Nothing.
875      */
876     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
877     public static final String ACTION_DATA_USAGE_SETTINGS =
878             "android.settings.DATA_USAGE_SETTINGS";
879 
880     /**
881      * Activity Action: Show settings to allow configuration of Bluetooth.
882      * <p>
883      * In some cases, a matching Activity may not exist, so ensure you
884      * safeguard against this.
885      * <p>
886      * Input: Nothing.
887      * <p>
888      * Output: Nothing.
889      */
890     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
891     public static final String ACTION_BLUETOOTH_SETTINGS =
892             "android.settings.BLUETOOTH_SETTINGS";
893 
894     /**
895      * Activity action: Show Settings app search UI when this action is available for device.
896      * <p>
897      * Input: Nothing.
898      * <p>
899      * Output: Nothing.
900      */
901     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
902     public static final String ACTION_APP_SEARCH_SETTINGS = "android.settings.APP_SEARCH_SETTINGS";
903 
904     /**
905      * Activity Action: Show settings to allow configuration of Assist Gesture.
906      * <p>
907      * In some cases, a matching Activity may not exist, so ensure you
908      * safeguard against this.
909      * <p>
910      * Input: Nothing.
911      * <p>
912      * Output: Nothing.
913      * @hide
914      */
915     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
916     public static final String ACTION_ASSIST_GESTURE_SETTINGS =
917             "android.settings.ASSIST_GESTURE_SETTINGS";
918 
919     /**
920      * Activity Action: Show settings to enroll fingerprints, and setup PIN/Pattern/Pass if
921      * necessary.
922      * @deprecated See {@link #ACTION_BIOMETRIC_ENROLL}.
923      * <p>
924      * Input: Nothing.
925      * <p>
926      * Output: Nothing.
927      */
928     @Deprecated
929     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
930     public static final String ACTION_FINGERPRINT_ENROLL =
931             "android.settings.FINGERPRINT_ENROLL";
932 
933     /**
934      * Activity Action: Show settings to enroll biometrics, and setup PIN/Pattern/Pass if
935      * necessary. By default, this prompts the user to enroll biometrics with strength
936      * Weak or above, as defined by the CDD. Only biometrics that meet or exceed Strong, as defined
937      * in the CDD are allowed to participate in Keystore operations.
938      * <p>
939      * Input: extras {@link #EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED} as an integer, with
940      * constants defined in {@link android.hardware.biometrics.BiometricManager.Authenticators},
941      * e.g. {@link android.hardware.biometrics.BiometricManager.Authenticators#BIOMETRIC_STRONG}.
942      * If not specified, the default behavior is
943      * {@link android.hardware.biometrics.BiometricManager.Authenticators#BIOMETRIC_WEAK}.
944      * <p>
945      * Output: Nothing. Note that callers should still check
946      * {@link android.hardware.biometrics.BiometricManager#canAuthenticate(int)}
947      * afterwards to ensure that the user actually completed enrollment.
948      */
949     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
950     public static final String ACTION_BIOMETRIC_ENROLL =
951             "android.settings.BIOMETRIC_ENROLL";
952 
953     /**
954      * Activity Extra: The minimum strength to request enrollment for.
955      * <p>
956      * This can be passed as an extra field to the {@link #ACTION_BIOMETRIC_ENROLL} intent to
957      * indicate that only enrollment for sensors that meet these requirements should be shown. The
958      * value should be a combination of the constants defined in
959      * {@link android.hardware.biometrics.BiometricManager.Authenticators}.
960      */
961     public static final String EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED =
962             "android.provider.extra.BIOMETRIC_AUTHENTICATORS_ALLOWED";
963 
964     /**
965      * Activity Action: Show settings to allow configuration of cast endpoints.
966      * <p>
967      * In some cases, a matching Activity may not exist, so ensure you
968      * safeguard against this.
969      * <p>
970      * Input: Nothing.
971      * <p>
972      * Output: Nothing.
973      */
974     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
975     public static final String ACTION_CAST_SETTINGS =
976             "android.settings.CAST_SETTINGS";
977 
978     /**
979      * Activity Action: Show settings to allow configuration of date and time.
980      * <p>
981      * In some cases, a matching Activity may not exist, so ensure you
982      * safeguard against this.
983      * <p>
984      * Input: Nothing.
985      * <p>
986      * Output: Nothing.
987      */
988     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
989     public static final String ACTION_DATE_SETTINGS =
990             "android.settings.DATE_SETTINGS";
991 
992     /**
993      * Activity Action: Show settings to allow configuration of sound and volume.
994      * <p>
995      * In some cases, a matching Activity may not exist, so ensure you
996      * safeguard against this.
997      * <p>
998      * Input: Nothing.
999      * <p>
1000      * Output: Nothing.
1001      */
1002     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1003     public static final String ACTION_SOUND_SETTINGS =
1004             "android.settings.SOUND_SETTINGS";
1005 
1006     /**
1007      * Activity Action: Show settings to allow configuration of display.
1008      * <p>
1009      * In some cases, a matching Activity may not exist, so ensure you
1010      * safeguard against this.
1011      * <p>
1012      * Input: Nothing.
1013      * <p>
1014      * Output: Nothing.
1015      */
1016     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1017     public static final String ACTION_DISPLAY_SETTINGS =
1018             "android.settings.DISPLAY_SETTINGS";
1019 
1020     /**
1021      * Activity Action: Show Auto Rotate configuration settings.
1022      */
1023     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1024     public static final String ACTION_AUTO_ROTATE_SETTINGS =
1025             "android.settings.AUTO_ROTATE_SETTINGS";
1026 
1027     /**
1028      * Activity Action: Show settings to allow configuration of Night display.
1029      * <p>
1030      * In some cases, a matching Activity may not exist, so ensure you
1031      * safeguard against this.
1032      * <p>
1033      * Input: Nothing.
1034      * <p>
1035      * Output: Nothing.
1036      */
1037     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1038     public static final String ACTION_NIGHT_DISPLAY_SETTINGS =
1039             "android.settings.NIGHT_DISPLAY_SETTINGS";
1040 
1041     /**
1042      * Activity Action: Show settings to allow configuration of Dark theme.
1043      * <p>
1044      * In some cases, a matching Activity may not exist, so ensure you
1045      * safeguard against this.
1046      * <p>
1047      * Input: Nothing.
1048      * <p>
1049      * Output: Nothing.
1050      *
1051      * @hide
1052      */
1053     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1054     public static final String ACTION_DARK_THEME_SETTINGS =
1055             "android.settings.DARK_THEME_SETTINGS";
1056 
1057     /**
1058      * Activity Action: Show settings to allow configuration of locale.
1059      * <p>
1060      * In some cases, a matching Activity may not exist, so ensure you
1061      * safeguard against this.
1062      * <p>
1063      * Input: The optional {@code #EXTRA_EXPLICIT_LOCALES} with language tags that contains locales
1064      * to limit available locales. This is only supported when device is under demo mode.
1065      * If intent does not contain this extra, it will show system supported locale list.
1066      * <br/>
1067      * If {@code #EXTRA_EXPLICIT_LOCALES} contain a unsupported locale, it will still show this
1068      * locale on list, but may not be supported by the devcie.
1069      *
1070      * Output: Nothing.
1071      */
1072     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1073     public static final String ACTION_LOCALE_SETTINGS =
1074             "android.settings.LOCALE_SETTINGS";
1075 
1076     /**
1077      * Activity Extra: Show explicit locales in launched locale picker activity.
1078      *
1079      * This can be passed as an extra field in an Activity Intent with one or more language tags
1080      * as a {@link LocaleList}. This must be passed as an extra field to the
1081      * {@link #ACTION_LOCALE_SETTINGS}.
1082      *
1083      * @hide
1084      */
1085     public static final String EXTRA_EXPLICIT_LOCALES =
1086             "android.provider.extra.EXPLICIT_LOCALES";
1087 
1088     /**
1089      * Activity Action: Show settings to allow configuration of per application locale.
1090      * <p>
1091      * Input: The Intent's data URI can specify the application package name to directly invoke the
1092      * app locale details GUI specific to the package name.
1093      * For example "package:com.my.app".
1094      * <p>
1095      * Output: Nothing.
1096      */
1097     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1098     public static final String ACTION_APP_LOCALE_SETTINGS =
1099             "android.settings.APP_LOCALE_SETTINGS";
1100 
1101     /**
1102      * Activity Action: Show settings to allow configuration of regional preferences
1103      * <p>
1104      * Input: Nothing
1105      * <p>
1106      * Output: Nothing.
1107      */
1108     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1109     public static final String ACTION_REGIONAL_PREFERENCES_SETTINGS =
1110             "android.settings.REGIONAL_PREFERENCES_SETTINGS";
1111 
1112     /**
1113      * Activity Action: Show settings to allow configuration of lockscreen.
1114      * <p>
1115      * In some cases, a matching Activity may not exist, so ensure you
1116      * safeguard against this.
1117      * <p>
1118      * Input: Nothing.
1119      * <p>
1120      * Output: Nothing.
1121      *
1122      * @hide
1123      */
1124     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1125     public static final String ACTION_LOCKSCREEN_SETTINGS = "android.settings.LOCK_SCREEN_SETTINGS";
1126 
1127     /**
1128      * Activity Action: Show settings to allow pairing bluetooth devices.
1129      * <p>
1130      * In some cases, a matching Activity may not exist, so ensure you
1131      * safeguard against this.
1132      * <p>
1133      * Input: Nothing.
1134      * <p>
1135      * Output: Nothing.
1136      *
1137      * @hide
1138      */
1139     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1140     public static final String ACTION_BLUETOOTH_PAIRING_SETTINGS =
1141             "android.settings.BLUETOOTH_PAIRING_SETTINGS";
1142 
1143     /**
1144      * Activity Action: Show settings to configure input methods, in particular
1145      * allowing the user to enable input methods.
1146      * <p>
1147      * In some cases, a matching Activity may not exist, so ensure you
1148      * safeguard against this.
1149      * <p>
1150      * Input: Nothing.
1151      * <p>
1152      * Output: Nothing.
1153      */
1154     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1155     public static final String ACTION_VOICE_INPUT_SETTINGS =
1156             "android.settings.VOICE_INPUT_SETTINGS";
1157 
1158     /**
1159      * Activity Action: Show settings to configure input methods, in particular
1160      * allowing the user to enable input methods.
1161      * <p>
1162      * In some cases, a matching Activity may not exist, so ensure you
1163      * safeguard against this.
1164      * <p>
1165      * Input: Nothing.
1166      * <p>
1167      * Output: Nothing.
1168      */
1169     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1170     public static final String ACTION_INPUT_METHOD_SETTINGS =
1171             "android.settings.INPUT_METHOD_SETTINGS";
1172 
1173     /**
1174      * Activity Action: Show settings to enable/disable input method subtypes.
1175      * <p>
1176      * In some cases, a matching Activity may not exist, so ensure you
1177      * safeguard against this.
1178      * <p>
1179      * To tell which input method's subtypes are displayed in the settings, add
1180      * {@link #EXTRA_INPUT_METHOD_ID} extra to this Intent with the input method id.
1181      * If there is no extra in this Intent, subtypes from all installed input methods
1182      * will be displayed in the settings.
1183      *
1184      * @see android.view.inputmethod.InputMethodInfo#getId
1185      * <p>
1186      * Input: Nothing.
1187      * <p>
1188      * Output: Nothing.
1189      */
1190     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1191     public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS =
1192             "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
1193 
1194     /**
1195      * Activity Action: Show settings to manage the user input dictionary.
1196      * <p>
1197      * Starting with {@link android.os.Build.VERSION_CODES#KITKAT},
1198      * it is guaranteed there will always be an appropriate implementation for this Intent action.
1199      * In prior releases of the platform this was optional, so ensure you safeguard against it.
1200      * <p>
1201      * Input: Nothing.
1202      * <p>
1203      * Output: Nothing.
1204      */
1205     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1206     public static final String ACTION_USER_DICTIONARY_SETTINGS =
1207             "android.settings.USER_DICTIONARY_SETTINGS";
1208 
1209     /**
1210      * Activity Action: Show settings to configure the hardware keyboard.
1211      * <p>
1212      * In some cases, a matching Activity may not exist, so ensure you
1213      * safeguard against this.
1214      * <p>
1215      * Input: Nothing.
1216      * <p>
1217      * Output: Nothing.
1218      */
1219     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1220     public static final String ACTION_HARD_KEYBOARD_SETTINGS =
1221             "android.settings.HARD_KEYBOARD_SETTINGS";
1222 
1223     /**
1224      * Activity Action: Adds a word to the user dictionary.
1225      * <p>
1226      * In some cases, a matching Activity may not exist, so ensure you
1227      * safeguard against this.
1228      * <p>
1229      * Input: An extra with key <code>word</code> that contains the word
1230      * that should be added to the dictionary.
1231      * <p>
1232      * Output: Nothing.
1233      *
1234      * @hide
1235      */
1236     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1237     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
1238     public static final String ACTION_USER_DICTIONARY_INSERT =
1239             "com.android.settings.USER_DICTIONARY_INSERT";
1240 
1241     /**
1242      * Activity Action: Show settings to allow configuration of application-related settings.
1243      * <p>
1244      * In some cases, a matching Activity may not exist, so ensure you
1245      * safeguard against this.
1246      * <p>
1247      * Input: Nothing.
1248      * <p>
1249      * Output: Nothing.
1250      */
1251     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1252     public static final String ACTION_APPLICATION_SETTINGS =
1253             "android.settings.APPLICATION_SETTINGS";
1254 
1255     /**
1256      * Activity Action: Show settings to allow configuration of application
1257      * development-related settings.  As of
1258      * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} this action is
1259      * a required part of the platform.
1260      * <p>
1261      * Input: Nothing.
1262      * <p>
1263      * Output: Nothing.
1264      */
1265     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1266     public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS =
1267             "android.settings.APPLICATION_DEVELOPMENT_SETTINGS";
1268 
1269     /**
1270      * Activity Action: Show settings to allow configuration of quick launch shortcuts.
1271      * <p>
1272      * In some cases, a matching Activity may not exist, so ensure you
1273      * safeguard against this.
1274      * <p>
1275      * Input: Nothing.
1276      * <p>
1277      * Output: Nothing.
1278      */
1279     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1280     public static final String ACTION_QUICK_LAUNCH_SETTINGS =
1281             "android.settings.QUICK_LAUNCH_SETTINGS";
1282 
1283     /**
1284      * Activity Action: Show settings to manage installed applications.
1285      * <p>
1286      * In some cases, a matching Activity may not exist, so ensure you
1287      * safeguard against this.
1288      * <p>
1289      * Input: Nothing.
1290      * <p>
1291      * Output: Nothing.
1292      */
1293     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1294     public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS =
1295             "android.settings.MANAGE_APPLICATIONS_SETTINGS";
1296 
1297     /**
1298      * Activity Action: Show settings to manage all applications.
1299      * <p>
1300      * In some cases, a matching Activity may not exist, so ensure you
1301      * safeguard against this.
1302      * <p>
1303      * Input: Nothing.
1304      * <p>
1305      * Output: Nothing.
1306      */
1307     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1308     public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS =
1309             "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
1310 
1311     /**
1312      * Activity Action: Show settings to manage all SIM profiles.
1313      * <p>
1314      * In some cases, a matching Activity may not exist, so ensure you
1315      * safeguard against this.
1316      * <p>
1317      * Input: Nothing.
1318      * <p>
1319      * Output: Nothing.
1320      */
1321     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1322     public static final String ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS =
1323             "android.settings.MANAGE_ALL_SIM_PROFILES_SETTINGS";
1324 
1325     /**
1326      * Activity Action: Show screen for controlling which apps can draw on top of other apps.
1327      * <p>
1328      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
1329      * <p>
1330      * Input: Optionally, in versions of Android prior to {@link android.os.Build.VERSION_CODES#R},
1331      * the Intent's data URI can specify the application package name to directly invoke the
1332      * management GUI specific to the package name.
1333      * For example "package:com.my.app".
1334      * <p>
1335      * Output: Nothing.
1336      */
1337     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1338     public static final String ACTION_MANAGE_OVERLAY_PERMISSION =
1339             "android.settings.action.MANAGE_OVERLAY_PERMISSION";
1340 
1341     /**
1342      * Activity Action: Show screen for controlling if the app specified in the data URI of the
1343      * intent can draw on top of other apps.
1344      * <p>
1345      * Unlike {@link #ACTION_MANAGE_OVERLAY_PERMISSION}, which in Android {@link
1346      * android.os.Build.VERSION_CODES#R} can't be used to show a GUI for a specific package,
1347      * permission {@code android.permission.INTERNAL_SYSTEM_WINDOW} is needed to start an activity
1348      * with this intent.
1349      * <p>
1350      * In some cases, a matching Activity may not exist, so ensure you
1351      * safeguard against this.
1352      * <p>
1353      * Input: The Intent's data URI MUST specify the application package name whose ability of
1354      * drawing on top of other apps you want to control.
1355      * For example "package:com.my.app".
1356      * <p>
1357      * Output: Nothing.
1358      *
1359      * @hide
1360      */
1361     @SystemApi
1362     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1363     public static final String ACTION_MANAGE_APP_OVERLAY_PERMISSION =
1364             "android.settings.MANAGE_APP_OVERLAY_PERMISSION";
1365 
1366     /**
1367      * Activity Action: Show screen for controlling which apps are allowed to write/modify
1368      * system settings.
1369      * <p>
1370      * In some cases, a matching Activity may not exist, so ensure you
1371      * safeguard against this.
1372      * <p>
1373      * Input: Optionally, the Intent's data URI can specify the application package name to
1374      * directly invoke the management GUI specific to the package name. For example
1375      * "package:com.my.app".
1376      * <p>
1377      * Output: Nothing.
1378      */
1379     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1380     public static final String ACTION_MANAGE_WRITE_SETTINGS =
1381             "android.settings.action.MANAGE_WRITE_SETTINGS";
1382 
1383     /**
1384      * Activity Action: Show screen for controlling app usage properties for an app.
1385      * Input: Intent's extra {@link android.content.Intent#EXTRA_PACKAGE_NAME} must specify the
1386      * application package name.
1387      * Output: Nothing.
1388      */
1389     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1390     public static final String ACTION_APP_USAGE_SETTINGS =
1391             "android.settings.action.APP_USAGE_SETTINGS";
1392 
1393     /**
1394      * Activity Action: Show screen of details about a particular application.
1395      * <p>
1396      * In some cases, a matching Activity may not exist, so ensure you
1397      * safeguard against this.
1398      * <p>
1399      * Input: The Intent's data URI specifies the application package name
1400      * to be shown, with the "package" scheme.  That is "package:com.my.app".
1401      * <p>
1402      * Output: Nothing.
1403      */
1404     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1405     public static final String ACTION_APPLICATION_DETAILS_SETTINGS =
1406             "android.settings.APPLICATION_DETAILS_SETTINGS";
1407 
1408     /**
1409      * Activity Action: Show list of applications that have been running
1410      * foreground services (to the user "running in the background").
1411      * <p>
1412      * Input: Extras "packages" is a string array of package names.
1413      * <p>
1414      * Output: Nothing.
1415      * @hide
1416      */
1417     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1418     public static final String ACTION_FOREGROUND_SERVICES_SETTINGS =
1419             "android.settings.FOREGROUND_SERVICES_SETTINGS";
1420 
1421     /**
1422      * Activity Action: Show screen for controlling which apps can ignore battery optimizations.
1423      * <p>
1424      * Input: Nothing.
1425      * <p>
1426      * Output: Nothing.
1427      * <p>
1428      * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
1429      * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
1430      * already ignoring optimizations.  You can use
1431      * {@link #ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS} to ask the user to put you
1432      * on this list.
1433      */
1434     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1435     public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS =
1436             "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
1437 
1438     /**
1439      * Activity Action: Ask the user to allow an app to ignore battery optimizations (that is,
1440      * put them on the whitelist of apps shown by
1441      * {@link #ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}).  For an app to use this, it also
1442      * must hold the {@link android.Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}
1443      * permission.
1444      * <p><b>Note:</b> most applications should <em>not</em> use this; there are many facilities
1445      * provided by the platform for applications to operate correctly in the various power
1446      * saving modes.  This is only for unusual applications that need to deeply control their own
1447      * execution, at the potential expense of the user's battery life.  Note that these applications
1448      * greatly run the risk of showing to the user as high power consumers on their device.</p>
1449      * <p>
1450      * Input: The Intent's data URI must specify the application package name
1451      * to be shown, with the "package" scheme.  That is "package:com.my.app".
1452      * <p>
1453      * Output: Nothing.
1454      * <p>
1455      * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
1456      * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
1457      * already ignoring optimizations.
1458      */
1459     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1460     public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS =
1461             "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
1462 
1463     /**
1464      * Activity Action: Open the advanced power usage details page of an associated app.
1465      * <p>
1466      * Input: Intent's data URI set with an application name, using the
1467      * "package" schema (like "package:com.my.app")
1468      * <p>
1469      * Output: Nothing.
1470      *
1471      * @hide
1472      */
1473     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1474     public static final String ACTION_VIEW_ADVANCED_POWER_USAGE_DETAIL =
1475             "android.settings.VIEW_ADVANCED_POWER_USAGE_DETAIL";
1476 
1477     /**
1478      * Activity Action: Show screen for controlling background data
1479      * restrictions for a particular application.
1480      * <p>
1481      * Input: Intent's data URI set with an application name, using the
1482      * "package" schema (like "package:com.my.app").
1483      *
1484      * <p>
1485      * Output: Nothing.
1486      * <p>
1487      * Applications can also use {@link android.net.ConnectivityManager#getRestrictBackgroundStatus
1488      * ConnectivityManager#getRestrictBackgroundStatus()} to determine the
1489      * status of the background data restrictions for them.
1490      *
1491      * <p class="note">
1492      * In some cases, a matching Activity may not exist, so ensure you
1493      * safeguard against this.
1494      */
1495     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1496     public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS =
1497             "android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS";
1498 
1499     /**
1500      * @hide
1501      * Activity Action: Show the "app ops" settings screen.
1502      * <p>
1503      * Input: Nothing.
1504      * <p>
1505      * Output: Nothing.
1506      */
1507     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1508     public static final String ACTION_APP_OPS_SETTINGS =
1509             "android.settings.APP_OPS_SETTINGS";
1510 
1511     /**
1512      * Activity Action: Show settings for system update functionality.
1513      * <p>
1514      * In some cases, a matching Activity may not exist, so ensure you
1515      * safeguard against this.
1516      * <p>
1517      * Input: Nothing.
1518      * <p>
1519      * Output: Nothing.
1520      *
1521      * @hide
1522      */
1523     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1524     public static final String ACTION_SYSTEM_UPDATE_SETTINGS =
1525             "android.settings.SYSTEM_UPDATE_SETTINGS";
1526 
1527     /**
1528      * Activity Action: Show settings for managed profile settings.
1529      * <p>
1530      * In some cases, a matching Activity may not exist, so ensure you
1531      * safeguard against this.
1532      * <p>
1533      * Input: Nothing.
1534      * <p>
1535      * Output: Nothing.
1536      *
1537      * @hide
1538      */
1539     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1540     public static final String ACTION_MANAGED_PROFILE_SETTINGS =
1541             "android.settings.MANAGED_PROFILE_SETTINGS";
1542 
1543     /**
1544      * Activity Action: Show settings to allow configuration of sync settings.
1545      * <p>
1546      * In some cases, a matching Activity may not exist, so ensure you
1547      * safeguard against this.
1548      * <p>
1549      * The account types available to add via the add account button may be restricted by adding an
1550      * {@link #EXTRA_AUTHORITIES} extra to this Intent with one or more syncable content provider's
1551      * authorities. Only account types which can sync with that content provider will be offered to
1552      * the user.
1553      * <p>
1554      * Input: Nothing.
1555      * <p>
1556      * Output: Nothing.
1557      */
1558     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1559     public static final String ACTION_SYNC_SETTINGS =
1560             "android.settings.SYNC_SETTINGS";
1561 
1562     /**
1563      * Activity Action: Show add account screen for creating a new account.
1564      * <p>
1565      * In some cases, a matching Activity may not exist, so ensure you
1566      * safeguard against this.
1567      * <p>
1568      * The account types available to add may be restricted by adding an {@link #EXTRA_AUTHORITIES}
1569      * extra to the Intent with one or more syncable content provider's authorities.  Only account
1570      * types which can sync with that content provider will be offered to the user.
1571      * <p>
1572      * Account types can also be filtered by adding an {@link #EXTRA_ACCOUNT_TYPES} extra to the
1573      * Intent with one or more account types.
1574      * <p>
1575      * Input: Nothing.
1576      * <p>
1577      * Output: Nothing.
1578      */
1579     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1580     public static final String ACTION_ADD_ACCOUNT =
1581             "android.settings.ADD_ACCOUNT_SETTINGS";
1582 
1583     /**
1584      * Activity Action: Show settings for enabling or disabling data saver
1585      * <p></p>
1586      * In some cases, a matching Activity may not exist, so ensure you
1587      * safeguard against this.
1588      * <p>
1589      * Input: Nothing.
1590      * <p>
1591      * Output: Nothing.
1592      *
1593      * @hide
1594      */
1595     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1596     public static final String ACTION_DATA_SAVER_SETTINGS =
1597             "android.settings.DATA_SAVER_SETTINGS";
1598 
1599     /**
1600      * Activity Action: Show settings for selecting the network operator.
1601      * <p>
1602      * In some cases, a matching Activity may not exist, so ensure you
1603      * safeguard against this.
1604      * <p>
1605      * The subscription ID of the subscription for which available network operators should be
1606      * displayed may be optionally specified with {@link #EXTRA_SUB_ID}.
1607      * <p>
1608      * Input: Nothing.
1609      * <p>
1610      * Output: Nothing.
1611      */
1612     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1613     public static final String ACTION_NETWORK_OPERATOR_SETTINGS =
1614             "android.settings.NETWORK_OPERATOR_SETTINGS";
1615 
1616     /**
1617      * Activity Action: Show settings for selection of 2G/3G.
1618      * <p>
1619      * In some cases, a matching Activity may not exist, so ensure you
1620      * safeguard against this.
1621      * <p>
1622      * Input: Nothing.
1623      * <p>
1624      * Output: Nothing.
1625      */
1626     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1627     public static final String ACTION_DATA_ROAMING_SETTINGS =
1628             "android.settings.DATA_ROAMING_SETTINGS";
1629 
1630     /**
1631      * Activity Action: Show settings for internal storage.
1632      * <p>
1633      * In some cases, a matching Activity may not exist, so ensure you
1634      * safeguard against this.
1635      * <p>
1636      * Input: Nothing.
1637      * <p>
1638      * Output: Nothing.
1639      */
1640     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1641     public static final String ACTION_INTERNAL_STORAGE_SETTINGS =
1642             "android.settings.INTERNAL_STORAGE_SETTINGS";
1643     /**
1644      * Activity Action: Show settings for memory card storage.
1645      * <p>
1646      * In some cases, a matching Activity may not exist, so ensure you
1647      * safeguard against this.
1648      * <p>
1649      * Input: Nothing.
1650      * <p>
1651      * Output: Nothing.
1652      */
1653     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1654     public static final String ACTION_MEMORY_CARD_SETTINGS =
1655             "android.settings.MEMORY_CARD_SETTINGS";
1656 
1657     /**
1658      * Activity Action: Show settings for global search.
1659      * <p>
1660      * In some cases, a matching Activity may not exist, so ensure you
1661      * safeguard against this.
1662      * <p>
1663      * Input: Nothing.
1664      * <p>
1665      * Output: Nothing
1666      */
1667     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1668     public static final String ACTION_SEARCH_SETTINGS =
1669         "android.search.action.SEARCH_SETTINGS";
1670 
1671     /**
1672      * Activity Action: Show general device information settings (serial
1673      * number, software version, phone number, etc.).
1674      * <p>
1675      * In some cases, a matching Activity may not exist, so ensure you
1676      * safeguard against this.
1677      * <p>
1678      * Input: Nothing.
1679      * <p>
1680      * Output: Nothing
1681      */
1682     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1683     public static final String ACTION_DEVICE_INFO_SETTINGS =
1684         "android.settings.DEVICE_INFO_SETTINGS";
1685 
1686     /**
1687      * Activity Action: Show NFC settings.
1688      * <p>
1689      * This shows UI that allows NFC to be turned on or off.
1690      * <p>
1691      * In some cases, a matching Activity may not exist, so ensure you
1692      * safeguard against this.
1693      * <p>
1694      * Input: Nothing.
1695      * <p>
1696      * Output: Nothing
1697      * @see android.nfc.NfcAdapter#isEnabled()
1698      */
1699     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1700     public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
1701 
1702     /**
1703      * Activity Action: Show NFC Sharing settings.
1704      * <p>
1705      * This shows UI that allows NDEF Push (Android Beam) to be turned on or
1706      * off.
1707      * <p>
1708      * In some cases, a matching Activity may not exist, so ensure you
1709      * safeguard against this.
1710      * <p>
1711      * Input: Nothing.
1712      * <p>
1713      * Output: Nothing
1714      */
1715     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1716     public static final String ACTION_NFCSHARING_SETTINGS =
1717         "android.settings.NFCSHARING_SETTINGS";
1718 
1719     /**
1720      * Activity Action: Show NFC Tap & Pay settings
1721      * <p>
1722      * This shows UI that allows the user to configure Tap&Pay
1723      * settings.
1724      * <p>
1725      * In some cases, a matching Activity may not exist, so ensure you
1726      * safeguard against this.
1727      * <p>
1728      * Input: Nothing.
1729      * <p>
1730      * Output: Nothing
1731      */
1732     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1733     public static final String ACTION_NFC_PAYMENT_SETTINGS =
1734         "android.settings.NFC_PAYMENT_SETTINGS";
1735 
1736     /**
1737      * Activity Action: Show Daydream settings.
1738      * <p>
1739      * In some cases, a matching Activity may not exist, so ensure you
1740      * safeguard against this.
1741      * <p>
1742      * Input: Nothing.
1743      * <p>
1744      * Output: Nothing.
1745      * @see android.service.dreams.DreamService
1746      */
1747     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1748     public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
1749 
1750     /**
1751      * Activity Action: Show Communal settings.
1752      * <p>
1753      * In some cases, a matching Activity may not exist, so ensure you
1754      * safeguard against this.
1755      * <p>
1756      * Input: Nothing.
1757      * <p>
1758      * Output: Nothing.
1759      *
1760      * @hide
1761      */
1762     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1763     public static final String ACTION_COMMUNAL_SETTING = "android.settings.COMMUNAL_SETTINGS";
1764 
1765     /**
1766      * Activity Action: Show Notification assistant settings.
1767      * <p>
1768      * In some cases, a matching Activity may not exist, so ensure you
1769      * safeguard against this.
1770      * <p>
1771      * Input: Nothing.
1772      * <p>
1773      * Output: Nothing.
1774      * @see android.service.notification.NotificationAssistantService
1775      */
1776     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1777     public static final String ACTION_NOTIFICATION_ASSISTANT_SETTINGS =
1778             "android.settings.NOTIFICATION_ASSISTANT_SETTINGS";
1779 
1780     /**
1781      * Activity Action: Show Notification listener settings.
1782      * <p>
1783      * In some cases, a matching Activity may not exist, so ensure you
1784      * safeguard against this.
1785      * <p>
1786      * Input: Nothing.
1787      * <p>
1788      * Output: Nothing.
1789      * @see android.service.notification.NotificationListenerService
1790      */
1791     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1792     public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS
1793             = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
1794 
1795     /**
1796      * Activity Action: Show notification listener permission settings page for app.
1797      * <p>
1798      * Users can grant and deny access to notifications for a {@link ComponentName} from here.
1799      * See
1800      * {@link android.app.NotificationManager#isNotificationListenerAccessGranted(ComponentName)}
1801      * for more details.
1802      * <p>
1803      * Input: The extra {@link #EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME} containing the name
1804      * of the component to grant or revoke notification listener access to.
1805      * <p>
1806      * Output: Nothing.
1807      */
1808     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1809     public static final String ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS =
1810             "android.settings.NOTIFICATION_LISTENER_DETAIL_SETTINGS";
1811 
1812     /**
1813      * Activity Extra: What component name to show the notification listener permission
1814      * page for.
1815      * <p>
1816      * A string extra containing a {@link ComponentName}. This must be passed as an extra field to
1817      * {@link #ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS}.
1818      */
1819     public static final String EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME =
1820             "android.provider.extra.NOTIFICATION_LISTENER_COMPONENT_NAME";
1821 
1822     /**
1823      * Activity Action: Show Do Not Disturb access settings.
1824      * <p>
1825      * Users can grant and deny access to Do Not Disturb configuration from here. Managed
1826      * profiles cannot grant Do Not Disturb access.
1827      * See {@link android.app.NotificationManager#isNotificationPolicyAccessGranted()} for more
1828      * details.
1829      * <p>
1830      * Input: Nothing.
1831      * <p>
1832      * Output: Nothing.
1833      *
1834      * <p class="note">
1835      * In some cases, a matching Activity may not exist, so ensure you
1836      * safeguard against this.
1837      */
1838     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1839     public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
1840             = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS";
1841 
1842     /**
1843      * Activity Action: Show do not disturb setting page for app.
1844      * <p>
1845      * Users can grant and deny access to Do Not Disturb configuration for an app from here.
1846      * See {@link android.app.NotificationManager#isNotificationPolicyAccessGranted()} for more
1847      * details.
1848      * <p>
1849      * Input: Intent's data URI set with an application name, using the
1850      * "package" schema (like "package:com.my.app").
1851      * <p>
1852      * Output: Nothing.
1853      *
1854      * @hide
1855      */
1856     @SystemApi
1857     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1858     public static final String ACTION_NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS =
1859             "android.settings.NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS";
1860 
1861     /**
1862      * Activity Action: Show the automatic do not disturb rule listing page
1863      * <p>
1864      *     Users can add, enable, disable, and remove automatic do not disturb rules from this
1865      *     screen. See {@link NotificationManager#addAutomaticZenRule(AutomaticZenRule)} for more
1866      *     details.
1867      * </p>
1868      * <p>
1869      *     Input: Nothing
1870      *     Output: Nothing
1871      * </p>
1872      *
1873      */
1874     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1875     public static final String ACTION_CONDITION_PROVIDER_SETTINGS
1876             = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
1877 
1878     /**
1879      * Activity Action: Show settings for video captioning.
1880      * <p>
1881      * In some cases, a matching Activity may not exist, so ensure you safeguard
1882      * against this.
1883      * <p>
1884      * Input: Nothing.
1885      * <p>
1886      * Output: Nothing.
1887      */
1888     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1889     public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
1890 
1891     /**
1892      * Activity Action: Show the top level print settings.
1893      * <p>
1894      * In some cases, a matching Activity may not exist, so ensure you
1895      * safeguard against this.
1896      * <p>
1897      * Input: Nothing.
1898      * <p>
1899      * Output: Nothing.
1900      */
1901     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1902     public static final String ACTION_PRINT_SETTINGS =
1903             "android.settings.ACTION_PRINT_SETTINGS";
1904 
1905     /**
1906      * Activity Action: Show Zen Mode configuration settings.
1907      *
1908      * @hide
1909      */
1910     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1911     public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
1912 
1913     /**
1914      * Activity Action: Show Zen Mode visual effects configuration settings.
1915      *
1916      * @hide
1917      */
1918     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1919     public static final String ZEN_MODE_BLOCKED_EFFECTS_SETTINGS =
1920             "android.settings.ZEN_MODE_BLOCKED_EFFECTS_SETTINGS";
1921 
1922     /**
1923      * Activity Action: Show Zen Mode onboarding activity.
1924      *
1925      * @hide
1926      */
1927     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1928     public static final String ZEN_MODE_ONBOARDING = "android.settings.ZEN_MODE_ONBOARDING";
1929 
1930     /**
1931      * Activity Action: Show Zen Mode (aka Do Not Disturb) priority configuration settings.
1932      */
1933     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1934     public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS
1935             = "android.settings.ZEN_MODE_PRIORITY_SETTINGS";
1936 
1937     /**
1938      * Activity Action: Show Zen Mode automation configuration settings.
1939      *
1940      * @hide
1941      */
1942     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1943     public static final String ACTION_ZEN_MODE_AUTOMATION_SETTINGS
1944             = "android.settings.ZEN_MODE_AUTOMATION_SETTINGS";
1945 
1946     /**
1947      * Activity Action: Modify do not disturb mode settings.
1948      * <p>
1949      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
1950      * <p>
1951      * This intent MUST be started using
1952      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
1953      * startVoiceActivity}.
1954      * <p>
1955      * Note: The Activity implementing this intent MUST verify that
1956      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}.
1957      * returns true before modifying the setting.
1958      * <p>
1959      * Input: The optional {@link #EXTRA_DO_NOT_DISTURB_MODE_MINUTES} extra can be used to indicate
1960      * how long the user wishes to avoid interruptions for. The optional
1961      * {@link #EXTRA_DO_NOT_DISTURB_MODE_ENABLED} extra can be to indicate if the user is
1962      * enabling or disabling do not disturb mode. If either extra is not included, the
1963      * user maybe asked to provide the value.
1964      * <p>
1965      * Output: Nothing.
1966      */
1967     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1968     public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE =
1969             "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE";
1970 
1971     /**
1972      * Activity Action: Show Zen Mode schedule rule configuration settings.
1973      *
1974      * @hide
1975      */
1976     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1977     public static final String ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS
1978             = "android.settings.ZEN_MODE_SCHEDULE_RULE_SETTINGS";
1979 
1980     /**
1981      * Activity Action: Show Zen Mode event rule configuration settings.
1982      *
1983      * @hide
1984      */
1985     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1986     public static final String ACTION_ZEN_MODE_EVENT_RULE_SETTINGS
1987             = "android.settings.ZEN_MODE_EVENT_RULE_SETTINGS";
1988 
1989     /**
1990      * Activity Action: Show Zen Mode external rule configuration settings.
1991      *
1992      * @hide
1993      */
1994     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1995     public static final String ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS
1996             = "android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS";
1997 
1998     /**
1999      * Activity Action: Show the regulatory information screen for the device.
2000      * <p>
2001      * In some cases, a matching Activity may not exist, so ensure you safeguard
2002      * against this.
2003      * <p>
2004      * Input: Nothing.
2005      * <p>
2006      * Output: Nothing.
2007      */
2008     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2009     public static final String
2010             ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
2011 
2012     /**
2013      * Activity Action: Show Device Name Settings.
2014      * <p>
2015      * In some cases, a matching Activity may not exist, so ensure you safeguard
2016      * against this.
2017      *
2018      * @hide
2019      */
2020     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2021     public static final String DEVICE_NAME_SETTINGS = "android.settings.DEVICE_NAME";
2022 
2023     /**
2024      * Activity Action: Show pairing settings.
2025      * <p>
2026      * In some cases, a matching Activity may not exist, so ensure you safeguard
2027      * against this.
2028      *
2029      * @hide
2030      */
2031     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2032     public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS";
2033 
2034     /**
2035      * Activity Action: Show battery saver settings.
2036      * <p>
2037      * In some cases, a matching Activity may not exist, so ensure you safeguard
2038      * against this.
2039      */
2040     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2041     public static final String ACTION_BATTERY_SAVER_SETTINGS
2042             = "android.settings.BATTERY_SAVER_SETTINGS";
2043 
2044     /**
2045      * Activity Action: Modify Battery Saver mode setting using a voice command.
2046      * <p>
2047      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
2048      * <p>
2049      * This intent MUST be started using
2050      * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
2051      * startVoiceActivity}.
2052      * <p>
2053      * Note: The activity implementing this intent MUST verify that
2054      * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
2055      * modifying the setting.
2056      * <p>
2057      * Input: To tell which state batter saver mode should be set to, add the
2058      * {@link #EXTRA_BATTERY_SAVER_MODE_ENABLED} extra to this Intent with the state specified.
2059      * If the extra is not included, no changes will be made.
2060      * <p>
2061      * Output: Nothing.
2062      */
2063     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2064     public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE =
2065             "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE";
2066 
2067     /**
2068      * Activity Action: Show Home selection settings. If there are multiple activities
2069      * that can satisfy the {@link Intent#CATEGORY_HOME} intent, this screen allows you
2070      * to pick your preferred activity.
2071      */
2072     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2073     public static final String ACTION_HOME_SETTINGS
2074             = "android.settings.HOME_SETTINGS";
2075 
2076     /**
2077      * Activity Action: Show Default apps settings.
2078      * <p>
2079      * In some cases, a matching Activity may not exist, so ensure you
2080      * safeguard against this.
2081      * <p>
2082      * Input: Nothing.
2083      * <p>
2084      * Output: Nothing.
2085      */
2086     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2087     public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS
2088             = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
2089 
2090     /**
2091      * Activity Action: Show More default apps settings.
2092      * <p>
2093      * If a Settings activity handles this intent action, a "More defaults" entry will be shown in
2094      * the Default apps settings, and clicking it will launch that activity.
2095      * <p>
2096      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
2097      * <p>
2098      * Input: Nothing.
2099      * <p>
2100      * Output: Nothing.
2101      *
2102      * @hide
2103      */
2104     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2105     @SystemApi
2106     public static final String ACTION_MANAGE_MORE_DEFAULT_APPS_SETTINGS =
2107             "android.settings.MANAGE_MORE_DEFAULT_APPS_SETTINGS";
2108 
2109     /**
2110      * Activity Action: Show app screen size list settings for user to override app aspect
2111      * ratio.
2112      * <p>
2113      * In some cases, a matching Activity may not exist, so ensure you
2114      * safeguard against this.
2115      * <p>
2116      * Can include the following extra {@link android.content.Intent#EXTRA_PACKAGE_NAME} specifying
2117      * the name of the package to scroll to in the page.
2118      * @hide
2119      */
2120     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2121     public static final String ACTION_MANAGE_USER_ASPECT_RATIO_SETTINGS =
2122             "android.settings.MANAGE_USER_ASPECT_RATIO_SETTINGS";
2123 
2124     /**
2125      * Activity Action: Show notification settings.
2126      *
2127      * @hide
2128      */
2129     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2130     public static final String ACTION_NOTIFICATION_SETTINGS
2131             = "android.settings.NOTIFICATION_SETTINGS";
2132 
2133     /**
2134      * Activity Action: Show conversation settings.
2135      *
2136      * @hide
2137      */
2138     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2139     public static final String ACTION_CONVERSATION_SETTINGS
2140             = "android.settings.CONVERSATION_SETTINGS";
2141 
2142     /**
2143      * Activity Action: Show notification history screen.
2144      *
2145      * @hide
2146      */
2147     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2148     public static final String ACTION_NOTIFICATION_HISTORY
2149             = "android.settings.NOTIFICATION_HISTORY";
2150 
2151     /**
2152      * Activity Action: Show app listing settings, filtered by those that send notifications.
2153      *
2154      */
2155     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2156     public static final String ACTION_ALL_APPS_NOTIFICATION_SETTINGS =
2157             "android.settings.ALL_APPS_NOTIFICATION_SETTINGS";
2158 
2159     /**
2160      * Activity Action: Show app settings specifically for sending notifications. Same as
2161      * ALL_APPS_NOTIFICATION_SETTINGS but meant for internal use.
2162      * @hide
2163      */
2164     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2165     public static final String ACTION_ALL_APPS_NOTIFICATION_SETTINGS_FOR_REVIEW =
2166             "android.settings.ALL_APPS_NOTIFICATION_SETTINGS_FOR_REVIEW";
2167 
2168     /**
2169      * Activity Action: Show notification settings for a single app.
2170      * <p>
2171      *     Input: {@link #EXTRA_APP_PACKAGE}, the package to display.
2172      * <p>
2173      * Output: Nothing.
2174      */
2175     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2176     public static final String ACTION_APP_NOTIFICATION_SETTINGS
2177             = "android.settings.APP_NOTIFICATION_SETTINGS";
2178 
2179     /**
2180      * Activity Action: Show notification settings for a single {@link NotificationChannel}.
2181      * <p>
2182      *     Input: {@link #EXTRA_APP_PACKAGE}, the package containing the channel to display.
2183      *     Input: {@link #EXTRA_CHANNEL_ID}, the id of the channel to display.
2184      * <p>
2185      * Output: Nothing.
2186      */
2187     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2188     public static final String ACTION_CHANNEL_NOTIFICATION_SETTINGS
2189             = "android.settings.CHANNEL_NOTIFICATION_SETTINGS";
2190 
2191     /**
2192      * Activity Action: Show notification bubble settings for a single app.
2193      * See {@link NotificationManager#getBubblePreference()}.
2194      * <p>
2195      *     Input: {@link #EXTRA_APP_PACKAGE}, the package to display.
2196      * <p>
2197      * Output: Nothing.
2198      */
2199     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2200     public static final String ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS
2201             = "android.settings.APP_NOTIFICATION_BUBBLE_SETTINGS";
2202 
2203     /**
2204      * Intent Extra: The value of {@link android.app.settings.SettingsEnums#EntryPointType} for
2205      * settings metrics that logs the entry point about physical keyboard settings.
2206      * <p>
2207      * This must be passed as an extra field to the {@link #ACTION_HARD_KEYBOARD_SETTINGS}.
2208      * @hide
2209      */
2210     public static final String EXTRA_ENTRYPOINT =
2211             "com.android.settings.inputmethod.EXTRA_ENTRYPOINT";
2212 
2213     /**
2214      * Activity Extra: The package owner of the notification channel settings to display.
2215      * <p>
2216      * This must be passed as an extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}.
2217      */
2218     public static final String EXTRA_APP_PACKAGE = "android.provider.extra.APP_PACKAGE";
2219 
2220     /**
2221      * Activity Extra: The {@link NotificationChannel#getId()} of the notification channel settings
2222      * to display.
2223      * <p>
2224      * This must be passed as an extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}.
2225      */
2226     public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID";
2227 
2228     /**
2229      * Activity Extra: The {@link NotificationChannel#getConversationId()} of the notification
2230      * conversation settings to display.
2231      * <p>
2232      * This is an optional extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}. If
2233      * included the system will first look up notification settings by channel and conversation id,
2234      * and will fall back to channel id if a specialized channel for this conversation doesn't
2235      * exist, similar to {@link NotificationManager#getNotificationChannel(String, String)}.
2236      */
2237     public static final String EXTRA_CONVERSATION_ID = "android.provider.extra.CONVERSATION_ID";
2238 
2239     /**
2240      * Activity Extra: An {@code Arraylist<String>} of {@link NotificationChannel} field names to
2241      * show on the Settings UI.
2242      *
2243      * <p>
2244      * This is an optional extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}. If
2245      * included the system will filter out any Settings that doesn't appear in this list that
2246      * otherwise would display.
2247      */
2248     public static final String EXTRA_CHANNEL_FILTER_LIST
2249             = "android.provider.extra.CHANNEL_FILTER_LIST";
2250 
2251     /**
2252      * Activity Action: Show notification redaction settings.
2253      *
2254      * @hide
2255      */
2256     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2257     public static final String ACTION_APP_NOTIFICATION_REDACTION
2258             = "android.settings.ACTION_APP_NOTIFICATION_REDACTION";
2259 
2260     /** @hide */
2261     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
2262     public static final String EXTRA_APP_UID = "app_uid";
2263 
2264     /**
2265      * Activity Action: Show power menu settings.
2266      *
2267      * @hide
2268      */
2269     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2270     public static final String ACTION_POWER_MENU_SETTINGS =
2271             "android.settings.ACTION_POWER_MENU_SETTINGS";
2272 
2273     /**
2274      * Activity Action: Show controls settings.
2275      *
2276      * @hide
2277      */
2278     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2279     public static final String ACTION_DEVICE_CONTROLS_SETTINGS =
2280             "android.settings.ACTION_DEVICE_CONTROLS_SETTINGS";
2281 
2282     /**
2283      * Activity Action: Show media control settings
2284      *
2285      * @hide
2286      */
2287     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2288     public static final String ACTION_MEDIA_CONTROLS_SETTINGS =
2289             "android.settings.ACTION_MEDIA_CONTROLS_SETTINGS";
2290 
2291     /**
2292      * Activity Action: Show a dialog with disabled by policy message.
2293      * <p> If an user action is disabled by policy, this dialog can be triggered to let
2294      * the user know about this.
2295      * <p>
2296      * Input: {@link Intent#EXTRA_USER}: The user of the admin.
2297      * <p>
2298      * Output: Nothing.
2299      *
2300      * @hide
2301      */
2302     // Intent#EXTRA_USER_ID can also be used
2303     @SystemApi
2304     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2305     public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS =
2306             "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
2307 
2308     /**
2309      * Intent extra: The id of a setting restricted by supervisors.
2310      * <p>
2311      * Type: Integer with a value from the one of the SUPERVISOR_VERIFICATION_* constants below.
2312      * <ul>
2313      * <li>{@see #SUPERVISOR_VERIFICATION_SETTING_UNKNOWN}
2314      * <li>{@see #SUPERVISOR_VERIFICATION_SETTING_BIOMETRICS}
2315      * </ul>
2316      * </p>
2317      */
2318     public static final String EXTRA_SUPERVISOR_RESTRICTED_SETTING_KEY =
2319             "android.provider.extra.SUPERVISOR_RESTRICTED_SETTING_KEY";
2320 
2321     /**
2322      * The unknown setting can usually be ignored and is used for compatibility with future
2323      * supervisor settings.
2324      */
2325     public static final int SUPERVISOR_VERIFICATION_SETTING_UNKNOWN = 0;
2326 
2327     /**
2328      * Settings for supervisors to control what kinds of biometric sensors, such a face and
2329      * fingerprint scanners, can be used on the device.
2330      */
2331     public static final int SUPERVISOR_VERIFICATION_SETTING_BIOMETRICS = 1;
2332 
2333     /**
2334      * Keys for {@link #EXTRA_SUPERVISOR_RESTRICTED_SETTING_KEY}.
2335      * @hide
2336      */
2337     @Retention(RetentionPolicy.SOURCE)
2338     @IntDef(prefix = { "SUPERVISOR_VERIFICATION_SETTING_" }, value = {
2339             SUPERVISOR_VERIFICATION_SETTING_UNKNOWN,
2340             SUPERVISOR_VERIFICATION_SETTING_BIOMETRICS,
2341     })
2342     public @interface SupervisorVerificationSetting {}
2343 
2344     /**
2345      * Activity action: Launch UI to manage a setting restricted by supervisors.
2346      * <p>
2347      * Input: {@link #EXTRA_SUPERVISOR_RESTRICTED_SETTING_KEY} specifies what setting to open.
2348      * </p>
2349      * <p>
2350      * Output: Nothing.
2351      * </p>
2352      */
2353     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2354     public static final String ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING =
2355             "android.settings.MANAGE_SUPERVISOR_RESTRICTED_SETTING";
2356 
2357     /**
2358      * Activity Action: Show a dialog for remote bugreport flow.
2359      * <p>
2360      * Input: Nothing.
2361      * <p>
2362      * Output: Nothing.
2363      *
2364      * @hide
2365      */
2366     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2367     public static final String ACTION_SHOW_REMOTE_BUGREPORT_DIALOG
2368             = "android.settings.SHOW_REMOTE_BUGREPORT_DIALOG";
2369 
2370     /**
2371      * Activity Action: Show VR listener settings.
2372      * <p>
2373      * Input: Nothing.
2374      * <p>
2375      * Output: Nothing.
2376      *
2377      * @see android.service.vr.VrListenerService
2378      */
2379     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2380     public static final String ACTION_VR_LISTENER_SETTINGS
2381             = "android.settings.VR_LISTENER_SETTINGS";
2382 
2383     /**
2384      * Activity Action: Show Picture-in-picture settings.
2385      * <p>
2386      * Input: Nothing.
2387      * <p>
2388      * Output: Nothing.
2389      *
2390      * @hide
2391      */
2392     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2393     public static final String ACTION_PICTURE_IN_PICTURE_SETTINGS
2394             = "android.settings.PICTURE_IN_PICTURE_SETTINGS";
2395 
2396     /**
2397      * Activity Action: Show Storage Manager settings.
2398      * <p>
2399      * Input: Nothing.
2400      * <p>
2401      * Output: Nothing.
2402      *
2403      * @hide
2404      */
2405     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2406     public static final String ACTION_STORAGE_MANAGER_SETTINGS
2407             = "android.settings.STORAGE_MANAGER_SETTINGS";
2408 
2409     /**
2410      * Activity Action: Allows user to select current webview implementation.
2411      * <p>
2412      * Input: Nothing.
2413      * <p>
2414      * Output: Nothing.
2415      * <p class="note">
2416      * In some cases, a matching Activity may not exist, so ensure you
2417      * safeguard against this.
2418 
2419      */
2420     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2421     public static final String ACTION_WEBVIEW_SETTINGS = "android.settings.WEBVIEW_SETTINGS";
2422 
2423     /**
2424      * Activity Action: Show enterprise privacy section.
2425      * <p>
2426      * Input: Nothing.
2427      * <p>
2428      * Output: Nothing.
2429      * @hide
2430      */
2431     @SystemApi
2432     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2433     public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS
2434             = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
2435 
2436     /**
2437      * Activity Action: Show Work Policy info.
2438      * DPC apps can implement an activity that handles this intent in order to show device policies
2439      * associated with the work profile or managed device.
2440      * <p>
2441      * Input: Nothing.
2442      * <p>
2443      * Output: Nothing.
2444      *
2445      */
2446     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2447     public static final String ACTION_SHOW_WORK_POLICY_INFO =
2448             "android.settings.SHOW_WORK_POLICY_INFO";
2449 
2450     /**
2451      * Activity Action: Show screen that let user select its Autofill Service.
2452      * <p>
2453      * Input: Intent's data URI set with an application name, using the
2454      * "package" schema (like "package:com.my.app").
2455      *
2456      * <p>
2457      * Output: {@link android.app.Activity#RESULT_OK} if user selected an Autofill Service belonging
2458      * to the caller package.
2459      *
2460      * <p>
2461      * <b>NOTE: </b> Applications should call
2462      * {@link android.view.autofill.AutofillManager#hasEnabledAutofillServices()} and
2463      * {@link android.view.autofill.AutofillManager#isAutofillSupported()}, and only use this action
2464      * to start an activity if they return {@code false} and {@code true} respectively.
2465      */
2466     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2467     public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE =
2468             "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
2469 
2470     /**
2471      * Activity Action: Show screen for controlling the Quick Access Wallet.
2472      * <p>
2473      * In some cases, a matching Activity may not exist, so ensure you
2474      * safeguard against this.
2475      * <p>
2476      * Input: Nothing.
2477      * <p>
2478      * Output: Nothing.
2479      */
2480     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2481     public static final String ACTION_QUICK_ACCESS_WALLET_SETTINGS =
2482             "android.settings.QUICK_ACCESS_WALLET_SETTINGS";
2483 
2484     /**
2485      * Activity Action: Show screen for controlling which apps have access on volume directories.
2486      * <p>
2487      * Input: Nothing.
2488      * <p>
2489      * Output: Nothing.
2490      * <p>
2491      * Applications typically use this action to ask the user to revert the "Do not ask again"
2492      * status of directory access requests made by
2493      * {@link android.os.storage.StorageVolume#createAccessIntent(String)}.
2494      * @deprecated use {@link #ACTION_APPLICATION_DETAILS_SETTINGS} to manage storage permissions
2495      *             for a specific application
2496      */
2497     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2498     @Deprecated
2499     public static final String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS =
2500             "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS";
2501 
2502 
2503     /**
2504      * Activity Action: Show screen that let user select enable (or disable) Content Capture.
2505      * <p>
2506      * Input: Nothing.
2507      *
2508      * <p>
2509      * Output: Nothing
2510      *
2511      * @hide
2512      */
2513     @SystemApi
2514     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2515     public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE =
2516             "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
2517 
2518     /**
2519      * Activity Action: Show screen that let user manage how Android handles URL resolution.
2520      * <p>
2521      * Input: Nothing.
2522      * <p>
2523      * Output: Nothing
2524      *
2525      * @hide
2526      */
2527     @SystemApi
2528     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2529     public static final String ACTION_MANAGE_DOMAIN_URLS = "android.settings.MANAGE_DOMAIN_URLS";
2530 
2531     /**
2532      * Activity Action: Show screen that let user select enable (or disable) tethering.
2533      * <p>
2534      * Input: Nothing.
2535      * <p>
2536      * Output: Nothing
2537      *
2538      * @hide
2539      */
2540     @SystemApi
2541     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2542     public static final String ACTION_TETHER_SETTINGS = "android.settings.TETHER_SETTINGS";
2543 
2544     /**
2545      * Activity Action: Show screen that lets user configure wifi tethering.
2546      * <p>
2547      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
2548      * <p>
2549      * Input: Nothing
2550      * <p>
2551      * Output: Nothing
2552      *
2553      * @hide
2554      */
2555     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2556     public static final String ACTION_WIFI_TETHER_SETTING =
2557             "com.android.settings.WIFI_TETHER_SETTINGS";
2558 
2559     /**
2560      * Broadcast to trigger notification of asking user to enable MMS.
2561      * Need to specify {@link #EXTRA_ENABLE_MMS_DATA_REQUEST_REASON} and {@link #EXTRA_SUB_ID}.
2562      *
2563      * @hide
2564      */
2565     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
2566     public static final String ACTION_ENABLE_MMS_DATA_REQUEST =
2567             "android.settings.ENABLE_MMS_DATA_REQUEST";
2568 
2569     /**
2570      * Shows restrict settings dialog when settings is blocked.
2571      *
2572      * @hide
2573      */
2574     @SystemApi
2575     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
2576     public static final String ACTION_SHOW_RESTRICTED_SETTING_DIALOG =
2577             "android.settings.SHOW_RESTRICTED_SETTING_DIALOG";
2578 
2579     /**
2580      * Integer value that specifies the reason triggering enable MMS data notification.
2581      * This must be passed as an extra field to the {@link #ACTION_ENABLE_MMS_DATA_REQUEST}.
2582      * Extra with value of EnableMmsDataReason interface.
2583      * @hide
2584      */
2585     public static final String EXTRA_ENABLE_MMS_DATA_REQUEST_REASON =
2586             "android.settings.extra.ENABLE_MMS_DATA_REQUEST_REASON";
2587 
2588     /** @hide */
2589     @Retention(RetentionPolicy.SOURCE)
2590     @IntDef(prefix = { "ENABLE_MMS_DATA_REQUEST_REASON_" }, value = {
2591             ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS,
2592             ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS,
2593     })
2594     public @interface EnableMmsDataReason{}
2595 
2596     /**
2597      * Requesting to enable MMS data because there's an incoming MMS.
2598      * @hide
2599      */
2600     public static final int ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS = 0;
2601 
2602     /**
2603      * Requesting to enable MMS data because user is sending MMS.
2604      * @hide
2605      */
2606     public static final int ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS = 1;
2607 
2608     /**
2609      * Activity Action: Show screen of a cellular subscription and highlight the
2610      * "enable MMS" toggle.
2611      * <p>
2612      * Input: {@link #EXTRA_SUB_ID}: Sub ID of the subscription.
2613      * <p>
2614      * Output: Nothing
2615      *
2616      * @hide
2617      */
2618     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2619     public static final String ACTION_MMS_MESSAGE_SETTING = "android.settings.MMS_MESSAGE_SETTING";
2620 
2621     /**
2622      * Activity Action: Show a screen of bedtime settings, which is provided by the wellbeing app.
2623      * <p>
2624      * The handler of this intent action may not exist.
2625      * <p>
2626      * To start an activity with this intent, apps should set the wellbeing package explicitly in
2627      * the intent together with this action. The wellbeing package is defined in
2628      * {@code com.android.internal.R.string.config_systemWellbeing}.
2629      * <p>
2630      * Output: Nothing
2631      *
2632      * @hide
2633      */
2634     @SystemApi
2635     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2636     public static final String ACTION_BEDTIME_SETTINGS = "android.settings.BEDTIME_SETTINGS";
2637 
2638     // End of Intent actions for Settings
2639 
2640     /**
2641      * @hide - Private call() method on SettingsProvider to read from 'system' table.
2642      */
2643     public static final String CALL_METHOD_GET_SYSTEM = "GET_system";
2644 
2645     /**
2646      * @hide - Private call() method on SettingsProvider to read from 'secure' table.
2647      */
2648     public static final String CALL_METHOD_GET_SECURE = "GET_secure";
2649 
2650     /**
2651      * @hide - Private call() method on SettingsProvider to read from 'global' table.
2652      */
2653     public static final String CALL_METHOD_GET_GLOBAL = "GET_global";
2654 
2655     /**
2656      * @hide - Private call() method on SettingsProvider to read from 'config' table.
2657      */
2658     public static final String CALL_METHOD_GET_CONFIG = "GET_config";
2659 
2660     /**
2661      * @hide - Specifies that the caller of the fast-path call()-based flow tracks
2662      * the settings generation in order to cache values locally. If this key is
2663      * mapped to a <code>null</code> string extra in the request bundle, the response
2664      * bundle will contain the same key mapped to a parcelable extra which would be
2665      * an {@link android.util.MemoryIntArray}. The response will also contain an
2666      * integer mapped to the {@link #CALL_METHOD_GENERATION_INDEX_KEY} which is the
2667      * index in the array clients should use to lookup the generation. For efficiency
2668      * the caller should request the generation tracking memory array only if it
2669      * doesn't already have it.
2670      *
2671      * @see #CALL_METHOD_GENERATION_INDEX_KEY
2672      */
2673     public static final String CALL_METHOD_TRACK_GENERATION_KEY = "_track_generation";
2674 
2675     /**
2676      * @hide Key with the location in the {@link android.util.MemoryIntArray} where
2677      * to look up the generation id of the backing table. The value is an integer.
2678      *
2679      * @see #CALL_METHOD_TRACK_GENERATION_KEY
2680      */
2681     public static final String CALL_METHOD_GENERATION_INDEX_KEY = "_generation_index";
2682 
2683     /**
2684      * @hide Key with the settings table generation. The value is an integer.
2685      *
2686      * @see #CALL_METHOD_TRACK_GENERATION_KEY
2687      */
2688     public static final String CALL_METHOD_GENERATION_KEY = "_generation";
2689 
2690     /**
2691      * @hide - User handle argument extra to the fast-path call()-based requests
2692      */
2693     public static final String CALL_METHOD_USER_KEY = "_user";
2694 
2695     /**
2696      * @hide - Boolean argument extra to the fast-path call()-based requests
2697      */
2698     public static final String CALL_METHOD_MAKE_DEFAULT_KEY = "_make_default";
2699 
2700     /**
2701      * @hide - User handle argument extra to the fast-path call()-based requests
2702      */
2703     public static final String CALL_METHOD_RESET_MODE_KEY = "_reset_mode";
2704 
2705     /**
2706      * @hide - String argument extra to the fast-path call()-based requests
2707      */
2708     public static final String CALL_METHOD_TAG_KEY = "_tag";
2709 
2710     /**
2711      * @hide - String argument extra to the fast-path call()-based requests
2712      */
2713     public static final String CALL_METHOD_PREFIX_KEY = "_prefix";
2714 
2715     /**
2716      * @hide - String argument extra to the fast-path call()-based requests
2717      */
2718     public static final String CALL_METHOD_SYNC_DISABLED_MODE_KEY = "_disabled_mode";
2719 
2720     /**
2721      * @hide - RemoteCallback monitor callback argument extra to the fast-path call()-based requests
2722      */
2723     public static final String CALL_METHOD_MONITOR_CALLBACK_KEY = "_monitor_callback_key";
2724 
2725     /**
2726      * @hide - String argument extra to the fast-path call()-based requests
2727      */
2728     public static final String CALL_METHOD_FLAGS_KEY = "_flags";
2729 
2730     /**
2731      * @hide - String argument extra to the fast-path call()-based requests
2732      */
2733     public static final String CALL_METHOD_OVERRIDEABLE_BY_RESTORE_KEY = "_overrideable_by_restore";
2734 
2735     /** @hide - Private call() method to write to 'system' table */
2736     public static final String CALL_METHOD_PUT_SYSTEM = "PUT_system";
2737 
2738     /** @hide - Private call() method to write to 'secure' table */
2739     public static final String CALL_METHOD_PUT_SECURE = "PUT_secure";
2740 
2741     /** @hide - Private call() method to write to 'global' table */
2742     public static final String CALL_METHOD_PUT_GLOBAL= "PUT_global";
2743 
2744     /** @hide - Private call() method to write to 'configuration' table */
2745     public static final String CALL_METHOD_PUT_CONFIG = "PUT_config";
2746 
2747     /** @hide - Private call() method to write to and delete from the 'configuration' table */
2748     public static final String CALL_METHOD_SET_ALL_CONFIG = "SET_ALL_config";
2749 
2750     /** @hide - Private call() method to delete from the 'system' table */
2751     public static final String CALL_METHOD_DELETE_SYSTEM = "DELETE_system";
2752 
2753     /** @hide - Private call() method to delete from the 'secure' table */
2754     public static final String CALL_METHOD_DELETE_SECURE = "DELETE_secure";
2755 
2756     /** @hide - Private call() method to delete from the 'global' table */
2757     public static final String CALL_METHOD_DELETE_GLOBAL = "DELETE_global";
2758 
2759     /** @hide - Private call() method to reset to defaults the 'configuration' table */
2760     public static final String CALL_METHOD_DELETE_CONFIG = "DELETE_config";
2761 
2762     /** @hide - Private call() method to reset to defaults the 'secure' table */
2763     public static final String CALL_METHOD_RESET_SECURE = "RESET_secure";
2764 
2765     /** @hide - Private call() method to reset to defaults the 'global' table */
2766     public static final String CALL_METHOD_RESET_GLOBAL = "RESET_global";
2767 
2768     /** @hide - Private call() method to reset to defaults the 'configuration' table */
2769     public static final String CALL_METHOD_RESET_CONFIG = "RESET_config";
2770 
2771     /** @hide - Private call() method to query the 'system' table */
2772     public static final String CALL_METHOD_LIST_SYSTEM = "LIST_system";
2773 
2774     /** @hide - Private call() method to query the 'secure' table */
2775     public static final String CALL_METHOD_LIST_SECURE = "LIST_secure";
2776 
2777     /** @hide - Private call() method to query the 'global' table */
2778     public static final String CALL_METHOD_LIST_GLOBAL = "LIST_global";
2779 
2780     /** @hide - Private call() method to reset to defaults the 'configuration' table */
2781     public static final String CALL_METHOD_LIST_CONFIG = "LIST_config";
2782 
2783     /** @hide - Private call() method to disable / re-enable syncs to the 'configuration' table */
2784     public static final String CALL_METHOD_SET_SYNC_DISABLED_MODE_CONFIG =
2785             "SET_SYNC_DISABLED_MODE_config";
2786 
2787     /**
2788      * @hide - Private call() method to return the current mode of sync disabling for the
2789      * 'configuration' table
2790      */
2791     public static final String CALL_METHOD_GET_SYNC_DISABLED_MODE_CONFIG =
2792             "GET_SYNC_DISABLED_MODE_config";
2793 
2794     /** @hide - Private call() method to register monitor callback for 'configuration' table */
2795     public static final String CALL_METHOD_REGISTER_MONITOR_CALLBACK_CONFIG =
2796             "REGISTER_MONITOR_CALLBACK_config";
2797 
2798     /** @hide - Private call() method to unregister monitor callback for 'configuration' table */
2799     public static final String CALL_METHOD_UNREGISTER_MONITOR_CALLBACK_CONFIG =
2800             "UNREGISTER_MONITOR_CALLBACK_config";
2801 
2802     /** @hide - String argument extra to the config monitor callback */
2803     public static final String EXTRA_MONITOR_CALLBACK_TYPE = "monitor_callback_type";
2804 
2805     /** @hide - String argument extra to the config monitor callback */
2806     public static final String EXTRA_ACCESS_CALLBACK = "access_callback";
2807 
2808     /** @hide - String argument extra to the config monitor callback */
2809     public static final String EXTRA_NAMESPACE_UPDATED_CALLBACK =
2810             "namespace_updated_callback";
2811 
2812     /** @hide - String argument extra to the config monitor callback */
2813     public static final String EXTRA_NAMESPACE = "namespace";
2814 
2815     /** @hide - String argument extra to the config monitor callback */
2816     public static final String EXTRA_CALLING_PACKAGE = "calling_package";
2817 
2818     /**
2819      * Activity Extra: Limit available options in launched activity based on the given authority.
2820      * <p>
2821      * This can be passed as an extra field in an Activity Intent with one or more syncable content
2822      * provider's authorities as a String[]. This field is used by some intents to alter the
2823      * behavior of the called activity.
2824      * <p>
2825      * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types available based
2826      * on the authority given.
2827      */
2828     public static final String EXTRA_AUTHORITIES = "authorities";
2829 
2830     /**
2831      * Activity Extra: Limit available options in launched activity based on the given account
2832      * types.
2833      * <p>
2834      * This can be passed as an extra field in an Activity Intent with one or more account types
2835      * as a String[]. This field is used by some intents to alter the behavior of the called
2836      * activity.
2837      * <p>
2838      * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types to the specified
2839      * list.
2840      */
2841     public static final String EXTRA_ACCOUNT_TYPES = "account_types";
2842 
2843     public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
2844 
2845     /**
2846      * Activity Extra: The device identifier to act upon.
2847      * <p>
2848      * This can be passed as an extra field in an Activity Intent with a single
2849      * InputDeviceIdentifier. This field is used by some activities to jump straight into the
2850      * settings for the given device.
2851      * <p>
2852      * Example: The {@link #ACTION_INPUT_METHOD_SETTINGS} intent opens the keyboard layout
2853      * dialog for the given device.
2854      * @hide
2855      */
2856     public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier";
2857 
2858     /**
2859      * Activity Extra: Enable or disable Airplane Mode.
2860      * <p>
2861      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE}
2862      * intent as a boolean to indicate if it should be enabled.
2863      */
2864     public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
2865 
2866     /**
2867      * Activity Extra: Enable or disable Battery saver mode.
2868      * <p>
2869      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE}
2870      * intent as a boolean to indicate if it should be enabled.
2871      */
2872     public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED =
2873             "android.settings.extra.battery_saver_mode_enabled";
2874 
2875     /**
2876      * Activity Extra: Enable or disable Do Not Disturb mode.
2877      * <p>
2878      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
2879      * intent as a boolean to indicate if it should be enabled.
2880      */
2881     public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED =
2882             "android.settings.extra.do_not_disturb_mode_enabled";
2883 
2884     /**
2885      * Activity Extra: How many minutes to enable do not disturb mode for.
2886      * <p>
2887      * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
2888      * intent to indicate how long do not disturb mode should be enabled for.
2889      */
2890     public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES =
2891             "android.settings.extra.do_not_disturb_mode_minutes";
2892 
2893     /**
2894      * Reset mode: reset to defaults only settings changed by the
2895      * calling package. If there is a default set the setting
2896      * will be set to it, otherwise the setting will be deleted.
2897      * This is the only type of reset available to non-system clients.
2898      * @hide
2899      */
2900     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
2901     @TestApi
2902     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
2903     public static final int RESET_MODE_PACKAGE_DEFAULTS = 1;
2904 
2905     /**
2906      * Reset mode: reset all settings set by untrusted packages, which is
2907      * packages that aren't a part of the system, to the current defaults.
2908      * If there is a default set the setting will be set to it, otherwise
2909      * the setting will be deleted. This mode is only available to the system.
2910      * @hide
2911      */
2912     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
2913     public static final int RESET_MODE_UNTRUSTED_DEFAULTS = 2;
2914 
2915     /**
2916      * Reset mode: delete all settings set by untrusted packages, which is
2917      * packages that aren't a part of the system. If a setting is set by an
2918      * untrusted package it will be deleted if its default is not provided
2919      * by the system, otherwise the setting will be set to its default.
2920      * This mode is only available to the system.
2921      * @hide
2922      */
2923     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
2924     public static final int RESET_MODE_UNTRUSTED_CHANGES = 3;
2925 
2926     /**
2927      * Reset mode: reset all settings to defaults specified by trusted
2928      * packages, which is packages that are a part of the system, and
2929      * delete all settings set by untrusted packages. If a setting has
2930      * a default set by a system package it will be set to the default,
2931      * otherwise the setting will be deleted. This mode is only available
2932      * to the system.
2933      * @hide
2934      */
2935     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
2936     public static final int RESET_MODE_TRUSTED_DEFAULTS = 4;
2937 
2938     /** @hide */
2939     @Retention(RetentionPolicy.SOURCE)
2940     @IntDef(prefix = { "RESET_MODE_" }, value = {
2941             RESET_MODE_PACKAGE_DEFAULTS,
2942             RESET_MODE_UNTRUSTED_DEFAULTS,
2943             RESET_MODE_UNTRUSTED_CHANGES,
2944             RESET_MODE_TRUSTED_DEFAULTS
2945     })
2946     public @interface ResetMode{}
2947 
2948     /**
2949      * Activity Extra: Number of certificates
2950      * <p>
2951      * This can be passed as an extra field to the {@link #ACTION_MONITORING_CERT_INFO}
2952      * intent to indicate the number of certificates
2953      * @hide
2954      */
2955     public static final String EXTRA_NUMBER_OF_CERTIFICATES =
2956             "android.settings.extra.number_of_certificates";
2957 
2958     private static final String SYSTEM_PACKAGE_NAME = "android";
2959 
2960     public static final String AUTHORITY = "settings";
2961 
2962     private static final String TAG = "Settings";
2963     private static final boolean LOCAL_LOGV = false;
2964 
2965     // Used in system server calling uid workaround in call()
2966     private static boolean sInSystemServer = false;
2967     private static final Object sInSystemServerLock = new Object();
2968 
2969     /** @hide */
setInSystemServer()2970     public static void setInSystemServer() {
2971         synchronized (sInSystemServerLock) {
2972             sInSystemServer = true;
2973         }
2974     }
2975 
2976     /** @hide */
isInSystemServer()2977     public static boolean isInSystemServer() {
2978         synchronized (sInSystemServerLock) {
2979             return sInSystemServer;
2980         }
2981     }
2982 
2983     public static class SettingNotFoundException extends AndroidException {
SettingNotFoundException(String msg)2984         public SettingNotFoundException(String msg) {
2985             super(msg);
2986         }
2987     }
2988 
2989     /**
2990      * Common base for tables of name/value settings.
2991      */
2992     public static class NameValueTable implements BaseColumns {
2993         public static final String NAME = "name";
2994         public static final String VALUE = "value";
2995         // A flag indicating whether the current value of a setting should be preserved during
2996         // restore.
2997         /** @hide */
2998         public static final String IS_PRESERVED_IN_RESTORE = "is_preserved_in_restore";
2999 
putString(ContentResolver resolver, Uri uri, String name, String value)3000         protected static boolean putString(ContentResolver resolver, Uri uri,
3001                 String name, String value) {
3002             // The database will take care of replacing duplicates.
3003             try {
3004                 ContentValues values = new ContentValues();
3005                 values.put(NAME, name);
3006                 values.put(VALUE, value);
3007                 resolver.insert(uri, values);
3008                 return true;
3009             } catch (SQLException e) {
3010                 Log.w(TAG, "Can't set key " + name + " in " + uri, e);
3011                 return false;
3012             }
3013         }
3014 
getUriFor(Uri uri, String name)3015         public static Uri getUriFor(Uri uri, String name) {
3016             return Uri.withAppendedPath(uri, name);
3017         }
3018     }
3019 
3020     private static final class GenerationTracker {
3021         @NonNull private final String mName;
3022         @NonNull private final MemoryIntArray mArray;
3023         @NonNull private final Consumer<String> mErrorHandler;
3024         private final int mIndex;
3025         private int mCurrentGeneration;
3026 
GenerationTracker(@onNull String name, @NonNull MemoryIntArray array, int index, int generation, Consumer<String> errorHandler)3027         GenerationTracker(@NonNull String name, @NonNull MemoryIntArray array, int index,
3028                 int generation, Consumer<String> errorHandler) {
3029             mName = name;
3030             mArray = array;
3031             mIndex = index;
3032             mErrorHandler = errorHandler;
3033             mCurrentGeneration = generation;
3034         }
3035 
3036         // This method also updates the obsolete generation code stored locally
isGenerationChanged()3037         public boolean isGenerationChanged() {
3038             final int currentGeneration = readCurrentGeneration();
3039             if (currentGeneration >= 0) {
3040                 if (currentGeneration == mCurrentGeneration) {
3041                     return false;
3042                 }
3043                 mCurrentGeneration = currentGeneration;
3044             }
3045             return true;
3046         }
3047 
getCurrentGeneration()3048         public int getCurrentGeneration() {
3049             return mCurrentGeneration;
3050         }
3051 
readCurrentGeneration()3052         private int readCurrentGeneration() {
3053             try {
3054                 return mArray.get(mIndex);
3055             } catch (IOException e) {
3056                 Log.e(TAG, "Error getting current generation", e);
3057                 mErrorHandler.accept(mName);
3058             }
3059             return -1;
3060         }
3061 
destroy()3062         public void destroy() {
3063             try {
3064                 // If this process is the system server process, mArray is the same object as
3065                 // the memory int array kept inside SettingsProvider, so skipping the close()
3066                 if (!Settings.isInSystemServer() && !mArray.isClosed()) {
3067                     mArray.close();
3068                 }
3069             } catch (IOException e) {
3070                 Log.e(TAG, "Error closing backing array", e);
3071             }
3072         }
3073 
3074         @Override
finalize()3075         protected void finalize() throws Throwable {
3076             try {
3077                 destroy();
3078             } finally {
3079                 super.finalize();
3080             }
3081         }
3082     }
3083 
3084     private static final class ContentProviderHolder {
3085         private final Object mLock = new Object();
3086 
3087         private final Uri mUri;
3088         @GuardedBy("mLock")
3089         @UnsupportedAppUsage
3090         private IContentProvider mContentProvider;
3091 
ContentProviderHolder(Uri uri)3092         public ContentProviderHolder(Uri uri) {
3093             mUri = uri;
3094         }
3095 
getProvider(ContentResolver contentResolver)3096         public IContentProvider getProvider(ContentResolver contentResolver) {
3097             synchronized (mLock) {
3098                 if (mContentProvider == null) {
3099                     mContentProvider = contentResolver
3100                             .acquireProvider(mUri.getAuthority());
3101                 }
3102                 return mContentProvider;
3103             }
3104         }
3105 
clearProviderForTest()3106         public void clearProviderForTest() {
3107             synchronized (mLock) {
3108                 mContentProvider = null;
3109             }
3110         }
3111     }
3112 
3113     // Thread-safe.
3114     private static class NameValueCache {
3115         private static final boolean DEBUG = false;
3116 
3117         private static final String[] SELECT_VALUE_PROJECTION = new String[] {
3118                 Settings.NameValueTable.VALUE
3119         };
3120 
3121         private static final String NAME_EQ_PLACEHOLDER = "name=?";
3122 
3123         // Must synchronize on 'this' to access mValues and mValuesVersion.
3124         private final ArrayMap<String, String> mValues = new ArrayMap<>();
3125 
3126         private final Uri mUri;
3127         @UnsupportedAppUsage
3128         private final ContentProviderHolder mProviderHolder;
3129 
3130         // The method we'll call (or null, to not use) on the provider
3131         // for the fast path of retrieving settings.
3132         private final String mCallGetCommand;
3133         private final String mCallSetCommand;
3134         private final String mCallDeleteCommand;
3135         private final String mCallListCommand;
3136         private final String mCallSetAllCommand;
3137 
3138         private final ArraySet<String> mReadableFields;
3139         private final ArraySet<String> mAllFields;
3140         private final ArrayMap<String, Integer> mReadableFieldsWithMaxTargetSdk;
3141 
3142         // Mapping from the name of a setting (or the prefix of a namespace) to a generation tracker
3143         @GuardedBy("this")
3144         private ArrayMap<String, GenerationTracker> mGenerationTrackers = new ArrayMap<>();
3145 
3146         private Consumer<String> mGenerationTrackerErrorHandler = (String name) -> {
3147             synchronized (NameValueCache.this) {
3148                 Log.e(TAG, "Error accessing generation tracker - removing");
3149                 final GenerationTracker tracker = mGenerationTrackers.get(name);
3150                 if (tracker != null) {
3151                     tracker.destroy();
3152                     mGenerationTrackers.remove(name);
3153                 }
3154                 mValues.remove(name);
3155             }
3156         };
3157 
NameValueCache(Uri uri, String getCommand, String setCommand, String deleteCommand, ContentProviderHolder providerHolder, Class<T> callerClass)3158         <T extends NameValueTable> NameValueCache(Uri uri, String getCommand,
3159                 String setCommand, String deleteCommand, ContentProviderHolder providerHolder,
3160                 Class<T> callerClass) {
3161             this(uri, getCommand, setCommand, deleteCommand, null, null, providerHolder,
3162                     callerClass);
3163         }
3164 
NameValueCache(Uri uri, String getCommand, String setCommand, String deleteCommand, String listCommand, String setAllCommand, ContentProviderHolder providerHolder, Class<T> callerClass)3165         private <T extends NameValueTable> NameValueCache(Uri uri, String getCommand,
3166                 String setCommand, String deleteCommand, String listCommand, String setAllCommand,
3167                 ContentProviderHolder providerHolder, Class<T> callerClass) {
3168             mUri = uri;
3169             mCallGetCommand = getCommand;
3170             mCallSetCommand = setCommand;
3171             mCallDeleteCommand = deleteCommand;
3172             mCallListCommand = listCommand;
3173             mCallSetAllCommand = setAllCommand;
3174             mProviderHolder = providerHolder;
3175             mReadableFields = new ArraySet<>();
3176             mAllFields = new ArraySet<>();
3177             mReadableFieldsWithMaxTargetSdk = new ArrayMap<>();
3178             getPublicSettingsForClass(callerClass, mAllFields, mReadableFields,
3179                     mReadableFieldsWithMaxTargetSdk);
3180         }
3181 
putStringForUser(ContentResolver cr, String name, String value, String tag, boolean makeDefault, final int userHandle, boolean overrideableByRestore)3182         public boolean putStringForUser(ContentResolver cr, String name, String value,
3183                 String tag, boolean makeDefault, final int userHandle,
3184                 boolean overrideableByRestore) {
3185             try {
3186                 Bundle arg = new Bundle();
3187                 arg.putString(Settings.NameValueTable.VALUE, value);
3188                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
3189                 if (tag != null) {
3190                     arg.putString(CALL_METHOD_TAG_KEY, tag);
3191                 }
3192                 if (makeDefault) {
3193                     arg.putBoolean(CALL_METHOD_MAKE_DEFAULT_KEY, true);
3194                 }
3195                 if (overrideableByRestore) {
3196                     arg.putBoolean(CALL_METHOD_OVERRIDEABLE_BY_RESTORE_KEY, true);
3197                 }
3198                 IContentProvider cp = mProviderHolder.getProvider(cr);
3199                 cp.call(cr.getAttributionSource(),
3200                         mProviderHolder.mUri.getAuthority(), mCallSetCommand, name, arg);
3201             } catch (RemoteException e) {
3202                 Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
3203                 return false;
3204             }
3205             return true;
3206         }
3207 
setStringsForPrefix(ContentResolver cr, String prefix, HashMap<String, String> keyValues)3208         public @SetAllResult int setStringsForPrefix(ContentResolver cr, String prefix,
3209                 HashMap<String, String> keyValues) {
3210             if (mCallSetAllCommand == null) {
3211                 // This NameValueCache does not support atomically setting multiple flags
3212                 return SET_ALL_RESULT_FAILURE;
3213             }
3214             try {
3215                 Bundle args = new Bundle();
3216                 args.putString(CALL_METHOD_PREFIX_KEY, prefix);
3217                 args.putSerializable(CALL_METHOD_FLAGS_KEY, keyValues);
3218                 IContentProvider cp = mProviderHolder.getProvider(cr);
3219                 Bundle bundle = cp.call(cr.getAttributionSource(),
3220                         mProviderHolder.mUri.getAuthority(),
3221                         mCallSetAllCommand, null, args);
3222                 return bundle.getInt(KEY_CONFIG_SET_ALL_RETURN);
3223             } catch (RemoteException e) {
3224                 // Not supported by the remote side
3225                 return SET_ALL_RESULT_FAILURE;
3226             }
3227         }
3228 
deleteStringForUser(ContentResolver cr, String name, final int userHandle)3229         public boolean deleteStringForUser(ContentResolver cr, String name, final int userHandle) {
3230             try {
3231                 Bundle arg = new Bundle();
3232                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
3233                 IContentProvider cp = mProviderHolder.getProvider(cr);
3234                 cp.call(cr.getAttributionSource(),
3235                         mProviderHolder.mUri.getAuthority(), mCallDeleteCommand, name, arg);
3236             } catch (RemoteException e) {
3237                 Log.w(TAG, "Can't delete key " + name + " in " + mUri, e);
3238                 return false;
3239             }
3240             return true;
3241         }
3242 
3243         @UnsupportedAppUsage
getStringForUser(ContentResolver cr, String name, final int userHandle)3244         public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
3245             final boolean isSelf = (userHandle == UserHandle.myUserId());
3246             final boolean useCache = isSelf && !isInSystemServer();
3247             boolean needsGenerationTracker = false;
3248             if (useCache) {
3249                 synchronized (NameValueCache.this) {
3250                     final GenerationTracker generationTracker = mGenerationTrackers.get(name);
3251                     if (generationTracker != null) {
3252                         if (generationTracker.isGenerationChanged()) {
3253                             if (DEBUG) {
3254                                 Log.i(TAG, "Generation changed for setting:" + name
3255                                         + " type:" + mUri.getPath()
3256                                         + " in package:" + cr.getPackageName()
3257                                         + " and user:" + userHandle);
3258                             }
3259                             // When a generation number changes, remove cached value, remove the old
3260                             // generation tracker and request a new one
3261                             mValues.remove(name);
3262                             generationTracker.destroy();
3263                             mGenerationTrackers.remove(name);
3264                         } else if (mValues.containsKey(name)) {
3265                             if (DEBUG) {
3266                                 Log.i(TAG, "Cache hit for setting:" + name);
3267                             }
3268                             return mValues.get(name);
3269                         }
3270                     }
3271                 }
3272                 if (DEBUG) {
3273                     Log.i(TAG, "Cache miss for setting:" + name + " for user:"
3274                             + userHandle);
3275                 }
3276                 // Generation tracker doesn't exist or the value isn't cached
3277                 needsGenerationTracker = true;
3278             } else {
3279                 if (DEBUG || LOCAL_LOGV) {
3280                     Log.v(TAG, "get setting for user " + userHandle
3281                             + " by user " + UserHandle.myUserId() + " so skipping cache");
3282                 }
3283             }
3284 
3285             // Check if the target settings key is readable. Reject if the caller is not system and
3286             // is trying to access a settings key defined in the Settings.Secure, Settings.System or
3287             // Settings.Global and is not annotated as @Readable.
3288             // Notice that a key string that is not defined in any of the Settings.* classes will
3289             // still be regarded as readable.
3290             if (!isCallerExemptFromReadableRestriction() && mAllFields.contains(name)) {
3291                 if (!mReadableFields.contains(name)) {
3292                     throw new SecurityException(
3293                             "Settings key: <" + name + "> is not readable. From S+, settings keys "
3294                                     + "annotated with @hide are restricted to system_server and "
3295                                     + "system apps only, unless they are annotated with @Readable."
3296                     );
3297                 } else {
3298                     // When the target settings key has @Readable annotation, if the caller app's
3299                     // target sdk is higher than the maxTargetSdk of the annotation, reject access.
3300                     if (mReadableFieldsWithMaxTargetSdk.containsKey(name)) {
3301                         final int maxTargetSdk = mReadableFieldsWithMaxTargetSdk.get(name);
3302                         final Application application = ActivityThread.currentApplication();
3303                         final boolean targetSdkCheckOk = application != null
3304                                 && application.getApplicationInfo() != null
3305                                 && application.getApplicationInfo().targetSdkVersion
3306                                 <= maxTargetSdk;
3307                         if (!targetSdkCheckOk) {
3308                             throw new SecurityException(
3309                                     "Settings key: <" + name + "> is only readable to apps with "
3310                                             + "targetSdkVersion lower than or equal to: "
3311                                             + maxTargetSdk
3312                             );
3313                         }
3314                     }
3315                 }
3316             }
3317 
3318             IContentProvider cp = mProviderHolder.getProvider(cr);
3319 
3320             // Try the fast path first, not using query().  If this
3321             // fails (alternate Settings provider that doesn't support
3322             // this interface?) then we fall back to the query/table
3323             // interface.
3324             if (mCallGetCommand != null) {
3325                 try {
3326                     Bundle args = new Bundle();
3327                     if (!isSelf) {
3328                         args.putInt(CALL_METHOD_USER_KEY, userHandle);
3329                     }
3330                     if (needsGenerationTracker) {
3331                         args.putString(CALL_METHOD_TRACK_GENERATION_KEY, null);
3332                         if (DEBUG) {
3333                             Log.i(TAG, "Requested generation tracker for setting:" + name
3334                                     + " type:" + mUri.getPath()
3335                                     + " in package:" + cr.getPackageName()
3336                                     + " and user:" + userHandle);
3337                         }
3338                     }
3339                     Bundle b;
3340                     // If we're in system server and in a binder transaction we need to clear the
3341                     // calling uid. This works around code in system server that did not call
3342                     // clearCallingIdentity, previously this wasn't needed because reading settings
3343                     // did not do permission checking but thats no longer the case.
3344                     // Long term this should be removed and callers should properly call
3345                     // clearCallingIdentity or use a ContentResolver from the caller as needed.
3346                     if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) {
3347                         final long token = Binder.clearCallingIdentity();
3348                         try {
3349                             b = cp.call(cr.getAttributionSource(),
3350                                     mProviderHolder.mUri.getAuthority(), mCallGetCommand, name,
3351                                     args);
3352                         } finally {
3353                             Binder.restoreCallingIdentity(token);
3354                         }
3355                     } else {
3356                         b = cp.call(cr.getAttributionSource(),
3357                                 mProviderHolder.mUri.getAuthority(), mCallGetCommand, name, args);
3358                     }
3359                     if (b != null) {
3360                         String value = b.getString(Settings.NameValueTable.VALUE);
3361                         // Don't update our cache for reads of other users' data
3362                         if (isSelf) {
3363                             synchronized (NameValueCache.this) {
3364                                 if (needsGenerationTracker) {
3365                                     MemoryIntArray array = b.getParcelable(
3366                                             CALL_METHOD_TRACK_GENERATION_KEY, android.util.MemoryIntArray.class);
3367                                     final int index = b.getInt(
3368                                             CALL_METHOD_GENERATION_INDEX_KEY, -1);
3369                                     if (array != null && index >= 0) {
3370                                         final int generation = b.getInt(
3371                                                 CALL_METHOD_GENERATION_KEY, 0);
3372                                         if (DEBUG) {
3373                                             Log.i(TAG, "Received generation tracker for setting:"
3374                                                     + name
3375                                                     + " type:" + mUri.getPath()
3376                                                     + " in package:" + cr.getPackageName()
3377                                                     + " and user:" + userHandle
3378                                                     + " with index:" + index);
3379                                         }
3380                                         mGenerationTrackers.put(name, new GenerationTracker(name,
3381                                                 array, index, generation,
3382                                                 mGenerationTrackerErrorHandler));
3383                                     }
3384                                 }
3385                                 if (mGenerationTrackers.get(name) != null
3386                                         && !mGenerationTrackers.get(name).isGenerationChanged()) {
3387                                     if (DEBUG) {
3388                                         Log.i(TAG, "Updating cache for setting:" + name);
3389                                     }
3390                                     mValues.put(name, value);
3391                                 }
3392                             }
3393                         } else {
3394                             if (DEBUG || LOCAL_LOGV) {
3395                                 Log.i(TAG, "call-query of user " + userHandle
3396                                         + " by " + UserHandle.myUserId()
3397                                         + (isInSystemServer() ? " in system_server" : "")
3398                                         + " so not updating cache");
3399                             }
3400                         }
3401                         return value;
3402                     }
3403                     // If the response Bundle is null, we fall through
3404                     // to the query interface below.
3405                 } catch (RemoteException e) {
3406                     // Not supported by the remote side?  Fall through
3407                     // to query().
3408                 }
3409             }
3410 
3411             Cursor c = null;
3412             try {
3413                 Bundle queryArgs = ContentResolver.createSqlQueryBundle(
3414                         NAME_EQ_PLACEHOLDER, new String[]{name}, null);
3415                 // Same workaround as above.
3416                 if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) {
3417                     final long token = Binder.clearCallingIdentity();
3418                     try {
3419                         c = cp.query(cr.getAttributionSource(), mUri,
3420                                 SELECT_VALUE_PROJECTION, queryArgs, null);
3421                     } finally {
3422                         Binder.restoreCallingIdentity(token);
3423                     }
3424                 } else {
3425                     c = cp.query(cr.getAttributionSource(), mUri,
3426                             SELECT_VALUE_PROJECTION, queryArgs, null);
3427                 }
3428                 if (c == null) {
3429                     Log.w(TAG, "Can't get key " + name + " from " + mUri);
3430                     return null;
3431                 }
3432 
3433                 String value = c.moveToNext() ? c.getString(0) : null;
3434                 synchronized (NameValueCache.this) {
3435                     if (mGenerationTrackers.get(name) != null
3436                             && !mGenerationTrackers.get(name).isGenerationChanged()) {
3437                         if (DEBUG) {
3438                             Log.i(TAG, "Updating cache for setting:" + name + " using query");
3439                         }
3440                         mValues.put(name, value);
3441                     }
3442                 }
3443                 return value;
3444             } catch (RemoteException e) {
3445                 Log.w(TAG, "Can't get key " + name + " from " + mUri, e);
3446                 return null;  // Return null, but don't cache it.
3447             } finally {
3448                 if (c != null) c.close();
3449             }
3450         }
3451 
isCallerExemptFromReadableRestriction()3452         private static boolean isCallerExemptFromReadableRestriction() {
3453             if (Settings.isInSystemServer()) {
3454                 return true;
3455             }
3456             if (UserHandle.getAppId(Binder.getCallingUid()) < Process.FIRST_APPLICATION_UID) {
3457                 return true;
3458             }
3459             final Application application = ActivityThread.currentApplication();
3460             if (application == null || application.getApplicationInfo() == null) {
3461                 return false;
3462             }
3463             final ApplicationInfo applicationInfo = application.getApplicationInfo();
3464             final boolean isTestOnly =
3465                     (applicationInfo.flags & ApplicationInfo.FLAG_TEST_ONLY) != 0;
3466             return isTestOnly || applicationInfo.isSystemApp() || applicationInfo.isPrivilegedApp()
3467                     || applicationInfo.isSignedWithPlatformKey();
3468         }
3469 
getStringsForPrefix(ContentResolver cr, String prefix, List<String> names)3470         public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
3471                 List<String> names) {
3472             String namespace = prefix.substring(0, prefix.length() - 1);
3473             Config.enforceReadPermission(namespace);
3474             ArrayMap<String, String> keyValues = new ArrayMap<>();
3475             int currentGeneration = -1;
3476             boolean needsGenerationTracker = false;
3477 
3478             synchronized (NameValueCache.this) {
3479                 final GenerationTracker generationTracker = mGenerationTrackers.get(prefix);
3480                 if (generationTracker != null) {
3481                     if (generationTracker.isGenerationChanged()) {
3482                         if (DEBUG) {
3483                             Log.i(TAG, "Generation changed for prefix:" + prefix
3484                                     + " type:" + mUri.getPath()
3485                                     + " in package:" + cr.getPackageName());
3486                         }
3487                         for (int i = mValues.size() - 1; i >= 0; i--) {
3488                             String key = mValues.keyAt(i);
3489                             if (key.startsWith(prefix)) {
3490                                 mValues.remove(key);
3491                             }
3492                         }
3493                     } else {
3494                         boolean prefixCached = mValues.containsKey(prefix);
3495                         if (prefixCached) {
3496                             if (DEBUG) {
3497                                 Log.i(TAG, "Cache hit for prefix:" + prefix);
3498                             }
3499                             if (!names.isEmpty()) {
3500                                 for (String name : names) {
3501                                     if (mValues.containsKey(name)) {
3502                                         keyValues.put(name, mValues.get(name));
3503                                     }
3504                                 }
3505                             } else {
3506                                 for (int i = 0; i < mValues.size(); ++i) {
3507                                     String key = mValues.keyAt(i);
3508                                     // Explicitly exclude the prefix as it is only there to
3509                                     // signal that the prefix has been cached.
3510                                     if (key.startsWith(prefix) && !key.equals(prefix)) {
3511                                         keyValues.put(key, mValues.get(key));
3512                                     }
3513                                 }
3514                             }
3515                             return keyValues;
3516                         }
3517                     }
3518                     currentGeneration = generationTracker.getCurrentGeneration();
3519                 } else {
3520                     needsGenerationTracker = true;
3521                 }
3522             }
3523 
3524             if (mCallListCommand == null) {
3525                 // No list command specified, return empty map
3526                 return keyValues;
3527             }
3528             if (DEBUG) {
3529                 Log.i(TAG, "Cache miss for prefix:" + prefix);
3530             }
3531             IContentProvider cp = mProviderHolder.getProvider(cr);
3532 
3533             try {
3534                 Bundle args = new Bundle();
3535                 args.putString(Settings.CALL_METHOD_PREFIX_KEY, prefix);
3536                 if (needsGenerationTracker) {
3537                     args.putString(CALL_METHOD_TRACK_GENERATION_KEY, null);
3538                     if (DEBUG) {
3539                         Log.i(TAG, "Requested generation tracker for prefix:" + prefix
3540                                 + " type: " + mUri.getPath()
3541                                 + " in package:" + cr.getPackageName());
3542                     }
3543                 }
3544 
3545                 Bundle b;
3546                 // b/252663068: if we're in system server and the caller did not call
3547                 // clearCallingIdentity, the read would fail due to mismatched AttributionSources.
3548                 // TODO(b/256013480): remove this bypass after fixing the callers in system server.
3549                 if (namespace.equals(DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER)
3550                         && Settings.isInSystemServer()
3551                         && Binder.getCallingUid() != Process.myUid()) {
3552                     final long token = Binder.clearCallingIdentity();
3553                     try {
3554                         // Fetch all flags for the namespace at once for caching purposes
3555                         b = cp.call(cr.getAttributionSource(),
3556                                 mProviderHolder.mUri.getAuthority(), mCallListCommand, null, args);
3557                     } finally {
3558                         Binder.restoreCallingIdentity(token);
3559                     }
3560                 } else {
3561                     // Fetch all flags for the namespace at once for caching purposes
3562                     b = cp.call(cr.getAttributionSource(),
3563                             mProviderHolder.mUri.getAuthority(), mCallListCommand, null, args);
3564                 }
3565                 if (b == null) {
3566                     // Invalid response, return an empty map
3567                     return keyValues;
3568                 }
3569 
3570                 // All flags for the namespace
3571                 Map<String, String> flagsToValues =
3572                         (HashMap) b.getSerializable(Settings.NameValueTable.VALUE, java.util.HashMap.class);
3573                 // Only the flags requested by the caller
3574                 if (!names.isEmpty()) {
3575                     for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
3576                         if (names.contains(flag.getKey())) {
3577                             keyValues.put(flag.getKey(), flag.getValue());
3578                         }
3579                     }
3580                 } else {
3581                     keyValues.putAll(flagsToValues);
3582                 }
3583 
3584                 synchronized (NameValueCache.this) {
3585                     if (needsGenerationTracker) {
3586                         MemoryIntArray array = b.getParcelable(
3587                                 CALL_METHOD_TRACK_GENERATION_KEY, android.util.MemoryIntArray.class);
3588                         final int index = b.getInt(
3589                                 CALL_METHOD_GENERATION_INDEX_KEY, -1);
3590                         if (array != null && index >= 0) {
3591                             final int generation = b.getInt(
3592                                     CALL_METHOD_GENERATION_KEY, 0);
3593                             if (DEBUG) {
3594                                 Log.i(TAG, "Received generation tracker for prefix:" + prefix
3595                                         + " type:" + mUri.getPath()
3596                                         + " in package:" + cr.getPackageName()
3597                                         + " with index:" + index);
3598                             }
3599                             mGenerationTrackers.put(prefix,
3600                                     new GenerationTracker(prefix, array, index, generation,
3601                                             mGenerationTrackerErrorHandler));
3602                             currentGeneration = generation;
3603                         }
3604                     }
3605                     if (mGenerationTrackers.get(prefix) != null && currentGeneration
3606                             == mGenerationTrackers.get(prefix).getCurrentGeneration()) {
3607                         if (DEBUG) {
3608                             Log.i(TAG, "Updating cache for prefix:" + prefix);
3609                         }
3610                         // cache the complete list of flags for the namespace
3611                         mValues.putAll(flagsToValues);
3612                         // Adding the prefix as a signal that the prefix is cached.
3613                         mValues.put(prefix, null);
3614                     }
3615                 }
3616                 return keyValues;
3617             } catch (RemoteException e) {
3618                 // Not supported by the remote side, return an empty map
3619                 return keyValues;
3620             }
3621         }
3622 
clearGenerationTrackerForTest()3623         public void clearGenerationTrackerForTest() {
3624             synchronized (NameValueCache.this) {
3625                 for (int i = 0; i < mGenerationTrackers.size(); i++) {
3626                     mGenerationTrackers.valueAt(i).destroy();
3627                 }
3628                 mGenerationTrackers.clear();
3629                 mValues.clear();
3630             }
3631         }
3632     }
3633 
3634     /**
3635      * Checks if the specified context can draw on top of other apps. As of API
3636      * level 23, an app cannot draw on top of other apps unless it declares the
3637      * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its
3638      * manifest, <em>and</em> the user specifically grants the app this
3639      * capability. To prompt the user to grant this approval, the app must send an
3640      * intent with the action
3641      * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}, which
3642      * causes the system to display a permission management screen.
3643      *
3644      * @param context App context.
3645      * @return true if the specified context can draw on top of other apps, false otherwise
3646      */
canDrawOverlays(Context context)3647     public static boolean canDrawOverlays(Context context) {
3648         return Settings.isCallingPackageAllowedToDrawOverlays(context, Process.myUid(),
3649                 context.getOpPackageName(), false) || context.checkSelfPermission(
3650                 Manifest.permission.SYSTEM_APPLICATION_OVERLAY)
3651                 == PackageManager.PERMISSION_GRANTED;
3652     }
3653 
3654     /**
3655      * This annotation indicates that the value of a setting is allowed to be read
3656      * with the get* methods. The following settings should be readable:
3657      * 1) all the public settings
3658      * 2) all the hidden settings added before S
3659      */
3660     @Target({ ElementType.FIELD })
3661     @Retention(RetentionPolicy.RUNTIME)
3662     private @interface Readable {
maxTargetSdk()3663         int maxTargetSdk() default 0;
3664     }
3665 
getPublicSettingsForClass( Class<T> callerClass, Set<String> allKeys, Set<String> readableKeys, ArrayMap<String, Integer> keysWithMaxTargetSdk)3666     private static <T extends NameValueTable> void getPublicSettingsForClass(
3667             Class<T> callerClass, Set<String> allKeys, Set<String> readableKeys,
3668             ArrayMap<String, Integer> keysWithMaxTargetSdk) {
3669         final Field[] allFields = callerClass.getDeclaredFields();
3670         try {
3671             for (int i = 0; i < allFields.length; i++) {
3672                 final Field field = allFields[i];
3673                 if (!field.getType().equals(String.class)) {
3674                     continue;
3675                 }
3676                 final Object value = field.get(callerClass);
3677                 if (!value.getClass().equals(String.class)) {
3678                     continue;
3679                 }
3680                 allKeys.add((String) value);
3681                 final Readable annotation = field.getAnnotation(Readable.class);
3682 
3683                 if (annotation != null) {
3684                     final String key = (String) value;
3685                     final int maxTargetSdk = annotation.maxTargetSdk();
3686                     readableKeys.add(key);
3687                     if (maxTargetSdk != 0) {
3688                         keysWithMaxTargetSdk.put(key, maxTargetSdk);
3689                     }
3690                 }
3691             }
3692         } catch (IllegalAccessException ignored) {
3693         }
3694     }
3695 
parseFloatSetting(String settingValue, String settingName)3696     private static float parseFloatSetting(String settingValue, String settingName)
3697             throws SettingNotFoundException {
3698         if (settingValue == null) {
3699             throw new SettingNotFoundException(settingName);
3700         }
3701         try {
3702             return Float.parseFloat(settingValue);
3703         } catch (NumberFormatException e) {
3704             throw new SettingNotFoundException(settingName);
3705         }
3706     }
3707 
parseFloatSettingWithDefault(String settingValue, float defaultValue)3708     private static float parseFloatSettingWithDefault(String settingValue, float defaultValue) {
3709         try {
3710             return settingValue != null ? Float.parseFloat(settingValue) : defaultValue;
3711         } catch (NumberFormatException e) {
3712             return defaultValue;
3713         }
3714     }
3715 
parseIntSetting(String settingValue, String settingName)3716     private static int parseIntSetting(String settingValue, String settingName)
3717             throws SettingNotFoundException {
3718         if (settingValue == null) {
3719             throw new SettingNotFoundException(settingName);
3720         }
3721         try {
3722             return Integer.parseInt(settingValue);
3723         } catch (NumberFormatException e) {
3724             throw new SettingNotFoundException(settingName);
3725         }
3726     }
3727 
parseIntSettingWithDefault(String settingValue, int defaultValue)3728     private static int parseIntSettingWithDefault(String settingValue, int defaultValue) {
3729         try {
3730             return settingValue != null ? Integer.parseInt(settingValue) : defaultValue;
3731         } catch (NumberFormatException e) {
3732             return defaultValue;
3733         }
3734     }
3735 
parseLongSetting(String settingValue, String settingName)3736     private static long parseLongSetting(String settingValue, String settingName)
3737             throws SettingNotFoundException {
3738         if (settingValue == null) {
3739             throw new SettingNotFoundException(settingName);
3740         }
3741         try {
3742             return Long.parseLong(settingValue);
3743         } catch (NumberFormatException e) {
3744             throw new SettingNotFoundException(settingName);
3745         }
3746     }
3747 
parseLongSettingWithDefault(String settingValue, long defaultValue)3748     private static long parseLongSettingWithDefault(String settingValue, long defaultValue) {
3749         try {
3750             return settingValue != null ? Long.parseLong(settingValue) : defaultValue;
3751         } catch (NumberFormatException e) {
3752             return defaultValue;
3753         }
3754     }
3755 
3756     /**
3757      * System settings, containing miscellaneous system preferences.  This
3758      * table holds simple name/value pairs.  There are convenience
3759      * functions for accessing individual settings entries.
3760      */
3761     public static final class System extends NameValueTable {
3762         // NOTE: If you add new settings here, be sure to add them to
3763         // com.android.providers.settings.SettingsProtoDumpUtil#dumpProtoSystemSettingsLocked.
3764 
3765         private static final float DEFAULT_FONT_SCALE = 1.0f;
3766         private static final int DEFAULT_FONT_WEIGHT = 0;
3767 
3768         /**
3769          * The content:// style URL for this table
3770          */
3771         public static final Uri CONTENT_URI =
3772             Uri.parse("content://" + AUTHORITY + "/system");
3773 
3774         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
3775         private static final ContentProviderHolder sProviderHolder =
3776                 new ContentProviderHolder(CONTENT_URI);
3777 
3778         @UnsupportedAppUsage
3779         private static final NameValueCache sNameValueCache = new NameValueCache(
3780                 CONTENT_URI,
3781                 CALL_METHOD_GET_SYSTEM,
3782                 CALL_METHOD_PUT_SYSTEM,
3783                 CALL_METHOD_DELETE_SYSTEM,
3784                 sProviderHolder,
3785                 System.class);
3786 
3787         @UnsupportedAppUsage
3788         private static final HashSet<String> MOVED_TO_SECURE;
3789         static {
3790             MOVED_TO_SECURE = new HashSet<>(30);
3791             MOVED_TO_SECURE.add(Secure.ADAPTIVE_SLEEP);
3792             MOVED_TO_SECURE.add(Secure.ANDROID_ID);
3793             MOVED_TO_SECURE.add(Secure.HTTP_PROXY);
3794             MOVED_TO_SECURE.add(Secure.LOCATION_PROVIDERS_ALLOWED);
3795             MOVED_TO_SECURE.add(Secure.LOCK_BIOMETRIC_WEAK_FLAGS);
3796             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_ENABLED);
3797             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_VISIBLE);
3798             MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
3799             MOVED_TO_SECURE.add(Secure.LOGGING_ID);
3800             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_ENABLED);
3801             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_LAST_UPDATE);
3802             MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_REDIRECT_URL);
3803             MOVED_TO_SECURE.add(Secure.SETTINGS_CLASSNAME);
3804             MOVED_TO_SECURE.add(Secure.USE_GOOGLE_MAIL);
3805             MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
3806             MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
3807             MOVED_TO_SECURE.add(Secure.WIFI_NUM_OPEN_NETWORKS_KEPT);
3808             MOVED_TO_SECURE.add(Secure.WIFI_ON);
3809             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE);
3810             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_AP_COUNT);
3811             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS);
3812             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED);
3813             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS);
3814             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT);
3815             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_MAX_AP_CHECKS);
3816             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ON);
3817             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT);
3818             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS);
3819             MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS);
3820 
3821             // At one time in System, then Global, but now back in Secure
3822             MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS);
3823         }
3824 
3825         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
3826         private static final HashSet<String> MOVED_TO_GLOBAL;
3827         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
3828         private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL;
3829         static {
3830             MOVED_TO_GLOBAL = new HashSet<>();
3831             MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<>();
3832 
3833             // these were originally in system but migrated to secure in the past,
3834             // so are duplicated in the Secure.* namespace
3835             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED);
3836             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON);
3837             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING);
3838             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED);
3839             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY);
3840             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.NETWORK_PREFERENCE);
3841             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
3842             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
3843             MOVED_TO_SECURE_THEN_GLOBAL.add(Global.WIFI_MAX_DHCP_RETRY_COUNT);
3844 
3845             // these are moving directly from system to global
3846             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_ON);
3847             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_RADIOS);
3848             MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
3849             MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME);
3850             MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME_ZONE);
3851             MOVED_TO_GLOBAL.add(Settings.Global.CAR_DOCK_SOUND);
3852             MOVED_TO_GLOBAL.add(Settings.Global.CAR_UNDOCK_SOUND);
3853             MOVED_TO_GLOBAL.add(Settings.Global.DESK_DOCK_SOUND);
3854             MOVED_TO_GLOBAL.add(Settings.Global.DESK_UNDOCK_SOUND);
3855             MOVED_TO_GLOBAL.add(Settings.Global.DOCK_SOUNDS_ENABLED);
3856             MOVED_TO_GLOBAL.add(Settings.Global.LOCK_SOUND);
3857             MOVED_TO_GLOBAL.add(Settings.Global.UNLOCK_SOUND);
3858             MOVED_TO_GLOBAL.add(Settings.Global.LOW_BATTERY_SOUND);
3859             MOVED_TO_GLOBAL.add(Settings.Global.POWER_SOUNDS_ENABLED);
3860             MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
3861             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY);
3862             MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER);
3863             MOVED_TO_GLOBAL.add(Settings.Global.WINDOW_ANIMATION_SCALE);
3864             MOVED_TO_GLOBAL.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
3865             MOVED_TO_GLOBAL.add(Settings.Global.ANIMATOR_DURATION_SCALE);
3866             MOVED_TO_GLOBAL.add(Settings.Global.FANCY_IME_ANIMATIONS);
3867             MOVED_TO_GLOBAL.add(Settings.Global.COMPATIBILITY_MODE);
3868             MOVED_TO_GLOBAL.add(Settings.Global.EMERGENCY_TONE);
3869             MOVED_TO_GLOBAL.add(Settings.Global.CALL_AUTO_RETRY);
3870             MOVED_TO_GLOBAL.add(Settings.Global.DEBUG_APP);
3871             MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER);
3872             MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
3873             MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_CONTENT_URL);
3874             MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_METADATA_URL);
3875             MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_CONTENT_URL);
3876             MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_METADATA_URL);
3877             MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL);
3878             MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL);
3879             MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL);
3880             MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL);
3881             MOVED_TO_GLOBAL.add(Settings.Global.RADIO_NFC);
3882             MOVED_TO_GLOBAL.add(Settings.Global.RADIO_CELL);
3883             MOVED_TO_GLOBAL.add(Settings.Global.RADIO_WIFI);
3884             MOVED_TO_GLOBAL.add(Settings.Global.RADIO_BLUETOOTH);
3885             MOVED_TO_GLOBAL.add(Settings.Global.RADIO_WIMAX);
3886             MOVED_TO_GLOBAL.add(Settings.Global.SHOW_PROCESSES);
3887         }
3888 
3889         /** @hide */
getMovedToGlobalSettings(Set<String> outKeySet)3890         public static void getMovedToGlobalSettings(Set<String> outKeySet) {
3891             outKeySet.addAll(MOVED_TO_GLOBAL);
3892             outKeySet.addAll(MOVED_TO_SECURE_THEN_GLOBAL);
3893         }
3894 
3895         /** @hide */
getMovedToSecureSettings(Set<String> outKeySet)3896         public static void getMovedToSecureSettings(Set<String> outKeySet) {
3897             outKeySet.addAll(MOVED_TO_SECURE);
3898         }
3899 
3900         /** @hide */
getNonLegacyMovedKeys(HashSet<String> outKeySet)3901         public static void getNonLegacyMovedKeys(HashSet<String> outKeySet) {
3902             outKeySet.addAll(MOVED_TO_GLOBAL);
3903         }
3904 
3905         /** @hide */
clearProviderForTest()3906         public static void clearProviderForTest() {
3907             sProviderHolder.clearProviderForTest();
3908             sNameValueCache.clearGenerationTrackerForTest();
3909         }
3910 
3911         /** @hide */
getPublicSettings(Set<String> allKeys, Set<String> readableKeys, ArrayMap<String, Integer> readableKeysWithMaxTargetSdk)3912         public static void getPublicSettings(Set<String> allKeys, Set<String> readableKeys,
3913                 ArrayMap<String, Integer> readableKeysWithMaxTargetSdk) {
3914             getPublicSettingsForClass(System.class, allKeys, readableKeys,
3915                     readableKeysWithMaxTargetSdk);
3916         }
3917 
3918         /**
3919          * Look up a name in the database.
3920          * @param resolver to access the database with
3921          * @param name to look up in the table
3922          * @return the corresponding value, or null if not present
3923          */
getString(ContentResolver resolver, String name)3924         public static String getString(ContentResolver resolver, String name) {
3925             return getStringForUser(resolver, name, resolver.getUserId());
3926         }
3927 
3928         /** @hide */
3929         @UnsupportedAppUsage
getStringForUser(ContentResolver resolver, String name, int userHandle)3930         public static String getStringForUser(ContentResolver resolver, String name,
3931                 int userHandle) {
3932             if (MOVED_TO_SECURE.contains(name)) {
3933                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
3934                         + " to android.provider.Settings.Secure, returning read-only value.");
3935                 return Secure.getStringForUser(resolver, name, userHandle);
3936             }
3937             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
3938                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
3939                         + " to android.provider.Settings.Global, returning read-only value.");
3940                 return Global.getStringForUser(resolver, name, userHandle);
3941             }
3942 
3943             return sNameValueCache.getStringForUser(resolver, name, userHandle);
3944         }
3945 
3946         /**
3947          * Store a name/value pair into the database.
3948          * @param resolver to access the database with
3949          * @param name to store
3950          * @param value to associate with the name
3951          * @return true if the value was set, false on database errors
3952          */
putString(ContentResolver resolver, String name, String value)3953         public static boolean putString(ContentResolver resolver, String name, String value) {
3954             return putStringForUser(resolver, name, value, resolver.getUserId());
3955         }
3956 
3957         /**
3958          * Store a name/value pair into the database. Values written by this method will be
3959          * overridden if a restore happens in the future.
3960          *
3961          * @param resolver to access the database with
3962          * @param name to store
3963          * @param value to associate with the name
3964          *
3965          * @return true if the value was set, false on database errors
3966          *
3967          * @hide
3968          */
3969         @RequiresPermission(Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE)
3970         @SystemApi
putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, boolean overrideableByRestore)3971         public static boolean putString(@NonNull ContentResolver resolver,
3972                 @NonNull String name, @Nullable String value, boolean overrideableByRestore) {
3973             return putStringForUser(resolver, name, value, resolver.getUserId(),
3974                    overrideableByRestore);
3975         }
3976 
3977         /** @hide */
3978         @UnsupportedAppUsage
putStringForUser(ContentResolver resolver, String name, String value, int userHandle)3979         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
3980                 int userHandle) {
3981             return putStringForUser(resolver, name, value, userHandle,
3982                     DEFAULT_OVERRIDEABLE_BY_RESTORE);
3983         }
3984 
putStringForUser(ContentResolver resolver, String name, String value, int userHandle, boolean overrideableByRestore)3985         private static boolean putStringForUser(ContentResolver resolver, String name, String value,
3986                 int userHandle, boolean overrideableByRestore) {
3987             return putStringForUser(resolver, name, value, /* tag= */ null,
3988                     /* makeDefault= */ false, userHandle, overrideableByRestore);
3989         }
3990 
putStringForUser(ContentResolver resolver, String name, String value, String tag, boolean makeDefault, int userHandle, boolean overrideableByRestore)3991         private static boolean putStringForUser(ContentResolver resolver, String name, String value,
3992                 String tag, boolean makeDefault, int userHandle, boolean overrideableByRestore) {
3993             if (LOCAL_LOGV) {
3994                 Log.v(TAG, "System.putString(name=" + name + ", value=" + value + ") for "
3995                         + userHandle);
3996             }
3997             if (MOVED_TO_SECURE.contains(name)) {
3998                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
3999                         + " to android.provider.Settings.Secure, value is unchanged.");
4000                 return false;
4001             }
4002             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
4003                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
4004                         + " to android.provider.Settings.Global, value is unchanged.");
4005                 return false;
4006             }
4007             return sNameValueCache.putStringForUser(resolver, name, value, tag, makeDefault,
4008                     userHandle, overrideableByRestore);
4009         }
4010 
4011         /**
4012          * Construct the content URI for a particular name/value pair,
4013          * useful for monitoring changes with a ContentObserver.
4014          * @param name to look up in the table
4015          * @return the corresponding content URI, or null if not present
4016          */
getUriFor(String name)4017         public static Uri getUriFor(String name) {
4018             if (MOVED_TO_SECURE.contains(name)) {
4019                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
4020                     + " to android.provider.Settings.Secure, returning Secure URI.");
4021                 return Secure.getUriFor(Secure.CONTENT_URI, name);
4022             }
4023             if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
4024                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
4025                         + " to android.provider.Settings.Global, returning read-only global URI.");
4026                 return Global.getUriFor(Global.CONTENT_URI, name);
4027             }
4028             return getUriFor(CONTENT_URI, name);
4029         }
4030 
4031         /**
4032          * Convenience function for retrieving a single system settings value
4033          * as an integer.  Note that internally setting values are always
4034          * stored as strings; this function converts the string to an integer
4035          * for you.  The default value will be returned if the setting is
4036          * not defined or not an integer.
4037          *
4038          * @param cr The ContentResolver to access.
4039          * @param name The name of the setting to retrieve.
4040          * @param def Value to return if the setting is not defined.
4041          *
4042          * @return The setting's current value, or 'def' if it is not defined
4043          * or not a valid integer.
4044          */
getInt(ContentResolver cr, String name, int def)4045         public static int getInt(ContentResolver cr, String name, int def) {
4046             return getIntForUser(cr, name, def, cr.getUserId());
4047         }
4048 
4049         /** @hide */
4050         @UnsupportedAppUsage
getIntForUser(ContentResolver cr, String name, int def, int userHandle)4051         public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
4052             String v = getStringForUser(cr, name, userHandle);
4053             return parseIntSettingWithDefault(v, def);
4054         }
4055 
4056         /**
4057          * Convenience function for retrieving a single system settings value
4058          * as an integer.  Note that internally setting values are always
4059          * stored as strings; this function converts the string to an integer
4060          * for you.
4061          * <p>
4062          * This version does not take a default value.  If the setting has not
4063          * been set, or the string value is not a number,
4064          * it throws {@link SettingNotFoundException}.
4065          *
4066          * @param cr The ContentResolver to access.
4067          * @param name The name of the setting to retrieve.
4068          *
4069          * @throws SettingNotFoundException Thrown if a setting by the given
4070          * name can't be found or the setting value is not an integer.
4071          *
4072          * @return The setting's current value.
4073          */
getInt(ContentResolver cr, String name)4074         public static int getInt(ContentResolver cr, String name)
4075                 throws SettingNotFoundException {
4076             return getIntForUser(cr, name, cr.getUserId());
4077         }
4078 
4079         /** @hide */
4080         @UnsupportedAppUsage
getIntForUser(ContentResolver cr, String name, int userHandle)4081         public static int getIntForUser(ContentResolver cr, String name, int userHandle)
4082                 throws SettingNotFoundException {
4083             String v = getStringForUser(cr, name, userHandle);
4084             return parseIntSetting(v, name);
4085         }
4086 
4087         /**
4088          * Convenience function for updating a single settings value as an
4089          * integer. This will either create a new entry in the table if the
4090          * given name does not exist, or modify the value of the existing row
4091          * with that name.  Note that internally setting values are always
4092          * stored as strings, so this function converts the given value to a
4093          * string before storing it.
4094          *
4095          * @param cr The ContentResolver to access.
4096          * @param name The name of the setting to modify.
4097          * @param value The new value for the setting.
4098          * @return true if the value was set, false on database errors
4099          */
putInt(ContentResolver cr, String name, int value)4100         public static boolean putInt(ContentResolver cr, String name, int value) {
4101             return putIntForUser(cr, name, value, cr.getUserId());
4102         }
4103 
4104         /** @hide */
4105         @UnsupportedAppUsage
putIntForUser(ContentResolver cr, String name, int value, int userHandle)4106         public static boolean putIntForUser(ContentResolver cr, String name, int value,
4107                 int userHandle) {
4108             return putStringForUser(cr, name, Integer.toString(value), userHandle);
4109         }
4110 
4111         /**
4112          * Convenience function for retrieving a single system settings value
4113          * as a {@code long}.  Note that internally setting values are always
4114          * stored as strings; this function converts the string to a {@code long}
4115          * for you.  The default value will be returned if the setting is
4116          * not defined or not a {@code long}.
4117          *
4118          * @param cr The ContentResolver to access.
4119          * @param name The name of the setting to retrieve.
4120          * @param def Value to return if the setting is not defined.
4121          *
4122          * @return The setting's current value, or 'def' if it is not defined
4123          * or not a valid {@code long}.
4124          */
getLong(ContentResolver cr, String name, long def)4125         public static long getLong(ContentResolver cr, String name, long def) {
4126             return getLongForUser(cr, name, def, cr.getUserId());
4127         }
4128 
4129         /** @hide */
getLongForUser(ContentResolver cr, String name, long def, int userHandle)4130         public static long getLongForUser(ContentResolver cr, String name, long def,
4131                 int userHandle) {
4132             String v = getStringForUser(cr, name, userHandle);
4133             return parseLongSettingWithDefault(v, def);
4134         }
4135 
4136         /**
4137          * Convenience function for retrieving a single system settings value
4138          * as a {@code long}.  Note that internally setting values are always
4139          * stored as strings; this function converts the string to a {@code long}
4140          * for you.
4141          * <p>
4142          * This version does not take a default value.  If the setting has not
4143          * been set, or the string value is not a number,
4144          * it throws {@link SettingNotFoundException}.
4145          *
4146          * @param cr The ContentResolver to access.
4147          * @param name The name of the setting to retrieve.
4148          *
4149          * @return The setting's current value.
4150          * @throws SettingNotFoundException Thrown if a setting by the given
4151          * name can't be found or the setting value is not an integer.
4152          */
getLong(ContentResolver cr, String name)4153         public static long getLong(ContentResolver cr, String name)
4154                 throws SettingNotFoundException {
4155             return getLongForUser(cr, name, cr.getUserId());
4156         }
4157 
4158         /** @hide */
getLongForUser(ContentResolver cr, String name, int userHandle)4159         public static long getLongForUser(ContentResolver cr, String name, int userHandle)
4160                 throws SettingNotFoundException {
4161             String v = getStringForUser(cr, name, userHandle);
4162             return parseLongSetting(v, name);
4163         }
4164 
4165         /**
4166          * Convenience function for updating a single settings value as a long
4167          * integer. This will either create a new entry in the table if the
4168          * given name does not exist, or modify the value of the existing row
4169          * with that name.  Note that internally setting values are always
4170          * stored as strings, so this function converts the given value to a
4171          * string before storing it.
4172          *
4173          * @param cr The ContentResolver to access.
4174          * @param name The name of the setting to modify.
4175          * @param value The new value for the setting.
4176          * @return true if the value was set, false on database errors
4177          */
putLong(ContentResolver cr, String name, long value)4178         public static boolean putLong(ContentResolver cr, String name, long value) {
4179             return putLongForUser(cr, name, value, cr.getUserId());
4180         }
4181 
4182         /** @hide */
putLongForUser(ContentResolver cr, String name, long value, int userHandle)4183         public static boolean putLongForUser(ContentResolver cr, String name, long value,
4184                 int userHandle) {
4185             return putStringForUser(cr, name, Long.toString(value), userHandle);
4186         }
4187 
4188         /**
4189          * Convenience function for retrieving a single system settings value
4190          * as a floating point number.  Note that internally setting values are
4191          * always stored as strings; this function converts the string to an
4192          * float for you. The default value will be returned if the setting
4193          * is not defined or not a valid float.
4194          *
4195          * @param cr The ContentResolver to access.
4196          * @param name The name of the setting to retrieve.
4197          * @param def Value to return if the setting is not defined.
4198          *
4199          * @return The setting's current value, or 'def' if it is not defined
4200          * or not a valid float.
4201          */
getFloat(ContentResolver cr, String name, float def)4202         public static float getFloat(ContentResolver cr, String name, float def) {
4203             return getFloatForUser(cr, name, def, cr.getUserId());
4204         }
4205 
4206         /** @hide */
getFloatForUser(ContentResolver cr, String name, float def, int userHandle)4207         public static float getFloatForUser(ContentResolver cr, String name, float def,
4208                 int userHandle) {
4209             String v = getStringForUser(cr, name, userHandle);
4210             return parseFloatSettingWithDefault(v, def);
4211         }
4212 
4213         /**
4214          * Convenience function for retrieving a single system settings value
4215          * as a float.  Note that internally setting values are always
4216          * stored as strings; this function converts the string to a float
4217          * for you.
4218          * <p>
4219          * This version does not take a default value.  If the setting has not
4220          * been set, or the string value is not a number,
4221          * it throws {@link SettingNotFoundException}.
4222          *
4223          * @param cr The ContentResolver to access.
4224          * @param name The name of the setting to retrieve.
4225          *
4226          * @throws SettingNotFoundException Thrown if a setting by the given
4227          * name can't be found or the setting value is not a float.
4228          *
4229          * @return The setting's current value.
4230          */
getFloat(ContentResolver cr, String name)4231         public static float getFloat(ContentResolver cr, String name)
4232                 throws SettingNotFoundException {
4233             return getFloatForUser(cr, name, cr.getUserId());
4234         }
4235 
4236         /** @hide */
getFloatForUser(ContentResolver cr, String name, int userHandle)4237         public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
4238                 throws SettingNotFoundException {
4239             String v = getStringForUser(cr, name, userHandle);
4240             return parseFloatSetting(v, name);
4241         }
4242 
4243         /**
4244          * Convenience function for updating a single settings value as a
4245          * floating point number. This will either create a new entry in the
4246          * table if the given name does not exist, or modify the value of the
4247          * existing row with that name.  Note that internally setting values
4248          * are always stored as strings, so this function converts the given
4249          * value to a string before storing it.
4250          *
4251          * @param cr The ContentResolver to access.
4252          * @param name The name of the setting to modify.
4253          * @param value The new value for the setting.
4254          * @return true if the value was set, false on database errors
4255          */
putFloat(ContentResolver cr, String name, float value)4256         public static boolean putFloat(ContentResolver cr, String name, float value) {
4257             return putFloatForUser(cr, name, value, cr.getUserId());
4258         }
4259 
4260         /** @hide */
putFloatForUser(ContentResolver cr, String name, float value, int userHandle)4261         public static boolean putFloatForUser(ContentResolver cr, String name, float value,
4262                 int userHandle) {
4263             return putStringForUser(cr, name, Float.toString(value), userHandle);
4264         }
4265 
4266         /**
4267          * Convenience function to read all of the current
4268          * configuration-related settings into a
4269          * {@link Configuration} object.
4270          *
4271          * @param cr The ContentResolver to access.
4272          * @param outConfig Where to place the configuration settings.
4273          */
getConfiguration(ContentResolver cr, Configuration outConfig)4274         public static void getConfiguration(ContentResolver cr, Configuration outConfig) {
4275             adjustConfigurationForUser(cr, outConfig, cr.getUserId(),
4276                     false /* updateSettingsIfEmpty */);
4277         }
4278 
4279         /** @hide */
adjustConfigurationForUser(ContentResolver cr, Configuration outConfig, int userHandle, boolean updateSettingsIfEmpty)4280         public static void adjustConfigurationForUser(ContentResolver cr, Configuration outConfig,
4281                 int userHandle, boolean updateSettingsIfEmpty) {
4282             outConfig.fontScale = Settings.System.getFloatForUser(
4283                     cr, FONT_SCALE, DEFAULT_FONT_SCALE, userHandle);
4284             if (outConfig.fontScale < 0) {
4285                 outConfig.fontScale = DEFAULT_FONT_SCALE;
4286             }
4287             outConfig.fontWeightAdjustment = Settings.Secure.getIntForUser(
4288                     cr, Settings.Secure.FONT_WEIGHT_ADJUSTMENT, DEFAULT_FONT_WEIGHT, userHandle);
4289 
4290             final String localeValue =
4291                     Settings.System.getStringForUser(cr, SYSTEM_LOCALES, userHandle);
4292             if (localeValue != null) {
4293                 outConfig.setLocales(LocaleList.forLanguageTags(localeValue));
4294             } else {
4295                 // Do not update configuration with emtpy settings since we need to take over the
4296                 // locale list of previous user if the settings value is empty. This happens when a
4297                 // new user is created.
4298 
4299                 if (updateSettingsIfEmpty) {
4300                     // Make current configuration persistent. This is necessary the first time a
4301                     // user log in. At the first login, the configuration settings are empty, so we
4302                     // need to store the adjusted configuration as the initial settings.
4303                     Settings.System.putStringForUser(
4304                             cr, SYSTEM_LOCALES, outConfig.getLocales().toLanguageTags(),
4305                             userHandle, DEFAULT_OVERRIDEABLE_BY_RESTORE);
4306                 }
4307             }
4308         }
4309 
4310         /**
4311          * @hide Erase the fields in the Configuration that should be applied
4312          * by the settings.
4313          */
clearConfiguration(Configuration inoutConfig)4314         public static void clearConfiguration(Configuration inoutConfig) {
4315             inoutConfig.fontScale = 0;
4316             if (!inoutConfig.userSetLocale && !inoutConfig.getLocales().isEmpty()) {
4317                 inoutConfig.clearLocales();
4318             }
4319             inoutConfig.fontWeightAdjustment = Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED;
4320         }
4321 
4322         /**
4323          * Convenience function to write a batch of configuration-related
4324          * settings from a {@link Configuration} object.
4325          *
4326          * @param cr The ContentResolver to access.
4327          * @param config The settings to write.
4328          * @return true if the values were set, false on database errors
4329          */
putConfiguration(ContentResolver cr, Configuration config)4330         public static boolean putConfiguration(ContentResolver cr, Configuration config) {
4331             return putConfigurationForUser(cr, config, cr.getUserId());
4332         }
4333 
4334         /** @hide */
putConfigurationForUser(ContentResolver cr, Configuration config, int userHandle)4335         public static boolean putConfigurationForUser(ContentResolver cr, Configuration config,
4336                 int userHandle) {
4337             return Settings.System.putFloatForUser(cr, FONT_SCALE, config.fontScale, userHandle) &&
4338                     Settings.System.putStringForUser(
4339                             cr, SYSTEM_LOCALES, config.getLocales().toLanguageTags(), userHandle,
4340                             DEFAULT_OVERRIDEABLE_BY_RESTORE);
4341         }
4342 
4343         /**
4344          * Convenience function for checking if settings should be overwritten with config changes.
4345          * @see #putConfigurationForUser(ContentResolver, Configuration, int)
4346          * @hide
4347          */
hasInterestingConfigurationChanges(int changes)4348         public static boolean hasInterestingConfigurationChanges(int changes) {
4349             return (changes & ActivityInfo.CONFIG_FONT_SCALE) != 0 ||
4350                     (changes & ActivityInfo.CONFIG_LOCALE) != 0;
4351         }
4352 
4353         /** @deprecated - Do not use */
4354         @Deprecated
getShowGTalkServiceStatus(ContentResolver cr)4355         public static boolean getShowGTalkServiceStatus(ContentResolver cr) {
4356             return getShowGTalkServiceStatusForUser(cr, cr.getUserId());
4357         }
4358 
4359         /**
4360          * @hide
4361          * @deprecated - Do not use
4362          */
4363         @Deprecated
getShowGTalkServiceStatusForUser(ContentResolver cr, int userHandle)4364         public static boolean getShowGTalkServiceStatusForUser(ContentResolver cr,
4365                 int userHandle) {
4366             return getIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, 0, userHandle) != 0;
4367         }
4368 
4369         /** @deprecated - Do not use */
4370         @Deprecated
setShowGTalkServiceStatus(ContentResolver cr, boolean flag)4371         public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
4372             setShowGTalkServiceStatusForUser(cr, flag, cr.getUserId());
4373         }
4374 
4375         /**
4376          * @hide
4377          * @deprecated - Do not use
4378          */
4379         @Deprecated
setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag, int userHandle)4380         public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag,
4381                 int userHandle) {
4382             putIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, flag ? 1 : 0, userHandle);
4383         }
4384 
4385         /**
4386          * @deprecated Use {@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} instead
4387          */
4388         @Deprecated
4389         public static final String STAY_ON_WHILE_PLUGGED_IN = Global.STAY_ON_WHILE_PLUGGED_IN;
4390 
4391         /**
4392          * What happens when the user presses the end call button if they're not
4393          * on a call.<br/>
4394          * <b>Values:</b><br/>
4395          * 0 - The end button does nothing.<br/>
4396          * 1 - The end button goes to the home screen.<br/>
4397          * 2 - The end button puts the device to sleep and locks the keyguard.<br/>
4398          * 3 - The end button goes to the home screen.  If the user is already on the
4399          * home screen, it puts the device to sleep.
4400          */
4401         @Readable
4402         public static final String END_BUTTON_BEHAVIOR = "end_button_behavior";
4403 
4404         /**
4405          * END_BUTTON_BEHAVIOR value for "go home".
4406          * @hide
4407          */
4408         public static final int END_BUTTON_BEHAVIOR_HOME = 0x1;
4409 
4410         /**
4411          * END_BUTTON_BEHAVIOR value for "go to sleep".
4412          * @hide
4413          */
4414         public static final int END_BUTTON_BEHAVIOR_SLEEP = 0x2;
4415 
4416         /**
4417          * END_BUTTON_BEHAVIOR default value.
4418          * @hide
4419          */
4420         public static final int END_BUTTON_BEHAVIOR_DEFAULT = END_BUTTON_BEHAVIOR_SLEEP;
4421 
4422         /**
4423          * Is advanced settings mode turned on. 0 == no, 1 == yes
4424          * @hide
4425          */
4426         @Readable
4427         public static final String ADVANCED_SETTINGS = "advanced_settings";
4428 
4429         /**
4430          * ADVANCED_SETTINGS default value.
4431          * @hide
4432          */
4433         public static final int ADVANCED_SETTINGS_DEFAULT = 0;
4434 
4435         /**
4436          * If the triple press gesture for toggling accessibility is enabled.
4437          * Set to 1 for true and 0 for false.
4438          *
4439          * This setting is used only internally.
4440          * @hide
4441          */
4442         public static final String WEAR_ACCESSIBILITY_GESTURE_ENABLED
4443                 = "wear_accessibility_gesture_enabled";
4444 
4445         /**
4446          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
4447          */
4448         @Deprecated
4449         public static final String AIRPLANE_MODE_ON = Global.AIRPLANE_MODE_ON;
4450 
4451         /**
4452          * @deprecated Use {@link android.provider.Settings.Global#RADIO_BLUETOOTH} instead
4453          */
4454         @Deprecated
4455         public static final String RADIO_BLUETOOTH = Global.RADIO_BLUETOOTH;
4456 
4457         /**
4458          * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIFI} instead
4459          */
4460         @Deprecated
4461         public static final String RADIO_WIFI = Global.RADIO_WIFI;
4462 
4463         /**
4464          * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIMAX} instead
4465          * {@hide}
4466          */
4467         @Deprecated
4468         public static final String RADIO_WIMAX = Global.RADIO_WIMAX;
4469 
4470         /**
4471          * @deprecated Use {@link android.provider.Settings.Global#RADIO_CELL} instead
4472          */
4473         @Deprecated
4474         public static final String RADIO_CELL = Global.RADIO_CELL;
4475 
4476         /**
4477          * @deprecated Use {@link android.provider.Settings.Global#RADIO_NFC} instead
4478          */
4479         @Deprecated
4480         public static final String RADIO_NFC = Global.RADIO_NFC;
4481 
4482         /**
4483          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_RADIOS} instead
4484          */
4485         @Deprecated
4486         public static final String AIRPLANE_MODE_RADIOS = Global.AIRPLANE_MODE_RADIOS;
4487 
4488         /**
4489          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_TOGGLEABLE_RADIOS} instead
4490          *
4491          * {@hide}
4492          */
4493         @Deprecated
4494         @UnsupportedAppUsage
4495         public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS =
4496                 Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS;
4497 
4498         /**
4499          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY} instead
4500          */
4501         @Deprecated
4502         public static final String WIFI_SLEEP_POLICY = Global.WIFI_SLEEP_POLICY;
4503 
4504         /**
4505          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_DEFAULT} instead
4506          */
4507         @Deprecated
4508         public static final int WIFI_SLEEP_POLICY_DEFAULT = Global.WIFI_SLEEP_POLICY_DEFAULT;
4509 
4510         /**
4511          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED} instead
4512          */
4513         @Deprecated
4514         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED =
4515                 Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED;
4516 
4517         /**
4518          * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER} instead
4519          */
4520         @Deprecated
4521         public static final int WIFI_SLEEP_POLICY_NEVER = Global.WIFI_SLEEP_POLICY_NEVER;
4522 
4523         /**
4524          * @deprecated Use {@link android.provider.Settings.Global#MODE_RINGER} instead
4525          */
4526         @Deprecated
4527         public static final String MODE_RINGER = Global.MODE_RINGER;
4528 
4529         /**
4530          * Whether to use static IP and other static network attributes.
4531          * <p>
4532          * Set to 1 for true and 0 for false.
4533          *
4534          * @deprecated Use {@link WifiManager} instead
4535          */
4536         @Deprecated
4537         @Readable
4538         public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip";
4539 
4540         /**
4541          * The static IP address.
4542          * <p>
4543          * Example: "192.168.1.51"
4544          *
4545          * @deprecated Use {@link WifiManager} instead
4546          */
4547         @Deprecated
4548         @Readable
4549         public static final String WIFI_STATIC_IP = "wifi_static_ip";
4550 
4551         /**
4552          * If using static IP, the gateway's IP address.
4553          * <p>
4554          * Example: "192.168.1.1"
4555          *
4556          * @deprecated Use {@link WifiManager} instead
4557          */
4558         @Deprecated
4559         @Readable
4560         public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway";
4561 
4562         /**
4563          * If using static IP, the net mask.
4564          * <p>
4565          * Example: "255.255.255.0"
4566          *
4567          * @deprecated Use {@link WifiManager} instead
4568          */
4569         @Deprecated
4570         @Readable
4571         public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask";
4572 
4573         /**
4574          * If using static IP, the primary DNS's IP address.
4575          * <p>
4576          * Example: "192.168.1.1"
4577          *
4578          * @deprecated Use {@link WifiManager} instead
4579          */
4580         @Deprecated
4581         @Readable
4582         public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1";
4583 
4584         /**
4585          * If using static IP, the secondary DNS's IP address.
4586          * <p>
4587          * Example: "192.168.1.2"
4588          *
4589          * @deprecated Use {@link WifiManager} instead
4590          */
4591         @Deprecated
4592         @Readable
4593         public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2";
4594 
4595         /**
4596          * Determines whether remote devices may discover and/or connect to
4597          * this device.
4598          * <P>Type: INT</P>
4599          * 2 -- discoverable and connectable
4600          * 1 -- connectable but not discoverable
4601          * 0 -- neither connectable nor discoverable
4602          */
4603         @Readable
4604         public static final String BLUETOOTH_DISCOVERABILITY =
4605             "bluetooth_discoverability";
4606 
4607         /**
4608          * Bluetooth discoverability timeout.  If this value is nonzero, then
4609          * Bluetooth becomes discoverable for a certain number of seconds,
4610          * after which is becomes simply connectable.  The value is in seconds.
4611          */
4612         @Readable
4613         public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT =
4614             "bluetooth_discoverability_timeout";
4615 
4616         /**
4617          * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_ENABLED}
4618          * instead
4619          */
4620         @Deprecated
4621         public static final String LOCK_PATTERN_ENABLED = Secure.LOCK_PATTERN_ENABLED;
4622 
4623         /**
4624          * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_VISIBLE}
4625          * instead
4626          */
4627         @Deprecated
4628         public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
4629 
4630         /**
4631          * @deprecated Use
4632          * {@link android.provider.Settings.Secure#LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED}
4633          * instead
4634          */
4635         @Deprecated
4636         public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED =
4637             "lock_pattern_tactile_feedback_enabled";
4638 
4639         /**
4640          * A formatted string of the next alarm that is set, or the empty string
4641          * if there is no alarm set.
4642          *
4643          * @deprecated Use {@link android.app.AlarmManager#getNextAlarmClock()}.
4644          */
4645         @Deprecated
4646         @Readable
4647         public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
4648 
4649         /**
4650          * Scaling factor for fonts, float.
4651          */
4652         @Readable
4653         public static final String FONT_SCALE = "font_scale";
4654 
4655         /**
4656          * The serialized system locale value.
4657          *
4658          * Do not use this value directory.
4659          * To get system locale, use {@link LocaleList#getDefault} instead.
4660          * To update system locale, use {@link com.android.internal.app.LocalePicker#updateLocales}
4661          * instead.
4662          * @hide
4663          */
4664         @Readable
4665         public static final String SYSTEM_LOCALES = "system_locales";
4666 
4667 
4668         /**
4669          * Name of an application package to be debugged.
4670          *
4671          * @deprecated Use {@link Global#DEBUG_APP} instead
4672          */
4673         @Deprecated
4674         public static final String DEBUG_APP = Global.DEBUG_APP;
4675 
4676         /**
4677          * If 1, when launching DEBUG_APP it will wait for the debugger before
4678          * starting user code.  If 0, it will run normally.
4679          *
4680          * @deprecated Use {@link Global#WAIT_FOR_DEBUGGER} instead
4681          */
4682         @Deprecated
4683         public static final String WAIT_FOR_DEBUGGER = Global.WAIT_FOR_DEBUGGER;
4684 
4685         /**
4686          * Whether or not to dim the screen. 0=no  1=yes
4687          * @deprecated This setting is no longer used.
4688          */
4689         @Deprecated
4690         @Readable
4691         public static final String DIM_SCREEN = "dim_screen";
4692 
4693         /**
4694          * The display color mode.
4695          * @hide
4696          */
4697         @Readable
4698         public static final String DISPLAY_COLOR_MODE = "display_color_mode";
4699 
4700         /**
4701          * Hint to decide whether restored vendor color modes are compatible with the new device. If
4702          * unset or a match is not made, only the standard color modes will be restored.
4703          * @hide
4704          */
4705         public static final String DISPLAY_COLOR_MODE_VENDOR_HINT =
4706                 "display_color_mode_vendor_hint";
4707 
4708         /**
4709          * The user selected min refresh rate in frames per second.
4710          *
4711          * If this isn't set, 0 will be used.
4712          * @hide
4713          */
4714         @Readable
4715         public static final String MIN_REFRESH_RATE = "min_refresh_rate";
4716 
4717         /**
4718          * The user selected peak refresh rate in frames per second.
4719          *
4720          * If this isn't set, the system falls back to a device specific default.
4721          * @hide
4722          */
4723         @Readable
4724         public static final String PEAK_REFRESH_RATE = "peak_refresh_rate";
4725 
4726         /**
4727          * Control lock behavior on fold
4728          *
4729          * If this isn't set, the system falls back to a device specific default.
4730          * @hide
4731          */
4732         @Readable
4733         public static final String FOLD_LOCK_BEHAVIOR = "fold_lock_behavior_setting";
4734 
4735         /**
4736          * The amount of time in milliseconds before the device goes to sleep or begins
4737          * to dream after a period of inactivity.  This value is also known as the
4738          * user activity timeout period since the screen isn't necessarily turned off
4739          * when it expires.
4740          *
4741          * <p>
4742          * This value is bounded by maximum timeout set by
4743          * {@link android.app.admin.DevicePolicyManager#setMaximumTimeToLock(ComponentName, long)}.
4744          */
4745         @Readable
4746         public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
4747 
4748         /**
4749          * The screen backlight brightness between 0 and 255.
4750          */
4751         @Readable
4752         public static final String SCREEN_BRIGHTNESS = "screen_brightness";
4753 
4754         /**
4755          * The screen backlight brightness between 0.0f and 1.0f.
4756          * @hide
4757          */
4758         @Readable
4759         public static final String SCREEN_BRIGHTNESS_FLOAT = "screen_brightness_float";
4760 
4761         /**
4762          * Control whether to enable automatic brightness mode.
4763          */
4764         @Readable
4765         public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
4766 
4767         /**
4768          * Adjustment to auto-brightness to make it generally more (>0.0 <1.0)
4769          * or less (<0.0 >-1.0) bright.
4770          * @hide
4771          */
4772         @UnsupportedAppUsage
4773         @Readable
4774         public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj";
4775 
4776         /**
4777          * SCREEN_BRIGHTNESS_MODE value for manual mode.
4778          */
4779         public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0;
4780 
4781         /**
4782          * SCREEN_BRIGHTNESS_MODE value for automatic mode.
4783          */
4784         public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1;
4785 
4786         /**
4787          * Control whether to enable adaptive sleep mode.
4788          * @deprecated Use {@link android.provider.Settings.Secure#ADAPTIVE_SLEEP} instead.
4789          * @hide
4790          */
4791         @Deprecated
4792         @Readable
4793         public static final String ADAPTIVE_SLEEP = "adaptive_sleep";
4794 
4795         /**
4796          * Control whether the process CPU usage meter should be shown.
4797          *
4798          * @deprecated This functionality is no longer available as of
4799          * {@link android.os.Build.VERSION_CODES#N_MR1}.
4800          */
4801         @Deprecated
4802         public static final String SHOW_PROCESSES = Global.SHOW_PROCESSES;
4803 
4804         /**
4805          * If 1, the activity manager will aggressively finish activities and
4806          * processes as soon as they are no longer needed.  If 0, the normal
4807          * extended lifetime is used.
4808          *
4809          * @deprecated Use {@link Global#ALWAYS_FINISH_ACTIVITIES} instead
4810          */
4811         @Deprecated
4812         public static final String ALWAYS_FINISH_ACTIVITIES = Global.ALWAYS_FINISH_ACTIVITIES;
4813 
4814         /**
4815          * Determines which streams are affected by ringer and zen mode changes. The
4816          * stream type's bit should be set to 1 if it should be muted when going
4817          * into an inaudible ringer mode.
4818          */
4819         @Readable
4820         public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
4821 
4822         /**
4823           * Determines which streams are affected by mute. The
4824           * stream type's bit should be set to 1 if it should be muted when a mute request
4825           * is received.
4826           */
4827         @Readable
4828         public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
4829 
4830         /**
4831          * Whether vibrate is on for different events. This is used internally,
4832          * changing this value will not change the vibrate. See AudioManager.
4833          */
4834         @Readable
4835         public static final String VIBRATE_ON = "vibrate_on";
4836 
4837         /**
4838          * Whether applying ramping ringer on incoming phone call ringtone.
4839          * <p>1 = apply ramping ringer
4840          * <p>0 = do not apply ramping ringer
4841          * @hide
4842          */
4843         @Readable
4844         public static final String APPLY_RAMPING_RINGER = "apply_ramping_ringer";
4845 
4846         /**
4847          * If 1, redirects the system vibrator to all currently attached input devices
4848          * that support vibration.  If there are no such input devices, then the system
4849          * vibrator is used instead.
4850          * If 0, does not register the system vibrator.
4851          *
4852          * This setting is mainly intended to provide a compatibility mechanism for
4853          * applications that only know about the system vibrator and do not use the
4854          * input device vibrator API.
4855          *
4856          * @hide
4857          */
4858         @Readable
4859         public static final String VIBRATE_INPUT_DEVICES = "vibrate_input_devices";
4860 
4861         /**
4862          * The intensity of alarm vibrations, if configurable.
4863          *
4864          * Not all devices are capable of changing their vibration intensity; on these devices
4865          * there will likely be no difference between the various vibration intensities except for
4866          * intensity 0 (off) and the rest.
4867          *
4868          * <b>Values:</b><br/>
4869          * 0 - Vibration is disabled<br/>
4870          * 1 - Weak vibrations<br/>
4871          * 2 - Medium vibrations<br/>
4872          * 3 - Strong vibrations
4873          * @hide
4874          */
4875         public static final String ALARM_VIBRATION_INTENSITY =
4876                 "alarm_vibration_intensity";
4877 
4878         /**
4879          * The intensity of media vibrations, if configurable.
4880          *
4881          * This includes any vibration that is part of media, such as music, movie, soundtrack,
4882          * game or animations.
4883          *
4884          * Not all devices are capable of changing their vibration intensity; on these devices
4885          * there will likely be no difference between the various vibration intensities except for
4886          * intensity 0 (off) and the rest.
4887          *
4888          * <b>Values:</b><br/>
4889          * 0 - Vibration is disabled<br/>
4890          * 1 - Weak vibrations<br/>
4891          * 2 - Medium vibrations<br/>
4892          * 3 - Strong vibrations
4893          * @hide
4894          */
4895         public static final String MEDIA_VIBRATION_INTENSITY =
4896                 "media_vibration_intensity";
4897 
4898         /**
4899          * The intensity of notification vibrations, if configurable.
4900          *
4901          * Not all devices are capable of changing their vibration intensity; on these devices
4902          * there will likely be no difference between the various vibration intensities except for
4903          * intensity 0 (off) and the rest.
4904          *
4905          * <b>Values:</b><br/>
4906          * 0 - Vibration is disabled<br/>
4907          * 1 - Weak vibrations<br/>
4908          * 2 - Medium vibrations<br/>
4909          * 3 - Strong vibrations
4910          * @hide
4911          */
4912         @Readable
4913         public static final String NOTIFICATION_VIBRATION_INTENSITY =
4914                 "notification_vibration_intensity";
4915 
4916         /**
4917          * The intensity of ringtone vibrations, if configurable.
4918          *
4919          * Not all devices are capable of changing their vibration intensity; on these devices
4920          * there will likely be no difference between the various vibration intensities except for
4921          * intensity 0 (off) and the rest.
4922          *
4923          * <b>Values:</b><br/>
4924          * 0 - Vibration is disabled<br/>
4925          * 1 - Weak vibrations<br/>
4926          * 2 - Medium vibrations<br/>
4927          * 3 - Strong vibrations
4928          * @hide
4929          */
4930         @Readable
4931         public static final String RING_VIBRATION_INTENSITY =
4932                 "ring_vibration_intensity";
4933 
4934         /**
4935          * The intensity of haptic feedback vibrations, if configurable.
4936          *
4937          * Not all devices are capable of changing their feedback intensity; on these devices
4938          * there will likely be no difference between the various vibration intensities except for
4939          * intensity 0 (off) and the rest.
4940          *
4941          * <b>Values:</b><br/>
4942          * 0 - Vibration is disabled<br/>
4943          * 1 - Weak vibrations<br/>
4944          * 2 - Medium vibrations<br/>
4945          * 3 - Strong vibrations
4946          * @hide
4947          */
4948         @Readable
4949         public static final String HAPTIC_FEEDBACK_INTENSITY =
4950                 "haptic_feedback_intensity";
4951 
4952         /**
4953          * The intensity of haptic feedback vibrations for interaction with hardware components from
4954          * the device, like buttons and sensors, if configurable.
4955          *
4956          * Not all devices are capable of changing their feedback intensity; on these devices
4957          * there will likely be no difference between the various vibration intensities except for
4958          * intensity 0 (off) and the rest.
4959          *
4960          * <b>Values:</b><br/>
4961          * 0 - Vibration is disabled<br/>
4962          * 1 - Weak vibrations<br/>
4963          * 2 - Medium vibrations<br/>
4964          * 3 - Strong vibrations
4965          * @hide
4966          */
4967         public static final String HARDWARE_HAPTIC_FEEDBACK_INTENSITY =
4968                 "hardware_haptic_feedback_intensity";
4969 
4970         /**
4971          * Ringer volume. This is used internally, changing this value will not
4972          * change the volume. See AudioManager.
4973          *
4974          * @removed Not used by anything since API 2.
4975          */
4976         @Readable
4977         public static final String VOLUME_RING = "volume_ring";
4978 
4979         /**
4980          * System/notifications volume. This is used internally, changing this
4981          * value will not change the volume. See AudioManager.
4982          *
4983          * @removed Not used by anything since API 2.
4984          */
4985         @Readable
4986         public static final String VOLUME_SYSTEM = "volume_system";
4987 
4988         /**
4989          * Voice call volume. This is used internally, changing this value will
4990          * not change the volume. See AudioManager.
4991          *
4992          * @removed Not used by anything since API 2.
4993          */
4994         @Readable
4995         public static final String VOLUME_VOICE = "volume_voice";
4996 
4997         /**
4998          * Music/media/gaming volume. This is used internally, changing this
4999          * value will not change the volume. See AudioManager.
5000          *
5001          * @removed Not used by anything since API 2.
5002          */
5003         @Readable
5004         public static final String VOLUME_MUSIC = "volume_music";
5005 
5006         /**
5007          * Alarm volume. This is used internally, changing this
5008          * value will not change the volume. See AudioManager.
5009          *
5010          * @removed Not used by anything since API 2.
5011          */
5012         @Readable
5013         public static final String VOLUME_ALARM = "volume_alarm";
5014 
5015         /**
5016          * Notification volume. This is used internally, changing this
5017          * value will not change the volume. See AudioManager.
5018          *
5019          * @removed Not used by anything since API 2.
5020          */
5021         @Readable
5022         public static final String VOLUME_NOTIFICATION = "volume_notification";
5023 
5024         /**
5025          * Bluetooth Headset volume. This is used internally, changing this value will
5026          * not change the volume. See AudioManager.
5027          *
5028          * @removed Not used by anything since API 2.
5029          */
5030         @Readable
5031         public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
5032 
5033         /**
5034          * @hide
5035          * Acessibility volume. This is used internally, changing this
5036          * value will not change the volume.
5037          */
5038         @Readable
5039         public static final String VOLUME_ACCESSIBILITY = "volume_a11y";
5040 
5041         /**
5042          * @hide
5043          * Volume index for virtual assistant.
5044          */
5045         @Readable
5046         public static final String VOLUME_ASSISTANT = "volume_assistant";
5047 
5048         /**
5049          * Master volume (float in the range 0.0f to 1.0f).
5050          *
5051          * @hide
5052          */
5053         @Readable
5054         public static final String VOLUME_MASTER = "volume_master";
5055 
5056         /**
5057          * Master mono (int 1 = mono, 0 = normal).
5058          *
5059          * @hide
5060          */
5061         @UnsupportedAppUsage
5062         @Readable
5063         public static final String MASTER_MONO = "master_mono";
5064 
5065         /**
5066          * Master balance (float -1.f = 100% left, 0.f = dead center, 1.f = 100% right).
5067          *
5068          * @hide
5069          */
5070         @Readable
5071         public static final String MASTER_BALANCE = "master_balance";
5072 
5073         /**
5074          * Whether the notifications should use the ring volume (value of 1) or
5075          * a separate notification volume (value of 0). In most cases, users
5076          * will have this enabled so the notification and ringer volumes will be
5077          * the same. However, power users can disable this and use the separate
5078          * notification volume control.
5079          * <p>
5080          * Note: This is a one-off setting that will be removed in the future
5081          * when there is profile support. For this reason, it is kept hidden
5082          * from the public APIs.
5083          *
5084          * @hide
5085          * @deprecated
5086          */
5087         @Deprecated
5088         @Readable
5089         public static final String NOTIFICATIONS_USE_RING_VOLUME =
5090             "notifications_use_ring_volume";
5091 
5092         /**
5093          * Whether silent mode should allow vibration feedback. This is used
5094          * internally in AudioService and the Sound settings activity to
5095          * coordinate decoupling of vibrate and silent modes. This setting
5096          * will likely be removed in a future release with support for
5097          * audio/vibe feedback profiles.
5098          *
5099          * Not used anymore. On devices with vibrator, the user explicitly selects
5100          * silent or vibrate mode.
5101          * Kept for use by legacy database upgrade code in DatabaseHelper.
5102          * @hide
5103          */
5104         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5105         @Readable
5106         public static final String VIBRATE_IN_SILENT = "vibrate_in_silent";
5107 
5108         /**
5109          * The mapping of stream type (integer) to its setting.
5110          *
5111          * @removed  Not used by anything since API 2.
5112          */
5113         public static final String[] VOLUME_SETTINGS = {
5114             VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
5115             VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO
5116         };
5117 
5118         /**
5119          * @hide
5120          * The mapping of stream type (integer) to its setting.
5121          * Unlike the VOLUME_SETTINGS array, this one contains as many entries as
5122          * AudioSystem.NUM_STREAM_TYPES, and has empty strings for stream types whose volumes
5123          * are never persisted.
5124          */
5125         public static final String[] VOLUME_SETTINGS_INT = {
5126                 VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
5127                 VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO,
5128                 "" /*STREAM_SYSTEM_ENFORCED, no setting for this stream*/,
5129                 "" /*STREAM_DTMF, no setting for this stream*/,
5130                 "" /*STREAM_TTS, no setting for this stream*/,
5131                 VOLUME_ACCESSIBILITY, VOLUME_ASSISTANT
5132             };
5133 
5134         /**
5135          * Appended to various volume related settings to record the previous
5136          * values before they the settings were affected by a silent/vibrate
5137          * ringer mode change.
5138          *
5139          * @removed  Not used by anything since API 2.
5140          */
5141         @Readable
5142         public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
5143 
5144         /**
5145          * Persistent store for the system-wide default ringtone URI.
5146          * <p>
5147          * If you need to play the default ringtone at any given time, it is recommended
5148          * you give {@link #DEFAULT_RINGTONE_URI} to the media player.  It will resolve
5149          * to the set default ringtone at the time of playing.
5150          *
5151          * @see #DEFAULT_RINGTONE_URI
5152          */
5153         @Readable
5154         public static final String RINGTONE = "ringtone";
5155 
5156         /**
5157          * A {@link Uri} that will point to the current default ringtone at any
5158          * given time.
5159          * <p>
5160          * If the current default ringtone is in the DRM provider and the caller
5161          * does not have permission, the exception will be a
5162          * FileNotFoundException.
5163          */
5164         public static final Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE);
5165 
5166         /** {@hide} */
5167         public static final String RINGTONE_CACHE = "ringtone_cache";
5168         /** {@hide} */
5169         public static final Uri RINGTONE_CACHE_URI = getUriFor(RINGTONE_CACHE);
5170 
5171         /**
5172          * Persistent store for the system-wide default notification sound.
5173          *
5174          * @see #RINGTONE
5175          * @see #DEFAULT_NOTIFICATION_URI
5176          */
5177         @Readable
5178         public static final String NOTIFICATION_SOUND = "notification_sound";
5179 
5180         /**
5181          * A {@link Uri} that will point to the current default notification
5182          * sound at any given time.
5183          *
5184          * @see #DEFAULT_RINGTONE_URI
5185          */
5186         public static final Uri DEFAULT_NOTIFICATION_URI = getUriFor(NOTIFICATION_SOUND);
5187 
5188         /** {@hide} */
5189         @Readable
5190         public static final String NOTIFICATION_SOUND_CACHE = "notification_sound_cache";
5191         /** {@hide} */
5192         public static final Uri NOTIFICATION_SOUND_CACHE_URI = getUriFor(NOTIFICATION_SOUND_CACHE);
5193 
5194         /**
5195          * Persistent store for the system-wide default alarm alert.
5196          *
5197          * @see #RINGTONE
5198          * @see #DEFAULT_ALARM_ALERT_URI
5199          */
5200         @Readable
5201         public static final String ALARM_ALERT = "alarm_alert";
5202 
5203         /**
5204          * A {@link Uri} that will point to the current default alarm alert at
5205          * any given time.
5206          *
5207          * @see #DEFAULT_ALARM_ALERT_URI
5208          */
5209         public static final Uri DEFAULT_ALARM_ALERT_URI = getUriFor(ALARM_ALERT);
5210 
5211         /** {@hide} */
5212         @Readable
5213         public static final String ALARM_ALERT_CACHE = "alarm_alert_cache";
5214         /** {@hide} */
5215         public static final Uri ALARM_ALERT_CACHE_URI = getUriFor(ALARM_ALERT_CACHE);
5216 
5217         /**
5218          * Persistent store for the system default media button event receiver.
5219          *
5220          * @hide
5221          */
5222         @Readable(maxTargetSdk = Build.VERSION_CODES.R)
5223         public static final String MEDIA_BUTTON_RECEIVER = "media_button_receiver";
5224 
5225         /**
5226          * Setting to enable Auto Replace (AutoText) in text editors. 1 = On, 0 = Off
5227          */
5228         @Readable
5229         public static final String TEXT_AUTO_REPLACE = "auto_replace";
5230 
5231         /**
5232          * Setting to enable Auto Caps in text editors. 1 = On, 0 = Off
5233          */
5234         @Readable
5235         public static final String TEXT_AUTO_CAPS = "auto_caps";
5236 
5237         /**
5238          * Setting to enable Auto Punctuate in text editors. 1 = On, 0 = Off. This
5239          * feature converts two spaces to a "." and space.
5240          */
5241         @Readable
5242         public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate";
5243 
5244         /**
5245          * Setting to showing password characters in text editors. 1 = On, 0 = Off
5246          */
5247         @Readable
5248         public static final String TEXT_SHOW_PASSWORD = "show_password";
5249 
5250         @Readable
5251         public static final String SHOW_GTALK_SERVICE_STATUS =
5252                 "SHOW_GTALK_SERVICE_STATUS";
5253 
5254         /**
5255          * Name of activity to use for wallpaper on the home screen.
5256          *
5257          * @deprecated Use {@link WallpaperManager} instead.
5258          */
5259         @Deprecated
5260         @Readable
5261         public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
5262 
5263         /**
5264          * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME}
5265          * instead
5266          */
5267         @Deprecated
5268         public static final String AUTO_TIME = Global.AUTO_TIME;
5269 
5270         /**
5271          * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME_ZONE}
5272          * instead
5273          */
5274         @Deprecated
5275         public static final String AUTO_TIME_ZONE = Global.AUTO_TIME_ZONE;
5276 
5277         /**
5278          * Display the user's times, e.g. in the status bar, as 12 or 24 hours.
5279          * <ul>
5280          *    <li>24 = 24 hour</li>
5281          *    <li>12 = 12 hour</li>
5282          *    <li>[unset] = use the device locale's default</li>
5283          * </ul>
5284          */
5285         @Readable
5286         public static final String TIME_12_24 = "time_12_24";
5287 
5288         /**
5289          * @deprecated No longer used. Use {@link #TIME_12_24} instead.
5290          */
5291         @Deprecated
5292         @Readable
5293         public static final String DATE_FORMAT = "date_format";
5294 
5295         /**
5296          * Whether the setup wizard has been run before (on first boot), or if
5297          * it still needs to be run.
5298          *
5299          * nonzero = it has been run in the past
5300          * 0 = it has not been run in the past
5301          */
5302         @Readable
5303         public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
5304 
5305         /**
5306          * Scaling factor for normal window animations. Setting to 0 will disable window
5307          * animations.
5308          *
5309          * @deprecated Use {@link Global#WINDOW_ANIMATION_SCALE} instead
5310          */
5311         @Deprecated
5312         public static final String WINDOW_ANIMATION_SCALE = Global.WINDOW_ANIMATION_SCALE;
5313 
5314         /**
5315          * Scaling factor for activity transition animations. Setting to 0 will disable window
5316          * animations.
5317          *
5318          * @deprecated Use {@link Global#TRANSITION_ANIMATION_SCALE} instead
5319          */
5320         @Deprecated
5321         public static final String TRANSITION_ANIMATION_SCALE = Global.TRANSITION_ANIMATION_SCALE;
5322 
5323         /**
5324          * Scaling factor for Animator-based animations. This affects both the start delay and
5325          * duration of all such animations. Setting to 0 will cause animations to end immediately.
5326          * The default value is 1.
5327          *
5328          * @deprecated Use {@link Global#ANIMATOR_DURATION_SCALE} instead
5329          */
5330         @Deprecated
5331         public static final String ANIMATOR_DURATION_SCALE = Global.ANIMATOR_DURATION_SCALE;
5332 
5333         /**
5334          * Control whether the accelerometer will be used to change screen
5335          * orientation.  If 0, it will not be used unless explicitly requested
5336          * by the application; if 1, it will be used by default unless explicitly
5337          * disabled by the application.
5338          */
5339         @Readable
5340         public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation";
5341 
5342         /**
5343          * Default screen rotation when no other policy applies.
5344          * When {@link #ACCELEROMETER_ROTATION} is zero and no on-screen Activity expresses a
5345          * preference, this rotation value will be used. Must be one of the
5346          * {@link android.view.Surface#ROTATION_0 Surface rotation constants}.
5347          *
5348          * @see Display#getRotation
5349          */
5350         @Readable
5351         public static final String USER_ROTATION = "user_rotation";
5352 
5353         /**
5354          * Control whether the rotation lock toggle in the System UI should be hidden.
5355          * Typically this is done for accessibility purposes to make it harder for
5356          * the user to accidentally toggle the rotation lock while the display rotation
5357          * has been locked for accessibility.
5358          *
5359          * If 0, then rotation lock toggle is not hidden for accessibility (although it may be
5360          * unavailable for other reasons).  If 1, then the rotation lock toggle is hidden.
5361          *
5362          * @hide
5363          */
5364         @UnsupportedAppUsage
5365         @Readable
5366         public static final String HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY =
5367                 "hide_rotation_lock_toggle_for_accessibility";
5368 
5369         /**
5370          * Whether the phone vibrates when it is ringing due to an incoming call. This will
5371          * be used by Phone and Setting apps; it shouldn't affect other apps.
5372          * The value is boolean (1 or 0).
5373          *
5374          * Note: this is not same as "vibrate on ring", which had been available until ICS.
5375          * It was about AudioManager's setting and thus affected all the applications which
5376          * relied on the setting, while this is purely about the vibration setting for incoming
5377          * calls.
5378          *
5379          * @deprecated Replaced by using {@link android.os.VibrationAttributes#USAGE_RINGTONE} on
5380          * vibrations for incoming calls. User settings are applied automatically by the service and
5381          * should not be applied by individual apps.
5382          */
5383         @Deprecated
5384         @Readable
5385         public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
5386 
5387         /**
5388          * When {@code 1}, Telecom enhanced call blocking functionality is enabled.  When
5389          * {@code 0}, enhanced call blocking functionality is disabled.
5390          * @hide
5391          */
5392         @Readable
5393         public static final String DEBUG_ENABLE_ENHANCED_CALL_BLOCKING =
5394                 "debug.enable_enhanced_calling";
5395 
5396         /**
5397          * Whether the audible DTMF tones are played by the dialer when dialing. The value is
5398          * boolean (1 or 0).
5399          */
5400         @Readable
5401         public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone";
5402 
5403         /**
5404          * CDMA only settings
5405          * DTMF tone type played by the dialer when dialing.
5406          *                 0 = Normal
5407          *                 1 = Long
5408          */
5409         @Readable
5410         public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
5411 
5412         /**
5413          * Whether the hearing aid is enabled. The value is
5414          * boolean (1 or 0).
5415          * @hide
5416          */
5417         @UnsupportedAppUsage
5418         @Readable
5419         public static final String HEARING_AID = "hearing_aid";
5420 
5421         /**
5422          * CDMA only settings
5423          * TTY Mode
5424          * 0 = OFF
5425          * 1 = FULL
5426          * 2 = VCO
5427          * 3 = HCO
5428          * @hide
5429          */
5430         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5431         @Readable
5432         public static final String TTY_MODE = "tty_mode";
5433 
5434         /**
5435          * Whether the sounds effects (key clicks, lid open ...) are enabled. The value is
5436          * boolean (1 or 0).
5437          */
5438         @Readable
5439         public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
5440 
5441         /**
5442          * Whether haptic feedback (Vibrate on tap) is enabled. The value is
5443          * boolean (1 or 0).
5444          *
5445          * @deprecated Replaced by using {@link android.os.VibrationAttributes#USAGE_TOUCH} on
5446          * vibrations. User settings are applied automatically by the service and should not be
5447          * applied by individual apps.
5448          */
5449         @Deprecated
5450         @Readable
5451         public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled";
5452 
5453         /**
5454          * @deprecated Each application that shows web suggestions should have its own
5455          * setting for this.
5456          */
5457         @Deprecated
5458         @Readable
5459         public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
5460 
5461         /**
5462          * Whether the notification LED should repeatedly flash when a notification is
5463          * pending. The value is boolean (1 or 0).
5464          * @hide
5465          */
5466         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5467         @Readable
5468         public static final String NOTIFICATION_LIGHT_PULSE = "notification_light_pulse";
5469 
5470         /**
5471          * Show pointer location on screen?
5472          * 0 = no
5473          * 1 = yes
5474          * @hide
5475          */
5476         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5477         @Readable
5478         public static final String POINTER_LOCATION = "pointer_location";
5479 
5480         /**
5481          * Show touch positions on screen?
5482          * 0 = no
5483          * 1 = yes
5484          * @hide
5485          */
5486         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5487         @Readable
5488         public static final String SHOW_TOUCHES = "show_touches";
5489 
5490         /**
5491          * Show key presses and other events dispatched to focused windows on the screen.
5492          * 0 = no
5493          * 1 = yes
5494          * @hide
5495          */
5496         public static final String SHOW_KEY_PRESSES = "show_key_presses";
5497 
5498         /**
5499          * Log raw orientation data from
5500          * {@link com.android.server.policy.WindowOrientationListener} for use with the
5501          * orientationplot.py tool.
5502          * 0 = no
5503          * 1 = yes
5504          * @hide
5505          */
5506         @Readable
5507         public static final String WINDOW_ORIENTATION_LISTENER_LOG =
5508                 "window_orientation_listener_log";
5509 
5510         /**
5511          * @deprecated Use {@link android.provider.Settings.Global#POWER_SOUNDS_ENABLED}
5512          * instead
5513          * @hide
5514          */
5515         @Deprecated
5516         public static final String POWER_SOUNDS_ENABLED = Global.POWER_SOUNDS_ENABLED;
5517 
5518         /**
5519          * @deprecated Use {@link android.provider.Settings.Global#DOCK_SOUNDS_ENABLED}
5520          * instead
5521          * @hide
5522          */
5523         @Deprecated
5524         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5525         public static final String DOCK_SOUNDS_ENABLED = Global.DOCK_SOUNDS_ENABLED;
5526 
5527         /**
5528          * Whether to play sounds when the keyguard is shown and dismissed.
5529          * @hide
5530          */
5531         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5532         @Readable
5533         public static final String LOCKSCREEN_SOUNDS_ENABLED = "lockscreen_sounds_enabled";
5534 
5535         /**
5536          * Whether the lockscreen should be completely disabled.
5537          * @hide
5538          */
5539         @Readable
5540         public static final String LOCKSCREEN_DISABLED = "lockscreen.disabled";
5541 
5542         /**
5543          * @deprecated Use {@link android.provider.Settings.Global#LOW_BATTERY_SOUND}
5544          * instead
5545          * @hide
5546          */
5547         @Deprecated
5548         public static final String LOW_BATTERY_SOUND = Global.LOW_BATTERY_SOUND;
5549 
5550         /**
5551          * @deprecated Use {@link android.provider.Settings.Global#DESK_DOCK_SOUND}
5552          * instead
5553          * @hide
5554          */
5555         @Deprecated
5556         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5557         public static final String DESK_DOCK_SOUND = Global.DESK_DOCK_SOUND;
5558 
5559         /**
5560          * @deprecated Use {@link android.provider.Settings.Global#DESK_UNDOCK_SOUND}
5561          * instead
5562          * @hide
5563          */
5564         @Deprecated
5565         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5566         public static final String DESK_UNDOCK_SOUND = Global.DESK_UNDOCK_SOUND;
5567 
5568         /**
5569          * @deprecated Use {@link android.provider.Settings.Global#CAR_DOCK_SOUND}
5570          * instead
5571          * @hide
5572          */
5573         @Deprecated
5574         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5575         public static final String CAR_DOCK_SOUND = Global.CAR_DOCK_SOUND;
5576 
5577         /**
5578          * @deprecated Use {@link android.provider.Settings.Global#CAR_UNDOCK_SOUND}
5579          * instead
5580          * @hide
5581          */
5582         @Deprecated
5583         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5584         public static final String CAR_UNDOCK_SOUND = Global.CAR_UNDOCK_SOUND;
5585 
5586         /**
5587          * @deprecated Use {@link android.provider.Settings.Global#LOCK_SOUND}
5588          * instead
5589          * @hide
5590          */
5591         @Deprecated
5592         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5593         public static final String LOCK_SOUND = Global.LOCK_SOUND;
5594 
5595         /**
5596          * @deprecated Use {@link android.provider.Settings.Global#UNLOCK_SOUND}
5597          * instead
5598          * @hide
5599          */
5600         @Deprecated
5601         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5602         public static final String UNLOCK_SOUND = Global.UNLOCK_SOUND;
5603 
5604         /**
5605          * Receive incoming SIP calls?
5606          * 0 = no
5607          * 1 = yes
5608          * @hide
5609          */
5610         @Readable
5611         public static final String SIP_RECEIVE_CALLS = "sip_receive_calls";
5612 
5613         /**
5614          * Call Preference String.
5615          * "SIP_ALWAYS" : Always use SIP with network access
5616          * "SIP_ADDRESS_ONLY" : Only if destination is a SIP address
5617          * @hide
5618          */
5619         @Readable
5620         public static final String SIP_CALL_OPTIONS = "sip_call_options";
5621 
5622         /**
5623          * One of the sip call options: Always use SIP with network access.
5624          * @hide
5625          */
5626         @Readable
5627         public static final String SIP_ALWAYS = "SIP_ALWAYS";
5628 
5629         /**
5630          * One of the sip call options: Only if destination is a SIP address.
5631          * @hide
5632          */
5633         @Readable
5634         public static final String SIP_ADDRESS_ONLY = "SIP_ADDRESS_ONLY";
5635 
5636         /**
5637          * @deprecated Use SIP_ALWAYS or SIP_ADDRESS_ONLY instead.  Formerly used to indicate that
5638          * the user should be prompted each time a call is made whether it should be placed using
5639          * SIP.  The {@link com.android.providers.settings.DatabaseHelper} replaces this with
5640          * SIP_ADDRESS_ONLY.
5641          * @hide
5642          */
5643         @Deprecated
5644         @Readable
5645         public static final String SIP_ASK_ME_EACH_TIME = "SIP_ASK_ME_EACH_TIME";
5646 
5647         /**
5648          * Pointer speed setting.
5649          * This is an integer value in a range between -7 and +7, so there are 15 possible values.
5650          *   -7 = slowest
5651          *    0 = default speed
5652          *   +7 = fastest
5653          * @hide
5654          */
5655         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5656         @Readable
5657         public static final String POINTER_SPEED = "pointer_speed";
5658 
5659         /**
5660          * Touchpad pointer speed setting.
5661          * This is an integer value in a range between -7 and +7, so there are 15 possible values.
5662          *   -7 = slowest
5663          *    0 = default speed
5664          *   +7 = fastest
5665          * @hide
5666          */
5667         public static final String TOUCHPAD_POINTER_SPEED = "touchpad_pointer_speed";
5668 
5669         /**
5670          * Whether to invert the touchpad scrolling direction.
5671          *
5672          * If set to 1 (the default), moving two fingers downwards on the touchpad will scroll
5673          * upwards, consistent with normal touchscreen scrolling. If set to 0, moving two fingers
5674          * downwards will scroll downwards.
5675          *
5676          * @hide
5677          */
5678         public static final String TOUCHPAD_NATURAL_SCROLLING = "touchpad_natural_scrolling";
5679 
5680         /**
5681          * Whether to enable tap-to-click on touchpads.
5682          *
5683          * @hide
5684          */
5685         public static final String TOUCHPAD_TAP_TO_CLICK = "touchpad_tap_to_click";
5686 
5687         /**
5688          * Whether to enable a right-click zone on touchpads.
5689          *
5690          * When set to 1, pressing to click in a section on the right-hand side of the touchpad will
5691          * result in a context click (a.k.a. right click).
5692          *
5693          * @hide
5694          */
5695         public static final String TOUCHPAD_RIGHT_CLICK_ZONE = "touchpad_right_click_zone";
5696 
5697         /**
5698          * Whether lock-to-app will be triggered by long-press on recents.
5699          * @hide
5700          */
5701         @Readable
5702         public static final String LOCK_TO_APP_ENABLED = "lock_to_app_enabled";
5703 
5704         /**
5705          * I am the lolrus.
5706          * <p>
5707          * Nonzero values indicate that the user has a bukkit.
5708          * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>.
5709          * @hide
5710          */
5711         @Readable
5712         public static final String EGG_MODE = "egg_mode";
5713 
5714         /**
5715          * Setting to determine whether or not to show the battery percentage in the status bar.
5716          *    0 - Don't show percentage
5717          *    1 - Show percentage
5718          * @hide
5719          */
5720         @Readable
5721         public static final String SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent";
5722 
5723         /**
5724          * Whether or not to enable multiple audio focus.
5725          * When enabled, requires more management by user over application playback activity,
5726          * for instance pausing media apps when another starts.
5727          * @hide
5728          */
5729         @Readable
5730         public static final String MULTI_AUDIO_FOCUS_ENABLED = "multi_audio_focus_enabled";
5731 
5732         /**
5733          * Whether desktop mode is enabled or not.
5734          * 0 = off
5735          * 1 = on
5736          * @hide
5737          */
5738         @Readable
5739         public static final String DESKTOP_MODE = "desktop_mode";
5740 
5741         /**
5742          * The information of locale preference. This records user's preference to avoid
5743          * unsynchronized and existing locale preference in
5744          * {@link Locale#getDefault(Locale.Category)}.
5745          *
5746          * <p><b>Note:</b> The format follow the
5747          * <a href="https://www.rfc-editor.org/rfc/bcp/bcp47.txt">IETF BCP47 expression</a>
5748          *
5749          * E.g. : und-u-ca-gregorian-hc-h23
5750          * @hide
5751          */
5752         public static final String LOCALE_PREFERENCES = "locale_preferences";
5753 
5754         /**
5755          * Setting to enable camera flash notification feature.
5756          * <ul>
5757          *     <li> 0 = Off
5758          *     <li> 1 = On
5759          * </ul>
5760          * @hide
5761          */
5762         public static final String CAMERA_FLASH_NOTIFICATION = "camera_flash_notification";
5763 
5764         /**
5765          * Setting to enable screen flash notification feature.
5766          * <ul>
5767          *     <li> 0 = Off
5768          *     <li> 1 = On
5769          * </ul>
5770          *  @hide
5771          */
5772         public static final String SCREEN_FLASH_NOTIFICATION = "screen_flash_notification";
5773 
5774         /**
5775          * Integer property that specifes the color for screen flash notification as a
5776          * packed 32-bit color.
5777          *
5778          * @see android.graphics.Color#argb
5779          * @hide
5780          */
5781         public static final String SCREEN_FLASH_NOTIFICATION_COLOR =
5782                 "screen_flash_notification_color_global";
5783 
5784         /**
5785          * IMPORTANT: If you add a new public settings you also have to add it to
5786          * PUBLIC_SETTINGS below. If the new setting is hidden you have to add
5787          * it to PRIVATE_SETTINGS below. Also add a validator that can validate
5788          * the setting value. See an example above.
5789          */
5790 
5791         /**
5792          * Keys we no longer back up under the current schema, but want to continue to
5793          * process when restoring historical backup datasets.
5794          *
5795          * All settings in {@link LEGACY_RESTORE_SETTINGS} array *must* have a non-null validator,
5796          * otherwise they won't be restored.
5797          *
5798          * @hide
5799          */
5800         public static final String[] LEGACY_RESTORE_SETTINGS = {
5801         };
5802 
5803         /**
5804          * These are all public system settings
5805          *
5806          * @hide
5807          */
5808         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5809         public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>();
5810         static {
5811             PUBLIC_SETTINGS.add(END_BUTTON_BEHAVIOR);
5812             PUBLIC_SETTINGS.add(WIFI_USE_STATIC_IP);
5813             PUBLIC_SETTINGS.add(WIFI_STATIC_IP);
5814             PUBLIC_SETTINGS.add(WIFI_STATIC_GATEWAY);
5815             PUBLIC_SETTINGS.add(WIFI_STATIC_NETMASK);
5816             PUBLIC_SETTINGS.add(WIFI_STATIC_DNS1);
5817             PUBLIC_SETTINGS.add(WIFI_STATIC_DNS2);
5818             PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY);
5819             PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY_TIMEOUT);
5820             PUBLIC_SETTINGS.add(NEXT_ALARM_FORMATTED);
5821             PUBLIC_SETTINGS.add(FONT_SCALE);
5822             PUBLIC_SETTINGS.add(SYSTEM_LOCALES);
5823             PUBLIC_SETTINGS.add(DIM_SCREEN);
5824             PUBLIC_SETTINGS.add(SCREEN_OFF_TIMEOUT);
5825             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS);
5826             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_FLOAT);
5827             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_MODE);
5828             PUBLIC_SETTINGS.add(MODE_RINGER_STREAMS_AFFECTED);
5829             PUBLIC_SETTINGS.add(MUTE_STREAMS_AFFECTED);
5830             PUBLIC_SETTINGS.add(VIBRATE_ON);
5831             PUBLIC_SETTINGS.add(VOLUME_RING);
5832             PUBLIC_SETTINGS.add(VOLUME_SYSTEM);
5833             PUBLIC_SETTINGS.add(VOLUME_VOICE);
5834             PUBLIC_SETTINGS.add(VOLUME_MUSIC);
5835             PUBLIC_SETTINGS.add(VOLUME_ALARM);
5836             PUBLIC_SETTINGS.add(VOLUME_NOTIFICATION);
5837             PUBLIC_SETTINGS.add(VOLUME_BLUETOOTH_SCO);
5838             PUBLIC_SETTINGS.add(VOLUME_ASSISTANT);
5839             PUBLIC_SETTINGS.add(RINGTONE);
5840             PUBLIC_SETTINGS.add(NOTIFICATION_SOUND);
5841             PUBLIC_SETTINGS.add(ALARM_ALERT);
5842             PUBLIC_SETTINGS.add(TEXT_AUTO_REPLACE);
5843             PUBLIC_SETTINGS.add(TEXT_AUTO_CAPS);
5844             PUBLIC_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
5845             PUBLIC_SETTINGS.add(TEXT_SHOW_PASSWORD);
5846             PUBLIC_SETTINGS.add(SHOW_GTALK_SERVICE_STATUS);
5847             PUBLIC_SETTINGS.add(WALLPAPER_ACTIVITY);
5848             PUBLIC_SETTINGS.add(TIME_12_24);
5849             PUBLIC_SETTINGS.add(DATE_FORMAT);
5850             PUBLIC_SETTINGS.add(SETUP_WIZARD_HAS_RUN);
5851             PUBLIC_SETTINGS.add(ACCELEROMETER_ROTATION);
5852             PUBLIC_SETTINGS.add(USER_ROTATION);
5853             PUBLIC_SETTINGS.add(DTMF_TONE_WHEN_DIALING);
5854             PUBLIC_SETTINGS.add(SOUND_EFFECTS_ENABLED);
5855             PUBLIC_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
5856             PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS);
5857             PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING);
5858             PUBLIC_SETTINGS.add(APPLY_RAMPING_RINGER);
5859         }
5860 
5861         /**
5862          * These are all hidden system settings.
5863          *
5864          * @hide
5865          */
5866         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5867         public static final Set<String> PRIVATE_SETTINGS = new ArraySet<>();
5868         static {
5869             PRIVATE_SETTINGS.add(WIFI_USE_STATIC_IP);
5870             PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
5871             PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
5872             PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED);
5873             PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
5874             PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
5875             PRIVATE_SETTINGS.add(VOLUME_MASTER);
5876             PRIVATE_SETTINGS.add(MASTER_MONO);
5877             PRIVATE_SETTINGS.add(MASTER_BALANCE);
5878             PRIVATE_SETTINGS.add(NOTIFICATIONS_USE_RING_VOLUME);
5879             PRIVATE_SETTINGS.add(VIBRATE_IN_SILENT);
5880             PRIVATE_SETTINGS.add(MEDIA_BUTTON_RECEIVER);
5881             PRIVATE_SETTINGS.add(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY);
5882             PRIVATE_SETTINGS.add(DTMF_TONE_TYPE_WHEN_DIALING);
5883             PRIVATE_SETTINGS.add(HEARING_AID);
5884             PRIVATE_SETTINGS.add(TTY_MODE);
5885             PRIVATE_SETTINGS.add(NOTIFICATION_LIGHT_PULSE);
5886             PRIVATE_SETTINGS.add(POINTER_LOCATION);
5887             PRIVATE_SETTINGS.add(SHOW_TOUCHES);
5888             PRIVATE_SETTINGS.add(SHOW_KEY_PRESSES);
5889             PRIVATE_SETTINGS.add(WINDOW_ORIENTATION_LISTENER_LOG);
5890             PRIVATE_SETTINGS.add(POWER_SOUNDS_ENABLED);
5891             PRIVATE_SETTINGS.add(DOCK_SOUNDS_ENABLED);
5892             PRIVATE_SETTINGS.add(LOCKSCREEN_SOUNDS_ENABLED);
5893             PRIVATE_SETTINGS.add(LOCKSCREEN_DISABLED);
5894             PRIVATE_SETTINGS.add(LOW_BATTERY_SOUND);
5895             PRIVATE_SETTINGS.add(DESK_DOCK_SOUND);
5896             PRIVATE_SETTINGS.add(DESK_UNDOCK_SOUND);
5897             PRIVATE_SETTINGS.add(CAR_DOCK_SOUND);
5898             PRIVATE_SETTINGS.add(CAR_UNDOCK_SOUND);
5899             PRIVATE_SETTINGS.add(LOCK_SOUND);
5900             PRIVATE_SETTINGS.add(UNLOCK_SOUND);
5901             PRIVATE_SETTINGS.add(SIP_RECEIVE_CALLS);
5902             PRIVATE_SETTINGS.add(SIP_CALL_OPTIONS);
5903             PRIVATE_SETTINGS.add(SIP_ALWAYS);
5904             PRIVATE_SETTINGS.add(SIP_ADDRESS_ONLY);
5905             PRIVATE_SETTINGS.add(SIP_ASK_ME_EACH_TIME);
5906             PRIVATE_SETTINGS.add(POINTER_SPEED);
5907             PRIVATE_SETTINGS.add(LOCK_TO_APP_ENABLED);
5908             PRIVATE_SETTINGS.add(EGG_MODE);
5909             PRIVATE_SETTINGS.add(SHOW_BATTERY_PERCENT);
5910             PRIVATE_SETTINGS.add(DISPLAY_COLOR_MODE);
5911             PRIVATE_SETTINGS.add(DISPLAY_COLOR_MODE_VENDOR_HINT);
5912             PRIVATE_SETTINGS.add(DESKTOP_MODE);
5913             PRIVATE_SETTINGS.add(LOCALE_PREFERENCES);
5914             PRIVATE_SETTINGS.add(TOUCHPAD_POINTER_SPEED);
5915             PRIVATE_SETTINGS.add(TOUCHPAD_NATURAL_SCROLLING);
5916             PRIVATE_SETTINGS.add(TOUCHPAD_TAP_TO_CLICK);
5917             PRIVATE_SETTINGS.add(TOUCHPAD_RIGHT_CLICK_ZONE);
5918             PRIVATE_SETTINGS.add(CAMERA_FLASH_NOTIFICATION);
5919             PRIVATE_SETTINGS.add(SCREEN_FLASH_NOTIFICATION);
5920             PRIVATE_SETTINGS.add(SCREEN_FLASH_NOTIFICATION_COLOR);
5921         }
5922 
5923         /**
5924          * These entries are considered common between the personal and the managed profile,
5925          * since the managed profile doesn't get to change them.
5926          */
5927         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
5928         private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
5929         static {
5930             CLONE_TO_MANAGED_PROFILE.add(DATE_FORMAT);
5931             CLONE_TO_MANAGED_PROFILE.add(HAPTIC_FEEDBACK_ENABLED);
5932             CLONE_TO_MANAGED_PROFILE.add(SOUND_EFFECTS_ENABLED);
5933             CLONE_TO_MANAGED_PROFILE.add(TEXT_SHOW_PASSWORD);
5934             CLONE_TO_MANAGED_PROFILE.add(TIME_12_24);
5935         }
5936 
5937         /** @hide */
getCloneToManagedProfileSettings(Set<String> outKeySet)5938         public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
5939             outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
5940         }
5941 
5942         /**
5943          * These entries should be cloned from this profile's parent only if the dependency's
5944          * value is true ("1")
5945          *
5946          * Note: the dependencies must be Secure settings
5947          *
5948          * @hide
5949          */
5950         public static final Map<String, String> CLONE_FROM_PARENT_ON_VALUE = new ArrayMap<>();
5951         static {
CLONE_FROM_PARENT_ON_VALUE.put(RINGTONE, Secure.SYNC_PARENT_SOUNDS)5952             CLONE_FROM_PARENT_ON_VALUE.put(RINGTONE, Secure.SYNC_PARENT_SOUNDS);
CLONE_FROM_PARENT_ON_VALUE.put(NOTIFICATION_SOUND, Secure.SYNC_PARENT_SOUNDS)5953             CLONE_FROM_PARENT_ON_VALUE.put(NOTIFICATION_SOUND, Secure.SYNC_PARENT_SOUNDS);
CLONE_FROM_PARENT_ON_VALUE.put(ALARM_ALERT, Secure.SYNC_PARENT_SOUNDS)5954             CLONE_FROM_PARENT_ON_VALUE.put(ALARM_ALERT, Secure.SYNC_PARENT_SOUNDS);
5955         }
5956 
5957         /** @hide */
getCloneFromParentOnValueSettings(Map<String, String> outMap)5958         public static void getCloneFromParentOnValueSettings(Map<String, String> outMap) {
5959             outMap.putAll(CLONE_FROM_PARENT_ON_VALUE);
5960         }
5961 
5962         /**
5963          * System settings which can be accessed by instant apps.
5964          * @hide
5965          */
5966         public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
5967         static {
5968             INSTANT_APP_SETTINGS.add(TEXT_AUTO_REPLACE);
5969             INSTANT_APP_SETTINGS.add(TEXT_AUTO_CAPS);
5970             INSTANT_APP_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
5971             INSTANT_APP_SETTINGS.add(TEXT_SHOW_PASSWORD);
5972             INSTANT_APP_SETTINGS.add(DATE_FORMAT);
5973             INSTANT_APP_SETTINGS.add(FONT_SCALE);
5974             INSTANT_APP_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
5975             INSTANT_APP_SETTINGS.add(TIME_12_24);
5976             INSTANT_APP_SETTINGS.add(SOUND_EFFECTS_ENABLED);
5977             INSTANT_APP_SETTINGS.add(ACCELEROMETER_ROTATION);
5978         }
5979 
5980         /**
5981          * When to use Wi-Fi calling
5982          *
5983          * @see android.telephony.TelephonyManager.WifiCallingChoices
5984          * @hide
5985          */
5986         @Readable
5987         public static final String WHEN_TO_MAKE_WIFI_CALLS = "when_to_make_wifi_calls";
5988 
5989         /** Controls whether bluetooth is on or off on wearable devices.
5990          *
5991          * <p>The valid values for this key are: 0 (disabled) or 1 (enabled).
5992          *
5993          * @hide
5994          */
5995         public static final String CLOCKWORK_BLUETOOTH_SETTINGS_PREF = "cw_bt_settings_pref";
5996 
5997         /**
5998          * Controls whether the unread notification dot indicator is shown on wearable devices.
5999          *
6000          * <p>The valid values for this key are: 0 (disabled) or 1 (enabled).
6001          *
6002          * @hide
6003          */
6004         public static final String UNREAD_NOTIFICATION_DOT_INDICATOR =
6005                 "unread_notification_dot_indicator";
6006 
6007         /**
6008          * Controls whether auto-launching media controls is enabled on wearable devices.
6009          *
6010          * <p>The valid values for this key are: 0 (disabled) or 1 (enabled).
6011          *
6012          * @hide
6013          */
6014         public static final String AUTO_LAUNCH_MEDIA_CONTROLS = "auto_launch_media_controls";
6015 
6016         // Settings moved to Settings.Secure
6017 
6018         /**
6019          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED}
6020          * instead
6021          */
6022         @Deprecated
6023         public static final String ADB_ENABLED = Global.ADB_ENABLED;
6024 
6025         /**
6026          * @deprecated Use {@link android.provider.Settings.Secure#ANDROID_ID} instead
6027          */
6028         @Deprecated
6029         public static final String ANDROID_ID = Secure.ANDROID_ID;
6030 
6031         /**
6032          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
6033          */
6034         @Deprecated
6035         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
6036 
6037         /**
6038          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
6039          */
6040         @Deprecated
6041         public static final String DATA_ROAMING = Global.DATA_ROAMING;
6042 
6043         /**
6044          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
6045          */
6046         @Deprecated
6047         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
6048 
6049         /**
6050          * @deprecated Use {@link android.provider.Settings.Global#HTTP_PROXY} instead
6051          */
6052         @Deprecated
6053         public static final String HTTP_PROXY = Global.HTTP_PROXY;
6054 
6055         /**
6056          * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
6057          */
6058         @Deprecated
6059         public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
6060 
6061         /**
6062          * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED}
6063          * instead
6064          */
6065         @Deprecated
6066         public static final String LOCATION_PROVIDERS_ALLOWED = Secure.LOCATION_PROVIDERS_ALLOWED;
6067 
6068         /**
6069          * @deprecated Use {@link android.provider.Settings.Secure#LOGGING_ID} instead
6070          */
6071         @Deprecated
6072         public static final String LOGGING_ID = Secure.LOGGING_ID;
6073 
6074         /**
6075          * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
6076          */
6077         @Deprecated
6078         public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
6079 
6080         /**
6081          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_ENABLED}
6082          * instead
6083          */
6084         @Deprecated
6085         public static final String PARENTAL_CONTROL_ENABLED = Secure.PARENTAL_CONTROL_ENABLED;
6086 
6087         /**
6088          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_LAST_UPDATE}
6089          * instead
6090          */
6091         @Deprecated
6092         public static final String PARENTAL_CONTROL_LAST_UPDATE = Secure.PARENTAL_CONTROL_LAST_UPDATE;
6093 
6094         /**
6095          * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_REDIRECT_URL}
6096          * instead
6097          */
6098         @Deprecated
6099         public static final String PARENTAL_CONTROL_REDIRECT_URL =
6100             Secure.PARENTAL_CONTROL_REDIRECT_URL;
6101 
6102         /**
6103          * @deprecated Use {@link android.provider.Settings.Secure#SETTINGS_CLASSNAME} instead
6104          */
6105         @Deprecated
6106         public static final String SETTINGS_CLASSNAME = Secure.SETTINGS_CLASSNAME;
6107 
6108         /**
6109          * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
6110          */
6111         @Deprecated
6112         public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
6113 
6114         /**
6115          * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
6116          */
6117         @Deprecated
6118         public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
6119 
6120        /**
6121          * @deprecated Use
6122          * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
6123          */
6124         @Deprecated
6125         public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
6126 
6127         /**
6128          * @deprecated Use
6129          * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
6130          */
6131         @Deprecated
6132         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
6133                 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
6134 
6135         /**
6136          * @deprecated Use
6137          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} instead
6138          */
6139         @Deprecated
6140         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
6141                 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
6142 
6143         /**
6144          * @deprecated Use
6145          * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} instead
6146          */
6147         @Deprecated
6148         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
6149                 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
6150 
6151         /**
6152          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
6153          * instead
6154          */
6155         @Deprecated
6156         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
6157 
6158         /**
6159          * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} instead
6160          */
6161         @Deprecated
6162         public static final String WIFI_ON = Global.WIFI_ON;
6163 
6164         /**
6165          * @deprecated Use
6166          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE}
6167          * instead
6168          */
6169         @Deprecated
6170         @Readable
6171         public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
6172                 Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE;
6173 
6174         /**
6175          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_AP_COUNT} instead
6176          */
6177         @Deprecated
6178         public static final String WIFI_WATCHDOG_AP_COUNT = Secure.WIFI_WATCHDOG_AP_COUNT;
6179 
6180         /**
6181          * @deprecated Use
6182          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS} instead
6183          */
6184         @Deprecated
6185         @Readable
6186         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
6187                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS;
6188 
6189         /**
6190          * @deprecated Use
6191          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead
6192          */
6193         @Deprecated
6194         @Readable
6195         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
6196                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED;
6197 
6198         /**
6199          * @deprecated Use
6200          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS}
6201          * instead
6202          */
6203         @Deprecated
6204         @Readable
6205         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
6206                 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS;
6207 
6208         /**
6209          * @deprecated Use
6210          * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT} instead
6211          */
6212         @Deprecated
6213         @Readable
6214         public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
6215             Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT;
6216 
6217         /**
6218          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_MAX_AP_CHECKS}
6219          * instead
6220          */
6221         @Deprecated
6222         public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = Secure.WIFI_WATCHDOG_MAX_AP_CHECKS;
6223 
6224         /**
6225          * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
6226          */
6227         @Deprecated
6228         public static final String WIFI_WATCHDOG_ON = Global.WIFI_WATCHDOG_ON;
6229 
6230         /**
6231          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_COUNT} instead
6232          */
6233         @Deprecated
6234         public static final String WIFI_WATCHDOG_PING_COUNT = Secure.WIFI_WATCHDOG_PING_COUNT;
6235 
6236         /**
6237          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_DELAY_MS}
6238          * instead
6239          */
6240         @Deprecated
6241         public static final String WIFI_WATCHDOG_PING_DELAY_MS = Secure.WIFI_WATCHDOG_PING_DELAY_MS;
6242 
6243         /**
6244          * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_TIMEOUT_MS}
6245          * instead
6246          */
6247         @Deprecated
6248         @Readable
6249         public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS =
6250             Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS;
6251 
6252         /**
6253          * Checks if the specified app can modify system settings. As of API
6254          * level 23, an app cannot modify system settings unless it declares the
6255          * {@link android.Manifest.permission#WRITE_SETTINGS}
6256          * permission in its manifest, <em>and</em> the user specifically grants
6257          * the app this capability. To prompt the user to grant this approval,
6258          * the app must send an intent with the action {@link
6259          * android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}, which causes
6260          * the system to display a permission management screen.
6261          *
6262          * @param context App context.
6263          * @return true if the calling app can write to system settings, false otherwise
6264          */
canWrite(Context context)6265         public static boolean canWrite(Context context) {
6266             return isCallingPackageAllowedToWriteSettings(context, Process.myUid(),
6267                     context.getOpPackageName(), false);
6268         }
6269     }
6270 
6271     /**
6272      * Secure system settings, containing system preferences that applications
6273      * can read but are not allowed to write.  These are for preferences that
6274      * the user must explicitly modify through the UI of a system app. Normal
6275      * applications cannot modify the secure settings database, either directly
6276      * or by calling the "put" methods that this class contains.
6277      */
6278     public static final class Secure extends NameValueTable {
6279         // NOTE: If you add new settings here, be sure to add them to
6280         // com.android.providers.settings.SettingsProtoDumpUtil#dumpProtoSecureSettingsLocked.
6281 
6282         /**
6283          * The content:// style URL for this table
6284          */
6285         public static final Uri CONTENT_URI =
6286             Uri.parse("content://" + AUTHORITY + "/secure");
6287 
6288         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
6289         private static final ContentProviderHolder sProviderHolder =
6290                 new ContentProviderHolder(CONTENT_URI);
6291 
6292         // Populated lazily, guarded by class object:
6293         @UnsupportedAppUsage
6294         private static final NameValueCache sNameValueCache = new NameValueCache(
6295                 CONTENT_URI,
6296                 CALL_METHOD_GET_SECURE,
6297                 CALL_METHOD_PUT_SECURE,
6298                 CALL_METHOD_DELETE_SECURE,
6299                 sProviderHolder,
6300                 Secure.class);
6301 
6302         @UnsupportedAppUsage
6303         private static final HashSet<String> MOVED_TO_LOCK_SETTINGS;
6304         @UnsupportedAppUsage
6305         private static final HashSet<String> MOVED_TO_GLOBAL;
6306         static {
6307             MOVED_TO_LOCK_SETTINGS = new HashSet<>(3);
6308             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_ENABLED);
6309             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_VISIBLE);
6310             MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
6311 
6312             MOVED_TO_GLOBAL = new HashSet<>();
6313             MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED);
6314             MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED);
6315             MOVED_TO_GLOBAL.add(Settings.Global.BLUETOOTH_ON);
6316             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_CELL_BROADCAST_SMS);
6317             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_ROAMING_MODE);
6318             MOVED_TO_GLOBAL.add(Settings.Global.CDMA_SUBSCRIPTION_MODE);
6319             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE);
6320             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI);
6321             MOVED_TO_GLOBAL.add(Settings.Global.DATA_ROAMING);
6322             MOVED_TO_GLOBAL.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
6323             MOVED_TO_GLOBAL.add(Settings.Global.DEVICE_PROVISIONED);
6324             MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED);
6325             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
6326             MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
6327             MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA);
6328             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
6329             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
6330             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES);
6331             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE);
6332             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED);
6333             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES);
6334             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL);
6335             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED);
6336             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE);
6337             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION);
6338             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_DELETE_AGE);
6339             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES);
6340             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_ROTATE_AGE);
6341             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION);
6342             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE);
6343             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES);
6344             MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE);
6345             MOVED_TO_GLOBAL.add(Settings.Global.NETWORK_PREFERENCE);
6346             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_DIFF);
6347             MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_SPACING);
6348             MOVED_TO_GLOBAL.add(Settings.Global.NTP_SERVER);
6349             MOVED_TO_GLOBAL.add(Settings.Global.NTP_TIMEOUT);
6350             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT);
6351             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
6352             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
6353             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS);
6354             MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
6355             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
6356             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST);
6357             MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL);
6358             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_APN);
6359             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_REQUIRED);
6360             MOVED_TO_GLOBAL.add(Settings.Global.TETHER_SUPPORTED);
6361             MOVED_TO_GLOBAL.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
6362             MOVED_TO_GLOBAL.add(Settings.Global.USE_GOOGLE_MAIL);
6363             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_COUNTRY_CODE);
6364             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
6365             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FREQUENCY_BAND);
6366             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_IDLE_MS);
6367             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT);
6368             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
6369             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
6370             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
6371             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT);
6372             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON);
6373             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME);
6374             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
6375             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED);
6376             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ENHANCED_AUTO_JOIN);
6377             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORK_SHOW_RSSI);
6378             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_ON);
6379             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
6380             MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_PENDING_FACTORY_RESET);
6381             MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
6382             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
6383             MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
6384             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
6385             MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
6386             MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
6387             MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL);
6388             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD);
6389             MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
6390             MOVED_TO_GLOBAL.add(Settings.Global.SEND_ACTION_APP_ERROR);
6391             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_AGE_SECONDS);
6392             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_MAX_FILES);
6393             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_KB);
6394             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_PERCENT);
6395             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_RESERVE_PERCENT);
6396             MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_TAG_PREFIX);
6397             MOVED_TO_GLOBAL.add(Settings.Global.ERROR_LOGCAT_PREFIX);
6398             MOVED_TO_GLOBAL.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL);
6399             MOVED_TO_GLOBAL.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
6400             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE);
6401             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES);
6402             MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES);
6403             MOVED_TO_GLOBAL.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
6404             MOVED_TO_GLOBAL.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY);
6405             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);
6406             MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_SERVER);
6407             MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION);
6408             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_INSTALL_LOCATION);
6409             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY);
6410             MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
6411             MOVED_TO_GLOBAL.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
6412             MOVED_TO_GLOBAL.add(Settings.Global.HTTP_PROXY);
6413             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST);
6414             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT);
6415             MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
6416             MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
6417             MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER);
6418             MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE);
6419             MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY);
6420             MOVED_TO_GLOBAL.add(Settings.Global.SECURE_FRP_MODE);
6421         }
6422 
6423         /** @hide */
getMovedToGlobalSettings(Set<String> outKeySet)6424         public static void getMovedToGlobalSettings(Set<String> outKeySet) {
6425             outKeySet.addAll(MOVED_TO_GLOBAL);
6426         }
6427 
6428         /** @hide */
getMovedToSystemSettings(Set<String> outKeySet)6429         public static void getMovedToSystemSettings(Set<String> outKeySet) {
6430         }
6431 
6432         /** @hide */
clearProviderForTest()6433         public static void clearProviderForTest() {
6434             sProviderHolder.clearProviderForTest();
6435             sNameValueCache.clearGenerationTrackerForTest();
6436         }
6437 
6438         /** @hide */
getPublicSettings(Set<String> allKeys, Set<String> readableKeys, ArrayMap<String, Integer> readableKeysWithMaxTargetSdk)6439         public static void getPublicSettings(Set<String> allKeys, Set<String> readableKeys,
6440                 ArrayMap<String, Integer> readableKeysWithMaxTargetSdk) {
6441             getPublicSettingsForClass(Secure.class, allKeys, readableKeys,
6442                     readableKeysWithMaxTargetSdk);
6443         }
6444 
6445         /**
6446          * Look up a name in the database.
6447          * @param resolver to access the database with
6448          * @param name to look up in the table
6449          * @return the corresponding value, or null if not present
6450          */
getString(ContentResolver resolver, String name)6451         public static String getString(ContentResolver resolver, String name) {
6452             return getStringForUser(resolver, name, resolver.getUserId());
6453         }
6454 
6455         /** @hide */
6456         @UnsupportedAppUsage
getStringForUser(ContentResolver resolver, String name, int userHandle)6457         public static String getStringForUser(ContentResolver resolver, String name,
6458                 int userHandle) {
6459             if (MOVED_TO_GLOBAL.contains(name)) {
6460                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
6461                         + " to android.provider.Settings.Global.");
6462                 return Global.getStringForUser(resolver, name, userHandle);
6463             }
6464 
6465             if (MOVED_TO_LOCK_SETTINGS.contains(name) && Process.myUid() != Process.SYSTEM_UID) {
6466                 // No context; use the ActivityThread's context as an approximation for
6467                 // determining the target API level.
6468                 Application application = ActivityThread.currentApplication();
6469 
6470                 boolean isPreMnc = application != null
6471                     && application.getApplicationInfo() != null
6472                     && application.getApplicationInfo().targetSdkVersion
6473                     <= VERSION_CODES.LOLLIPOP_MR1;
6474                 if (isPreMnc) {
6475                     // Old apps used to get the three deprecated LOCK_PATTERN_* settings from
6476                     // ILockSettings.getString().  For security reasons, we now just return a
6477                     // stubbed-out value.  Note: the only one of these three settings actually known
6478                     // to have been used was LOCK_PATTERN_ENABLED, and ILockSettings.getString()
6479                     // already always returned "0" for that starting in Android 11.
6480                     return "0";
6481                 }
6482                 throw new SecurityException("Settings.Secure." + name + " is deprecated and no" +
6483                         " longer accessible. See API documentation for potential replacements.");
6484             }
6485 
6486             return sNameValueCache.getStringForUser(resolver, name, userHandle);
6487         }
6488 
6489         /**
6490          * Store a name/value pair into the database. Values written by this method will be
6491          * overridden if a restore happens in the future.
6492          *
6493          * @param resolver to access the database with
6494          * @param name to store
6495          * @param value to associate with the name
6496          * @return true if the value was set, false on database errors
6497          *
6498          * @hide
6499          */
6500         @RequiresPermission(Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE)
putString(ContentResolver resolver, String name, String value, boolean overrideableByRestore)6501         public static boolean putString(ContentResolver resolver, String name,
6502                 String value, boolean overrideableByRestore) {
6503             return putStringForUser(resolver, name, value, /* tag */ null, /* makeDefault */ false,
6504                     resolver.getUserId(), overrideableByRestore);
6505         }
6506 
6507         /**
6508          * Store a name/value pair into the database.
6509          * @param resolver to access the database with
6510          * @param name to store
6511          * @param value to associate with the name
6512          * @return true if the value was set, false on database errors
6513          */
putString(ContentResolver resolver, String name, String value)6514         public static boolean putString(ContentResolver resolver, String name, String value) {
6515             return putStringForUser(resolver, name, value, resolver.getUserId());
6516         }
6517 
6518         /** @hide */
6519         @UnsupportedAppUsage
putStringForUser(ContentResolver resolver, String name, String value, int userHandle)6520         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
6521                 int userHandle) {
6522             return putStringForUser(resolver, name, value, null, false, userHandle,
6523                     DEFAULT_OVERRIDEABLE_BY_RESTORE);
6524         }
6525 
6526         /** @hide */
6527         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
putStringForUser(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, @UserIdInt int userHandle, boolean overrideableByRestore)6528         public static boolean putStringForUser(@NonNull ContentResolver resolver,
6529                 @NonNull String name, @Nullable String value, @Nullable String tag,
6530                 boolean makeDefault, @UserIdInt int userHandle, boolean overrideableByRestore) {
6531             if (LOCAL_LOGV) {
6532                 Log.v(TAG, "Secure.putString(name=" + name + ", value=" + value + ") for "
6533                         + userHandle);
6534             }
6535             if (MOVED_TO_GLOBAL.contains(name)) {
6536                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
6537                         + " to android.provider.Settings.Global");
6538                 return Global.putStringForUser(resolver, name, value,
6539                         tag, makeDefault, userHandle, DEFAULT_OVERRIDEABLE_BY_RESTORE);
6540             }
6541             return sNameValueCache.putStringForUser(resolver, name, value, tag,
6542                     makeDefault, userHandle, overrideableByRestore);
6543         }
6544 
6545         /**
6546          * Store a name/value pair into the database.
6547          * <p>
6548          * The method takes an optional tag to associate with the setting
6549          * which can be used to clear only settings made by your package and
6550          * associated with this tag by passing the tag to {@link
6551          * #resetToDefaults(ContentResolver, String)}. Anyone can override
6552          * the current tag. Also if another package changes the setting
6553          * then the tag will be set to the one specified in the set call
6554          * which can be null. Also any of the settings setters that do not
6555          * take a tag as an argument effectively clears the tag.
6556          * </p><p>
6557          * For example, if you set settings A and B with tags T1 and T2 and
6558          * another app changes setting A (potentially to the same value), it
6559          * can assign to it a tag T3 (note that now the package that changed
6560          * the setting is not yours). Now if you reset your changes for T1 and
6561          * T2 only setting B will be reset and A not (as it was changed by
6562          * another package) but since A did not change you are in the desired
6563          * initial state. Now if the other app changes the value of A (assuming
6564          * you registered an observer in the beginning) you would detect that
6565          * the setting was changed by another app and handle this appropriately
6566          * (ignore, set back to some value, etc).
6567          * </p><p>
6568          * Also the method takes an argument whether to make the value the
6569          * default for this setting. If the system already specified a default
6570          * value, then the one passed in here will <strong>not</strong>
6571          * be set as the default.
6572          * </p>
6573          *
6574          * @param resolver to access the database with.
6575          * @param name to store.
6576          * @param value to associate with the name.
6577          * @param tag to associate with the setting.
6578          * @param makeDefault whether to make the value the default one.
6579          * @return true if the value was set, false on database errors.
6580          *
6581          * @see #resetToDefaults(ContentResolver, String)
6582          *
6583          * @hide
6584          */
6585         @SystemApi
6586         @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault)6587         public static boolean putString(@NonNull ContentResolver resolver,
6588                 @NonNull String name, @Nullable String value, @Nullable String tag,
6589                 boolean makeDefault) {
6590             return putStringForUser(resolver, name, value, tag, makeDefault,
6591                     resolver.getUserId(), DEFAULT_OVERRIDEABLE_BY_RESTORE);
6592         }
6593 
6594         /**
6595          * Reset the settings to their defaults. This would reset <strong>only</strong>
6596          * settings set by the caller's package. Think of it of a way to undo your own
6597          * changes to the global settings. Passing in the optional tag will reset only
6598          * settings changed by your package and associated with this tag.
6599          *
6600          * @param resolver Handle to the content resolver.
6601          * @param tag Optional tag which should be associated with the settings to reset.
6602          *
6603          * @see #putString(ContentResolver, String, String, String, boolean)
6604          *
6605          * @hide
6606          */
6607         @SystemApi
6608         @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
resetToDefaults(@onNull ContentResolver resolver, @Nullable String tag)6609         public static void resetToDefaults(@NonNull ContentResolver resolver,
6610                 @Nullable String tag) {
6611             resetToDefaultsAsUser(resolver, tag, RESET_MODE_PACKAGE_DEFAULTS,
6612                     resolver.getUserId());
6613         }
6614 
6615         /**
6616          *
6617          * Reset the settings to their defaults for a given user with a specific mode. The
6618          * optional tag argument is valid only for {@link #RESET_MODE_PACKAGE_DEFAULTS}
6619          * allowing resetting the settings made by a package and associated with the tag.
6620          *
6621          * @param resolver Handle to the content resolver.
6622          * @param tag Optional tag which should be associated with the settings to reset.
6623          * @param mode The reset mode.
6624          * @param userHandle The user for which to reset to defaults.
6625          *
6626          * @see #RESET_MODE_PACKAGE_DEFAULTS
6627          * @see #RESET_MODE_UNTRUSTED_DEFAULTS
6628          * @see #RESET_MODE_UNTRUSTED_CHANGES
6629          * @see #RESET_MODE_TRUSTED_DEFAULTS
6630          *
6631          * @hide
6632          */
resetToDefaultsAsUser(@onNull ContentResolver resolver, @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle)6633         public static void resetToDefaultsAsUser(@NonNull ContentResolver resolver,
6634                 @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle) {
6635             try {
6636                 Bundle arg = new Bundle();
6637                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
6638                 if (tag != null) {
6639                     arg.putString(CALL_METHOD_TAG_KEY, tag);
6640                 }
6641                 arg.putInt(CALL_METHOD_RESET_MODE_KEY, mode);
6642                 IContentProvider cp = sProviderHolder.getProvider(resolver);
6643                 cp.call(resolver.getAttributionSource(),
6644                         sProviderHolder.mUri.getAuthority(), CALL_METHOD_RESET_SECURE, null, arg);
6645             } catch (RemoteException e) {
6646                 Log.w(TAG, "Can't reset do defaults for " + CONTENT_URI, e);
6647             }
6648         }
6649 
6650         /**
6651          * Construct the content URI for a particular name/value pair,
6652          * useful for monitoring changes with a ContentObserver.
6653          * @param name to look up in the table
6654          * @return the corresponding content URI, or null if not present
6655          */
getUriFor(String name)6656         public static Uri getUriFor(String name) {
6657             if (MOVED_TO_GLOBAL.contains(name)) {
6658                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
6659                         + " to android.provider.Settings.Global, returning global URI.");
6660                 return Global.getUriFor(Global.CONTENT_URI, name);
6661             }
6662             return getUriFor(CONTENT_URI, name);
6663         }
6664 
6665         /**
6666          * Convenience function for retrieving a single secure settings value
6667          * as an integer.  Note that internally setting values are always
6668          * stored as strings; this function converts the string to an integer
6669          * for you.  The default value will be returned if the setting is
6670          * not defined or not an integer.
6671          *
6672          * @param cr The ContentResolver to access.
6673          * @param name The name of the setting to retrieve.
6674          * @param def Value to return if the setting is not defined.
6675          *
6676          * @return The setting's current value, or 'def' if it is not defined
6677          * or not a valid integer.
6678          */
getInt(ContentResolver cr, String name, int def)6679         public static int getInt(ContentResolver cr, String name, int def) {
6680             return getIntForUser(cr, name, def, cr.getUserId());
6681         }
6682 
6683         /** @hide */
6684         @UnsupportedAppUsage
getIntForUser(ContentResolver cr, String name, int def, int userHandle)6685         public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
6686             String v = getStringForUser(cr, name, userHandle);
6687             return parseIntSettingWithDefault(v, def);
6688         }
6689 
6690         /**
6691          * Convenience function for retrieving a single secure settings value
6692          * as an integer.  Note that internally setting values are always
6693          * stored as strings; this function converts the string to an integer
6694          * for you.
6695          * <p>
6696          * This version does not take a default value.  If the setting has not
6697          * been set, or the string value is not a number,
6698          * it throws {@link SettingNotFoundException}.
6699          *
6700          * @param cr The ContentResolver to access.
6701          * @param name The name of the setting to retrieve.
6702          *
6703          * @throws SettingNotFoundException Thrown if a setting by the given
6704          * name can't be found or the setting value is not an integer.
6705          *
6706          * @return The setting's current value.
6707          */
getInt(ContentResolver cr, String name)6708         public static int getInt(ContentResolver cr, String name)
6709                 throws SettingNotFoundException {
6710             return getIntForUser(cr, name, cr.getUserId());
6711         }
6712 
6713         /** @hide */
getIntForUser(ContentResolver cr, String name, int userHandle)6714         public static int getIntForUser(ContentResolver cr, String name, int userHandle)
6715                 throws SettingNotFoundException {
6716             String v = getStringForUser(cr, name, userHandle);
6717             return parseIntSetting(v, name);
6718         }
6719 
6720         /**
6721          * Convenience function for updating a single settings value as an
6722          * integer. This will either create a new entry in the table if the
6723          * given name does not exist, or modify the value of the existing row
6724          * with that name.  Note that internally setting values are always
6725          * stored as strings, so this function converts the given value to a
6726          * string before storing it.
6727          *
6728          * @param cr The ContentResolver to access.
6729          * @param name The name of the setting to modify.
6730          * @param value The new value for the setting.
6731          * @return true if the value was set, false on database errors
6732          */
putInt(ContentResolver cr, String name, int value)6733         public static boolean putInt(ContentResolver cr, String name, int value) {
6734             return putIntForUser(cr, name, value, cr.getUserId());
6735         }
6736 
6737         /** @hide */
6738         @UnsupportedAppUsage
putIntForUser(ContentResolver cr, String name, int value, int userHandle)6739         public static boolean putIntForUser(ContentResolver cr, String name, int value,
6740                 int userHandle) {
6741             return putStringForUser(cr, name, Integer.toString(value), userHandle);
6742         }
6743 
6744         /**
6745          * Convenience function for retrieving a single secure settings value
6746          * as a {@code long}.  Note that internally setting values are always
6747          * stored as strings; this function converts the string to a {@code long}
6748          * for you.  The default value will be returned if the setting is
6749          * not defined or not a {@code long}.
6750          *
6751          * @param cr The ContentResolver to access.
6752          * @param name The name of the setting to retrieve.
6753          * @param def Value to return if the setting is not defined.
6754          *
6755          * @return The setting's current value, or 'def' if it is not defined
6756          * or not a valid {@code long}.
6757          */
getLong(ContentResolver cr, String name, long def)6758         public static long getLong(ContentResolver cr, String name, long def) {
6759             return getLongForUser(cr, name, def, cr.getUserId());
6760         }
6761 
6762         /** @hide */
6763         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
getLongForUser(ContentResolver cr, String name, long def, int userHandle)6764         public static long getLongForUser(ContentResolver cr, String name, long def,
6765                 int userHandle) {
6766             String v = getStringForUser(cr, name, userHandle);
6767             return parseLongSettingWithDefault(v, def);
6768         }
6769 
6770         /**
6771          * Convenience function for retrieving a single secure settings value
6772          * as a {@code long}.  Note that internally setting values are always
6773          * stored as strings; this function converts the string to a {@code long}
6774          * for you.
6775          * <p>
6776          * This version does not take a default value.  If the setting has not
6777          * been set, or the string value is not a number,
6778          * it throws {@link SettingNotFoundException}.
6779          *
6780          * @param cr The ContentResolver to access.
6781          * @param name The name of the setting to retrieve.
6782          *
6783          * @return The setting's current value.
6784          * @throws SettingNotFoundException Thrown if a setting by the given
6785          * name can't be found or the setting value is not an integer.
6786          */
getLong(ContentResolver cr, String name)6787         public static long getLong(ContentResolver cr, String name)
6788                 throws SettingNotFoundException {
6789             return getLongForUser(cr, name, cr.getUserId());
6790         }
6791 
6792         /** @hide */
getLongForUser(ContentResolver cr, String name, int userHandle)6793         public static long getLongForUser(ContentResolver cr, String name, int userHandle)
6794                 throws SettingNotFoundException {
6795             String v = getStringForUser(cr, name, userHandle);
6796             return parseLongSetting(v, name);
6797         }
6798 
6799         /**
6800          * Convenience function for updating a secure settings value as a long
6801          * integer. This will either create a new entry in the table if the
6802          * given name does not exist, or modify the value of the existing row
6803          * with that name.  Note that internally setting values are always
6804          * stored as strings, so this function converts the given value to a
6805          * string before storing it.
6806          *
6807          * @param cr The ContentResolver to access.
6808          * @param name The name of the setting to modify.
6809          * @param value The new value for the setting.
6810          * @return true if the value was set, false on database errors
6811          */
putLong(ContentResolver cr, String name, long value)6812         public static boolean putLong(ContentResolver cr, String name, long value) {
6813             return putLongForUser(cr, name, value, cr.getUserId());
6814         }
6815 
6816         /** @hide */
6817         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
putLongForUser(ContentResolver cr, String name, long value, int userHandle)6818         public static boolean putLongForUser(ContentResolver cr, String name, long value,
6819                 int userHandle) {
6820             return putStringForUser(cr, name, Long.toString(value), userHandle);
6821         }
6822 
6823         /**
6824          * Convenience function for retrieving a single secure settings value
6825          * as a floating point number.  Note that internally setting values are
6826          * always stored as strings; this function converts the string to an
6827          * float for you. The default value will be returned if the setting
6828          * is not defined or not a valid float.
6829          *
6830          * @param cr The ContentResolver to access.
6831          * @param name The name of the setting to retrieve.
6832          * @param def Value to return if the setting is not defined.
6833          *
6834          * @return The setting's current value, or 'def' if it is not defined
6835          * or not a valid float.
6836          */
getFloat(ContentResolver cr, String name, float def)6837         public static float getFloat(ContentResolver cr, String name, float def) {
6838             return getFloatForUser(cr, name, def, cr.getUserId());
6839         }
6840 
6841         /** @hide */
getFloatForUser(ContentResolver cr, String name, float def, int userHandle)6842         public static float getFloatForUser(ContentResolver cr, String name, float def,
6843                 int userHandle) {
6844             String v = getStringForUser(cr, name, userHandle);
6845             return parseFloatSettingWithDefault(v, def);
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             return getFloatForUser(cr, name, cr.getUserId());
6869         }
6870 
6871         /** @hide */
getFloatForUser(ContentResolver cr, String name, int userHandle)6872         public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
6873                 throws SettingNotFoundException {
6874             String v = getStringForUser(cr, name, userHandle);
6875             return parseFloatSetting(v, name);
6876         }
6877 
6878         /**
6879          * Convenience function for updating a single settings value as a
6880          * floating point number. This will either create a new entry in the
6881          * table if the given name does not exist, or modify the value of the
6882          * existing row with that name.  Note that internally setting values
6883          * are always stored as strings, so this function converts the given
6884          * value to a string before storing it.
6885          *
6886          * @param cr The ContentResolver to access.
6887          * @param name The name of the setting to modify.
6888          * @param value The new value for the setting.
6889          * @return true if the value was set, false on database errors
6890          */
putFloat(ContentResolver cr, String name, float value)6891         public static boolean putFloat(ContentResolver cr, String name, float value) {
6892             return putFloatForUser(cr, name, value, cr.getUserId());
6893         }
6894 
6895         /** @hide */
putFloatForUser(ContentResolver cr, String name, float value, int userHandle)6896         public static boolean putFloatForUser(ContentResolver cr, String name, float value,
6897                 int userHandle) {
6898             return putStringForUser(cr, name, Float.toString(value), userHandle);
6899         }
6900 
6901         /**
6902          * Control whether to enable adaptive sleep mode.
6903          * @hide
6904          */
6905         @Readable
6906         public static final String ADAPTIVE_SLEEP = "adaptive_sleep";
6907 
6908         /**
6909          * Setting key to indicate whether camera-based autorotate is enabled.
6910          *
6911          * @hide
6912          */
6913         public static final String CAMERA_AUTOROTATE = "camera_autorotate";
6914 
6915         /**
6916          * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}
6917          * instead
6918          */
6919         @Deprecated
6920         public static final String DEVELOPMENT_SETTINGS_ENABLED =
6921                 Global.DEVELOPMENT_SETTINGS_ENABLED;
6922 
6923         /**
6924          * When the user has enable the option to have a "bug report" command
6925          * in the power menu.
6926          * @hide
6927          */
6928         @Readable
6929         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
6930 
6931         /**
6932          * The package name for the custom bugreport handler app. This app must be bugreport
6933          * allow-listed. This is currently used only by Power Menu short press.
6934          * @hide
6935          */
6936         public static final String CUSTOM_BUGREPORT_HANDLER_APP = "custom_bugreport_handler_app";
6937 
6938         /**
6939          * The user id for the custom bugreport handler app. This is currently used only by Power
6940          * Menu short press.
6941          * @hide
6942          */
6943         public static final String CUSTOM_BUGREPORT_HANDLER_USER = "custom_bugreport_handler_user";
6944 
6945         /**
6946          * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} instead
6947          */
6948         @Deprecated
6949         public static final String ADB_ENABLED = Global.ADB_ENABLED;
6950 
6951         /**
6952          * Setting to allow mock locations and location provider status to be injected into the
6953          * LocationManager service for testing purposes during application development.  These
6954          * locations and status values  override actual location and status information generated
6955          * by network, gps, or other location providers.
6956          *
6957          * @deprecated This settings is not used anymore.
6958          */
6959         @Deprecated
6960         @Readable
6961         public static final String ALLOW_MOCK_LOCATION = "mock_location";
6962 
6963         /**
6964          * This is used by Bluetooth Manager to store adapter name
6965          * @hide
6966          */
6967         @Readable(maxTargetSdk = Build.VERSION_CODES.S)
6968         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
6969         @SuppressLint("NoSettingsProvider")
6970         public static final String BLUETOOTH_NAME = "bluetooth_name";
6971 
6972         /**
6973          * This is used by Bluetooth Manager to store adapter address
6974          * @hide
6975          */
6976         @Readable(maxTargetSdk = Build.VERSION_CODES.S)
6977         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
6978         @SuppressLint("NoSettingsProvider")
6979         public static final String BLUETOOTH_ADDRESS = "bluetooth_address";
6980 
6981         /**
6982          * This is used by Bluetooth Manager to store whether adapter address is valid
6983          * @hide
6984          */
6985         @Readable(maxTargetSdk = Build.VERSION_CODES.S)
6986         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
6987         @SuppressLint("NoSettingsProvider")
6988         public static final String BLUETOOTH_ADDR_VALID = "bluetooth_addr_valid";
6989 
6990         /**
6991          * This is used by LocalBluetoothLeBroadcast to store the broadcast program info.
6992          * @hide
6993          */
6994         public static final String BLUETOOTH_LE_BROADCAST_PROGRAM_INFO =
6995                 "bluetooth_le_broadcast_program_info";
6996 
6997         /**
6998          * This is used by LocalBluetoothLeBroadcast to store the broadcast code.
6999          * @hide
7000          */
7001         public static final String BLUETOOTH_LE_BROADCAST_CODE = "bluetooth_le_broadcast_code";
7002 
7003         /**
7004          * This is used by LocalBluetoothLeBroadcast to store the app source name.
7005          * @hide
7006          */
7007         public static final String BLUETOOTH_LE_BROADCAST_APP_SOURCE_NAME =
7008                 "bluetooth_le_broadcast_app_source_name";
7009 
7010         /**
7011          * Ringtone routing value for hearing aid. It routes ringtone to hearing aid or device
7012          * speaker.
7013          * <ul>
7014          *     <li> 0 = Default
7015          *     <li> 1 = Route to hearing aid
7016          *     <li> 2 = Route to device speaker
7017          * </ul>
7018          * @hide
7019          */
7020         public static final String HEARING_AID_RINGTONE_ROUTING =
7021                 "hearing_aid_ringtone_routing";
7022 
7023         /**
7024          * Phone call routing value for hearing aid. It routes phone call to hearing aid or
7025          * device speaker.
7026          * <ul>
7027          *     <li> 0 = Default
7028          *     <li> 1 = Route to hearing aid
7029          *     <li> 2 = Route to device speaker
7030          * </ul>
7031          * @hide
7032          */
7033         public static final String HEARING_AID_CALL_ROUTING =
7034                 "hearing_aid_call_routing";
7035 
7036         /**
7037          * Media routing value for hearing aid. It routes media to hearing aid or device
7038          * speaker.
7039          * <ul>
7040          *     <li> 0 = Default
7041          *     <li> 1 = Route to hearing aid
7042          *     <li> 2 = Route to device speaker
7043          * </ul>
7044          * @hide
7045          */
7046         public static final String HEARING_AID_MEDIA_ROUTING =
7047                 "hearing_aid_media_routing";
7048 
7049         /**
7050          * System sounds routing value for hearing aid. It routes system sounds to hearing aid
7051          * or device speaker.
7052          * <ul>
7053          *     <li> 0 = Default
7054          *     <li> 1 = Route to hearing aid
7055          *     <li> 2 = Route to device speaker
7056          * </ul>
7057          * @hide
7058          */
7059         public static final String HEARING_AID_SYSTEM_SOUNDS_ROUTING =
7060                 "hearing_aid_system_sounds_routing";
7061 
7062         /**
7063          * Setting to indicate that on device captions are enabled.
7064          *
7065          * @hide
7066          */
7067         @SystemApi
7068         @Readable
7069         public static final String ODI_CAPTIONS_ENABLED = "odi_captions_enabled";
7070 
7071 
7072         /**
7073          * Setting to indicate live caption button show or hide in the volume
7074          * rocker.
7075          *
7076          * @hide
7077          */
7078         public static final String ODI_CAPTIONS_VOLUME_UI_ENABLED =
7079                 "odi_captions_volume_ui_enabled";
7080 
7081         /**
7082          * On Android 8.0 (API level 26) and higher versions of the platform,
7083          * a 64-bit number (expressed as a hexadecimal string), unique to
7084          * each combination of app-signing key, user, and device.
7085          * Values of {@code ANDROID_ID} are scoped by signing key and user.
7086          * The value may change if a factory reset is performed on the
7087          * device or if an APK signing key changes.
7088          *
7089          * For more information about how the platform handles {@code ANDROID_ID}
7090          * in Android 8.0 (API level 26) and higher, see <a
7091          * href="{@docRoot}about/versions/oreo/android-8.0-changes.html#privacy-all">
7092          * Android 8.0 Behavior Changes</a>.
7093          *
7094          * <p class="note"><strong>Note:</strong> For apps that were installed
7095          * prior to updating the device to a version of Android 8.0
7096          * (API level 26) or higher, the value of {@code ANDROID_ID} changes
7097          * if the app is uninstalled and then reinstalled after the OTA.
7098          * To preserve values across uninstalls after an OTA to Android 8.0
7099          * or higher, developers can use
7100          * <a href="{@docRoot}guide/topics/data/keyvaluebackup.html">
7101          * Key/Value Backup</a>.</p>
7102          *
7103          * <p>In versions of the platform lower than Android 8.0 (API level 26),
7104          * a 64-bit number (expressed as a hexadecimal string) that is randomly
7105          * generated when the user first sets up the device and should remain
7106          * constant for the lifetime of the user's device.
7107          *
7108          * On devices that have
7109          * <a href="{@docRoot}about/versions/android-4.2.html#MultipleUsers">
7110          * multiple users</a>, each user appears as a
7111          * completely separate device, so the {@code ANDROID_ID} value is
7112          * unique to each user.</p>
7113          *
7114          * <p class="note"><strong>Note:</strong> If the caller is an Instant App the ID is scoped
7115          * to the Instant App, it is generated when the Instant App is first installed and reset if
7116          * the user clears the Instant App.
7117          */
7118         @Readable
7119         public static final String ANDROID_ID = "android_id";
7120 
7121         /**
7122          * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
7123          */
7124         @Deprecated
7125         public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
7126 
7127         /**
7128          * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
7129          */
7130         @Deprecated
7131         public static final String DATA_ROAMING = Global.DATA_ROAMING;
7132 
7133         /**
7134          * Stores {@link android.view.inputmethod.InputMethodInfo#getId()} of the input method
7135          * service that is currently selected.
7136          *
7137          * <p>Although the name {@link #DEFAULT_INPUT_METHOD} implies that there is a concept of
7138          * <i>default</i> input method, in reality this setting is no more or less than the
7139          * <strong>currently selected</strong> input method. This setting can be updated at any
7140          * time as a result of user-initiated and system-initiated input method switching.</p>
7141          *
7142          * <p>Use {@link ComponentName#unflattenFromString(String)} to parse the stored value.</p>
7143          */
7144         @Readable
7145         public static final String DEFAULT_INPUT_METHOD = "default_input_method";
7146 
7147         /**
7148          * Setting to record the input method subtype used by default, holding the ID
7149          * of the desired method.
7150          */
7151         @Readable
7152         public static final String SELECTED_INPUT_METHOD_SUBTYPE =
7153                 "selected_input_method_subtype";
7154 
7155         /**
7156          * The {@link android.view.inputmethod.InputMethodInfo.InputMethodInfo#getId() ID} of the
7157          * default voice input method.
7158          * <p>
7159          * This stores the last known default voice IME. If the related system config value changes,
7160          * this is reset by InputMethodManagerService.
7161          * <p>
7162          * This IME is not necessarily in the enabled IME list. That state is still stored in
7163          * {@link #ENABLED_INPUT_METHODS}.
7164          *
7165          * @hide
7166          */
7167         public static final String DEFAULT_VOICE_INPUT_METHOD = "default_voice_input_method";
7168 
7169         /**
7170          * Setting to record the history of input method subtype, holding the pair of ID of IME
7171          * and its last used subtype.
7172          * @hide
7173          */
7174         @Readable
7175         public static final String INPUT_METHODS_SUBTYPE_HISTORY =
7176                 "input_methods_subtype_history";
7177 
7178         /**
7179          * Setting to record the visibility of input method selector
7180          */
7181         @Readable
7182         public static final String INPUT_METHOD_SELECTOR_VISIBILITY =
7183                 "input_method_selector_visibility";
7184 
7185         /**
7186          * Toggle for enabling stylus handwriting. When enabled, current Input method receives
7187          * stylus {@link MotionEvent}s if an {@link Editor} is focused.
7188          *
7189          * @see #STYLUS_HANDWRITING_DEFAULT_VALUE
7190          * @hide
7191          */
7192         @TestApi
7193         @Readable
7194         @SuppressLint("NoSettingsProvider")
7195         public static final String STYLUS_HANDWRITING_ENABLED = "stylus_handwriting_enabled";
7196 
7197         /**
7198          * Default value for {@link #STYLUS_HANDWRITING_ENABLED}.
7199          *
7200          * @hide
7201          */
7202         @TestApi
7203         @Readable
7204         @SuppressLint("NoSettingsProvider")
7205         public static final int STYLUS_HANDWRITING_DEFAULT_VALUE = 1;
7206 
7207         /**
7208          * The currently selected voice interaction service flattened ComponentName.
7209          * @hide
7210          */
7211         @TestApi
7212         @Readable
7213         public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
7214 
7215 
7216         /**
7217          * The currently selected credential service(s) flattened ComponentName.
7218          *
7219          * @hide
7220          */
7221         public static final String CREDENTIAL_SERVICE = "credential_service";
7222 
7223         /**
7224          * The currently selected primary credential service flattened ComponentName.
7225          *
7226          * @hide
7227          */
7228         public static final String CREDENTIAL_SERVICE_PRIMARY = "credential_service_primary";
7229 
7230         /**
7231          * The currently selected autofill service flattened ComponentName.
7232          * @hide
7233          */
7234         @TestApi
7235         @Readable
7236         public static final String AUTOFILL_SERVICE = "autofill_service";
7237 
7238         /**
7239          * Boolean indicating if Autofill supports field classification.
7240          *
7241          * @see android.service.autofill.AutofillService
7242          *
7243          * @hide
7244          */
7245         @SystemApi
7246         @Readable
7247         public static final String AUTOFILL_FEATURE_FIELD_CLASSIFICATION =
7248                 "autofill_field_classification";
7249 
7250         /**
7251          * Boolean indicating if the dark mode dialog shown on first toggle has been seen.
7252          *
7253          * @hide
7254          */
7255         @Readable
7256         public static final String DARK_MODE_DIALOG_SEEN =
7257                 "dark_mode_dialog_seen";
7258 
7259         /**
7260          * Custom time when Dark theme is scheduled to activate.
7261          * Represented as milliseconds from midnight (e.g. 79200000 == 10pm).
7262          * @hide
7263          */
7264         @Readable
7265         public static final String DARK_THEME_CUSTOM_START_TIME =
7266                 "dark_theme_custom_start_time";
7267 
7268         /**
7269          * Custom time when Dark theme is scheduled to deactivate.
7270          * Represented as milliseconds from midnight (e.g. 79200000 == 10pm).
7271          * @hide
7272          */
7273         @Readable
7274         public static final String DARK_THEME_CUSTOM_END_TIME =
7275                 "dark_theme_custom_end_time";
7276 
7277         /**
7278          * Defines value returned by {@link android.service.autofill.UserData#getMaxUserDataSize()}.
7279          *
7280          * @hide
7281          */
7282         @SystemApi
7283         @Readable
7284         public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE =
7285                 "autofill_user_data_max_user_data_size";
7286 
7287         /**
7288          * Defines value returned by
7289          * {@link android.service.autofill.UserData#getMaxFieldClassificationIdsSize()}.
7290          *
7291          * @hide
7292          */
7293         @SystemApi
7294         @Readable
7295         public static final String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE =
7296                 "autofill_user_data_max_field_classification_size";
7297 
7298         /**
7299          * Defines value returned by
7300          * {@link android.service.autofill.UserData#getMaxCategoryCount()}.
7301          *
7302          * @hide
7303          */
7304         @SystemApi
7305         @Readable
7306         public static final String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT =
7307                 "autofill_user_data_max_category_count";
7308 
7309         /**
7310          * Defines value returned by {@link android.service.autofill.UserData#getMaxValueLength()}.
7311          *
7312          * @hide
7313          */
7314         @SystemApi
7315         @Readable
7316         public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH =
7317                 "autofill_user_data_max_value_length";
7318 
7319         /**
7320          * Defines value returned by {@link android.service.autofill.UserData#getMinValueLength()}.
7321          *
7322          * @hide
7323          */
7324         @SystemApi
7325         @Readable
7326         public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH =
7327                 "autofill_user_data_min_value_length";
7328 
7329         /**
7330          * Defines whether Content Capture is enabled for the user.
7331          *
7332          * <p>Type: {@code int} ({@code 0} for disabled, {@code 1} for enabled).
7333          * <p>Default: enabled
7334          *
7335          * @hide
7336          */
7337         @TestApi
7338         @Readable
7339         public static final String CONTENT_CAPTURE_ENABLED = "content_capture_enabled";
7340 
7341         /**
7342          * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
7343          */
7344         @Deprecated
7345         public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
7346 
7347         /**
7348          * Indicates whether a DPC has been downloaded during provisioning.
7349          *
7350          * <p>Type: int (0 for false, 1 for true)
7351          *
7352          * <p>If this is true, then any attempts to begin setup again should result in factory reset
7353          *
7354          * @hide
7355          */
7356         @Readable
7357         public static final String MANAGED_PROVISIONING_DPC_DOWNLOADED =
7358                 "managed_provisioning_dpc_downloaded";
7359 
7360         /**
7361          * Indicates whether the device is under restricted secure FRP mode.
7362          * Secure FRP mode is enabled when the device is under FRP. On solving of FRP challenge,
7363          * device is removed from this mode.
7364          * <p>
7365          * Type: int (0 for false, 1 for true)
7366          *
7367          * @deprecated Use Global.SECURE_FRP_MODE
7368          */
7369         @Deprecated
7370         @Readable
7371         public static final String SECURE_FRP_MODE = "secure_frp_mode";
7372 
7373         /**
7374          * Indicates whether the current user has completed setup via the setup wizard.
7375          * <p>
7376          * Type: int (0 for false, 1 for true)
7377          *
7378          * @hide
7379          */
7380         @SystemApi
7381         @Readable
7382         public static final String USER_SETUP_COMPLETE = "user_setup_complete";
7383 
7384         /**
7385          * Indicates that the user has not started setup personalization.
7386          * One of the possible states for {@link #USER_SETUP_PERSONALIZATION_STATE}.
7387          *
7388          * @hide
7389          */
7390         @SystemApi
7391         public static final int USER_SETUP_PERSONALIZATION_NOT_STARTED = 0;
7392 
7393         /**
7394          * Indicates that the user has not yet completed setup personalization.
7395          * One of the possible states for {@link #USER_SETUP_PERSONALIZATION_STATE}.
7396          *
7397          * @hide
7398          */
7399         @SystemApi
7400         public static final int USER_SETUP_PERSONALIZATION_STARTED = 1;
7401 
7402         /**
7403          * Indicates that the user has snoozed personalization and will complete it later.
7404          * One of the possible states for {@link #USER_SETUP_PERSONALIZATION_STATE}.
7405          *
7406          * @hide
7407          */
7408         @SystemApi
7409         public static final int USER_SETUP_PERSONALIZATION_PAUSED = 2;
7410 
7411         /**
7412          * Indicates that the user has completed setup personalization.
7413          * One of the possible states for {@link #USER_SETUP_PERSONALIZATION_STATE}.
7414          *
7415          * @hide
7416          */
7417         @SystemApi
7418         public static final int USER_SETUP_PERSONALIZATION_COMPLETE = 10;
7419 
7420         /** @hide */
7421         @Retention(RetentionPolicy.SOURCE)
7422         @IntDef({
7423                 USER_SETUP_PERSONALIZATION_NOT_STARTED,
7424                 USER_SETUP_PERSONALIZATION_STARTED,
7425                 USER_SETUP_PERSONALIZATION_PAUSED,
7426                 USER_SETUP_PERSONALIZATION_COMPLETE
7427         })
7428         public @interface UserSetupPersonalization {}
7429 
7430         /**
7431          * Defines the user's current state of device personalization.
7432          * The possible states are defined in {@link UserSetupPersonalization}.
7433          *
7434          * @hide
7435          */
7436         @SystemApi
7437         @Readable
7438         public static final String USER_SETUP_PERSONALIZATION_STATE =
7439                 "user_setup_personalization_state";
7440 
7441         /**
7442          * Whether the current user has been set up via setup wizard (0 = false, 1 = true)
7443          * This value differs from USER_SETUP_COMPLETE in that it can be reset back to 0
7444          * in case SetupWizard has been re-enabled on TV devices.
7445          *
7446          * @hide
7447          */
7448         @Readable
7449         public static final String TV_USER_SETUP_COMPLETE = "tv_user_setup_complete";
7450 
7451         /**
7452          * The prefix for a category name that indicates whether a suggested action from that
7453          * category was marked as completed.
7454          * <p>
7455          * Type: int (0 for false, 1 for true)
7456          *
7457          * @hide
7458          */
7459         @SystemApi
7460         @Readable
7461         public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category.";
7462 
7463         /**
7464          * Whether or not compress blocks should be released on install.
7465          * <p>The setting only determines if the platform will attempt to release
7466          * compress blocks; it does not guarantee that the files will have their
7467          * compress blocks released. Compression is currently only supported on
7468          * some f2fs filesystems.
7469          * <p>
7470          * Type: int (0 for false, 1 for true)
7471          *
7472          * @hide
7473          */
7474         public static final String RELEASE_COMPRESS_BLOCKS_ON_INSTALL =
7475                 "release_compress_blocks_on_install";
7476 
7477         /**
7478          * List of input methods that are currently enabled.  This is a string
7479          * containing the IDs of all enabled input methods, each ID separated
7480          * by ':'.
7481          *
7482          * Format like "ime0;subtype0;subtype1;subtype2:ime1:ime2;subtype0"
7483          * where imeId is ComponentName and subtype is int32.
7484          *
7485          * <p>Note: This setting is not readable to the app targeting API level 34 or higher. use
7486          * {@link android.view.inputmethod.InputMethodManager#getEnabledInputMethodList()} instead.
7487          */
7488         @Readable(maxTargetSdk = Build.VERSION_CODES.TIRAMISU)
7489         public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
7490 
7491         /**
7492          * List of system input methods that are currently disabled.  This is a string
7493          * containing the IDs of all disabled input methods, each ID separated
7494          * by ':'.
7495          * @hide
7496          */
7497         @Readable(maxTargetSdk = Build.VERSION_CODES.TIRAMISU)
7498         public static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods";
7499 
7500         /**
7501          * Whether to show the IME when a hard keyboard is connected. This is a boolean that
7502          * determines if the IME should be shown when a hard keyboard is attached.
7503          * @hide
7504          */
7505         @TestApi
7506         @Readable
7507         @SuppressLint("NoSettingsProvider")
7508         public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
7509 
7510         /**
7511          * Whether stylus button presses are disabled. This is a boolean that
7512          * determines if stylus buttons are ignored.
7513          *
7514          * @hide
7515          */
7516         @TestApi
7517         @Readable
7518         @SuppressLint("NoSettingsProvider")
7519         public static final String STYLUS_BUTTONS_ENABLED = "stylus_buttons_enabled";
7520 
7521         /**
7522          * Preferred default user profile to use with the notes task button shortcut.
7523          *
7524          * @hide
7525          */
7526         @SuppressLint("NoSettingsProvider")
7527         public static final String DEFAULT_NOTE_TASK_PROFILE = "default_note_task_profile";
7528 
7529         /**
7530          * Host name and port for global http proxy. Uses ':' seperator for
7531          * between host and port.
7532          *
7533          * @deprecated Use {@link Global#HTTP_PROXY}
7534          */
7535         @Deprecated
7536         public static final String HTTP_PROXY = Global.HTTP_PROXY;
7537 
7538         /**
7539          * Package designated as always-on VPN provider.
7540          *
7541          * @hide
7542          */
7543         public static final String ALWAYS_ON_VPN_APP = "always_on_vpn_app";
7544 
7545         /**
7546          * Whether to block networking outside of VPN connections while always-on is set.
7547          * @see #ALWAYS_ON_VPN_APP
7548          *
7549          * @hide
7550          */
7551         @Readable
7552         public static final String ALWAYS_ON_VPN_LOCKDOWN = "always_on_vpn_lockdown";
7553 
7554         /**
7555          * Comma separated list of packages that are allowed to access the network when VPN is in
7556          * lockdown mode but not running.
7557          * @see #ALWAYS_ON_VPN_LOCKDOWN
7558          *
7559          * @hide
7560          */
7561         @Readable(maxTargetSdk = Build.VERSION_CODES.S)
7562         public static final String ALWAYS_ON_VPN_LOCKDOWN_WHITELIST =
7563                 "always_on_vpn_lockdown_whitelist";
7564 
7565         /**
7566          * Whether applications can be installed for this user via the system's
7567          * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism.
7568          *
7569          * <p>1 = permit app installation via the system package installer intent
7570          * <p>0 = do not allow use of the package installer
7571          * @deprecated Starting from {@link android.os.Build.VERSION_CODES#O}, apps should use
7572          * {@link PackageManager#canRequestPackageInstalls()}
7573          * @see PackageManager#canRequestPackageInstalls()
7574          */
7575         @Deprecated
7576         @Readable
7577         public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
7578 
7579         /**
7580          * A flag to tell {@link com.android.server.devicepolicy.DevicePolicyManagerService} that
7581          * the default for {@link #INSTALL_NON_MARKET_APPS} is reversed for this user on OTA. So it
7582          * can set the restriction {@link android.os.UserManager#DISALLOW_INSTALL_UNKNOWN_SOURCES}
7583          * on behalf of the profile owner if needed to make the change transparent for profile
7584          * owners.
7585          *
7586          * @hide
7587          */
7588         @Readable
7589         public static final String UNKNOWN_SOURCES_DEFAULT_REVERSED =
7590                 "unknown_sources_default_reversed";
7591 
7592         /**
7593          * Comma-separated list of location providers that are enabled. Do not rely on this value
7594          * being present or correct, or on ContentObserver notifications on the corresponding Uri.
7595          *
7596          * @deprecated This setting no longer exists from Android S onwards as it no longer is
7597          * capable of realistically reflecting location settings. Use {@link
7598          * LocationManager#isProviderEnabled(String)} or {@link LocationManager#isLocationEnabled()}
7599          * instead.
7600          */
7601         @Deprecated
7602         @Readable
7603         public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
7604 
7605         /**
7606          * The current location mode of the device. Do not rely on this value being present or on
7607          * ContentObserver notifications on the corresponding Uri.
7608          *
7609          * @deprecated The preferred methods for checking location mode and listening for changes
7610          * are via {@link LocationManager#isLocationEnabled()} and
7611          * {@link LocationManager#MODE_CHANGED_ACTION}.
7612          */
7613         @Deprecated
7614         @Readable
7615         public static final String LOCATION_MODE = "location_mode";
7616 
7617         /**
7618          * The App or module that changes the location mode.
7619          * @hide
7620          */
7621         @Readable
7622         public static final String LOCATION_CHANGER = "location_changer";
7623 
7624         /**
7625          * The location changer is unknown or unable to detect.
7626          * @hide
7627          */
7628         public static final int LOCATION_CHANGER_UNKNOWN = 0;
7629 
7630         /**
7631          * Location settings in system settings.
7632          * @hide
7633          */
7634         public static final int LOCATION_CHANGER_SYSTEM_SETTINGS = 1;
7635 
7636         /**
7637          * The location icon in drop down notification drawer.
7638          * @hide
7639          */
7640         public static final int LOCATION_CHANGER_QUICK_SETTINGS = 2;
7641 
7642         /**
7643          * Location mode is off.
7644          */
7645         public static final int LOCATION_MODE_OFF = 0;
7646 
7647         /**
7648          * This mode no longer has any distinct meaning, but is interpreted as the location mode is
7649          * on.
7650          *
7651          * @deprecated See {@link #LOCATION_MODE}.
7652          */
7653         @Deprecated
7654         public static final int LOCATION_MODE_SENSORS_ONLY = 1;
7655 
7656         /**
7657          * This mode no longer has any distinct meaning, but is interpreted as the location mode is
7658          * on.
7659          *
7660          * @deprecated See {@link #LOCATION_MODE}.
7661          */
7662         @Deprecated
7663         public static final int LOCATION_MODE_BATTERY_SAVING = 2;
7664 
7665         /**
7666          * This mode no longer has any distinct meaning, but is interpreted as the location mode is
7667          * on.
7668          *
7669          * @deprecated See {@link #LOCATION_MODE}.
7670          */
7671         @Deprecated
7672         public static final int LOCATION_MODE_HIGH_ACCURACY = 3;
7673 
7674         /**
7675          * Location mode is on.
7676          *
7677          * @hide
7678          */
7679         @SystemApi
7680         public static final int LOCATION_MODE_ON = LOCATION_MODE_HIGH_ACCURACY;
7681 
7682         /**
7683          * The current location time zone detection enabled state for the user.
7684          *
7685          * See {@link android.app.time.TimeManager#getTimeZoneCapabilitiesAndConfig} for access.
7686          * See {@link android.app.time.TimeManager#updateTimeZoneConfiguration} to update.
7687          * @hide
7688          */
7689         public static final String LOCATION_TIME_ZONE_DETECTION_ENABLED =
7690                 "location_time_zone_detection_enabled";
7691 
7692         /**
7693          * The accuracy in meters used for coarsening location for clients with only the coarse
7694          * location permission.
7695          *
7696          * @hide
7697          */
7698         @Readable
7699         public static final String LOCATION_COARSE_ACCURACY_M = "locationCoarseAccuracy";
7700 
7701         /**
7702          * Whether or not to show display system location accesses.
7703          * @hide
7704          */
7705         public static final String LOCATION_SHOW_SYSTEM_OPS = "locationShowSystemOps";
7706 
7707         /**
7708          * A flag containing settings used for biometric weak
7709          * @hide
7710          */
7711         @Deprecated
7712         @Readable
7713         public static final String LOCK_BIOMETRIC_WEAK_FLAGS =
7714                 "lock_biometric_weak_flags";
7715 
7716         /**
7717          * Whether lock-to-app will lock the keyguard when exiting.
7718          * @hide
7719          */
7720         @Readable
7721         public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked";
7722 
7723         /**
7724          * Whether autolock is enabled (0 = false, 1 = true)
7725          *
7726          * @deprecated Use {@link android.app.KeyguardManager} to determine the state and security
7727          *             level of the keyguard. Accessing this setting from an app that is targeting
7728          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
7729          */
7730         @Deprecated
7731         @Readable
7732         public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
7733 
7734         /**
7735          * Whether lock pattern is visible as user enters (0 = false, 1 = true)
7736          *
7737          * @deprecated Accessing this setting from an app that is targeting
7738          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
7739          */
7740         @Deprecated
7741         @Readable
7742         public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
7743 
7744         /**
7745          * Whether lock pattern will vibrate as user enters (0 = false, 1 =
7746          * true)
7747          *
7748          * @deprecated Starting in {@link VERSION_CODES#JELLY_BEAN_MR1} the
7749          *             lockscreen uses
7750          *             {@link Settings.System#HAPTIC_FEEDBACK_ENABLED}.
7751          *             Accessing this setting from an app that is targeting
7752          *             {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
7753          */
7754         @Deprecated
7755         @Readable
7756         public static final String
7757                 LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
7758 
7759         /**
7760          * This preference allows the device to be locked given time after screen goes off,
7761          * subject to current DeviceAdmin policy limits.
7762          * @hide
7763          */
7764         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
7765         @Readable
7766         public static final String LOCK_SCREEN_LOCK_AFTER_TIMEOUT = "lock_screen_lock_after_timeout";
7767 
7768 
7769         /**
7770          * This preference contains the string that shows for owner info on LockScreen.
7771          * @hide
7772          * @deprecated
7773          */
7774         @Deprecated
7775         @Readable
7776         public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info";
7777 
7778         /**
7779          * Ids of the user-selected appwidgets on the lockscreen (comma-delimited).
7780          * @hide
7781          */
7782         @Deprecated
7783         @Readable
7784         public static final String LOCK_SCREEN_APPWIDGET_IDS =
7785             "lock_screen_appwidget_ids";
7786 
7787         /**
7788          * Id of the appwidget shown on the lock screen when appwidgets are disabled.
7789          * @hide
7790          */
7791         @Deprecated
7792         @Readable
7793         public static final String LOCK_SCREEN_FALLBACK_APPWIDGET_ID =
7794             "lock_screen_fallback_appwidget_id";
7795 
7796         /**
7797          * Index of the lockscreen appwidget to restore, -1 if none.
7798          * @hide
7799          */
7800         @Deprecated
7801         @Readable
7802         public static final String LOCK_SCREEN_STICKY_APPWIDGET =
7803             "lock_screen_sticky_appwidget";
7804 
7805         /**
7806          * This preference enables showing the owner info on LockScreen.
7807          * @hide
7808          * @deprecated
7809          */
7810         @Deprecated
7811         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
7812         @Readable
7813         public static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
7814             "lock_screen_owner_info_enabled";
7815 
7816         /**
7817          * Indicates whether the user has allowed notifications to be shown atop a securely locked
7818          * screen in their full "private" form (same as when the device is unlocked).
7819          * <p>
7820          * Type: int (0 for false, 1 for true)
7821          *
7822          * @hide
7823          */
7824         @SystemApi
7825         @Readable
7826         public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
7827                 "lock_screen_allow_private_notifications";
7828 
7829         /**
7830          * When set by a user, allows notification remote input atop a securely locked screen
7831          * without having to unlock
7832          * @hide
7833          */
7834         @Readable
7835         public static final String LOCK_SCREEN_ALLOW_REMOTE_INPUT =
7836                 "lock_screen_allow_remote_input";
7837 
7838         /**
7839          * Indicates which clock face to show on lock screen and AOD formatted as a serialized
7840          * {@link org.json.JSONObject} with the format:
7841          *     {"clock": id, "_applied_timestamp": timestamp}
7842          * @hide
7843          */
7844         @Readable
7845         public static final String LOCK_SCREEN_CUSTOM_CLOCK_FACE = "lock_screen_custom_clock_face";
7846 
7847         /**
7848          * Indicates which clock face to show on lock screen and AOD while docked.
7849          * @hide
7850          */
7851         @Readable
7852         public static final String DOCKED_CLOCK_FACE = "docked_clock_face";
7853 
7854         /**
7855          * Set by the system to track if the user needs to see the call to action for
7856          * the lockscreen notification policy.
7857          * @hide
7858          */
7859         @Readable
7860         public static final String SHOW_NOTE_ABOUT_NOTIFICATION_HIDING =
7861                 "show_note_about_notification_hiding";
7862 
7863         /**
7864          * Set to 1 by the system after trust agents have been initialized.
7865          * @hide
7866          */
7867         @Readable
7868         public static final String TRUST_AGENTS_INITIALIZED =
7869                 "trust_agents_initialized";
7870 
7871         /**
7872          * Set to 1 by the system after the list of known trust agents have been initialized.
7873          * @hide
7874          */
7875         public static final String KNOWN_TRUST_AGENTS_INITIALIZED =
7876                 "known_trust_agents_initialized";
7877 
7878         /**
7879          * The Logging ID (a unique 64-bit value) as a hex string.
7880          * Used as a pseudonymous identifier for logging.
7881          * @deprecated This identifier is poorly initialized and has
7882          * many collisions.  It should not be used.
7883          */
7884         @Deprecated
7885         @Readable
7886         public static final String LOGGING_ID = "logging_id";
7887 
7888         /**
7889          * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
7890          */
7891         @Deprecated
7892         public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
7893 
7894         /**
7895          * No longer supported.
7896          */
7897         @Readable
7898         public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
7899 
7900         /**
7901          * No longer supported.
7902          */
7903         @Readable
7904         public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
7905 
7906         /**
7907          * No longer supported.
7908          */
7909         @Readable
7910         public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
7911 
7912         /**
7913          * Settings classname to launch when Settings is clicked from All
7914          * Applications.  Needed because of user testing between the old
7915          * and new Settings apps.
7916          */
7917         // TODO: 881807
7918         @Readable
7919         public static final String SETTINGS_CLASSNAME = "settings_classname";
7920 
7921         /**
7922          * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
7923          */
7924         @Deprecated
7925         public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
7926 
7927         /**
7928          * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
7929          */
7930         @Deprecated
7931         public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
7932 
7933         /**
7934          * If accessibility is enabled.
7935          */
7936         @Readable
7937         public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled";
7938 
7939         /**
7940          * Whether select sound track with audio description by default.
7941          * @hide
7942          */
7943         public static final String ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT =
7944                 "enabled_accessibility_audio_description_by_default";
7945 
7946         /**
7947          * Setting specifying if the accessibility shortcut is enabled.
7948          * @hide
7949          */
7950         @Readable
7951         public static final String ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN =
7952                 "accessibility_shortcut_on_lock_screen";
7953 
7954         /**
7955          * Setting specifying if the accessibility shortcut dialog has been shown to this user.
7956          * @hide
7957          */
7958         @Readable
7959         public static final String ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN =
7960                 "accessibility_shortcut_dialog_shown";
7961 
7962         /**
7963          * Setting specifying if the timeout restriction
7964          * {@link ViewConfiguration#getAccessibilityShortcutKeyTimeout()}
7965          * of the accessibility shortcut dialog is skipped.
7966          *
7967          * @hide
7968          */
7969         public static final String SKIP_ACCESSIBILITY_SHORTCUT_DIALOG_TIMEOUT_RESTRICTION =
7970                 "skip_accessibility_shortcut_dialog_timeout_restriction";
7971 
7972         /**
7973          * Setting specifying the accessibility services, accessibility shortcut targets,
7974          * or features to be toggled via the accessibility shortcut.
7975          *
7976          * <p> This is a colon-separated string list which contains the flattened
7977          * {@link ComponentName} and the class name of a system class implementing a supported
7978          * accessibility feature.
7979          * @hide
7980          */
7981         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
7982         @TestApi
7983         @Readable
7984         public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE =
7985                 "accessibility_shortcut_target_service";
7986 
7987         /**
7988          * Setting specifying the accessibility service or feature to be toggled via the
7989          * accessibility button in the navigation bar. This is either a flattened
7990          * {@link ComponentName} or the class name of a system class implementing a supported
7991          * accessibility feature.
7992          * @hide
7993          */
7994         @Readable
7995         public static final String ACCESSIBILITY_BUTTON_TARGET_COMPONENT =
7996                 "accessibility_button_target_component";
7997 
7998         /**
7999          * Setting specifying the accessibility services, accessibility shortcut targets,
8000          * or features to be toggled via the accessibility button in the navigation bar.
8001          *
8002          * <p> This is a colon-separated string list which contains the flattened
8003          * {@link ComponentName} and the class name of a system class implementing a supported
8004          * accessibility feature.
8005          * @hide
8006          */
8007         @Readable
8008         public static final String ACCESSIBILITY_BUTTON_TARGETS = "accessibility_button_targets";
8009 
8010         /**
8011          * The system class name of magnification controller which is a target to be toggled via
8012          * accessibility shortcut or accessibility button.
8013          *
8014          * @hide
8015          */
8016         @Readable
8017         public static final String ACCESSIBILITY_SHORTCUT_TARGET_MAGNIFICATION_CONTROLLER =
8018                 "com.android.server.accessibility.MagnificationController";
8019 
8020         /**
8021          * If touch exploration is enabled.
8022          */
8023         @Readable
8024         public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
8025 
8026         /**
8027          * List of the enabled accessibility providers.
8028          */
8029         @Readable
8030         public static final String ENABLED_ACCESSIBILITY_SERVICES =
8031             "enabled_accessibility_services";
8032 
8033         /**
8034          * List of the notified non-accessibility category accessibility services.
8035          *
8036          * @hide
8037          */
8038         @Readable
8039         public static final String NOTIFIED_NON_ACCESSIBILITY_CATEGORY_SERVICES =
8040                 "notified_non_accessibility_category_services";
8041 
8042         /**
8043          * List of the accessibility services to which the user has granted
8044          * permission to put the device into touch exploration mode.
8045          *
8046          * @hide
8047          */
8048         @Readable
8049         public static final String TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES =
8050             "touch_exploration_granted_accessibility_services";
8051 
8052         /**
8053          * Is talkback service enabled or not. 0 == no, 1 == yes
8054          *
8055          * @hide
8056          */
8057         public static final String WEAR_TALKBACK_ENABLED = "wear_talkback_enabled";
8058 
8059         /**
8060          * Whether the Global Actions Panel is enabled.
8061          * @hide
8062          */
8063         @Readable
8064         public static final String GLOBAL_ACTIONS_PANEL_ENABLED = "global_actions_panel_enabled";
8065 
8066         /**
8067          * Whether the Global Actions Panel can be toggled on or off in Settings.
8068          * @hide
8069          */
8070         @Readable
8071         public static final String GLOBAL_ACTIONS_PANEL_AVAILABLE =
8072                 "global_actions_panel_available";
8073 
8074         /**
8075          * Enables debug mode for the Global Actions Panel.
8076          * @hide
8077          */
8078         @Readable
8079         public static final String GLOBAL_ACTIONS_PANEL_DEBUG_ENABLED =
8080                 "global_actions_panel_debug_enabled";
8081 
8082         /**
8083          * Whether the hush gesture has ever been used
8084          * @hide
8085          */
8086         @SystemApi
8087         @Readable
8088         public static final String HUSH_GESTURE_USED = "hush_gesture_used";
8089 
8090         /**
8091          * Number of times the user has manually clicked the ringer toggle
8092          * @hide
8093          */
8094         @Readable
8095         public static final String MANUAL_RINGER_TOGGLE_COUNT = "manual_ringer_toggle_count";
8096 
8097         /**
8098          * Whether to play a sound for charging events.
8099          * @hide
8100          */
8101         @Readable
8102         public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled";
8103 
8104         /**
8105          * Whether to vibrate for charging events.
8106          * @hide
8107          */
8108         @Readable
8109         public static final String CHARGING_VIBRATION_ENABLED = "charging_vibration_enabled";
8110 
8111         /**
8112          * If 0, turning on dnd manually will last indefinitely.
8113          * Else if non-negative, turning on dnd manually will last for this many minutes.
8114          * Else (if negative), turning on dnd manually will surface a dialog that prompts
8115          * user to specify a duration.
8116          * @hide
8117          */
8118         @Readable
8119         public static final String ZEN_DURATION = "zen_duration";
8120 
8121         /** @hide */ public static final int ZEN_DURATION_PROMPT = -1;
8122         /** @hide */ public static final int ZEN_DURATION_FOREVER = 0;
8123 
8124         /**
8125          * If nonzero, will show the zen upgrade notification when the user toggles DND on/off.
8126          * @hide
8127          */
8128         @Readable
8129         public static final String SHOW_ZEN_UPGRADE_NOTIFICATION = "show_zen_upgrade_notification";
8130 
8131         /**
8132          * If nonzero, will show the zen update settings suggestion.
8133          * @hide
8134          */
8135         @Readable
8136         public static final String SHOW_ZEN_SETTINGS_SUGGESTION = "show_zen_settings_suggestion";
8137 
8138         /**
8139          * If nonzero, zen has not been updated to reflect new changes.
8140          * @hide
8141          */
8142         @Readable
8143         public static final String ZEN_SETTINGS_UPDATED = "zen_settings_updated";
8144 
8145         /**
8146          * If nonzero, zen setting suggestion has been viewed by user
8147          * @hide
8148          */
8149         @Readable
8150         public static final String ZEN_SETTINGS_SUGGESTION_VIEWED =
8151                 "zen_settings_suggestion_viewed";
8152 
8153         /**
8154          * Whether the in call notification is enabled to play sound during calls.  The value is
8155          * boolean (1 or 0).
8156          * @hide
8157          */
8158         @Readable
8159         public static final String IN_CALL_NOTIFICATION_ENABLED = "in_call_notification_enabled";
8160 
8161         /**
8162          * Uri of the slice that's presented on the keyguard.
8163          * Defaults to a slice with the date and next alarm.
8164          *
8165          * @hide
8166          */
8167         @Readable
8168         public static final String KEYGUARD_SLICE_URI = "keyguard_slice_uri";
8169 
8170         /**
8171          * The adjustment in font weight. This is used to draw text in bold.
8172          *
8173          * <p> This value can be negative. To display bolded text, the adjustment used is 300,
8174          * which is the difference between
8175          * {@link android.graphics.fonts.FontStyle#FONT_WEIGHT_NORMAL} and
8176          * {@link android.graphics.fonts.FontStyle#FONT_WEIGHT_BOLD}.
8177          *
8178          * @hide
8179          */
8180         @Readable
8181         public static final String FONT_WEIGHT_ADJUSTMENT = "font_weight_adjustment";
8182 
8183         /**
8184          * Whether to speak passwords while in accessibility mode.
8185          *
8186          * @deprecated The speaking of passwords is controlled by individual accessibility services.
8187          * Apps should ignore this setting and provide complete information to accessibility
8188          * at all times, which was the behavior when this value was {@code true}.
8189          */
8190         @Deprecated
8191         @Readable
8192         public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
8193 
8194         /**
8195          * Whether to draw text with high contrast while in accessibility mode.
8196          *
8197          * @hide
8198          */
8199         @Readable
8200         public static final String ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED =
8201                 "high_text_contrast_enabled";
8202 
8203         /**
8204          * The color contrast, float in [-1, 1], 1 being the highest contrast.
8205          *
8206          * @hide
8207          */
8208         public static final String CONTRAST_LEVEL = "contrast_level";
8209 
8210         /**
8211          * Setting that specifies whether the display magnification is enabled via a system-wide
8212          * triple tap gesture. Display magnifications allows the user to zoom in the display content
8213          * and is targeted to low vision users. The current magnification scale is controlled by
8214          * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}.
8215          *
8216          * @hide
8217          */
8218         @UnsupportedAppUsage
8219         @TestApi
8220         @Readable
8221         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED =
8222                 "accessibility_display_magnification_enabled";
8223 
8224         /**
8225          * Setting that specifies whether the display magnification is enabled via a shortcut
8226          * affordance within the system's navigation area. Display magnifications allows the user to
8227          * zoom in the display content and is targeted to low vision users. The current
8228          * magnification scale is controlled by {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}.
8229          *
8230          * @deprecated Use {@link #ACCESSIBILITY_BUTTON_TARGETS} instead.
8231          * {@link #ACCESSIBILITY_BUTTON_TARGETS} holds the magnification system class name
8232          * when navigation bar magnification is enabled.
8233          * @hide
8234          */
8235         @SystemApi
8236         @Readable
8237         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED =
8238                 "accessibility_display_magnification_navbar_enabled";
8239 
8240         /**
8241          * Setting that specifies what the display magnification scale is.
8242          * Display magnifications allows the user to zoom in the display
8243          * content and is targeted to low vision users. Whether a display
8244          * magnification is performed is controlled by
8245          * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED} and
8246          * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED}
8247          *
8248          * @hide
8249          */
8250         @Readable
8251         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE =
8252                 "accessibility_display_magnification_scale";
8253 
8254         /**
8255          * Unused mangnification setting
8256          *
8257          * @hide
8258          * @deprecated
8259          */
8260         @Deprecated
8261         @Readable
8262         public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE =
8263                 "accessibility_display_magnification_auto_update";
8264 
8265         /**
8266          * Accessibility Window Magnification Allow diagonal scrolling value. The value is boolean.
8267          * 1 : on, 0 : off
8268          *
8269          * @hide
8270          */
8271         public static final String ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING =
8272                 "accessibility_allow_diagonal_scrolling";
8273 
8274 
8275         /**
8276          * Setting that specifies what mode the soft keyboard is in (default or hidden). Can be
8277          * modified from an AccessibilityService using the SoftKeyboardController.
8278          *
8279          * @hide
8280          */
8281         @Readable
8282         public static final String ACCESSIBILITY_SOFT_KEYBOARD_MODE =
8283                 "accessibility_soft_keyboard_mode";
8284 
8285         /**
8286          * Default soft keyboard behavior.
8287          *
8288          * @hide
8289          */
8290         public static final int SHOW_MODE_AUTO = 0;
8291 
8292         /**
8293          * Soft keyboard is never shown.
8294          *
8295          * @hide
8296          */
8297         public static final int SHOW_MODE_HIDDEN = 1;
8298 
8299         /**
8300          * Setting that specifies whether timed text (captions) should be
8301          * displayed in video content. Text display properties are controlled by
8302          * the following settings:
8303          * <ul>
8304          * <li>{@link #ACCESSIBILITY_CAPTIONING_LOCALE}
8305          * <li>{@link #ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR}
8306          * <li>{@link #ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR}
8307          * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_COLOR}
8308          * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_TYPE}
8309          * <li>{@link #ACCESSIBILITY_CAPTIONING_TYPEFACE}
8310          * <li>{@link #ACCESSIBILITY_CAPTIONING_FONT_SCALE}
8311          * </ul>
8312          *
8313          * @hide
8314          */
8315         @Readable
8316         public static final String ACCESSIBILITY_CAPTIONING_ENABLED =
8317                 "accessibility_captioning_enabled";
8318 
8319         /**
8320          * Setting that specifies the language for captions as a locale string,
8321          * e.g. en_US.
8322          *
8323          * @see java.util.Locale#toString
8324          * @hide
8325          */
8326         @Readable
8327         public static final String ACCESSIBILITY_CAPTIONING_LOCALE =
8328                 "accessibility_captioning_locale";
8329 
8330         /**
8331          * Integer property that specifies the preset style for captions, one
8332          * of:
8333          * <ul>
8334          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESET_CUSTOM}
8335          * <li>a valid index of {@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESETS}
8336          * </ul>
8337          *
8338          * @see java.util.Locale#toString
8339          * @hide
8340          */
8341         @Readable
8342         public static final String ACCESSIBILITY_CAPTIONING_PRESET =
8343                 "accessibility_captioning_preset";
8344 
8345         /**
8346          * Integer property that specifes the background color for captions as a
8347          * packed 32-bit color.
8348          *
8349          * @see android.graphics.Color#argb
8350          * @hide
8351          */
8352         @Readable
8353         public static final String ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR =
8354                 "accessibility_captioning_background_color";
8355 
8356         /**
8357          * Integer property that specifes the foreground color for captions as a
8358          * packed 32-bit color.
8359          *
8360          * @see android.graphics.Color#argb
8361          * @hide
8362          */
8363         @Readable
8364         public static final String ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR =
8365                 "accessibility_captioning_foreground_color";
8366 
8367         /**
8368          * Integer property that specifes the edge type for captions, one of:
8369          * <ul>
8370          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_NONE}
8371          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_OUTLINE}
8372          * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_DROP_SHADOW}
8373          * </ul>
8374          *
8375          * @see #ACCESSIBILITY_CAPTIONING_EDGE_COLOR
8376          * @hide
8377          */
8378         @Readable
8379         public static final String ACCESSIBILITY_CAPTIONING_EDGE_TYPE =
8380                 "accessibility_captioning_edge_type";
8381 
8382         /**
8383          * Integer property that specifes the edge color for captions as a
8384          * packed 32-bit color.
8385          *
8386          * @see #ACCESSIBILITY_CAPTIONING_EDGE_TYPE
8387          * @see android.graphics.Color#argb
8388          * @hide
8389          */
8390         @Readable
8391         public static final String ACCESSIBILITY_CAPTIONING_EDGE_COLOR =
8392                 "accessibility_captioning_edge_color";
8393 
8394         /**
8395          * Integer property that specifes the window color for captions as a
8396          * packed 32-bit color.
8397          *
8398          * @see android.graphics.Color#argb
8399          * @hide
8400          */
8401         @Readable
8402         public static final String ACCESSIBILITY_CAPTIONING_WINDOW_COLOR =
8403                 "accessibility_captioning_window_color";
8404 
8405         /**
8406          * String property that specifies the typeface for captions, one of:
8407          * <ul>
8408          * <li>DEFAULT
8409          * <li>MONOSPACE
8410          * <li>SANS_SERIF
8411          * <li>SERIF
8412          * </ul>
8413          *
8414          * @see android.graphics.Typeface
8415          * @hide
8416          */
8417         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8418         @Readable
8419         public static final String ACCESSIBILITY_CAPTIONING_TYPEFACE =
8420                 "accessibility_captioning_typeface";
8421 
8422         /**
8423          * Floating point property that specifies font scaling for captions.
8424          *
8425          * @hide
8426          */
8427         @Readable
8428         public static final String ACCESSIBILITY_CAPTIONING_FONT_SCALE =
8429                 "accessibility_captioning_font_scale";
8430 
8431         /**
8432          * Setting that specifies whether display color inversion is enabled.
8433          */
8434         @Readable
8435         public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED =
8436                 "accessibility_display_inversion_enabled";
8437 
8438         /**
8439          * Flag that specifies whether font size has been changed. The flag will
8440          * be set when users change the scaled value of font size for the first time.
8441          * @hide
8442          */
8443         @Readable
8444         public static final String ACCESSIBILITY_FONT_SCALING_HAS_BEEN_CHANGED =
8445                 "accessibility_font_scaling_has_been_changed";
8446 
8447         /**
8448          * Setting that specifies whether display color space adjustment is
8449          * enabled.
8450          *
8451          * @hide
8452          */
8453         @UnsupportedAppUsage
8454         @Readable
8455         public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED =
8456                 "accessibility_display_daltonizer_enabled";
8457 
8458         /**
8459          * Integer property that specifies the type of color space adjustment to
8460          * perform. Valid values are defined in AccessibilityManager and Settings arrays.xml:
8461          * - AccessibilityManager.DALTONIZER_DISABLED = -1
8462          * - AccessibilityManager.DALTONIZER_SIMULATE_MONOCHROMACY = 0
8463          * - <item>@string/daltonizer_mode_protanomaly</item> = 11
8464          * - AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY and
8465          *       <item>@string/daltonizer_mode_deuteranomaly</item> = 12
8466          * - <item>@string/daltonizer_mode_tritanomaly</item> = 13
8467          *
8468          * @hide
8469          */
8470         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8471         @Readable
8472         public static final String ACCESSIBILITY_DISPLAY_DALTONIZER =
8473                 "accessibility_display_daltonizer";
8474 
8475         /**
8476          * Setting that specifies whether automatic click when the mouse pointer stops moving is
8477          * enabled.
8478          *
8479          * @hide
8480          */
8481         @UnsupportedAppUsage
8482         @Readable
8483         public static final String ACCESSIBILITY_AUTOCLICK_ENABLED =
8484                 "accessibility_autoclick_enabled";
8485 
8486         /**
8487          * Integer setting specifying amount of time in ms the mouse pointer has to stay still
8488          * before performing click when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set.
8489          *
8490          * @see #ACCESSIBILITY_AUTOCLICK_ENABLED
8491          * @hide
8492          */
8493         @Readable
8494         public static final String ACCESSIBILITY_AUTOCLICK_DELAY =
8495                 "accessibility_autoclick_delay";
8496 
8497         /**
8498          * Whether or not larger size icons are used for the pointer of mouse/trackpad for
8499          * accessibility.
8500          * (0 = false, 1 = true)
8501          * @hide
8502          */
8503         @UnsupportedAppUsage
8504         @Readable
8505         public static final String ACCESSIBILITY_LARGE_POINTER_ICON =
8506                 "accessibility_large_pointer_icon";
8507 
8508         /**
8509          * The timeout for considering a press to be a long press in milliseconds.
8510          * @hide
8511          */
8512         @UnsupportedAppUsage
8513         @Readable
8514         public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
8515 
8516         /**
8517          * The duration in milliseconds between the first tap's up event and the second tap's
8518          * down event for an interaction to be considered part of the same multi-press.
8519          * @hide
8520          */
8521         @Readable
8522         public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
8523 
8524         /**
8525          * Setting that specifies recommended timeout in milliseconds for controls
8526          * which don't need user's interactions.
8527          *
8528          * @hide
8529          */
8530         @Readable
8531         public static final String ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS =
8532                 "accessibility_non_interactive_ui_timeout_ms";
8533 
8534         /**
8535          * Setting that specifies recommended timeout in milliseconds for controls
8536          * which need user's interactions.
8537          *
8538          * @hide
8539          */
8540         @Readable
8541         public static final String ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS =
8542                 "accessibility_interactive_ui_timeout_ms";
8543 
8544 
8545         /**
8546          * Setting that specifies whether Reduce Bright Colors, or brightness dimming by color
8547          * adjustment, is enabled.
8548          *
8549          * @hide
8550          */
8551         public static final String REDUCE_BRIGHT_COLORS_ACTIVATED =
8552                 "reduce_bright_colors_activated";
8553 
8554         /**
8555          * Setting that specifies the level of Reduce Bright Colors in intensity. The range is
8556          * [0, 100].
8557          *
8558          * @hide
8559          */
8560         public static final String REDUCE_BRIGHT_COLORS_LEVEL =
8561                 "reduce_bright_colors_level";
8562 
8563         /**
8564          * Setting that specifies whether Reduce Bright Colors should persist across reboots.
8565          *
8566          * @hide
8567          */
8568         public static final String REDUCE_BRIGHT_COLORS_PERSIST_ACROSS_REBOOTS =
8569                 "reduce_bright_colors_persist_across_reboots";
8570 
8571         /**
8572          * List of the enabled print services.
8573          *
8574          * N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade
8575          * from pre-N.
8576          *
8577          * @hide
8578          */
8579         @UnsupportedAppUsage
8580         @Readable
8581         public static final String ENABLED_PRINT_SERVICES =
8582             "enabled_print_services";
8583 
8584         /**
8585          * List of the disabled print services.
8586          *
8587          * @hide
8588          */
8589         @TestApi
8590         @Readable
8591         public static final String DISABLED_PRINT_SERVICES =
8592             "disabled_print_services";
8593 
8594         /**
8595          * The saved value for WindowManagerService.setForcedDisplayDensity()
8596          * formatted as a single integer representing DPI. If unset, then use
8597          * the real display density.
8598          *
8599          * @hide
8600          */
8601         @Readable
8602         public static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
8603 
8604         /**
8605          * Setting to always use the default text-to-speech settings regardless
8606          * of the application settings.
8607          * 1 = override application settings,
8608          * 0 = use application settings (if specified).
8609          *
8610          * @deprecated  The value of this setting is no longer respected by
8611          * the framework text to speech APIs as of the Ice Cream Sandwich release.
8612          */
8613         @Deprecated
8614         @Readable
8615         public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
8616 
8617         /**
8618          * Default text-to-speech engine speech rate. 100 = 1x
8619          */
8620         @Readable
8621         public static final String TTS_DEFAULT_RATE = "tts_default_rate";
8622 
8623         /**
8624          * Default text-to-speech engine pitch. 100 = 1x
8625          */
8626         @Readable
8627         public static final String TTS_DEFAULT_PITCH = "tts_default_pitch";
8628 
8629         /**
8630          * Default text-to-speech engine.
8631          */
8632         @Readable
8633         public static final String TTS_DEFAULT_SYNTH = "tts_default_synth";
8634 
8635         /**
8636          * Default text-to-speech language.
8637          *
8638          * @deprecated this setting is no longer in use, as of the Ice Cream
8639          * Sandwich release. Apps should never need to read this setting directly,
8640          * instead can query the TextToSpeech framework classes for the default
8641          * locale. {@link TextToSpeech#getLanguage()}.
8642          */
8643         @Deprecated
8644         @Readable
8645         public static final String TTS_DEFAULT_LANG = "tts_default_lang";
8646 
8647         /**
8648          * Default text-to-speech country.
8649          *
8650          * @deprecated this setting is no longer in use, as of the Ice Cream
8651          * Sandwich release. Apps should never need to read this setting directly,
8652          * instead can query the TextToSpeech framework classes for the default
8653          * locale. {@link TextToSpeech#getLanguage()}.
8654          */
8655         @Deprecated
8656         @Readable
8657         public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
8658 
8659         /**
8660          * Default text-to-speech locale variant.
8661          *
8662          * @deprecated this setting is no longer in use, as of the Ice Cream
8663          * Sandwich release. Apps should never need to read this setting directly,
8664          * instead can query the TextToSpeech framework classes for the
8665          * locale that is in use {@link TextToSpeech#getLanguage()}.
8666          */
8667         @Deprecated
8668         @Readable
8669         public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
8670 
8671         /**
8672          * Stores the default tts locales on a per engine basis. Stored as
8673          * a comma seperated list of values, each value being of the form
8674          * {@code engine_name:locale} for example,
8675          * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}. This
8676          * supersedes {@link #TTS_DEFAULT_LANG}, {@link #TTS_DEFAULT_COUNTRY} and
8677          * {@link #TTS_DEFAULT_VARIANT}. Apps should never need to read this
8678          * setting directly, and can query the TextToSpeech framework classes
8679          * for the locale that is in use.
8680          *
8681          * @hide
8682          */
8683         @Readable
8684         public static final String TTS_DEFAULT_LOCALE = "tts_default_locale";
8685 
8686         /**
8687          * Space delimited list of plugin packages that are enabled.
8688          */
8689         @Readable
8690         public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
8691 
8692         /**
8693          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON}
8694          * instead.
8695          */
8696         @Deprecated
8697         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
8698                 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
8699 
8700         /**
8701          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY}
8702          * instead.
8703          */
8704         @Deprecated
8705         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
8706                 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
8707 
8708         /**
8709          * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
8710          * instead.
8711          */
8712         @Deprecated
8713         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT =
8714                 Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
8715 
8716         /**
8717          * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON}
8718          * instead.
8719          */
8720         @Deprecated
8721         public static final String WIFI_ON = Global.WIFI_ON;
8722 
8723         /**
8724          * The acceptable packet loss percentage (range 0 - 100) before trying
8725          * another AP on the same network.
8726          * @deprecated This setting is not used.
8727          */
8728         @Deprecated
8729         @Readable
8730         public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
8731                 "wifi_watchdog_acceptable_packet_loss_percentage";
8732 
8733         /**
8734          * The number of access points required for a network in order for the
8735          * watchdog to monitor it.
8736          * @deprecated This setting is not used.
8737          */
8738         @Deprecated
8739         @Readable
8740         public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
8741 
8742         /**
8743          * The delay between background checks.
8744          * @deprecated This setting is not used.
8745          */
8746         @Deprecated
8747         @Readable
8748         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
8749                 "wifi_watchdog_background_check_delay_ms";
8750 
8751         /**
8752          * Whether the Wi-Fi watchdog is enabled for background checking even
8753          * after it thinks the user has connected to a good access point.
8754          * @deprecated This setting is not used.
8755          */
8756         @Deprecated
8757         @Readable
8758         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
8759                 "wifi_watchdog_background_check_enabled";
8760 
8761         /**
8762          * The timeout for a background ping
8763          * @deprecated This setting is not used.
8764          */
8765         @Deprecated
8766         @Readable
8767         public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
8768                 "wifi_watchdog_background_check_timeout_ms";
8769 
8770         /**
8771          * The number of initial pings to perform that *may* be ignored if they
8772          * fail. Again, if these fail, they will *not* be used in packet loss
8773          * calculation. For example, one network always seemed to time out for
8774          * the first couple pings, so this is set to 3 by default.
8775          * @deprecated This setting is not used.
8776          */
8777         @Deprecated
8778         @Readable
8779         public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
8780             "wifi_watchdog_initial_ignored_ping_count";
8781 
8782         /**
8783          * The maximum number of access points (per network) to attempt to test.
8784          * If this number is reached, the watchdog will no longer monitor the
8785          * initial connection state for the network. This is a safeguard for
8786          * networks containing multiple APs whose DNS does not respond to pings.
8787          * @deprecated This setting is not used.
8788          */
8789         @Deprecated
8790         @Readable
8791         public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
8792 
8793         /**
8794          * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
8795          */
8796         @Deprecated
8797         @Readable
8798         public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
8799 
8800         /**
8801          * A comma-separated list of SSIDs for which the Wi-Fi watchdog should be enabled.
8802          * @deprecated This setting is not used.
8803          */
8804         @Deprecated
8805         @Readable
8806         public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
8807 
8808         /**
8809          * The number of pings to test if an access point is a good connection.
8810          * @deprecated This setting is not used.
8811          */
8812         @Deprecated
8813         @Readable
8814         public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
8815 
8816         /**
8817          * The delay between pings.
8818          * @deprecated This setting is not used.
8819          */
8820         @Deprecated
8821         @Readable
8822         public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
8823 
8824         /**
8825          * The timeout per ping.
8826          * @deprecated This setting is not used.
8827          */
8828         @Deprecated
8829         @Readable
8830         public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
8831 
8832         /**
8833          * @deprecated Use
8834          * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
8835          */
8836         @Deprecated
8837         public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
8838 
8839         /**
8840          * @deprecated Use
8841          * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
8842          */
8843         @Deprecated
8844         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
8845                 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
8846 
8847         /**
8848          * The number of milliseconds to hold on to a PendingIntent based request. This delay gives
8849          * the receivers of the PendingIntent an opportunity to make a new network request before
8850          * the Network satisfying the request is potentially removed.
8851          *
8852          * @hide
8853          */
8854         @Readable
8855         public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS =
8856                 "connectivity_release_pending_intent_delay_ms";
8857 
8858         /**
8859          * Whether background data usage is allowed.
8860          *
8861          * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH},
8862          *             availability of background data depends on several
8863          *             combined factors. When background data is unavailable,
8864          *             {@link ConnectivityManager#getActiveNetworkInfo()} will
8865          *             now appear disconnected.
8866          */
8867         @Deprecated
8868         @Readable
8869         public static final String BACKGROUND_DATA = "background_data";
8870 
8871         /**
8872          * Origins for which browsers should allow geolocation by default.
8873          * The value is a space-separated list of origins.
8874          */
8875         @Readable
8876         public static final String ALLOWED_GEOLOCATION_ORIGINS
8877                 = "allowed_geolocation_origins";
8878 
8879         /**
8880          * The preferred TTY mode     0 = TTy Off, CDMA default
8881          *                            1 = TTY Full
8882          *                            2 = TTY HCO
8883          *                            3 = TTY VCO
8884          * @hide
8885          */
8886         @Readable
8887         public static final String PREFERRED_TTY_MODE =
8888                 "preferred_tty_mode";
8889 
8890         /**
8891          * Whether the enhanced voice privacy mode is enabled.
8892          * 0 = normal voice privacy
8893          * 1 = enhanced voice privacy
8894          * @hide
8895          */
8896         @Readable
8897         public static final String ENHANCED_VOICE_PRIVACY_ENABLED = "enhanced_voice_privacy_enabled";
8898 
8899         /**
8900          * Whether the TTY mode mode is enabled.
8901          * 0 = disabled
8902          * 1 = enabled
8903          * @hide
8904          */
8905         @Readable
8906         public static final String TTY_MODE_ENABLED = "tty_mode_enabled";
8907 
8908         /**
8909          * User-selected RTT mode. When on, outgoing and incoming calls will be answered as RTT
8910          * calls when supported by the device and carrier. Boolean value.
8911          * 0 = OFF
8912          * 1 = ON
8913          */
8914         @Readable
8915         public static final String RTT_CALLING_MODE = "rtt_calling_mode";
8916 
8917         /**
8918         /**
8919          * Controls whether settings backup is enabled.
8920          * Type: int ( 0 = disabled, 1 = enabled )
8921          * @hide
8922          */
8923         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8924         @Readable
8925         public static final String BACKUP_ENABLED = "backup_enabled";
8926 
8927         /**
8928          * Controls whether application data is automatically restored from backup
8929          * at install time.
8930          * Type: int ( 0 = disabled, 1 = enabled )
8931          * @hide
8932          */
8933         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8934         @Readable
8935         public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore";
8936 
8937         /**
8938          * Controls whether framework backup scheduling is enabled.
8939          * @hide
8940          */
8941         public static final String BACKUP_SCHEDULING_ENABLED = "backup_scheduling_enabled";
8942 
8943         /**
8944          * Indicates whether settings backup has been fully provisioned.
8945          * Type: int ( 0 = unprovisioned, 1 = fully provisioned )
8946          * @hide
8947          */
8948         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8949         @Readable
8950         public static final String BACKUP_PROVISIONED = "backup_provisioned";
8951 
8952         /**
8953          * Component of the transport to use for backup/restore.
8954          * @hide
8955          */
8956         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
8957         @Readable
8958         public static final String BACKUP_TRANSPORT = "backup_transport";
8959 
8960         /**
8961          * Indicates the version for which the setup wizard was last shown. The version gets
8962          * bumped for each release when there is new setup information to show.
8963          *
8964          * @hide
8965          */
8966         @SystemApi
8967         @Readable
8968         public static final String LAST_SETUP_SHOWN = "last_setup_shown";
8969 
8970         /**
8971          * The interval in milliseconds after which Wi-Fi is considered idle.
8972          * When idle, it is possible for the device to be switched from Wi-Fi to
8973          * the mobile data network.
8974          * @hide
8975          * @deprecated Use {@link android.provider.Settings.Global#WIFI_IDLE_MS}
8976          * instead.
8977          */
8978         @Deprecated
8979         public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS;
8980 
8981         /**
8982          * The global search provider chosen by the user (if multiple global
8983          * search providers are installed). This will be the provider returned
8984          * by {@link SearchManager#getGlobalSearchActivity()} if it's still
8985          * installed. This setting is stored as a flattened component name as
8986          * per {@link ComponentName#flattenToString()}.
8987          *
8988          * @hide
8989          */
8990         @Readable
8991         public static final String SEARCH_GLOBAL_SEARCH_ACTIVITY =
8992                 "search_global_search_activity";
8993 
8994         /**
8995          * The number of promoted sources in GlobalSearch.
8996          * @hide
8997          */
8998         @Readable
8999         public static final String SEARCH_NUM_PROMOTED_SOURCES = "search_num_promoted_sources";
9000         /**
9001          * The maximum number of suggestions returned by GlobalSearch.
9002          * @hide
9003          */
9004         @Readable
9005         public static final String SEARCH_MAX_RESULTS_TO_DISPLAY = "search_max_results_to_display";
9006         /**
9007          * The number of suggestions GlobalSearch will ask each non-web search source for.
9008          * @hide
9009          */
9010         @Readable
9011         public static final String SEARCH_MAX_RESULTS_PER_SOURCE = "search_max_results_per_source";
9012         /**
9013          * The number of suggestions the GlobalSearch will ask the web search source for.
9014          * @hide
9015          */
9016         @Readable
9017         public static final String SEARCH_WEB_RESULTS_OVERRIDE_LIMIT =
9018                 "search_web_results_override_limit";
9019         /**
9020          * The number of milliseconds that GlobalSearch will wait for suggestions from
9021          * promoted sources before continuing with all other sources.
9022          * @hide
9023          */
9024         @Readable
9025         public static final String SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS =
9026                 "search_promoted_source_deadline_millis";
9027         /**
9028          * The number of milliseconds before GlobalSearch aborts search suggesiton queries.
9029          * @hide
9030          */
9031         @Readable
9032         public static final String SEARCH_SOURCE_TIMEOUT_MILLIS = "search_source_timeout_millis";
9033         /**
9034          * The maximum number of milliseconds that GlobalSearch shows the previous results
9035          * after receiving a new query.
9036          * @hide
9037          */
9038         @Readable
9039         public static final String SEARCH_PREFILL_MILLIS = "search_prefill_millis";
9040         /**
9041          * The maximum age of log data used for shortcuts in GlobalSearch.
9042          * @hide
9043          */
9044         @Readable
9045         public static final String SEARCH_MAX_STAT_AGE_MILLIS = "search_max_stat_age_millis";
9046         /**
9047          * The maximum age of log data used for source ranking in GlobalSearch.
9048          * @hide
9049          */
9050         @Readable
9051         public static final String SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS =
9052                 "search_max_source_event_age_millis";
9053         /**
9054          * The minimum number of impressions needed to rank a source in GlobalSearch.
9055          * @hide
9056          */
9057         @Readable
9058         public static final String SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING =
9059                 "search_min_impressions_for_source_ranking";
9060         /**
9061          * The minimum number of clicks needed to rank a source in GlobalSearch.
9062          * @hide
9063          */
9064         @Readable
9065         public static final String SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING =
9066                 "search_min_clicks_for_source_ranking";
9067         /**
9068          * The maximum number of shortcuts shown by GlobalSearch.
9069          * @hide
9070          */
9071         @Readable
9072         public static final String SEARCH_MAX_SHORTCUTS_RETURNED = "search_max_shortcuts_returned";
9073         /**
9074          * The size of the core thread pool for suggestion queries in GlobalSearch.
9075          * @hide
9076          */
9077         @Readable
9078         public static final String SEARCH_QUERY_THREAD_CORE_POOL_SIZE =
9079                 "search_query_thread_core_pool_size";
9080         /**
9081          * The maximum size of the thread pool for suggestion queries in GlobalSearch.
9082          * @hide
9083          */
9084         @Readable
9085         public static final String SEARCH_QUERY_THREAD_MAX_POOL_SIZE =
9086                 "search_query_thread_max_pool_size";
9087         /**
9088          * The size of the core thread pool for shortcut refreshing in GlobalSearch.
9089          * @hide
9090          */
9091         @Readable
9092         public static final String SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE =
9093                 "search_shortcut_refresh_core_pool_size";
9094         /**
9095          * The maximum size of the thread pool for shortcut refreshing in GlobalSearch.
9096          * @hide
9097          */
9098         @Readable
9099         public static final String SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE =
9100                 "search_shortcut_refresh_max_pool_size";
9101         /**
9102          * The maximun time that excess threads in the GlobalSeach thread pools will
9103          * wait before terminating.
9104          * @hide
9105          */
9106         @Readable
9107         public static final String SEARCH_THREAD_KEEPALIVE_SECONDS =
9108                 "search_thread_keepalive_seconds";
9109         /**
9110          * The maximum number of concurrent suggestion queries to each source.
9111          * @hide
9112          */
9113         @Readable
9114         public static final String SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT =
9115                 "search_per_source_concurrent_query_limit";
9116 
9117         /**
9118          * Whether or not alert sounds are played on StorageManagerService events.
9119          * (0 = false, 1 = true)
9120          * @hide
9121          */
9122         @Readable
9123         public static final String MOUNT_PLAY_NOTIFICATION_SND = "mount_play_not_snd";
9124 
9125         /**
9126          * Whether or not UMS auto-starts on UMS host detection. (0 = false, 1 = true)
9127          * @hide
9128          */
9129         @Readable
9130         public static final String MOUNT_UMS_AUTOSTART = "mount_ums_autostart";
9131 
9132         /**
9133          * Whether or not a notification is displayed on UMS host detection. (0 = false, 1 = true)
9134          * @hide
9135          */
9136         @Readable
9137         public static final String MOUNT_UMS_PROMPT = "mount_ums_prompt";
9138 
9139         /**
9140          * Whether or not a notification is displayed while UMS is enabled. (0 = false, 1 = true)
9141          * @hide
9142          */
9143         @Readable
9144         public static final String MOUNT_UMS_NOTIFY_ENABLED = "mount_ums_notify_enabled";
9145 
9146         /**
9147          * If nonzero, ANRs in invisible background processes bring up a dialog.
9148          * Otherwise, the process will be silently killed.
9149          *
9150          * Also prevents ANRs and crash dialogs from being suppressed.
9151          * @hide
9152          */
9153         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9154         @TestApi
9155         @Readable
9156         @SuppressLint("NoSettingsProvider")
9157         public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
9158 
9159         /**
9160          * If nonzero, crashes in foreground processes will bring up a dialog.
9161          * Otherwise, the process will be silently killed.
9162          * @hide
9163          */
9164         @TestApi
9165         @Readable
9166         @SuppressLint("NoSettingsProvider")
9167         public static final String SHOW_FIRST_CRASH_DIALOG_DEV_OPTION =
9168                 "show_first_crash_dialog_dev_option";
9169 
9170         /**
9171          * The {@link ComponentName} string of the service to be used as the voice recognition
9172          * service.
9173          *
9174          * @hide
9175          */
9176         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9177         @Readable
9178         public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service";
9179 
9180         /**
9181          * The {@link ComponentName} string of the selected spell checker service which is
9182          * one of the services managed by the text service manager.
9183          *
9184          * @hide
9185          */
9186         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9187         @TestApi
9188         @Readable
9189         @SuppressLint("NoSettingsProvider")
9190         public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
9191 
9192         /**
9193          * {@link android.view.textservice.SpellCheckerSubtype#hashCode()} of the selected subtype
9194          * of the selected spell checker service which is one of the services managed by the text
9195          * service manager.
9196          *
9197          * @hide
9198          */
9199         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9200         @TestApi
9201         @Readable
9202         @SuppressLint("NoSettingsProvider")
9203         public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
9204                 "selected_spell_checker_subtype";
9205 
9206         /**
9207          * Whether spell checker is enabled or not.
9208          *
9209          * @hide
9210          */
9211         @Readable
9212         public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
9213 
9214         /**
9215          * What happens when the user presses the Power button while in-call
9216          * and the screen is on.<br/>
9217          * <b>Values:</b><br/>
9218          * 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/>
9219          * 2 - The Power button hangs up the current call.<br/>
9220          *
9221          * @hide
9222          */
9223         @UnsupportedAppUsage
9224         @Readable
9225         public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior";
9226 
9227         /**
9228          * Whether the user allows minimal post processing or not.
9229          *
9230          * <p>Values:
9231          * 0 - Not allowed. Any preferences set through the Window.setPreferMinimalPostProcessing
9232          *     API will be ignored.
9233          * 1 - Allowed. Any preferences set through the Window.setPreferMinimalPostProcessing API
9234          *     will be respected and the appropriate signals will be sent to display.
9235          *     (Default behaviour)
9236          *
9237          * @hide
9238          */
9239         @Readable
9240         public static final String MINIMAL_POST_PROCESSING_ALLOWED =
9241                 "minimal_post_processing_allowed";
9242 
9243         /**
9244          * No mode switching will happen.
9245          *
9246          * @see #MATCH_CONTENT_FRAME_RATE
9247          * @hide
9248          */
9249         public static final int MATCH_CONTENT_FRAMERATE_NEVER = 0;
9250 
9251         /**
9252          * Allow only refresh rate switching between modes in the same configuration group.
9253          * This way only switches without visual interruptions for the user will be allowed.
9254          *
9255          * @see #MATCH_CONTENT_FRAME_RATE
9256          * @hide
9257          */
9258         public static final int MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY = 1;
9259 
9260         /**
9261          * Allow refresh rate switching between all refresh rates even if the switch will have
9262          * visual interruptions for the user.
9263          *
9264          * @see #MATCH_CONTENT_FRAME_RATE
9265          * @hide
9266          */
9267         public static final int MATCH_CONTENT_FRAMERATE_ALWAYS = 2;
9268 
9269         /**
9270          * User's preference for refresh rate switching.
9271          *
9272          * <p>Values:
9273          * 0 - Never switch refresh rates.
9274          * 1 - Switch refresh rates only when it can be done seamlessly. (Default behaviour)
9275          * 2 - Always prefer refresh rate switching even if it's going to have visual interruptions
9276          *     for the user.
9277          *
9278          * @see android.view.Surface#setFrameRate
9279          * @see #MATCH_CONTENT_FRAMERATE_NEVER
9280          * @see #MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY
9281          * @see #MATCH_CONTENT_FRAMERATE_ALWAYS
9282          * @hide
9283          */
9284         public static final String MATCH_CONTENT_FRAME_RATE =
9285                 "match_content_frame_rate";
9286 
9287         /**
9288          * INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen".
9289          * @hide
9290          */
9291         public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1;
9292 
9293         /**
9294          * INCALL_POWER_BUTTON_BEHAVIOR value for "hang up".
9295          * @hide
9296          */
9297         public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2;
9298 
9299         /**
9300          * INCALL_POWER_BUTTON_BEHAVIOR default value.
9301          * @hide
9302          */
9303         public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT =
9304                 INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
9305 
9306         /**
9307          * What happens when the user presses the Back button while in-call
9308          * and the screen is on.<br/>
9309          * <b>Values:</b><br/>
9310          * 0 - The Back buttons does nothing different.<br/>
9311          * 1 - The Back button hangs up the current call.<br/>
9312          *
9313          * @hide
9314          */
9315         @Readable
9316         public static final String INCALL_BACK_BUTTON_BEHAVIOR = "incall_back_button_behavior";
9317 
9318         /**
9319          * INCALL_BACK_BUTTON_BEHAVIOR value for no action.
9320          * @hide
9321          */
9322         public static final int INCALL_BACK_BUTTON_BEHAVIOR_NONE = 0x0;
9323 
9324         /**
9325          * INCALL_BACK_BUTTON_BEHAVIOR value for "hang up".
9326          * @hide
9327          */
9328         public static final int INCALL_BACK_BUTTON_BEHAVIOR_HANGUP = 0x1;
9329 
9330         /**
9331          * INCALL_POWER_BUTTON_BEHAVIOR default value.
9332          * @hide
9333          */
9334         public static final int INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT =
9335                 INCALL_BACK_BUTTON_BEHAVIOR_NONE;
9336 
9337         /**
9338          * Whether the device should wake when the wake gesture sensor detects motion.
9339          * @hide
9340          */
9341         @Readable
9342         public static final String WAKE_GESTURE_ENABLED = "wake_gesture_enabled";
9343 
9344         /**
9345          * Whether the device should doze if configured.
9346          * @hide
9347          */
9348         @UnsupportedAppUsage
9349         @Readable
9350         public static final String DOZE_ENABLED = "doze_enabled";
9351 
9352         /**
9353          * Indicates whether doze should be always on.
9354          * <p>
9355          * Type: int (0 for false, 1 for true)
9356          *
9357          * @hide
9358          */
9359         @SystemApi
9360         @Readable
9361         public static final String DOZE_ALWAYS_ON = "doze_always_on";
9362 
9363         /**
9364          * Whether the device should pulse on pick up gesture.
9365          * @hide
9366          */
9367         @Readable
9368         public static final String DOZE_PICK_UP_GESTURE = "doze_pulse_on_pick_up";
9369 
9370         /**
9371          * Whether the device should pulse on long press gesture.
9372          * @hide
9373          */
9374         @Readable
9375         public static final String DOZE_PULSE_ON_LONG_PRESS = "doze_pulse_on_long_press";
9376 
9377         /**
9378          * Whether the device should pulse on double tap gesture.
9379          * @hide
9380          */
9381         @Readable
9382         public static final String DOZE_DOUBLE_TAP_GESTURE = "doze_pulse_on_double_tap";
9383 
9384         /**
9385          * Whether the device should respond to the SLPI tap gesture.
9386          * @hide
9387          */
9388         @Readable
9389         public static final String DOZE_TAP_SCREEN_GESTURE = "doze_tap_gesture";
9390 
9391         /**
9392          * Gesture that wakes up the display, showing some version of the lock screen.
9393          * @hide
9394          */
9395         @Readable
9396         public static final String DOZE_WAKE_LOCK_SCREEN_GESTURE = "doze_wake_screen_gesture";
9397 
9398         /**
9399          * Gesture that wakes up the display, toggling between {@link Display.STATE_OFF} and
9400          * {@link Display.STATE_DOZE}.
9401          * @hide
9402          */
9403         @Readable
9404         public static final String DOZE_WAKE_DISPLAY_GESTURE = "doze_wake_display_gesture";
9405 
9406         /**
9407          * Gesture that wakes up the display on quick pickup, toggling between
9408          * {@link Display.STATE_OFF} and {@link Display.STATE_DOZE}.
9409          * @hide
9410          */
9411         public static final String DOZE_QUICK_PICKUP_GESTURE = "doze_quick_pickup_gesture";
9412 
9413         /**
9414          * Whether the device should suppress the current doze configuration and disable dozing.
9415          * @hide
9416          */
9417         @Readable
9418         public static final String SUPPRESS_DOZE = "suppress_doze";
9419 
9420         /**
9421          * Gesture that skips media.
9422          * @hide
9423          */
9424         @Readable
9425         public static final String SKIP_GESTURE = "skip_gesture";
9426 
9427         /**
9428          * Count of successful gestures.
9429          * @hide
9430          */
9431         @Readable
9432         public static final String SKIP_GESTURE_COUNT = "skip_gesture_count";
9433 
9434         /**
9435          * Count of non-gesture interaction.
9436          * @hide
9437          */
9438         @Readable
9439         public static final String SKIP_TOUCH_COUNT = "skip_touch_count";
9440 
9441         /**
9442          * Direction to advance media for skip gesture
9443          * @hide
9444          */
9445         @Readable
9446         public static final String SKIP_DIRECTION = "skip_gesture_direction";
9447 
9448         /**
9449          * Gesture that silences sound (alarms, notification, calls).
9450          * @hide
9451          */
9452         @Readable
9453         public static final String SILENCE_GESTURE = "silence_gesture";
9454 
9455         /**
9456          * Count of successful silence alarms gestures.
9457          * @hide
9458          */
9459         @Readable
9460         public static final String SILENCE_ALARMS_GESTURE_COUNT = "silence_alarms_gesture_count";
9461 
9462         /**
9463          * Count of successful silence timer gestures.
9464          * @hide
9465          */
9466         @Readable
9467         public static final String SILENCE_TIMER_GESTURE_COUNT = "silence_timer_gesture_count";
9468 
9469         /**
9470          * Count of successful silence call gestures.
9471          * @hide
9472          */
9473         @Readable
9474         public static final String SILENCE_CALL_GESTURE_COUNT = "silence_call_gesture_count";
9475 
9476         /**
9477          * Count of non-gesture interaction.
9478          * @hide
9479          */
9480         @Readable
9481         public static final String SILENCE_ALARMS_TOUCH_COUNT = "silence_alarms_touch_count";
9482 
9483         /**
9484          * Count of non-gesture interaction.
9485          * @hide
9486          */
9487         @Readable
9488         public static final String SILENCE_TIMER_TOUCH_COUNT = "silence_timer_touch_count";
9489 
9490         /**
9491          * Count of non-gesture interaction.
9492          * @hide
9493          */
9494         @Readable
9495         public static final String SILENCE_CALL_TOUCH_COUNT = "silence_call_touch_count";
9496 
9497         /**
9498          * Number of successful "Motion Sense" tap gestures to pause media.
9499          * @hide
9500          */
9501         @Readable
9502         public static final String AWARE_TAP_PAUSE_GESTURE_COUNT = "aware_tap_pause_gesture_count";
9503 
9504         /**
9505          * Number of touch interactions to pause media when a "Motion Sense" gesture could
9506          * have been used.
9507          * @hide
9508          */
9509         @Readable
9510         public static final String AWARE_TAP_PAUSE_TOUCH_COUNT = "aware_tap_pause_touch_count";
9511 
9512         /**
9513          * For user preference if swipe bottom to expand notification gesture enabled.
9514          * @hide
9515          */
9516         public static final String SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED =
9517                 "swipe_bottom_to_notification_enabled";
9518 
9519         /**
9520          * Controls whether One-Handed mode is currently activated.
9521          * @hide
9522          */
9523         public static final String ONE_HANDED_MODE_ACTIVATED = "one_handed_mode_activated";
9524 
9525         /**
9526          * For user preference if One-Handed Mode enabled.
9527          * @hide
9528          */
9529         public static final String ONE_HANDED_MODE_ENABLED = "one_handed_mode_enabled";
9530 
9531         /**
9532          * For user preference if One-Handed Mode timeout.
9533          * @hide
9534          */
9535         public static final String ONE_HANDED_MODE_TIMEOUT = "one_handed_mode_timeout";
9536 
9537         /**
9538          * For user taps app to exit One-Handed Mode.
9539          * @hide
9540          */
9541         public static final String TAPS_APP_TO_EXIT = "taps_app_to_exit";
9542 
9543         /**
9544          * Internal use, one handed mode tutorial showed times.
9545          * @hide
9546          */
9547         public static final String ONE_HANDED_TUTORIAL_SHOW_COUNT =
9548                 "one_handed_tutorial_show_count";
9549 
9550         /**
9551          * Toggle to enable/disable for the apps to use the Ui translation for Views. The value
9552          * indicates whether the Ui translation is enabled by the user.
9553          * <p>
9554          * Type: {@code int} ({@code 0} for disabled, {@code 1} for enabled)
9555          *
9556          * @hide
9557          */
9558         @SystemApi
9559         @Readable
9560         @SuppressLint("NoSettingsProvider")
9561         public static final String UI_TRANSLATION_ENABLED = "ui_translation_enabled";
9562 
9563         /**
9564          * The current night mode that has been selected by the user.  Owned
9565          * and controlled by UiModeManagerService.  Constants are as per
9566          * UiModeManager.
9567          * @hide
9568          */
9569         @Readable
9570         public static final String UI_NIGHT_MODE = "ui_night_mode";
9571 
9572         /**
9573          * The current night mode custom type that has been selected by the user.  Owned
9574          * and controlled by UiModeManagerService. Constants are as per UiModeManager.
9575          * @hide
9576          */
9577         @Readable
9578         @SuppressLint("NoSettingsProvider")
9579         public static final String UI_NIGHT_MODE_CUSTOM_TYPE = "ui_night_mode_custom_type";
9580 
9581         /**
9582          * The current night mode that has been overridden to turn on by the system.  Owned
9583          * and controlled by UiModeManagerService.  Constants are as per
9584          * UiModeManager.
9585          * @hide
9586          */
9587         @Readable
9588         public static final String UI_NIGHT_MODE_OVERRIDE_ON = "ui_night_mode_override_on";
9589 
9590         /**
9591          * The last computed night mode bool the last time the phone was on
9592          * @hide
9593          */
9594         public static final String UI_NIGHT_MODE_LAST_COMPUTED = "ui_night_mode_last_computed";
9595 
9596         /**
9597          * The current night mode that has been overridden to turn off by the system.  Owned
9598          * and controlled by UiModeManagerService.  Constants are as per
9599          * UiModeManager.
9600          * @hide
9601          */
9602         @Readable
9603         public static final String UI_NIGHT_MODE_OVERRIDE_OFF = "ui_night_mode_override_off";
9604 
9605         /**
9606          * Whether screensavers are enabled.
9607          * @hide
9608          */
9609         @Readable
9610         public static final String SCREENSAVER_ENABLED = "screensaver_enabled";
9611 
9612         /**
9613          * The user's chosen screensaver components.
9614          *
9615          * These will be launched by the PhoneWindowManager after a timeout when not on
9616          * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1).
9617          * @hide
9618          */
9619         @Readable
9620         public static final String SCREENSAVER_COMPONENTS = "screensaver_components";
9621 
9622         /**
9623          * If screensavers are enabled, whether the screensaver should be automatically launched
9624          * when the device is inserted into a (desk) dock.
9625          * @hide
9626          */
9627         @Readable
9628         public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
9629 
9630         /**
9631          * If screensavers are enabled, whether the screensaver should be automatically launched
9632          * when the screen times out when not on battery.
9633          * @hide
9634          */
9635         @Readable
9636         public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
9637 
9638         /**
9639          * If screensavers are enabled, the default screensaver component.
9640          * @hide
9641          */
9642         @Readable
9643         public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component";
9644 
9645         /**
9646          * Whether complications are enabled to be shown over the screensaver by the user.
9647          *
9648          * @hide
9649          */
9650         public static final String SCREENSAVER_COMPLICATIONS_ENABLED =
9651                 "screensaver_complications_enabled";
9652 
9653         /**
9654          * Whether home controls are enabled to be shown over the screensaver by the user.
9655          *
9656          * @hide
9657          */
9658         public static final String SCREENSAVER_HOME_CONTROLS_ENABLED =
9659                 "screensaver_home_controls_enabled";
9660 
9661 
9662         /**
9663          * Default, indicates that the user has not yet started the dock setup flow.
9664          *
9665          * @hide
9666          */
9667         public static final int DOCK_SETUP_NOT_STARTED = 0;
9668 
9669         /**
9670          * Indicates that the user has started but not yet completed dock setup.
9671          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9672          *
9673          * @hide
9674          */
9675         public static final int DOCK_SETUP_STARTED = 1;
9676 
9677         /**
9678          * Indicates that the user has snoozed dock setup and will complete it later.
9679          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9680          *
9681          * @hide
9682          */
9683         public static final int DOCK_SETUP_PAUSED = 2;
9684 
9685         /**
9686          * Indicates that the user has been prompted to start dock setup.
9687          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9688          *
9689          * @hide
9690          */
9691         public static final int DOCK_SETUP_PROMPTED = 3;
9692 
9693         /**
9694          * Indicates that the user has started dock setup but never finished it.
9695          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9696          *
9697          * @hide
9698          */
9699         public static final int DOCK_SETUP_INCOMPLETE = 4;
9700 
9701         /**
9702          * Indicates that the user has completed dock setup.
9703          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9704          *
9705          * @hide
9706          */
9707         public static final int DOCK_SETUP_COMPLETED = 10;
9708 
9709         /**
9710          * Indicates that dock setup timed out before the user could complete it.
9711          * One of the possible states for {@link #DOCK_SETUP_STATE}.
9712          *
9713          * @hide
9714          */
9715         public static final int DOCK_SETUP_TIMED_OUT = 11;
9716 
9717         /** @hide */
9718         @Retention(RetentionPolicy.SOURCE)
9719         @IntDef({
9720                 DOCK_SETUP_NOT_STARTED,
9721                 DOCK_SETUP_STARTED,
9722                 DOCK_SETUP_PAUSED,
9723                 DOCK_SETUP_PROMPTED,
9724                 DOCK_SETUP_INCOMPLETE,
9725                 DOCK_SETUP_COMPLETED,
9726                 DOCK_SETUP_TIMED_OUT
9727         })
9728         public @interface DockSetupState {
9729         }
9730 
9731         /**
9732          * Defines the user's current state of dock setup.
9733          * The possible states are defined in {@link DockSetupState}.
9734          *
9735          * @hide
9736          */
9737         public static final String DOCK_SETUP_STATE = "dock_setup_state";
9738 
9739         /**
9740          * The default NFC payment component
9741          * @hide
9742          */
9743         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9744         public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
9745 
9746         /**
9747          * Whether NFC payment is handled by the foreground application or a default.
9748          * @hide
9749          */
9750         @Readable
9751         public static final String NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground";
9752 
9753         /**
9754          * Specifies the package name currently configured to be the primary sms application
9755          * @hide
9756          */
9757         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9758         @Readable
9759         public static final String SMS_DEFAULT_APPLICATION = "sms_default_application";
9760 
9761         /**
9762          * Specifies the package name currently configured to be the default dialer application
9763          * @hide
9764          */
9765         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9766         @Readable
9767         public static final String DIALER_DEFAULT_APPLICATION = "dialer_default_application";
9768 
9769         /**
9770          * Specifies the component name currently configured to be the default call screening
9771          * application
9772          * @hide
9773          */
9774         @Readable
9775         public static final String CALL_SCREENING_DEFAULT_COMPONENT =
9776                 "call_screening_default_component";
9777 
9778         /**
9779          * Specifies the package name currently configured to be the emergency assistance application
9780          *
9781          * @see android.telephony.TelephonyManager#ACTION_EMERGENCY_ASSISTANCE
9782          *
9783          * @hide
9784          */
9785         @Readable
9786         public static final String EMERGENCY_ASSISTANCE_APPLICATION = "emergency_assistance_application";
9787 
9788         /**
9789          * Specifies whether the current app context on scren (assist data) will be sent to the
9790          * assist application (active voice interaction service).
9791          *
9792          * @hide
9793          */
9794         @Readable
9795         public static final String ASSIST_STRUCTURE_ENABLED = "assist_structure_enabled";
9796 
9797         /**
9798          * Specifies whether a screenshot of the screen contents will be sent to the assist
9799          * application (active voice interaction service).
9800          *
9801          * @hide
9802          */
9803         @Readable
9804         public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled";
9805 
9806         /**
9807          * Specifies whether the screen will show an animation if screen contents are sent to the
9808          * assist application (active voice interaction service).
9809          *
9810          * Note that the disclosure will be forced for third-party assistants or if the device
9811          * does not support disabling it.
9812          *
9813          * @hide
9814          */
9815         @Readable
9816         public static final String ASSIST_DISCLOSURE_ENABLED = "assist_disclosure_enabled";
9817 
9818         /**
9819          * Control if rotation suggestions are sent to System UI when in rotation locked mode.
9820          * Done to enable screen rotation while the screen rotation is locked. Enabling will
9821          * poll the accelerometer in rotation locked mode.
9822          *
9823          * If 0, then rotation suggestions are not sent to System UI. If 1, suggestions are sent.
9824          *
9825          * @hide
9826          */
9827         @Readable
9828         public static final String SHOW_ROTATION_SUGGESTIONS = "show_rotation_suggestions";
9829 
9830         /**
9831          * The disabled state of SHOW_ROTATION_SUGGESTIONS.
9832          * @hide
9833          */
9834         public static final int SHOW_ROTATION_SUGGESTIONS_DISABLED = 0x0;
9835 
9836         /**
9837          * The enabled state of SHOW_ROTATION_SUGGESTIONS.
9838          * @hide
9839          */
9840         public static final int SHOW_ROTATION_SUGGESTIONS_ENABLED = 0x1;
9841 
9842         /**
9843          * The default state of SHOW_ROTATION_SUGGESTIONS.
9844          * @hide
9845          */
9846         public static final int SHOW_ROTATION_SUGGESTIONS_DEFAULT =
9847                 SHOW_ROTATION_SUGGESTIONS_ENABLED;
9848 
9849         /**
9850          * The number of accepted rotation suggestions. Used to determine if the user has been
9851          * introduced to rotation suggestions.
9852          * @hide
9853          */
9854         @Readable
9855         public static final String NUM_ROTATION_SUGGESTIONS_ACCEPTED =
9856                 "num_rotation_suggestions_accepted";
9857 
9858         /**
9859          * Read only list of the service components that the current user has explicitly allowed to
9860          * see and assist with all of the user's notifications.
9861          *
9862          * @deprecated Use
9863          * {@link NotificationManager#isNotificationAssistantAccessGranted(ComponentName)}.
9864          * @hide
9865          */
9866         @Deprecated
9867         @Readable
9868         public static final String ENABLED_NOTIFICATION_ASSISTANT =
9869                 "enabled_notification_assistant";
9870 
9871         /**
9872          * Read only list of the service components that the current user has explicitly allowed to
9873          * see all of the user's notifications, separated by ':'.
9874          *
9875          * @hide
9876          * @deprecated Use
9877          * {@link NotificationManager#isNotificationListenerAccessGranted(ComponentName)}.
9878          */
9879         @Deprecated
9880         @UnsupportedAppUsage
9881         @Readable
9882         public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
9883 
9884         /**
9885          * Read only list of the packages that the current user has explicitly allowed to
9886          * manage do not disturb, separated by ':'.
9887          *
9888          * @deprecated Use {@link NotificationManager#isNotificationPolicyAccessGranted()}.
9889          * @hide
9890          */
9891         @Deprecated
9892         @TestApi
9893         @Readable
9894         public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES =
9895                 "enabled_notification_policy_access_packages";
9896 
9897         /**
9898          * Defines whether managed profile ringtones should be synced from it's parent profile
9899          * <p>
9900          * 0 = ringtones are not synced
9901          * 1 = ringtones are synced from the profile's parent (default)
9902          * <p>
9903          * This value is only used for managed profiles.
9904          * @hide
9905          */
9906         @TestApi
9907         @Readable
9908         @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
9909         public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
9910 
9911         /**
9912          * @hide
9913          */
9914         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
9915         @TestApi
9916         @Readable
9917         public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
9918 
9919         /**
9920          * This is the query URI for finding a print service to install.
9921          *
9922          * @hide
9923          */
9924         @Readable
9925         public static final String PRINT_SERVICE_SEARCH_URI = "print_service_search_uri";
9926 
9927         /**
9928          * This is the query URI for finding a NFC payment service to install.
9929          *
9930          * @hide
9931          */
9932         @Readable
9933         public static final String PAYMENT_SERVICE_SEARCH_URI = "payment_service_search_uri";
9934 
9935         /**
9936          * This is the query URI for finding a auto fill service to install.
9937          *
9938          * @hide
9939          */
9940         @Readable
9941         public static final String AUTOFILL_SERVICE_SEARCH_URI = "autofill_service_search_uri";
9942 
9943         /**
9944          * If enabled, apps should try to skip any introductory hints on first launch. This might
9945          * apply to users that are already familiar with the environment or temporary users.
9946          * <p>
9947          * Type : int (0 to show hints, 1 to skip showing hints)
9948          */
9949         @Readable
9950         public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
9951 
9952         /**
9953          * Persisted playback time after a user confirmation of an unsafe volume level.
9954          *
9955          * @hide
9956          */
9957         @Readable
9958         public static final String UNSAFE_VOLUME_MUSIC_ACTIVE_MS = "unsafe_volume_music_active_ms";
9959 
9960         /**
9961          * Indicates whether the spatial audio feature was enabled for this user.
9962          *
9963          * Type : int (0 disabled, 1 enabled)
9964          *
9965          * @hide
9966          */
9967         public static final String SPATIAL_AUDIO_ENABLED = "spatial_audio_enabled";
9968 
9969         /**
9970          * Internal collection of audio device inventory items
9971          * The device item stored are {@link com.android.server.audio.AdiDeviceState}
9972          * @hide
9973          */
9974         public static final String AUDIO_DEVICE_INVENTORY = "audio_device_inventory";
9975 
9976         /**
9977          * Stores a boolean that defines whether the CSD as a feature is enabled or not.
9978          * @hide
9979          */
9980         public static final String AUDIO_SAFE_CSD_AS_A_FEATURE_ENABLED =
9981                 "audio_safe_csd_as_a_feature_enabled";
9982 
9983         /**
9984          * Indicates whether notification display on the lock screen is enabled.
9985          * <p>
9986          * Type: int (0 for false, 1 for true)
9987          *
9988          * @hide
9989          */
9990         @SystemApi
9991         @Readable
9992         public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
9993                 "lock_screen_show_notifications";
9994 
9995         /**
9996          * Indicates whether the lock screen should display silent notifications.
9997          * <p>
9998          * Type: int (0 for false, 1 for true)
9999          *
10000          * @hide
10001          */
10002         @Readable
10003         public static final String LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS =
10004                 "lock_screen_show_silent_notifications";
10005 
10006         /**
10007          * Indicates whether "seen" notifications should be suppressed from the lockscreen.
10008          * <p>
10009          * Type: int (0 for unset, 1 for true, 2 for false)
10010          *
10011          * @hide
10012          */
10013         public static final String LOCK_SCREEN_SHOW_ONLY_UNSEEN_NOTIFICATIONS =
10014                 "lock_screen_show_only_unseen_notifications";
10015 
10016         /**
10017          * Indicates whether snooze options should be shown on notifications
10018          * <p>
10019          * Type: int (0 for false, 1 for true)
10020          *
10021          * @hide
10022          */
10023         @Readable
10024         public static final String SHOW_NOTIFICATION_SNOOZE = "show_notification_snooze";
10025 
10026         /**
10027          * List of TV inputs that are currently hidden. This is a string
10028          * containing the IDs of all hidden TV inputs. Each ID is encoded by
10029          * {@link android.net.Uri#encode(String)} and separated by ':'.
10030          * @hide
10031          */
10032         @Readable
10033         public static final String TV_INPUT_HIDDEN_INPUTS = "tv_input_hidden_inputs";
10034 
10035         /**
10036          * List of custom TV input labels. This is a string containing <TV input id, custom name>
10037          * pairs. TV input id and custom name are encoded by {@link android.net.Uri#encode(String)}
10038          * and separated by ','. Each pair is separated by ':'.
10039          * @hide
10040          */
10041         @Readable
10042         public static final String TV_INPUT_CUSTOM_LABELS = "tv_input_custom_labels";
10043 
10044         /**
10045          * Whether TV app uses non-system inputs.
10046          *
10047          * <p>
10048          * The value is boolean (1 or 0), where 1 means non-system TV inputs are allowed,
10049          * and 0 means non-system TV inputs are not allowed.
10050          *
10051          * <p>
10052          * Devices such as sound bars may have changed the system property allow_third_party_inputs
10053          * to false so the TV Application only uses HDMI and other built in inputs. This setting
10054          * allows user to override the default and have the TV Application use third party TV inputs
10055          * available on play store.
10056          *
10057          * @hide
10058          */
10059         @Readable
10060         public static final String TV_APP_USES_NON_SYSTEM_INPUTS = "tv_app_uses_non_system_inputs";
10061 
10062         /**
10063          * Whether automatic routing of system audio to USB audio peripheral is disabled.
10064          * The value is boolean (1 or 0), where 1 means automatic routing is disabled,
10065          * and 0 means automatic routing is enabled.
10066          *
10067          * @hide
10068          */
10069         @Readable
10070         public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
10071                 "usb_audio_automatic_routing_disabled";
10072 
10073         /**
10074          * The timeout in milliseconds before the device fully goes to sleep after
10075          * a period of inactivity.  This value sets an upper bound on how long the device
10076          * will stay awake or dreaming without user activity.  It should generally
10077          * be longer than {@link Settings.System#SCREEN_OFF_TIMEOUT} as otherwise the device
10078          * will sleep before it ever has a chance to dream.
10079          * <p>
10080          * Use -1 to disable this timeout.
10081          * </p>
10082          *
10083          * @hide
10084          */
10085         @Readable
10086         public static final String SLEEP_TIMEOUT = "sleep_timeout";
10087 
10088         /**
10089          * The timeout in milliseconds before the device goes to sleep due to user inattentiveness,
10090          * even if the system is holding wakelocks. It should generally be longer than {@code
10091          * config_attentiveWarningDuration}, as otherwise the device will show the attentive
10092          * warning constantly. Small timeouts are discouraged, as they will cause the device to
10093          * go to sleep quickly after waking up.
10094          * <p>
10095          * Use -1 to disable this timeout.
10096          * </p>
10097          *
10098          * @hide
10099          */
10100         @Readable
10101         public static final String ATTENTIVE_TIMEOUT = "attentive_timeout";
10102 
10103         /**
10104          * Controls whether double tap to wake is enabled.
10105          * @hide
10106          */
10107         @Readable
10108         public static final String DOUBLE_TAP_TO_WAKE = "double_tap_to_wake";
10109 
10110         /**
10111          * The current assistant component. It could be a voice interaction service,
10112          * or an activity that handles ACTION_ASSIST, or empty which means using the default
10113          * handling.
10114          *
10115          * <p>This should be set indirectly by setting the {@link
10116          * android.app.role.RoleManager#ROLE_ASSISTANT assistant role}.
10117          *
10118          * @hide
10119          */
10120         @UnsupportedAppUsage
10121         @Readable
10122         public static final String ASSISTANT = "assistant";
10123 
10124         /**
10125          * Whether the camera launch gesture should be disabled.
10126          *
10127          * @hide
10128          */
10129         @Readable
10130         public static final String CAMERA_GESTURE_DISABLED = "camera_gesture_disabled";
10131 
10132         /**
10133          * Whether the emergency gesture should be enabled.
10134          *
10135          * @hide
10136          */
10137         public static final String EMERGENCY_GESTURE_ENABLED = "emergency_gesture_enabled";
10138 
10139         /**
10140          * Whether the emergency gesture sound should be enabled.
10141          *
10142          * @hide
10143          */
10144         public static final String EMERGENCY_GESTURE_SOUND_ENABLED =
10145                 "emergency_gesture_sound_enabled";
10146 
10147         /**
10148          * Whether the emergency gesture UI is currently showing.
10149          *
10150          * @hide
10151          */
10152         public static final String EMERGENCY_GESTURE_UI_SHOWING = "emergency_gesture_ui_showing";
10153 
10154         /**
10155          * The last time the emergency gesture UI was started.
10156          *
10157          * @hide
10158          */
10159         public static final String EMERGENCY_GESTURE_UI_LAST_STARTED_MILLIS =
10160                 "emergency_gesture_ui_last_started_millis";
10161 
10162         /**
10163          * Whether the camera launch gesture to double tap the power button when the screen is off
10164          * should be disabled.
10165          *
10166          * @hide
10167          */
10168         @Readable
10169         public static final String CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED =
10170                 "camera_double_tap_power_gesture_disabled";
10171 
10172         /**
10173          * Whether the camera double twist gesture to flip between front and back mode should be
10174          * enabled.
10175          *
10176          * @hide
10177          */
10178         @Readable
10179         public static final String CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED =
10180                 "camera_double_twist_to_flip_enabled";
10181 
10182         /**
10183          * Whether or not the smart camera lift trigger that launches the camera when the user moves
10184          * the phone into a position for taking photos should be enabled.
10185          *
10186          * @hide
10187          */
10188         @Readable
10189         public static final String CAMERA_LIFT_TRIGGER_ENABLED = "camera_lift_trigger_enabled";
10190 
10191         /**
10192          * The default enable state of the camera lift trigger.
10193          *
10194          * @hide
10195          */
10196         public static final int CAMERA_LIFT_TRIGGER_ENABLED_DEFAULT = 1;
10197 
10198         /**
10199          * Whether or not the flashlight (camera torch mode) is available required to turn
10200          * on flashlight.
10201          *
10202          * @hide
10203          */
10204         @Readable
10205         public static final String FLASHLIGHT_AVAILABLE = "flashlight_available";
10206 
10207         /**
10208          * Whether or not flashlight is enabled.
10209          *
10210          * @hide
10211          */
10212         @Readable
10213         public static final String FLASHLIGHT_ENABLED = "flashlight_enabled";
10214 
10215         /**
10216          * Whether or not face unlock is allowed on Keyguard.
10217          * @hide
10218          */
10219         @Readable
10220         public static final String FACE_UNLOCK_KEYGUARD_ENABLED = "face_unlock_keyguard_enabled";
10221 
10222         /**
10223          * Whether or not face unlock dismisses the keyguard.
10224          * @hide
10225          */
10226         @Readable
10227         public static final String FACE_UNLOCK_DISMISSES_KEYGUARD =
10228                 "face_unlock_dismisses_keyguard";
10229 
10230         /**
10231          * Whether or not media is shown automatically when bypassing as a heads up.
10232          * @hide
10233          */
10234         @Readable
10235         public static final String SHOW_MEDIA_WHEN_BYPASSING =
10236                 "show_media_when_bypassing";
10237 
10238         /**
10239          * Whether or not face unlock requires attention. This is a cached value, the source of
10240          * truth is obtained through the HAL.
10241          * @hide
10242          */
10243         @Readable
10244         public static final String FACE_UNLOCK_ATTENTION_REQUIRED =
10245                 "face_unlock_attention_required";
10246 
10247         /**
10248          * Whether or not face unlock requires a diverse set of poses during enrollment. This is a
10249          * cached value, the source of truth is obtained through the HAL.
10250          * @hide
10251          */
10252         @Readable
10253         public static final String FACE_UNLOCK_DIVERSITY_REQUIRED =
10254                 "face_unlock_diversity_required";
10255 
10256 
10257         /**
10258          * Whether or not face unlock is allowed for apps (through BiometricPrompt).
10259          * @hide
10260          */
10261         @Readable
10262         public static final String FACE_UNLOCK_APP_ENABLED = "face_unlock_app_enabled";
10263 
10264         /**
10265          * Whether or not face unlock always requires user confirmation, meaning {@link
10266          * android.hardware.biometrics.BiometricPrompt.Builder#setConfirmationRequired(boolean)}
10267          * is always 'true'. This overrides the behavior that apps choose in the
10268          * setConfirmationRequired API.
10269          * @hide
10270          */
10271         @Readable
10272         public static final String FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION =
10273                 "face_unlock_always_require_confirmation";
10274 
10275         /**
10276          * Whether or not a user should re enroll their face.
10277          *
10278          * Face unlock re enroll.
10279          *  0 = No re enrollment.
10280          *  1 = Re enrollment is required.
10281          *
10282          * @hide
10283          */
10284         @Readable
10285         public static final String FACE_UNLOCK_RE_ENROLL = "face_unlock_re_enroll";
10286 
10287         /**
10288          * The time (in millis) to wait for a power button before sending a
10289          * successful auth in to keyguard(for side fingerprint)
10290          * @hide
10291          */
10292         @Readable
10293         public static final String FINGERPRINT_SIDE_FPS_KG_POWER_WINDOW =
10294                 "fingerprint_side_fps_kg_power_window";
10295 
10296         /**
10297          * The time (in millis) to wait for a power button before sending
10298          * a successful auth in biometric prompt(for side fingerprint)
10299          * @hide
10300          */
10301         @Readable
10302         public static final String FINGERPRINT_SIDE_FPS_BP_POWER_WINDOW =
10303                 "fingerprint_side_fps_bp_power_window";
10304 
10305         /**
10306          * The time (in millis) that a finger tap will wait for a power button
10307          * before dismissing the power dialog during enrollment(for side
10308          * fingerprint)
10309          * @hide
10310          */
10311         @Readable
10312         public static final String FINGERPRINT_SIDE_FPS_ENROLL_TAP_WINDOW =
10313                 "fingerprint_side_fps_enroll_tap_window";
10314 
10315         /**
10316          * The time (in millis) that a power event will ignore future authentications
10317          * (for side fingerprint)
10318          * @hide
10319          */
10320         @Readable
10321         public static final String FINGERPRINT_SIDE_FPS_AUTH_DOWNTIME =
10322                 "fingerprint_side_fps_auth_downtime";
10323 
10324         /**
10325          * Whether or not a SFPS device is enabling the performant auth setting.
10326          * The "_V2" suffix was added to re-introduce the default behavior for
10327          * users. See b/265264294 fore more details.
10328          * @hide
10329          */
10330         public static final String SFPS_PERFORMANT_AUTH_ENABLED = "sfps_performant_auth_enabled_v2";
10331 
10332         /**
10333          * Whether or not debugging is enabled.
10334          * @hide
10335          */
10336         @Readable
10337         public static final String BIOMETRIC_DEBUG_ENABLED =
10338                 "biometric_debug_enabled";
10339 
10340         /**
10341          * Whether or not virtual sensors are enabled.
10342          * @hide
10343          */
10344         @TestApi
10345         @Readable
10346         public static final String BIOMETRIC_VIRTUAL_ENABLED = "biometric_virtual_enabled";
10347 
10348         /**
10349          * Whether or not biometric is allowed on Keyguard.
10350          * @hide
10351          */
10352         @Readable
10353         public static final String BIOMETRIC_KEYGUARD_ENABLED = "biometric_keyguard_enabled";
10354 
10355         /**
10356          * Whether or not biometric is allowed for apps (through BiometricPrompt).
10357          * @hide
10358          */
10359         @Readable
10360         public static final String BIOMETRIC_APP_ENABLED = "biometric_app_enabled";
10361 
10362         /**
10363          * Whether or not active unlock triggers on wake.
10364          * @hide
10365          */
10366         public static final String ACTIVE_UNLOCK_ON_WAKE = "active_unlock_on_wake";
10367 
10368         /**
10369          * Whether or not active unlock triggers on unlock intent.
10370          * @hide
10371          */
10372         public static final String ACTIVE_UNLOCK_ON_UNLOCK_INTENT =
10373                 "active_unlock_on_unlock_intent";
10374 
10375         /**
10376          * Whether or not active unlock triggers on biometric failure.
10377          * @hide
10378          */
10379         public static final String ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL =
10380                 "active_unlock_on_biometric_fail";
10381 
10382         /**
10383          * If active unlock triggers on biometric failures, include the following error codes
10384          * as a biometric failure. See {@link android.hardware.biometrics.BiometricFaceConstants}.
10385          * Error codes should be separated by a pipe. For example: "1|4|5". If active unlock
10386          * should never trigger on any face errors, this should be set to an empty string.
10387          * A null value will use the system default value (TIMEOUT).
10388          * @hide
10389          */
10390         public static final String ACTIVE_UNLOCK_ON_FACE_ERRORS =
10391                 "active_unlock_on_face_errors";
10392 
10393         /**
10394          * If active unlock triggers on biometric failures, include the following acquired info
10395          * as a "biometric failure". See {@link android.hardware.biometrics.BiometricFaceConstants}.
10396          * Acquired codes should be separated by a pipe. For example: "1|4|5". If active unlock
10397          * should never on trigger on any acquired info messages, this should be
10398          * set to an empty string. A null value will use the system default value (none).
10399          * @hide
10400          */
10401         public static final String ACTIVE_UNLOCK_ON_FACE_ACQUIRE_INFO =
10402                 "active_unlock_on_face_acquire_info";
10403 
10404         /**
10405          * If active unlock triggers on biometric failures, then also request active unlock on
10406          * unlock intent when each setting (BiometricType) is the only biometric type enrolled.
10407          * Biometric types should be separated by a pipe. For example: "0|3" or "0". If this
10408          * setting should be disabled, then this should be set to an empty string. A null value
10409          * will use the system default value (0 / None).
10410          *   0 = None, 1 = Any face, 2 = Any fingerprint, 3 = Under display fingerprint
10411          * @hide
10412          */
10413         public static final String ACTIVE_UNLOCK_ON_UNLOCK_INTENT_WHEN_BIOMETRIC_ENROLLED =
10414                 "active_unlock_on_unlock_intent_when_biometric_enrolled";
10415 
10416         /**
10417          * If active unlock triggers on unlock intents, then also request active unlock on
10418          * these wake-up reasons. See {@link PowerManager.WakeReason} for value mappings.
10419          * WakeReasons should be separated by a pipe. For example: "0|3" or "0". If this
10420          * setting should be disabled, then this should be set to an empty string. A null value
10421          * will use the system default value (WAKE_REASON_UNFOLD_DEVICE).
10422          * @hide
10423          */
10424         public static final String ACTIVE_UNLOCK_WAKEUPS_CONSIDERED_UNLOCK_INTENTS =
10425                 "active_unlock_wakeups_considered_unlock_intents";
10426 
10427         /**
10428          * If active unlock triggers and succeeds on these wakeups, force dismiss keyguard on
10429          * these wake reasons. See {@link PowerManager#WakeReason} for value mappings.
10430          * WakeReasons should be separated by a pipe. For example: "0|3" or "0". If this
10431          * setting should be disabled, then this should be set to an empty string. A null value
10432          * will use the system default value (WAKE_REASON_UNFOLD_DEVICE).
10433          * @hide
10434          */
10435         public static final String ACTIVE_UNLOCK_WAKEUPS_TO_FORCE_DISMISS_KEYGUARD =
10436                 "active_unlock_wakeups_to_force_dismiss_keyguard";
10437 
10438         /**
10439          * Whether the assist gesture should be enabled.
10440          *
10441          * @hide
10442          */
10443         @Readable
10444         public static final String ASSIST_GESTURE_ENABLED = "assist_gesture_enabled";
10445 
10446         /**
10447          * Sensitivity control for the assist gesture.
10448          *
10449          * @hide
10450          */
10451         @Readable
10452         public static final String ASSIST_GESTURE_SENSITIVITY = "assist_gesture_sensitivity";
10453 
10454         /**
10455          * Whether the assist gesture should silence alerts.
10456          *
10457          * @hide
10458          */
10459         @Readable
10460         public static final String ASSIST_GESTURE_SILENCE_ALERTS_ENABLED =
10461                 "assist_gesture_silence_alerts_enabled";
10462 
10463         /**
10464          * Whether the assist gesture should wake the phone.
10465          *
10466          * @hide
10467          */
10468         @Readable
10469         public static final String ASSIST_GESTURE_WAKE_ENABLED =
10470                 "assist_gesture_wake_enabled";
10471 
10472         /**
10473          * Indicates whether the Assist Gesture Deferred Setup has been completed.
10474          * <p>
10475          * Type: int (0 for false, 1 for true)
10476          *
10477          * @hide
10478          */
10479         @SystemApi
10480         @Readable
10481         public static final String ASSIST_GESTURE_SETUP_COMPLETE = "assist_gesture_setup_complete";
10482 
10483         /**
10484          * Whether the assistant can be triggered by a touch gesture.
10485          *
10486          * @hide
10487          */
10488         public static final String ASSIST_TOUCH_GESTURE_ENABLED =
10489                 "assist_touch_gesture_enabled";
10490 
10491         /**
10492          * Whether the assistant can be triggered by long-pressing the home button
10493          *
10494          * @hide
10495          */
10496         public static final String ASSIST_LONG_PRESS_HOME_ENABLED =
10497                 "assist_long_press_home_enabled";
10498 
10499         /**
10500          * Whether press and hold on nav handle can trigger search.
10501          *
10502          * @hide
10503          */
10504         public static final String SEARCH_PRESS_HOLD_NAV_HANDLE_ENABLED =
10505                 "search_press_hold_nav_handle_enabled";
10506 
10507         /**
10508          * Whether long-pressing on the home button can trigger search.
10509          *
10510          * @hide
10511          */
10512         public static final String SEARCH_LONG_PRESS_HOME_ENABLED =
10513                 "search_long_press_home_enabled";
10514 
10515         /**
10516          * Control whether Trust Agents are in active unlock or extend unlock mode.
10517          * @hide
10518          */
10519         @Readable
10520         public static final String TRUST_AGENTS_EXTEND_UNLOCK = "trust_agents_extend_unlock";
10521 
10522         /**
10523          * Control whether the screen locks when trust is lost.
10524          * @hide
10525          */
10526         @Readable
10527         public static final String LOCK_SCREEN_WHEN_TRUST_LOST = "lock_screen_when_trust_lost";
10528 
10529         /**
10530          * Control whether Night display is currently activated.
10531          * @hide
10532          */
10533         @Readable
10534         public static final String NIGHT_DISPLAY_ACTIVATED = "night_display_activated";
10535 
10536         /**
10537          * Control whether Night display will automatically activate/deactivate.
10538          * @hide
10539          */
10540         @Readable
10541         public static final String NIGHT_DISPLAY_AUTO_MODE = "night_display_auto_mode";
10542 
10543         /**
10544          * Control the color temperature of Night Display, represented in Kelvin.
10545          * @hide
10546          */
10547         @Readable
10548         public static final String NIGHT_DISPLAY_COLOR_TEMPERATURE =
10549                 "night_display_color_temperature";
10550 
10551         /**
10552          * Custom time when Night display is scheduled to activate.
10553          * Represented as milliseconds from midnight (e.g. 79200000 == 10pm).
10554          * @hide
10555          */
10556         @Readable
10557         public static final String NIGHT_DISPLAY_CUSTOM_START_TIME =
10558                 "night_display_custom_start_time";
10559 
10560         /**
10561          * Custom time when Night display is scheduled to deactivate.
10562          * Represented as milliseconds from midnight (e.g. 21600000 == 6am).
10563          * @hide
10564          */
10565         @Readable
10566         public static final String NIGHT_DISPLAY_CUSTOM_END_TIME = "night_display_custom_end_time";
10567 
10568         /**
10569          * A String representing the LocalDateTime when Night display was last activated. Use to
10570          * decide whether to apply the current activated state after a reboot or user change. In
10571          * legacy cases, this is represented by the time in milliseconds (since epoch).
10572          * @hide
10573          */
10574         @Readable
10575         public static final String NIGHT_DISPLAY_LAST_ACTIVATED_TIME =
10576                 "night_display_last_activated_time";
10577 
10578         /**
10579          * Control whether display white balance is currently enabled.
10580          * @hide
10581          */
10582         @Readable
10583         public static final String DISPLAY_WHITE_BALANCE_ENABLED = "display_white_balance_enabled";
10584 
10585         /**
10586          * Names of the service components that the current user has explicitly allowed to
10587          * be a VR mode listener, separated by ':'.
10588          *
10589          * @hide
10590          */
10591         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
10592         @TestApi
10593         @Readable
10594         public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
10595 
10596         /**
10597          * Behavior of the display while in VR mode.
10598          *
10599          * One of {@link #VR_DISPLAY_MODE_LOW_PERSISTENCE} or {@link #VR_DISPLAY_MODE_OFF}.
10600          *
10601          * @hide
10602          */
10603         @Readable
10604         public static final String VR_DISPLAY_MODE = "vr_display_mode";
10605 
10606         /**
10607          * Lower the display persistence while the system is in VR mode.
10608          *
10609          * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
10610          *
10611          * @hide.
10612          */
10613         public static final int VR_DISPLAY_MODE_LOW_PERSISTENCE = 0;
10614 
10615         /**
10616          * Do not alter the display persistence while the system is in VR mode.
10617          *
10618          * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE
10619          *
10620          * @hide.
10621          */
10622         public static final int VR_DISPLAY_MODE_OFF = 1;
10623 
10624         /**
10625          * The latest SDK version that CarrierAppUtils#disableCarrierAppsUntilPrivileged has been
10626          * executed for.
10627          *
10628          * <p>This is used to ensure that we only take one pass which will disable apps that are not
10629          * privileged (if any). From then on, we only want to enable apps (when a matching SIM is
10630          * inserted), to avoid disabling an app that the user might actively be using.
10631          *
10632          * <p>Will be set to {@link android.os.Build.VERSION#SDK_INT} once executed. Note that older
10633          * SDK versions prior to R set 1 for this value.
10634          *
10635          * @hide
10636          */
10637         @Readable
10638         public static final String CARRIER_APPS_HANDLED = "carrier_apps_handled";
10639 
10640         /**
10641          * Whether parent user can access remote contact in managed profile.
10642          *
10643          * @hide
10644          */
10645         @Readable
10646         public static final String MANAGED_PROFILE_CONTACT_REMOTE_SEARCH =
10647                 "managed_profile_contact_remote_search";
10648 
10649         /**
10650          * Whether parent profile can access remote calendar data in managed profile.
10651          *
10652          * @hide
10653          */
10654         @Readable
10655         public static final String CROSS_PROFILE_CALENDAR_ENABLED =
10656                 "cross_profile_calendar_enabled";
10657 
10658         /**
10659          * Whether or not the automatic storage manager is enabled and should run on the device.
10660          *
10661          * @hide
10662          */
10663         @Readable
10664         public static final String AUTOMATIC_STORAGE_MANAGER_ENABLED =
10665                 "automatic_storage_manager_enabled";
10666 
10667         /**
10668          * How many days of information for the automatic storage manager to retain on the device.
10669          *
10670          * @hide
10671          */
10672         @Readable
10673         public static final String AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN =
10674                 "automatic_storage_manager_days_to_retain";
10675 
10676         /**
10677          * Default number of days of information for the automatic storage manager to retain.
10678          *
10679          * @hide
10680          */
10681         public static final int AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_DEFAULT = 90;
10682 
10683         /**
10684          * How many bytes the automatic storage manager has cleared out.
10685          *
10686          * @hide
10687          */
10688         @Readable
10689         public static final String AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED =
10690                 "automatic_storage_manager_bytes_cleared";
10691 
10692         /**
10693          * Last run time for the automatic storage manager.
10694          *
10695          * @hide
10696          */
10697         @Readable
10698         public static final String AUTOMATIC_STORAGE_MANAGER_LAST_RUN =
10699                 "automatic_storage_manager_last_run";
10700         /**
10701          * If the automatic storage manager has been disabled by policy. Note that this doesn't
10702          * mean that the automatic storage manager is prevented from being re-enabled -- this only
10703          * means that it was turned off by policy at least once.
10704          *
10705          * @hide
10706          */
10707         @Readable
10708         public static final String AUTOMATIC_STORAGE_MANAGER_TURNED_OFF_BY_POLICY =
10709                 "automatic_storage_manager_turned_off_by_policy";
10710 
10711         /**
10712          * Whether SystemUI navigation keys is enabled.
10713          * @hide
10714          */
10715         @Readable
10716         public static final String SYSTEM_NAVIGATION_KEYS_ENABLED =
10717                 "system_navigation_keys_enabled";
10718 
10719         /**
10720          * Holds comma separated list of ordering of QS tiles.
10721          *
10722          * @hide
10723          */
10724         @Readable(maxTargetSdk = VERSION_CODES.TIRAMISU)
10725         public static final String QS_TILES = "sysui_qs_tiles";
10726 
10727         /**
10728          * Whether this user has enabled Quick controls.
10729          *
10730          * 0 indicates disabled and 1 indicates enabled. A non existent value should be treated as
10731          * enabled.
10732          *
10733          * @deprecated Controls are migrated to Quick Settings, rendering this unnecessary and will
10734          *             be removed in a future release.
10735          * @hide
10736          */
10737         @Readable
10738         @Deprecated
10739         public static final String CONTROLS_ENABLED = "controls_enabled";
10740 
10741         /**
10742          * Whether power menu content (cards, passes, controls) will be shown when device is locked.
10743          *
10744          * 0 indicates hide and 1 indicates show. A non existent value will be treated as hide.
10745          * @hide
10746          */
10747         @TestApi
10748         @Readable
10749         public static final String POWER_MENU_LOCKED_SHOW_CONTENT =
10750                 "power_menu_locked_show_content";
10751 
10752         /**
10753          * Whether home controls should be accessible from the lockscreen
10754          *
10755          * @hide
10756          */
10757         public static final String LOCKSCREEN_SHOW_CONTROLS = "lockscreen_show_controls";
10758 
10759         /**
10760          * Whether trivial home controls can be used without authentication
10761          *
10762          * @hide
10763          */
10764         public static final String LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS =
10765                 "lockscreen_allow_trivial_controls";
10766 
10767         /**
10768          * Whether wallet should be accessible from the lockscreen
10769          *
10770          * @hide
10771          */
10772         public static final String LOCKSCREEN_SHOW_WALLET = "lockscreen_show_wallet";
10773 
10774         /**
10775          * Whether to use the lockscreen double-line clock
10776          *
10777          * @hide
10778          */
10779         public static final String LOCKSCREEN_USE_DOUBLE_LINE_CLOCK =
10780                 "lockscreen_use_double_line_clock";
10781 
10782         /**
10783          * Whether to show the vibrate icon in the Status Bar (default off)
10784          *
10785          * @hide
10786          */
10787         public static final String STATUS_BAR_SHOW_VIBRATE_ICON = "status_bar_show_vibrate_icon";
10788 
10789         /**
10790          * Specifies whether the web action API is enabled.
10791          *
10792          * @hide
10793          */
10794         @SystemApi
10795         @Readable
10796         public static final String INSTANT_APPS_ENABLED = "instant_apps_enabled";
10797 
10798         /**
10799          * Whether qr code scanner should be accessible from the lockscreen
10800          *
10801          * @hide
10802          */
10803         public static final String LOCK_SCREEN_SHOW_QR_CODE_SCANNER =
10804                 "lock_screen_show_qr_code_scanner";
10805 
10806         /**
10807          * Whether or not to enable qr code code scanner setting to enable/disable lockscreen
10808          * entry point. Any value apart from null means setting needs to be enabled
10809          *
10810          * @hide
10811          */
10812         public static final String SHOW_QR_CODE_SCANNER_SETTING =
10813                 "show_qr_code_scanner_setting";
10814 
10815         /**
10816          * Has this pairable device been paired or upgraded from a previously paired system.
10817          * @hide
10818          */
10819         @Readable
10820         public static final String DEVICE_PAIRED = "device_paired";
10821 
10822         /**
10823          * Specifies additional package name for broadcasting the CMAS messages.
10824          * @hide
10825          */
10826         @Readable
10827         public static final String CMAS_ADDITIONAL_BROADCAST_PKG = "cmas_additional_broadcast_pkg";
10828 
10829         /**
10830          * Whether the launcher should show any notification badges.
10831          * The value is boolean (1 or 0).
10832          * @hide
10833          */
10834         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
10835         @TestApi
10836         @Readable
10837         public static final String NOTIFICATION_BADGING = "notification_badging";
10838 
10839         /**
10840          * When enabled the system will maintain a rolling history of received notifications. When
10841          * disabled the history will be disabled and deleted.
10842          *
10843          * The value 1 - enable, 0 - disable
10844          * @hide
10845          */
10846         @Readable
10847         public static final String NOTIFICATION_HISTORY_ENABLED = "notification_history_enabled";
10848 
10849         /**
10850          * When enabled conversations marked as favorites will be set to bubble.
10851          *
10852          * The value 1 - enable, 0 - disable
10853          * @hide
10854          */
10855         @Readable
10856         public static final String BUBBLE_IMPORTANT_CONVERSATIONS
10857                 = "bubble_important_conversations";
10858 
10859         /**
10860          * When enabled, notifications able to bubble will display an affordance allowing the user
10861          * to bubble them.
10862          * The value is boolean (1 to enable or 0 to disable).
10863          *
10864          * @hide
10865          */
10866         @TestApi
10867         @SuppressLint("NoSettingsProvider")
10868         @Readable
10869         public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
10870 
10871         /**
10872          * Whether notifications are dismissed by a right-to-left swipe (instead of a left-to-right
10873          * swipe).
10874          *
10875          * @hide
10876          */
10877         @Readable
10878         public static final String NOTIFICATION_DISMISS_RTL = "notification_dismiss_rtl";
10879 
10880         /**
10881          * Comma separated list of QS tiles that have been auto-added already.
10882          * @hide
10883          */
10884         @Readable
10885         public static final String QS_AUTO_ADDED_TILES = "qs_auto_tiles";
10886 
10887         /**
10888          * The duration of timeout, in milliseconds, to switch from a non-Dock User to the
10889          * Dock User when the device is docked.
10890          * @hide
10891          */
10892         public static final String TIMEOUT_TO_DOCK_USER = "timeout_to_dock_user";
10893 
10894         /**
10895          * Backup manager behavioral parameters.
10896          * This is encoded as a key=value list, separated by commas. Ex:
10897          *
10898          * "key_value_backup_interval_milliseconds=14400000,key_value_backup_require_charging=true"
10899          *
10900          * The following keys are supported:
10901          *
10902          * <pre>
10903          * key_value_backup_interval_milliseconds  (long)
10904          * key_value_backup_fuzz_milliseconds      (long)
10905          * key_value_backup_require_charging       (boolean)
10906          * key_value_backup_required_network_type  (int)
10907          * full_backup_interval_milliseconds       (long)
10908          * full_backup_require_charging            (boolean)
10909          * full_backup_required_network_type       (int)
10910          * backup_finished_notification_receivers  (String[])
10911          * </pre>
10912          *
10913          * backup_finished_notification_receivers uses ":" as delimeter for values.
10914          *
10915          * <p>
10916          * Type: string
10917          * @hide
10918          */
10919         @Readable
10920         public static final String BACKUP_MANAGER_CONSTANTS = "backup_manager_constants";
10921 
10922 
10923         /**
10924          * Local transport parameters so we can configure it for tests.
10925          * This is encoded as a key=value list, separated by commas.
10926          *
10927          * The following keys are supported:
10928          *
10929          * <pre>
10930          * fake_encryption_flag  (boolean)
10931          * </pre>
10932          *
10933          * <p>
10934          * Type: string
10935          * @hide
10936          */
10937         @Readable
10938         public static final String BACKUP_LOCAL_TRANSPORT_PARAMETERS =
10939                 "backup_local_transport_parameters";
10940 
10941         /**
10942          * Flag to set if the system should predictively attempt to re-enable Bluetooth while
10943          * the user is driving.
10944          * @hide
10945          */
10946         @Readable
10947         public static final String BLUETOOTH_ON_WHILE_DRIVING = "bluetooth_on_while_driving";
10948 
10949         /**
10950          * What behavior should be invoked when the volume hush gesture is triggered
10951          * One of VOLUME_HUSH_OFF, VOLUME_HUSH_VIBRATE, VOLUME_HUSH_MUTE.
10952          *
10953          * @hide
10954          */
10955         @SystemApi
10956         @Readable
10957         public static final String VOLUME_HUSH_GESTURE = "volume_hush_gesture";
10958 
10959         /** @hide */
10960         @SystemApi
10961         public static final int VOLUME_HUSH_OFF = 0;
10962         /** @hide */
10963         @SystemApi
10964         public static final int VOLUME_HUSH_VIBRATE = 1;
10965         /** @hide */
10966         @SystemApi
10967         public static final int VOLUME_HUSH_MUTE = 2;
10968 
10969         /**
10970          * The number of times (integer) the user has manually enabled battery saver.
10971          * @hide
10972          */
10973         @Readable
10974         public static final String LOW_POWER_MANUAL_ACTIVATION_COUNT =
10975                 "low_power_manual_activation_count";
10976 
10977         /**
10978          * Whether the "first time battery saver warning" dialog needs to be shown (0: default)
10979          * or not (1).
10980          *
10981          * @hide
10982          */
10983         @Readable
10984         public static final String LOW_POWER_WARNING_ACKNOWLEDGED =
10985                 "low_power_warning_acknowledged";
10986 
10987         /**
10988          * Whether the "first time extra battery saver warning" dialog needs to be shown
10989          * (0: default) or not (1).
10990          *
10991          * @hide
10992          */
10993         public static final String EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED =
10994                 "extra_low_power_warning_acknowledged";
10995 
10996         /**
10997          * 0 (default) Auto battery saver suggestion has not been suppressed. 1) it has been
10998          * suppressed.
10999          * @hide
11000          */
11001         @Readable
11002         public static final String SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION =
11003                 "suppress_auto_battery_saver_suggestion";
11004 
11005         /**
11006          * List of packages, which data need to be unconditionally cleared before full restore.
11007          * Type: string
11008          * @hide
11009          */
11010         @Readable
11011         public static final String PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE =
11012                 "packages_to_clear_data_before_full_restore";
11013 
11014         /**
11015          * How often to check for location access.
11016          * @hide
11017          *
11018          * @deprecated This has been moved to DeviceConfig property
11019          * {@link LocationAccessCheck#PROPERTY_LOCATION_ACCESS_PERIODIC_INTERVAL_MILLIS} in a T
11020          * module update
11021          *
11022          * Before Android T set this property to control the interval for the check
11023          * On Android T set this and the DeviceConfig property
11024          * After Android T set the DeviceConfig property
11025          */
11026         @SystemApi
11027         @Deprecated
11028         @Readable
11029         public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS =
11030                 "location_access_check_interval_millis";
11031 
11032         /**
11033          * Delay between granting location access and checking it.
11034          * @hide
11035          *
11036          * @deprecated This has been moved to DeviceConfig property
11037          * {@link LocationAccessCheck#PROPERTY_LOCATION_ACCESS_CHECK_DELAY_MILLIS} in a T module
11038          * update
11039          *
11040          * Before Android T set this property to control the delay for the check
11041          * On Android T set this and the DeviceConfig property
11042          * After Android T set the DeviceConfig property
11043          */
11044         @SystemApi
11045         @Deprecated
11046         @Readable
11047         public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS =
11048                 "location_access_check_delay_millis";
11049 
11050         /**
11051          * @deprecated This setting does not have any effect anymore
11052          * @hide
11053          */
11054         @SystemApi
11055         @Deprecated
11056         @Readable
11057         public static final String LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE =
11058                 "location_permissions_upgrade_to_q_mode";
11059 
11060         /**
11061          * Whether or not the system Auto Revoke feature is disabled.
11062          * @hide
11063          */
11064         @SystemApi
11065         @Readable
11066         public static final String AUTO_REVOKE_DISABLED = "auto_revoke_disabled";
11067 
11068         /**
11069          * Map of android.theme.customization.* categories to the enabled overlay package for that
11070          * category, formatted as a serialized {@link org.json.JSONObject}. If there is no
11071          * corresponding package included for a category, then all overlay packages in that
11072          * category must be disabled.
11073          *
11074          * A few category keys have special meaning and are used for Material You theming.
11075          *
11076          * A {@code FabricatedOverlay} containing Material You tonal palettes will be generated
11077          * in case {@code android.theme.customization.system_palette} contains a
11078          * {@link android.annotation.ColorInt}.
11079          *
11080          * The strategy used for generating the tonal palettes can be defined with the
11081          * {@code android.theme.customization.theme_style} key, with one of the following options:
11082          * <ul>
11083          *   <li> {@code TONAL_SPOT} is a mid vibrancy palette that uses an accent 3 analogous to
11084          *   accent 1.</li>
11085          *   <li> {@code VIBRANT} is a high vibrancy palette that harmoniously blends subtle shifts
11086          *   between colors.</li>
11087          *   <li> {@code EXPRESSIVE} is a high vibrancy palette that pairs unexpected and unique
11088          *   accents colors together.</li>
11089          *   <li> {@code SPRITZ} is a low vibrancy palette that creates a soft wash between
11090          *   colors.</li>
11091          *   <li> {@code RAINBOW} uses both chromatic accents and neutral surfaces to create a more
11092          *   subtle color experience for users.</li>
11093          *   <li> {@code FRUIT_SALAD} experiments with the concept of "two tone colors" to give
11094          *   users more expression.</li>
11095          * </ul>
11096          *
11097          * Example of valid fabricated theme specification:
11098          * <pre>
11099          * {
11100          *     "android.theme.customization.system_palette":"B1611C",
11101          *     "android.theme.customization.theme_style":"EXPRESSIVE"
11102          * }
11103          * </pre>
11104          * @hide
11105          */
11106         @SystemApi
11107         @Readable
11108         public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES =
11109                 "theme_customization_overlay_packages";
11110 
11111         /**
11112          * Indicates whether the nav bar is forced to always be visible, even in immersive mode.
11113          * <p>Type: int (0 for false, 1 for true)
11114          *
11115          * @hide
11116          */
11117         public static final String NAV_BAR_FORCE_VISIBLE = "nav_bar_force_visible";
11118 
11119         /**
11120          * Indicates whether the device is in kids nav mode.
11121          * <p>Type: int (0 for false, 1 for true)
11122          *
11123          * @hide
11124          */
11125         public static final String NAV_BAR_KIDS_MODE = "nav_bar_kids_mode";
11126 
11127         /**
11128          * Navigation bar mode.
11129          *  0 = 3 button
11130          *  1 = 2 button
11131          *  2 = fully gestural
11132          * @hide
11133          */
11134         @Readable
11135         public static final String NAVIGATION_MODE =
11136                 "navigation_mode";
11137 
11138         /**
11139          * The value is from another(source) device's {@link #NAVIGATION_MODE} during restore.
11140          * It's supposed to be written only by
11141          * {@link com.android.providers.settings.SettingsHelper}.
11142          * This setting should not be added into backup array.
11143          * <p>Value: -1 = Can't get value from restore(default),
11144          *  0 = 3 button,
11145          *  1 = 2 button,
11146          *  2 = fully gestural.
11147          * @hide
11148          */
11149         public static final String NAVIGATION_MODE_RESTORE = "navigation_mode_restore";
11150 
11151         /**
11152          * Scale factor for the back gesture inset size on the left side of the screen.
11153          * @hide
11154          */
11155         @Readable
11156         public static final String BACK_GESTURE_INSET_SCALE_LEFT =
11157                 "back_gesture_inset_scale_left";
11158 
11159         /**
11160          * Scale factor for the back gesture inset size on the right side of the screen.
11161          * @hide
11162          */
11163         @Readable
11164         public static final String BACK_GESTURE_INSET_SCALE_RIGHT =
11165                 "back_gesture_inset_scale_right";
11166 
11167         /**
11168          * Indicates whether the trackpad back gesture is enabled.
11169          * <p>Type: int (0 for false, 1 for true)
11170          *
11171          * @hide
11172          */
11173         public static final String TRACKPAD_GESTURE_BACK_ENABLED = "trackpad_gesture_back_enabled";
11174 
11175         /**
11176          * Indicates whether the trackpad home gesture is enabled.
11177          * <p>Type: int (0 for false, 1 for true)
11178          *
11179          * @hide
11180          */
11181         public static final String TRACKPAD_GESTURE_HOME_ENABLED = "trackpad_gesture_home_enabled";
11182 
11183         /**
11184          * Indicates whether the trackpad overview gesture is enabled.
11185          * <p>Type: int (0 for false, 1 for true)
11186          *
11187          * @hide
11188          */
11189         public static final String TRACKPAD_GESTURE_OVERVIEW_ENABLED =
11190                 "trackpad_gesture_overview_enabled";
11191 
11192         /**
11193          * Indicates whether the trackpad notification gesture is enabled.
11194          * <p>Type: int (0 for false, 1 for true)
11195          *
11196          * @hide
11197          */
11198         public static final String TRACKPAD_GESTURE_NOTIFICATION_ENABLED =
11199                 "trackpad_gesture_notification_enabled";
11200 
11201         /**
11202          * Indicates whether the trackpad quick switch gesture is enabled.
11203          * <p>Type: int (0 for false, 1 for true)
11204          *
11205          * @hide
11206          */
11207         public static final String TRACKPAD_GESTURE_QUICK_SWITCH_ENABLED =
11208                 "trackpad_gesture_quick_switch_enabled";
11209 
11210         /**
11211          * Current provider of proximity-based sharing services.
11212          * Default value in @string/config_defaultNearbySharingComponent.
11213          * No VALIDATOR as this setting will not be backed up.
11214          * @hide
11215          */
11216         @Readable
11217         public static final String NEARBY_SHARING_COMPONENT = "nearby_sharing_component";
11218 
11219         /**
11220          * Nearby Sharing Slice URI for the SliceProvider to
11221          * read Nearby Sharing scan results and then draw the UI.
11222          * @hide
11223          */
11224         public static final String NEARBY_SHARING_SLICE_URI = "nearby_sharing_slice_uri";
11225 
11226         /**
11227          * Current provider of Fast Pair saved devices page.
11228          * Default value in @string/config_defaultNearbyFastPairSettingsDevicesComponent.
11229          * No VALIDATOR as this setting will not be backed up.
11230          * @hide
11231          */
11232         public static final String NEARBY_FAST_PAIR_SETTINGS_DEVICES_COMPONENT =
11233                 "nearby_fast_pair_settings_devices_component";
11234 
11235         /**
11236          * Current provider of the component for requesting ambient context consent.
11237          * Default value in @string/config_defaultAmbientContextConsentComponent.
11238          * No VALIDATOR as this setting will not be backed up.
11239          * @hide
11240          */
11241         public static final String AMBIENT_CONTEXT_CONSENT_COMPONENT =
11242                 "ambient_context_consent_component";
11243 
11244         /**
11245          * Current provider of the intent extra key for the caller's package name while
11246          * requesting ambient context consent.
11247          * No VALIDATOR as this setting will not be backed up.
11248          * @hide
11249          */
11250         public static final String AMBIENT_CONTEXT_PACKAGE_NAME_EXTRA_KEY =
11251                 "ambient_context_package_name_key";
11252 
11253         /**
11254          * Current provider of the intent extra key for the event code int array while
11255          * requesting ambient context consent.
11256          * Default value in @string/config_ambientContextEventArrayExtraKey.
11257          * No VALIDATOR as this setting will not be backed up.
11258          * @hide
11259          */
11260         public static final String AMBIENT_CONTEXT_EVENT_ARRAY_EXTRA_KEY =
11261                 "ambient_context_event_array_key";
11262 
11263         /**
11264          * Controls whether aware is enabled.
11265          * @hide
11266          */
11267         @Readable
11268         public static final String AWARE_ENABLED = "aware_enabled";
11269 
11270         /**
11271          * Controls whether aware_lock is enabled.
11272          * @hide
11273          */
11274         @Readable
11275         public static final String AWARE_LOCK_ENABLED = "aware_lock_enabled";
11276 
11277         /**
11278          * Controls whether tap gesture is enabled.
11279          * @hide
11280          */
11281         @Readable
11282         public static final String TAP_GESTURE = "tap_gesture";
11283 
11284         /**
11285          * Controls whether the people strip is enabled.
11286          * @hide
11287          */
11288         @Readable
11289         public static final String PEOPLE_STRIP = "people_strip";
11290 
11291         /**
11292          * Whether or not to enable media resumption
11293          * When enabled, media controls in quick settings will populate on boot and persist if
11294          * resumable via a MediaBrowserService.
11295          * @see Settings.Global#SHOW_MEDIA_ON_QUICK_SETTINGS
11296          * @hide
11297          */
11298         @Readable
11299         public static final String MEDIA_CONTROLS_RESUME = "qs_media_resumption";
11300 
11301         /**
11302          * Whether to enable media controls on lock screen.
11303          * When enabled, media controls will appear on lock screen.
11304          * @hide
11305          */
11306         public static final String MEDIA_CONTROLS_LOCK_SCREEN = "media_controls_lock_screen";
11307 
11308         /**
11309          * Controls whether contextual suggestions can be shown in the media controls.
11310          * @hide
11311          */
11312         public static final String MEDIA_CONTROLS_RECOMMENDATION = "qs_media_recommend";
11313 
11314         /**
11315          * Controls magnification mode when magnification is enabled via a system-wide triple tap
11316          * gesture or the accessibility shortcut.
11317          *
11318          * @see #ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
11319          * @see #ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
11320          * @hide
11321          */
11322         @TestApi
11323         @Readable
11324         public static final String ACCESSIBILITY_MAGNIFICATION_MODE =
11325                 "accessibility_magnification_mode";
11326 
11327         /**
11328          * Magnification mode value that is a default value for the magnification logging feature.
11329          * @hide
11330          */
11331         public static final int ACCESSIBILITY_MAGNIFICATION_MODE_NONE = 0x0;
11332 
11333         /**
11334          * Magnification mode value that magnifies whole display.
11335          * @hide
11336          */
11337         @TestApi
11338         public static final int ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN = 0x1;
11339 
11340         /**
11341          * Magnification mode value that magnifies magnify particular region in a window
11342          * @hide
11343          */
11344         @TestApi
11345         public static final int ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW = 0x2;
11346 
11347         /**
11348          * Magnification mode value that is capable of magnifying whole display and particular
11349          * region in a window.
11350          * @hide
11351          */
11352         @TestApi
11353         public static final int ACCESSIBILITY_MAGNIFICATION_MODE_ALL = 0x3;
11354 
11355         /**
11356          * Whether the magnification always on feature is enabled. If true, the magnifier will not
11357          * deactivate on Activity transitions; it will only zoom out to 100%.
11358          *
11359          * @hide
11360          */
11361         public static final String ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED =
11362                 "accessibility_magnification_always_on_enabled";
11363 
11364         /**
11365          * Whether the following typing focus feature for magnification is enabled.
11366          * @hide
11367          */
11368         public static final String ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED =
11369                 "accessibility_magnification_follow_typing_enabled";
11370 
11371         /**
11372          * Whether the magnification joystick controller feature is enabled.
11373          * @hide
11374          */
11375         public static final String ACCESSIBILITY_MAGNIFICATION_JOYSTICK_ENABLED =
11376                 "accessibility_magnification_joystick_enabled";
11377 
11378         /**
11379          * Controls magnification capability. Accessibility magnification is capable of at least one
11380          * of the magnification modes.
11381          *
11382          * @see #ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
11383          * @see #ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
11384          * @see #ACCESSIBILITY_MAGNIFICATION_MODE_ALL
11385          * @hide
11386          */
11387         @TestApi
11388         @Readable
11389         public static final String ACCESSIBILITY_MAGNIFICATION_CAPABILITY =
11390                 "accessibility_magnification_capability";
11391 
11392         /**
11393          *  Whether to show the window magnification prompt dialog when the user uses full-screen
11394          *  magnification first time after database is upgraded.
11395          *
11396          * @hide
11397          */
11398         public static final String ACCESSIBILITY_SHOW_WINDOW_MAGNIFICATION_PROMPT =
11399                 "accessibility_show_window_magnification_prompt";
11400 
11401         /**
11402          * Controls the accessibility button mode. System will force-set the value to {@link
11403          * #ACCESSIBILITY_BUTTON_MODE_GESTURE} if {@link #NAVIGATION_MODE} is button; force-set the
11404          * value to {@link ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR} if {@link #NAVIGATION_MODE} is
11405          * gestural; otherwise, remain the option.
11406          * <ul>
11407          *    <li> 0 = button in navigation bar </li>
11408          *    <li> 1 = button floating on the display </li>
11409          *    <li> 2 = button using gesture to trigger </li>
11410          * </ul>
11411          *
11412          * @see #ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR
11413          * @see #ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU
11414          * @see #ACCESSIBILITY_BUTTON_MODE_GESTURE
11415          * @hide
11416          */
11417         public static final String ACCESSIBILITY_BUTTON_MODE =
11418                 "accessibility_button_mode";
11419 
11420         /**
11421          * Accessibility button mode value that specifying the accessibility service or feature to
11422          * be toggled via the button in the navigation bar.
11423          *
11424          * @hide
11425          */
11426         public static final int ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR = 0x0;
11427 
11428         /**
11429          * Accessibility button mode value that specifying the accessibility service or feature to
11430          * be toggled via the button floating on the display.
11431          *
11432          * @hide
11433          */
11434         public static final int ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU = 0x1;
11435 
11436         /**
11437          * Accessibility button mode value that specifying the accessibility service or feature to
11438          * be toggled via the gesture.
11439          *
11440          * @hide
11441          */
11442         public static final int ACCESSIBILITY_BUTTON_MODE_GESTURE = 0x2;
11443 
11444         /**
11445          * The size of the accessibility floating menu.
11446          * <ul>
11447          *     <li> 0 = small size
11448          *     <li> 1 = large size
11449          * </ul>
11450          *
11451          * @hide
11452          */
11453         public static final String ACCESSIBILITY_FLOATING_MENU_SIZE =
11454                 "accessibility_floating_menu_size";
11455 
11456         /**
11457          * The icon type of the accessibility floating menu.
11458          * <ul>
11459          *     <li> 0 = full circle type
11460          *     <li> 1 = half circle type
11461          * </ul>
11462          *
11463          * @hide
11464          */
11465         public static final String ACCESSIBILITY_FLOATING_MENU_ICON_TYPE =
11466                 "accessibility_floating_menu_icon_type";
11467 
11468         /**
11469          * Whether the fade effect for the accessibility floating menu is enabled.
11470          *
11471          * @hide
11472          */
11473         public static final String ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED =
11474                 "accessibility_floating_menu_fade_enabled";
11475 
11476         /**
11477          * The opacity value for the accessibility floating menu fade out effect, from 0.0
11478          * (transparent) to 1.0 (opaque).
11479          *
11480          * @hide
11481          */
11482         public static final String ACCESSIBILITY_FLOATING_MENU_OPACITY =
11483                 "accessibility_floating_menu_opacity";
11484 
11485         /**
11486          * Prompts the user to the Accessibility button is replaced with the floating menu.
11487          * <ul>
11488          *    <li> 0 = disabled </li>
11489          *    <li> 1 = enabled </li>
11490          * </ul>
11491          *
11492          * @hide
11493          */
11494         public static final String ACCESSIBILITY_FLOATING_MENU_MIGRATION_TOOLTIP_PROMPT =
11495                 "accessibility_floating_menu_migration_tooltip_prompt";
11496 
11497         /**
11498          * Whether the Adaptive connectivity option is enabled.
11499          *
11500          * @hide
11501          */
11502         public static final String ADAPTIVE_CONNECTIVITY_ENABLED = "adaptive_connectivity_enabled";
11503 
11504         /**
11505          * Controls the 'Sunlight boost' toggle in wearable devices (high brightness mode).
11506          *
11507          * Valid values for this key are: '0' (disabled) or '1' (enabled).
11508          *
11509          * @hide
11510          */
11511         public static final String HBM_SETTING_KEY =
11512                 "com.android.server.display.HBM_SETTING_KEY";
11513 
11514         /**
11515          * Keys we no longer back up under the current schema, but want to continue to
11516          * process when restoring historical backup datasets.
11517          *
11518          * All settings in {@link LEGACY_RESTORE_SETTINGS} array *must* have a non-null validator,
11519          * otherwise they won't be restored.
11520          *
11521          * @hide
11522          */
11523         @Readable
11524         public static final String[] LEGACY_RESTORE_SETTINGS = {
11525                 ENABLED_NOTIFICATION_LISTENERS,
11526                 ENABLED_NOTIFICATION_ASSISTANT,
11527                 ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES
11528         };
11529 
11530         /**
11531          * How long Assistant handles have enabled in milliseconds.
11532          *
11533          * @hide
11534          */
11535         public static final String ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS =
11536                 "reminder_exp_learning_time_elapsed";
11537 
11538         /**
11539          * How many times the Assistant has been triggered using the touch gesture.
11540          *
11541          * @hide
11542          */
11543         public static final String ASSIST_HANDLES_LEARNING_EVENT_COUNT =
11544                 "reminder_exp_learning_event_count";
11545 
11546         /**
11547          * Whether to show clipboard access notifications.
11548          *
11549          * @hide
11550          */
11551         public static final String CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS =
11552                 "clipboard_show_access_notifications";
11553 
11554         /**
11555          * If nonzero, nas has not been updated to reflect new changes.
11556          * @hide
11557          */
11558         @Readable
11559         public static final String NAS_SETTINGS_UPDATED = "nas_settings_updated";
11560 
11561         /**
11562          * Control whether Game Dashboard shortcut is always on for all games.
11563          * @hide
11564          */
11565         @Readable
11566         public static final String GAME_DASHBOARD_ALWAYS_ON = "game_dashboard_always_on";
11567 
11568 
11569         /**
11570          * For this device state, no specific auto-rotation lock setting should be applied.
11571          * If the user toggles the auto-rotate lock in this state, the setting will apply to the
11572          * previously valid device state.
11573          * @hide
11574          */
11575         public static final int DEVICE_STATE_ROTATION_LOCK_IGNORED = 0;
11576         /**
11577          * For this device state, the setting for auto-rotation is locked.
11578          * @hide
11579          */
11580         public static final int DEVICE_STATE_ROTATION_LOCK_LOCKED = 1;
11581         /**
11582          * For this device state, the setting for auto-rotation is unlocked.
11583          * @hide
11584          */
11585         public static final int DEVICE_STATE_ROTATION_LOCK_UNLOCKED = 2;
11586 
11587         /**
11588          * The different settings that can be used as values with
11589          * {@link #DEVICE_STATE_ROTATION_LOCK}.
11590          * @hide
11591          */
11592         @IntDef(prefix = {"DEVICE_STATE_ROTATION_LOCK_"}, value = {
11593                 DEVICE_STATE_ROTATION_LOCK_IGNORED,
11594                 DEVICE_STATE_ROTATION_LOCK_LOCKED,
11595                 DEVICE_STATE_ROTATION_LOCK_UNLOCKED,
11596         })
11597         @Retention(RetentionPolicy.SOURCE)
11598         public @interface DeviceStateRotationLockSetting {
11599         }
11600 
11601         /** @hide */
11602         public static final int DEVICE_STATE_ROTATION_KEY_UNKNOWN = -1;
11603         /** @hide */
11604         public static final int DEVICE_STATE_ROTATION_KEY_FOLDED = 0;
11605         /** @hide */
11606         public static final int DEVICE_STATE_ROTATION_KEY_HALF_FOLDED = 1;
11607         /** @hide */
11608         public static final int DEVICE_STATE_ROTATION_KEY_UNFOLDED = 2;
11609         /** @hide */
11610         public static final int DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY = 3;
11611 
11612         /**
11613          * The different postures that can be used as keys with
11614          * {@link #DEVICE_STATE_ROTATION_LOCK}.
11615          * @hide
11616          */
11617         @IntDef(prefix = {"DEVICE_STATE_ROTATION_KEY_"}, value = {
11618                 DEVICE_STATE_ROTATION_KEY_UNKNOWN,
11619                 DEVICE_STATE_ROTATION_KEY_FOLDED,
11620                 DEVICE_STATE_ROTATION_KEY_HALF_FOLDED,
11621                 DEVICE_STATE_ROTATION_KEY_UNFOLDED,
11622                 DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY,
11623         })
11624         @Retention(RetentionPolicy.SOURCE)
11625         public @interface DeviceStateRotationLockKey {
11626         }
11627 
11628         /**
11629          * Rotation lock setting keyed on device state.
11630          *
11631          * This holds a serialized map using int keys that represent postures in
11632          * {@link DeviceStateRotationLockKey} and value of
11633          * {@link DeviceStateRotationLockSetting} representing the rotation lock setting for that
11634          * posture.
11635          *
11636          * Serialized as key0:value0:key1:value1:...:keyN:valueN.
11637          *
11638          * Example: "0:1:1:2:2:1"
11639          * This example represents a map of:
11640          * <ul>
11641          *     <li>DEVICE_STATE_ROTATION_KEY_FOLDED -> DEVICE_STATE_ROTATION_LOCK_LOCKED</li>
11642          *     <li>DEVICE_STATE_ROTATION_KEY_HALF_FOLDED -> DEVICE_STATE_ROTATION_LOCK_UNLOCKED</li>
11643          *     <li>DEVICE_STATE_ROTATION_KEY_UNFOLDED -> DEVICE_STATE_ROTATION_LOCK_IGNORED</li>
11644          * </ul>
11645          *
11646          * @hide
11647          */
11648         public static final String DEVICE_STATE_ROTATION_LOCK =
11649                 "device_state_rotation_lock";
11650 
11651         /**
11652          * Control whether communal mode is allowed on this device.
11653          *
11654          * @hide
11655          */
11656         public static final String COMMUNAL_MODE_ENABLED = "communal_mode_enabled";
11657 
11658         /**
11659          * An array of SSIDs of Wi-Fi networks that, when connected, are considered safe to enable
11660          * the communal mode.
11661          *
11662          * @hide
11663          */
11664         public static final String COMMUNAL_MODE_TRUSTED_NETWORKS =
11665                 "communal_mode_trusted_networks";
11666 
11667         /**
11668          * Setting to store denylisted system languages by the CEC {@code <Set Menu Language>}
11669          * confirmation dialog.
11670          *
11671          * @hide
11672          */
11673         public static final String HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST =
11674                 "hdmi_cec_set_menu_language_denylist";
11675 
11676         /**
11677          * Whether the Taskbar Education is about to be shown or is currently showing.
11678          *
11679          * <p>1 if true, 0 or unset otherwise.
11680          *
11681          * <p>This setting is used to inform other components that the Taskbar Education is
11682          * currently showing, which can prevent them from showing something else to the user.
11683          *
11684          * @hide
11685          */
11686         public static final String LAUNCHER_TASKBAR_EDUCATION_SHOWING =
11687                 "launcher_taskbar_education_showing";
11688 
11689         /**
11690          * Whether or not adaptive charging feature is enabled by user.
11691          * Type: int (0 for false, 1 for true)
11692          * Default: 1
11693          *
11694          * @hide
11695          */
11696         public static final String ADAPTIVE_CHARGING_ENABLED = "adaptive_charging_enabled";
11697 
11698         /**
11699          * Whether battery saver is currently set to different schedule mode.
11700          *
11701          * @hide
11702          */
11703         public static final String EXTRA_AUTOMATIC_POWER_SAVE_MODE =
11704                 "extra_automatic_power_save_mode";
11705 
11706         /**
11707          * Whether lockscreen weather is enabled.
11708          *
11709          * @hide
11710          */
11711         public static final String LOCK_SCREEN_WEATHER_ENABLED = "lockscreen_weather_enabled";
11712 
11713         /**
11714          * These entries are considered common between the personal and the managed profile,
11715          * since the managed profile doesn't get to change them.
11716          */
11717         private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
11718 
11719         static {
11720             CLONE_TO_MANAGED_PROFILE.add(ACCESSIBILITY_ENABLED);
11721             CLONE_TO_MANAGED_PROFILE.add(ALLOW_MOCK_LOCATION);
11722             CLONE_TO_MANAGED_PROFILE.add(ALLOWED_GEOLOCATION_ORIGINS);
11723             CLONE_TO_MANAGED_PROFILE.add(CONTENT_CAPTURE_ENABLED);
11724             CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES);
11725             CLONE_TO_MANAGED_PROFILE.add(LOCATION_CHANGER);
11726             CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE);
11727             CLONE_TO_MANAGED_PROFILE.add(SHOW_IME_WITH_HARD_KEYBOARD);
11728             CLONE_TO_MANAGED_PROFILE.add(NOTIFICATION_BUBBLES);
11729         }
11730 
11731         /** @hide */
getCloneToManagedProfileSettings(Set<String> outKeySet)11732         public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
11733             outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
11734         }
11735 
11736         /**
11737          * Secure settings which can be accessed by instant apps.
11738          * @hide
11739          */
11740         public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
11741         static {
11742             INSTANT_APP_SETTINGS.add(ENABLED_ACCESSIBILITY_SERVICES);
11743             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_SPEAK_PASSWORD);
11744             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
11745             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_ENABLED);
11746             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_PRESET);
11747             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_EDGE_TYPE);
11748             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_EDGE_COLOR);
11749             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_LOCALE);
11750             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR);
11751             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR);
11752             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_TYPEFACE);
11753             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_FONT_SCALE);
11754             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_WINDOW_COLOR);
11755             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
11756             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_DALTONIZER);
11757             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_AUTOCLICK_DELAY);
11758             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_AUTOCLICK_ENABLED);
11759             INSTANT_APP_SETTINGS.add(ACCESSIBILITY_LARGE_POINTER_ICON);
11760 
11761             INSTANT_APP_SETTINGS.add(DEFAULT_INPUT_METHOD);
11762             INSTANT_APP_SETTINGS.add(ENABLED_INPUT_METHODS);
11763 
11764             INSTANT_APP_SETTINGS.add(ANDROID_ID);
11765 
11766             INSTANT_APP_SETTINGS.add(ALLOW_MOCK_LOCATION);
11767         }
11768 
11769         /**
11770          * Helper method for determining if a location provider is enabled.
11771          *
11772          * @param cr the content resolver to use
11773          * @param provider the location provider to query
11774          * @return true if the provider is enabled
11775          *
11776          * @deprecated use {@link LocationManager#isProviderEnabled(String)}
11777          */
11778         @Deprecated
isLocationProviderEnabled(ContentResolver cr, String provider)11779         public static boolean isLocationProviderEnabled(ContentResolver cr, String provider) {
11780             IBinder binder = ServiceManager.getService(Context.LOCATION_SERVICE);
11781             ILocationManager lm = Objects.requireNonNull(ILocationManager.Stub.asInterface(binder));
11782             try {
11783                 return lm.isProviderEnabledForUser(provider, cr.getUserId());
11784             } catch (RemoteException e) {
11785                 throw e.rethrowFromSystemServer();
11786             }
11787         }
11788 
11789         /**
11790          * Thread-safe method for enabling or disabling a single location provider. This will have
11791          * no effect on Android Q and above.
11792          * @param cr the content resolver to use
11793          * @param provider the location provider to enable or disable
11794          * @param enabled true if the provider should be enabled
11795          * @deprecated This API is deprecated
11796          */
11797         @Deprecated
setLocationProviderEnabled(ContentResolver cr, String provider, boolean enabled)11798         public static void setLocationProviderEnabled(ContentResolver cr,
11799                 String provider, boolean enabled) {
11800         }
11801     }
11802 
11803     /**
11804      * Global system settings, containing preferences that always apply identically
11805      * to all defined users.  Applications can read these but are not allowed to write;
11806      * like the "Secure" settings, these are for preferences that the user must
11807      * explicitly modify through the system UI or specialized APIs for those values.
11808      */
11809     public static final class Global extends NameValueTable {
11810         // NOTE: If you add new settings here, be sure to add them to
11811         // com.android.providers.settings.SettingsProtoDumpUtil#dumpProtoGlobalSettingsLocked.
11812 
11813         /**
11814          * The content:// style URL for global secure settings items.  Not public.
11815          */
11816         public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global");
11817 
11818         /**
11819          * Whether the notification bubbles are globally enabled
11820          * The value is boolean (1 or 0).
11821          * @hide
11822          * @deprecated moved to secure settings.
11823          */
11824         @Deprecated
11825         @TestApi
11826         @Readable
11827         public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
11828 
11829         /**
11830          * Whether users are allowed to add more users or guest from lockscreen.
11831          * <p>
11832          * Type: int
11833          * @hide
11834          */
11835         @Readable
11836         public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked";
11837 
11838         /**
11839          * Whether guest user should be removed on exit from guest mode.
11840          * <p>
11841          * Type: int
11842          * @hide
11843          */
11844         public static final String REMOVE_GUEST_ON_EXIT = "remove_guest_on_exit";
11845 
11846         /**
11847          * Whether applying ramping ringer on incoming phone call ringtone.
11848          * <p>1 = apply ramping ringer
11849          * <p>0 = do not apply ramping ringer
11850          * @deprecated Use {@link AudioManager#isRampingRingerEnabled()} instead
11851          */
11852         @Deprecated
11853         @Readable
11854         public static final String APPLY_RAMPING_RINGER = "apply_ramping_ringer";
11855 
11856         /**
11857          * Setting whether the global gesture for enabling accessibility is enabled.
11858          * If this gesture is enabled the user will be able to perfrom it to enable
11859          * the accessibility state without visiting the settings app.
11860          *
11861          * @hide
11862          * No longer used. Should be removed once all dependencies have been updated.
11863          */
11864         @UnsupportedAppUsage
11865         @Readable
11866         public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED =
11867                 "enable_accessibility_global_gesture_enabled";
11868 
11869         /**
11870          * Whether Airplane Mode is on.
11871          */
11872         @Readable
11873         public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
11874 
11875         /**
11876          * Whether Theater Mode is on.
11877          * {@hide}
11878          */
11879         @SystemApi
11880         @Readable
11881         public static final String THEATER_MODE_ON = "theater_mode_on";
11882 
11883         /**
11884          * Constant for use in AIRPLANE_MODE_RADIOS or SATELLITE_MODE_RADIOS to specify Bluetooth
11885          * radio.
11886          */
11887         @Readable
11888         public static final String RADIO_BLUETOOTH = "bluetooth";
11889 
11890         /**
11891          * Constant for use in AIRPLANE_MODE_RADIOS or SATELLITE_MODE_RADIOS to specify Wi-Fi radio.
11892          */
11893         @Readable
11894         public static final String RADIO_WIFI = "wifi";
11895 
11896         /**
11897          * {@hide}
11898          */
11899         @Readable
11900         public static final String RADIO_WIMAX = "wimax";
11901         /**
11902          * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio.
11903          */
11904         @Readable
11905         public static final String RADIO_CELL = "cell";
11906 
11907         /**
11908          * Constant for use in AIRPLANE_MODE_RADIOS or SATELLITE_MODE_RADIOS to specify NFC radio.
11909          */
11910         @Readable
11911         public static final String RADIO_NFC = "nfc";
11912 
11913         /**
11914          * Constant for use in SATELLITE_MODE_RADIOS to specify UWB radio.
11915          *
11916          * {@hide}
11917          */
11918         public static final String RADIO_UWB = "uwb";
11919 
11920 
11921         /**
11922          * A comma separated list of radios that need to be disabled when satellite mode is on.
11923          *
11924          * {@hide}
11925          */
11926         @Readable
11927         public static final String SATELLITE_MODE_RADIOS = "satellite_mode_radios";
11928 
11929         /**
11930          * The satellite mode is enabled for the user. When the satellite mode is enabled, the
11931          * satellite radio will be turned on and all other radios will be turned off. When the
11932          * satellite mode is disabled, the satellite radio will be turned off and the states of
11933          * other radios will be restored.
11934          * <p>
11935          * When this setting is set to 0, it means the satellite mode is disabled. When this
11936          * setting is set to 1, it means the satellite mode is enabled.
11937          *
11938          * {@hide}
11939          */
11940         @Readable
11941         public static final String SATELLITE_MODE_ENABLED = "satellite_mode_enabled";
11942 
11943         /**
11944          * A comma separated list of radios that need to be disabled when airplane mode
11945          * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are
11946          * included in the comma separated list.
11947          */
11948         @Readable
11949         public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
11950 
11951         /**
11952          * A comma separated list of radios that should to be disabled when airplane mode
11953          * is on, but can be manually reenabled by the user.  For example, if RADIO_WIFI is
11954          * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi
11955          * will be turned off when entering airplane mode, but the user will be able to reenable
11956          * Wifi in the Settings app.
11957          * @hide
11958          */
11959         @SystemApi
11960         @Readable
11961         public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
11962 
11963         /**
11964          * An integer representing the Bluetooth Class of Device (CoD).
11965          *
11966          * @hide
11967          */
11968         @Readable
11969         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
11970         @SuppressLint("NoSettingsProvider")
11971         public static final String BLUETOOTH_CLASS_OF_DEVICE = "bluetooth_class_of_device";
11972 
11973         /**
11974          * A Long representing a bitmap of profiles that should be disabled when bluetooth starts.
11975          * See {@link android.bluetooth.BluetoothProfile}.
11976          * {@hide}
11977          */
11978         @Readable
11979         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
11980         @SuppressLint("NoSettingsProvider")
11981         public static final String BLUETOOTH_DISABLED_PROFILES = "bluetooth_disabled_profiles";
11982 
11983         /**
11984          * A semi-colon separated list of Bluetooth interoperability workarounds.
11985          * Each entry is a partial Bluetooth device address string and an integer representing
11986          * the feature to be disabled, separated by a comma. The integer must correspond
11987          * to a interoperability feature as defined in "interop.h" in /system/bt.
11988          * <p>
11989          * Example: <br/>
11990          *   "00:11:22,0;01:02:03:04,2"
11991          * @hide
11992          */
11993         @Readable
11994        public static final String BLUETOOTH_INTEROPERABILITY_LIST = "bluetooth_interoperability_list";
11995 
11996         /**
11997          * The policy for deciding when Wi-Fi should go to sleep (which will in
11998          * turn switch to using the mobile data as an Internet connection).
11999          * <p>
12000          * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
12001          * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
12002          * {@link #WIFI_SLEEP_POLICY_NEVER}.
12003          * @deprecated This is no longer used or set by the platform.
12004          */
12005         @Deprecated
12006         @Readable
12007         public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
12008 
12009         /**
12010          * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
12011          * policy, which is to sleep shortly after the turning off
12012          * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
12013          * @deprecated This is no longer used by the platform.
12014          */
12015         @Deprecated
12016         public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
12017 
12018         /**
12019          * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
12020          * the device is on battery, and never go to sleep when the device is
12021          * plugged in.
12022          * @deprecated This is no longer used by the platform.
12023          */
12024         @Deprecated
12025         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
12026 
12027         /**
12028          * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
12029          * @deprecated This is no longer used by the platform.
12030          */
12031         @Deprecated
12032         public static final int WIFI_SLEEP_POLICY_NEVER = 2;
12033 
12034         /**
12035          * Value to specify if the device's UTC system clock should be set automatically, e.g. using
12036          * telephony signals like NITZ, or other sources like GNSS or NTP.
12037          *
12038          * <p>Prefer {@link android.app.time.TimeManager} API calls to determine the state of
12039          * automatic time detection instead of directly observing this setting as it may be ignored
12040          * by the time_detector service under various conditions.
12041          *
12042          * <p>1=yes, 0=no (manual)
12043          */
12044         @Readable
12045         public static final String AUTO_TIME = "auto_time";
12046 
12047         /**
12048          * Value to specify if the device's time zone system property should be set automatically,
12049          * e.g. using telephony signals like MCC and NITZ, or other mechanisms like the location.
12050          *
12051          * <p>Prefer {@link android.app.time.TimeManager} API calls to determine the state of
12052          * automatic time zone detection instead of directly observing this setting as it may be
12053          * ignored by the time_zone_detector service under various conditions.
12054          *
12055          * <p>1=yes, 0=no (manual).
12056          */
12057         @Readable
12058         public static final String AUTO_TIME_ZONE = "auto_time_zone";
12059 
12060         /**
12061          * Records whether an explicit preference for {@link #AUTO_TIME_ZONE} has been expressed
12062          * instead of the current value being the default. This value is used to tell if the {@link
12063          * #AUTO_TIME_ZONE} value can be influenced by experiment flags that alter the setting's
12064          * value for internal testers: once the user indicates a preference they leave the
12065          * experiment, only users that are still using the default will be affected by the flag.
12066          *
12067          * <p>Since {@link #AUTO_TIME_ZONE} can be altered by components besides the system server,
12068          * and not just via the time_zone_detector logic that sets this value, this isn't guaranteed
12069          * to be set when the device diverges from the default in all cases. Important AOSP system
12070          * components like SettingsUI do use the time_zone_detector APIs.
12071          *
12072          * <p>1="has been set explicitly"
12073          *
12074          * @hide
12075          */
12076         public static final String AUTO_TIME_ZONE_EXPLICIT = "auto_time_zone_explicit";
12077 
12078         /**
12079          * URI for the car dock "in" event sound.
12080          * @hide
12081          */
12082         @Readable
12083         public static final String CAR_DOCK_SOUND = "car_dock_sound";
12084 
12085         /**
12086          * URI for the car dock "out" event sound.
12087          * @hide
12088          */
12089         @Readable
12090         public static final String CAR_UNDOCK_SOUND = "car_undock_sound";
12091 
12092         /**
12093          * URI for the desk dock "in" event sound.
12094          * @hide
12095          */
12096         @Readable
12097         public static final String DESK_DOCK_SOUND = "desk_dock_sound";
12098 
12099         /**
12100          * URI for the desk dock "out" event sound.
12101          * @hide
12102          */
12103         @Readable
12104         public static final String DESK_UNDOCK_SOUND = "desk_undock_sound";
12105 
12106         /**
12107          * Whether to play a sound for dock events.
12108          * @hide
12109          */
12110         @Readable
12111         public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled";
12112 
12113         /**
12114          * Whether to play a sound for dock events, only when an accessibility service is on.
12115          * @hide
12116          */
12117         @Readable
12118         public static final String DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY = "dock_sounds_enabled_when_accessbility";
12119 
12120         /**
12121          * URI for the "device locked" (keyguard shown) sound.
12122          * @hide
12123          */
12124         @Readable
12125         public static final String LOCK_SOUND = "lock_sound";
12126 
12127         /**
12128          * URI for the "device unlocked" sound.
12129          * @hide
12130          */
12131         @Readable
12132         public static final String UNLOCK_SOUND = "unlock_sound";
12133 
12134         /**
12135          * URI for the "device is trusted" sound, which is played when the device enters the trusted
12136          * state without unlocking.
12137          * @hide
12138          */
12139         @Readable
12140         public static final String TRUSTED_SOUND = "trusted_sound";
12141 
12142         /**
12143          * URI for the low battery sound file.
12144          * @hide
12145          */
12146         @Readable
12147         public static final String LOW_BATTERY_SOUND = "low_battery_sound";
12148 
12149         /**
12150          * Whether to play a sound for low-battery alerts.
12151          * @hide
12152          */
12153         @Readable
12154         public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled";
12155 
12156         /**
12157          * URI for the "wireless charging started" sound.
12158          * @hide
12159          */
12160         @Readable
12161         public static final String WIRELESS_CHARGING_STARTED_SOUND =
12162                 "wireless_charging_started_sound";
12163 
12164         /**
12165          * URI for "wired charging started" sound.
12166          * @hide
12167          */
12168         @Readable
12169         public static final String CHARGING_STARTED_SOUND = "charging_started_sound";
12170 
12171         /**
12172          * Whether to play a sound for charging events.
12173          * @deprecated Use {@link android.provider.Settings.Secure#CHARGING_SOUNDS_ENABLED} instead
12174          * @hide
12175          */
12176         @Deprecated
12177         public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled";
12178 
12179         /**
12180          * Whether to vibrate for wireless charging events.
12181          * @deprecated Use {@link android.provider.Settings.Secure#CHARGING_VIBRATION_ENABLED}
12182          * @hide
12183          */
12184         @Deprecated
12185         public static final String CHARGING_VIBRATION_ENABLED = "charging_vibration_enabled";
12186 
12187         /**
12188          * Whether we keep the device on while the device is plugged in.
12189          * Supported values are:
12190          * <ul>
12191          * <li>{@code 0} to never stay on while plugged in</li>
12192          * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li>
12193          * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li>
12194          * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li>
12195          * <li>{@link BatteryManager#BATTERY_PLUGGED_DOCK} to stay on for dock charger</li>
12196          * </ul>
12197          * These values can be OR-ed together.
12198          */
12199         @Readable
12200         public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
12201 
12202         /**
12203          * When the user has enable the option to have a "bug report" command
12204          * in the power menu.
12205          * @deprecated Use {@link android.provider.Settings.Secure#BUGREPORT_IN_POWER_MENU} instead
12206          * @hide
12207          */
12208         @Deprecated
12209         @Readable
12210         public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
12211 
12212         /**
12213          * The package name for the custom bugreport handler app. This app must be whitelisted.
12214          * This is currently used only by Power Menu short press.
12215          * @deprecated Use {@link android.provider.Settings.Secure#CUSTOM_BUGREPORT_HANDLER_APP}
12216          * instead
12217          * @hide
12218          */
12219         @Deprecated
12220         @Readable
12221         public static final String CUSTOM_BUGREPORT_HANDLER_APP = "custom_bugreport_handler_app";
12222 
12223         /**
12224          * The user id for the custom bugreport handler app. This is currently used only by Power
12225          * Menu short press.
12226          * @deprecated Use {@link android.provider.Settings.Secure#CUSTOM_BUGREPORT_HANDLER_USER}
12227          * instead
12228          * @hide
12229          */
12230         @Deprecated
12231         @Readable
12232         public static final String CUSTOM_BUGREPORT_HANDLER_USER = "custom_bugreport_handler_user";
12233 
12234         /**
12235          * Whether ADB over USB is enabled.
12236          */
12237         @Readable
12238         public static final String ADB_ENABLED = "adb_enabled";
12239 
12240         /**
12241          * Whether ADB over Wifi is enabled.
12242          * @hide
12243          */
12244         @Readable
12245         public static final String ADB_WIFI_ENABLED = "adb_wifi_enabled";
12246 
12247         /**
12248          * Whether existing ADB sessions over both USB and Wifi should be terminated when the user
12249          * revokes debugging authorizations.
12250          * @hide
12251          */
12252         public static final String ADB_DISCONNECT_SESSIONS_ON_REVOKE =
12253                 "adb_disconnect_sessions_on_revoke";
12254 
12255         /**
12256          * Whether Views are allowed to save their attribute data.
12257          * @hide
12258          */
12259         @Readable
12260         public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
12261 
12262         /**
12263          * Which application package is allowed to save View attribute data.
12264          * @hide
12265          */
12266         @Readable
12267         public static final String DEBUG_VIEW_ATTRIBUTES_APPLICATION_PACKAGE =
12268                 "debug_view_attributes_application_package";
12269 
12270         /**
12271          * Whether assisted GPS should be enabled or not.
12272          * @hide
12273          */
12274         @Readable
12275         public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled";
12276 
12277         /**
12278          * Whether bluetooth is enabled/disabled
12279          * 0=disabled. 1=enabled.
12280          */
12281         @Readable
12282         public static final String BLUETOOTH_ON = "bluetooth_on";
12283 
12284         /**
12285          * CDMA Cell Broadcast SMS
12286          *                            0 = CDMA Cell Broadcast SMS disabled
12287          *                            1 = CDMA Cell Broadcast SMS enabled
12288          * @hide
12289          */
12290         @Readable
12291         public static final String CDMA_CELL_BROADCAST_SMS =
12292                 "cdma_cell_broadcast_sms";
12293 
12294         /**
12295          * The CDMA roaming mode 0 = Home Networks, CDMA default
12296          *                       1 = Roaming on Affiliated networks
12297          *                       2 = Roaming on any networks
12298          * @hide
12299          */
12300         @Readable
12301         public static final String CDMA_ROAMING_MODE = "roaming_settings";
12302 
12303         /**
12304          * The CDMA subscription mode 0 = RUIM/SIM (default)
12305          *                                1 = NV
12306          * @hide
12307          */
12308         @Readable
12309         public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
12310 
12311         /**
12312          * The default value for whether background data is enabled or not.
12313          *
12314          * Used by {@code NetworkPolicyManagerService}.
12315          *
12316          * @hide
12317          */
12318         @Readable
12319         public static final String DEFAULT_RESTRICT_BACKGROUND_DATA =
12320                 "default_restrict_background_data";
12321 
12322         /** Inactivity timeout to track mobile data activity.
12323          *
12324          * If set to a positive integer, it indicates the inactivity timeout value in seconds to
12325          * infer the data activity of mobile network. After a period of no activity on mobile
12326          * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE}
12327          * intent is fired to indicate a transition of network status from "active" to "idle". Any
12328          * subsequent activity on mobile networks triggers the firing of {@code
12329          * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active".
12330          *
12331          * Network activity refers to transmitting or receiving data on the network interfaces.
12332          *
12333          * Tracking is disabled if set to zero or negative value.
12334          *
12335          * @hide
12336          */
12337         @Readable
12338         public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile";
12339 
12340         /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE}
12341          * but for Wifi network.
12342          * @hide
12343          */
12344         @Readable
12345         public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi";
12346 
12347         /**
12348          * Whether or not data roaming is enabled. (0 = false, 1 = true)
12349          * Use {@link TelephonyManager#isDataRoamingEnabled} instead of calling via settings.
12350          */
12351         @Readable(maxTargetSdk = Build.VERSION_CODES.S_V2)
12352         public static final String DATA_ROAMING = "data_roaming";
12353 
12354         /**
12355          * The value passed to a Mobile DataConnection via bringUp which defines the
12356          * number of retries to perform when setting up the initial connection. The default
12357          * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1.
12358          * @hide
12359          */
12360         @Readable
12361         public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry";
12362 
12363         /**
12364          * Whether any package can be on external storage. When this is true, any
12365          * package, regardless of manifest values, is a candidate for installing
12366          * or moving onto external storage. (0 = false, 1 = true)
12367          * @hide
12368          */
12369         @Readable
12370         public static final String FORCE_ALLOW_ON_EXTERNAL = "force_allow_on_external";
12371 
12372         /**
12373          * The default SM-DP+ configured for this device.
12374          *
12375          * <p>An SM-DP+ is used by an LPA (see {@link android.service.euicc.EuiccService}) to
12376          * download profiles. If this value is set, the LPA will query this server for any profiles
12377          * available to this device. If any are available, they may be downloaded during device
12378          * provisioning or in settings without needing the user to enter an activation code.
12379          *
12380          * @see android.service.euicc.EuiccService
12381          * @hide
12382          */
12383         @SystemApi
12384         @Readable
12385         public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus";
12386 
12387         /**
12388          * Whether any profile has ever been downloaded onto a eUICC on the device.
12389          *
12390          * <p>Used to hide eUICC UI from users who have never made use of it and would only be
12391          * confused by seeing references to it in settings.
12392          * (0 = false, 1 = true)
12393          * @hide
12394          */
12395         @SystemApi
12396         @Readable
12397         public static final String EUICC_PROVISIONED = "euicc_provisioned";
12398 
12399         /**
12400          * List of ISO country codes in which eUICC UI is shown. Country codes should be separated
12401          * by comma.
12402          *
12403          * Note: if {@link #EUICC_SUPPORTED_COUNTRIES} is empty, then {@link
12404          * #EUICC_UNSUPPORTED_COUNTRIES} is used.
12405          *
12406          * <p>Used to hide eUICC UI from users who are currently in countries where no carriers
12407          * support eUICC.
12408          *
12409          * @hide
12410          */
12411         @SystemApi
12412         @Readable
12413         public static final String EUICC_SUPPORTED_COUNTRIES = "euicc_supported_countries";
12414 
12415         /**
12416          * List of ISO country codes in which eUICC UI is not shown. Country codes should be
12417          * separated by comma.
12418          *
12419          * Note: if {@link #EUICC_SUPPORTED_COUNTRIES} is empty, then {@link
12420          * #EUICC_UNSUPPORTED_COUNTRIES} is used.
12421          *
12422          * <p>Used to hide eUICC UI from users who are currently in countries where no carriers
12423          * support eUICC.
12424          *
12425          * @hide
12426          */
12427         @SystemApi
12428         @Readable
12429         public static final String EUICC_UNSUPPORTED_COUNTRIES = "euicc_unsupported_countries";
12430 
12431         /**
12432          * Whether any activity can be resized. When this is true, any
12433          * activity, regardless of manifest values, can be resized for multi-window.
12434          * (0 = false, 1 = true)
12435          * @hide
12436          */
12437         @Readable
12438         public static final String DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES
12439                 = "force_resizable_activities";
12440 
12441         /**
12442          * Whether to enable experimental freeform support for windows.
12443          * @hide
12444          */
12445         @Readable
12446         public static final String DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT
12447                 = "enable_freeform_support";
12448 
12449         /**
12450          * Whether to enable experimental desktop mode on secondary displays.
12451          * @hide
12452          */
12453         @Readable
12454         public static final String DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS =
12455                 "force_desktop_mode_on_external_displays";
12456 
12457         /**
12458          * Whether to allow non-resizable apps to be shown in multi-window. The app will be
12459          * letterboxed if the request orientation is not met, and will be shown in size-compat
12460          * mode if the container size has changed.
12461          * @hide
12462          */
12463         @TestApi
12464         @Readable
12465         @SuppressLint("NoSettingsProvider")
12466         public static final String DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW =
12467                 "enable_non_resizable_multi_window";
12468 
12469         /**
12470          * If true, shadows drawn around the window will be rendered by the system compositor. If
12471          * false, shadows will be drawn by the client by setting an elevation on the root view and
12472          * the contents will be inset by the surface insets.
12473          * (0 = false, 1 = true)
12474          * @hide
12475          */
12476         @Readable
12477         public static final String DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR =
12478                 "render_shadows_in_compositor";
12479 
12480         /**
12481          * If true, submit buffers using blast in ViewRootImpl.
12482          * (0 = false, 1 = true)
12483          * @hide
12484          */
12485         @Readable
12486         public static final String DEVELOPMENT_USE_BLAST_ADAPTER_VR =
12487                 "use_blast_adapter_vr";
12488 
12489         /**
12490          * Path to the WindowManager display settings file. If unset, the default file path will
12491          * be used.
12492          *
12493          * @hide
12494          */
12495         public static final String DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH =
12496                 "wm_display_settings_path";
12497 
12498         /**
12499         * Whether user has enabled development settings.
12500         */
12501         @Readable
12502         public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
12503 
12504         /**
12505         * Whether the device has been provisioned (0 = false, 1 = true).
12506         * <p>On a multiuser device with a separate system user, the screen may be locked
12507         * as soon as this is set to true and further activities cannot be launched on the
12508         * system user unless they are marked to show over keyguard.
12509         */
12510         @Readable
12511         public static final String DEVICE_PROVISIONED = "device_provisioned";
12512 
12513         /**
12514          * Indicates whether the device is under restricted secure FRP mode.
12515          * Secure FRP mode is enabled when the device is under FRP. On solving of FRP challenge,
12516          * device is removed from this mode.
12517          * <p>
12518          * Type: int (0 for false, 1 for true)
12519          *
12520          */
12521         @Readable
12522         @SuppressLint("NoSettingsProvider")
12523         public static final String SECURE_FRP_MODE = "secure_frp_mode";
12524 
12525         /**
12526          * Whether bypassing the device policy management role holder qualification is allowed,
12527          * (0 = false, 1 = true).
12528          *
12529          * @hide
12530          */
12531         public static final String BYPASS_DEVICE_POLICY_MANAGEMENT_ROLE_QUALIFICATIONS =
12532                 "bypass_device_policy_management_role_qualifications";
12533 
12534         /**
12535          * Whether work profile telephony feature is enabled for non
12536          * {@link android.app.role.RoleManager#ROLE_DEVICE_POLICY_MANAGEMENT} holders.
12537          * ("0" = false, "1" = true).
12538          *
12539          * @hide
12540          */
12541         @Readable
12542         public static final String ALLOW_WORK_PROFILE_TELEPHONY_FOR_NON_DPM_ROLE_HOLDERS =
12543                 "allow_work_profile_telephony_for_non_dpm_role_holders";
12544 
12545         /**
12546          * Indicates whether mobile data should be allowed while the device is being provisioned.
12547          * This allows the provisioning process to turn off mobile data before the user
12548          * has an opportunity to set things up, preventing other processes from burning
12549          * precious bytes before wifi is setup.
12550          * <p>
12551          * Type: int (0 for false, 1 for true)
12552          *
12553          * @hide
12554          */
12555         @SystemApi
12556         @Readable
12557         public static final String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED =
12558                 "device_provisioning_mobile_data";
12559 
12560         /**
12561         * The saved value for WindowManagerService.setForcedDisplaySize().
12562         * Two integers separated by a comma.  If unset, then use the real display size.
12563         * @hide
12564         */
12565         @Readable
12566         public static final String DISPLAY_SIZE_FORCED = "display_size_forced";
12567 
12568         /**
12569         * The saved value for WindowManagerService.setForcedDisplayScalingMode().
12570         * 0 or unset if scaling is automatic, 1 if scaling is disabled.
12571         * @hide
12572         */
12573         @Readable
12574         public static final String DISPLAY_SCALING_FORCE = "display_scaling_force";
12575 
12576         /**
12577         * The maximum size, in bytes, of a download that the download manager will transfer over
12578         * a non-wifi connection.
12579         * @hide
12580         */
12581         @Readable
12582         public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE =
12583                "download_manager_max_bytes_over_mobile";
12584 
12585         /**
12586         * The recommended maximum size, in bytes, of a download that the download manager should
12587         * transfer over a non-wifi connection. Over this size, the use will be warned, but will
12588         * have the option to start the download over the mobile connection anyway.
12589         * @hide
12590         */
12591         @Readable
12592         public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE =
12593                "download_manager_recommended_max_bytes_over_mobile";
12594 
12595         /**
12596         * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
12597         */
12598         @Deprecated
12599         public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
12600 
12601         /**
12602          * Whether or not media is shown automatically when bypassing as a heads up.
12603          * @hide
12604          */
12605         @Readable
12606         public static final String SHOW_MEDIA_ON_QUICK_SETTINGS =
12607                 "qs_media_controls";
12608 
12609         /**
12610          * The interval in milliseconds at which location requests will be throttled when they are
12611          * coming from the background.
12612          *
12613          * @hide
12614          */
12615         @Readable
12616         public static final String LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS =
12617                 "location_background_throttle_interval_ms";
12618 
12619         /**
12620          * Most frequent location update interval in milliseconds that proximity alert is allowed
12621          * to request.
12622          * @hide
12623          */
12624         @Readable
12625         public static final String LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS =
12626                 "location_background_throttle_proximity_alert_interval_ms";
12627 
12628         /**
12629          * Packages that are whitelisted for background throttling (throttling will not be applied).
12630          * @hide
12631          */
12632         @Readable
12633         public static final String LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST =
12634             "location_background_throttle_package_whitelist";
12635 
12636         /**
12637          * Packages that are whitelisted for ignoring location settings (may retrieve location even
12638          * when user location settings are off), for emergency purposes.
12639          * @deprecated No longer used from Android 12+
12640          * @hide
12641          */
12642         @TestApi
12643         @Readable
12644         @Deprecated
12645         public static final String LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST =
12646                 "location_ignore_settings_package_whitelist";
12647 
12648         /**
12649          * Whether to throttle location when the device is in doze and still.
12650          * @hide
12651          */
12652         public static final String LOCATION_ENABLE_STATIONARY_THROTTLE =
12653                 "location_enable_stationary_throttle";
12654 
12655         /**
12656         * Whether TV will switch to MHL port when a mobile device is plugged in.
12657         * (0 = false, 1 = true)
12658         * @hide
12659         */
12660         @Readable
12661         public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled";
12662 
12663         /**
12664         * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true)
12665         * @hide
12666         */
12667         @Readable
12668         public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled";
12669 
12670         /**
12671         * Whether mobile data connections are allowed by the user.  See
12672         * ConnectivityManager for more info.
12673         * @hide
12674         */
12675         @UnsupportedAppUsage
12676         @Readable
12677         public static final String MOBILE_DATA = "mobile_data";
12678 
12679         /**
12680         * Whether the mobile data connection should remain active even when higher
12681         * priority networks like WiFi are active, to help make network switching faster.
12682         *
12683         * See ConnectivityService for more info.
12684         *
12685         * (0 = disabled, 1 = enabled)
12686         * @hide
12687         */
12688         @Readable
12689         public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
12690 
12691         /**
12692          * The duration in milliseconds of each action, separated by commas. Ex:
12693          *
12694          * "18000,18000,18000,18000,0"
12695          *
12696          * See com.android.internal.telephony.data.DataStallRecoveryManager for more info
12697          * @hide
12698          */
12699         public static final String DSRM_DURATION_MILLIS = "dsrm_duration_millis";
12700 
12701         /**
12702          * The list of DSRM enabled actions, separated by commas. Ex:
12703          *
12704          * "true,true,false,true,true"
12705          *
12706          * See com.android.internal.telephony.data.DataStallRecoveryManager for more info
12707          * @hide
12708          */
12709         public static final String DSRM_ENABLED_ACTIONS = "dsrm_enabled_actions";
12710 
12711         /**
12712          * Whether the wifi data connection should remain active even when higher
12713          * priority networks like Ethernet are active, to keep both networks.
12714          * In the case where higher priority networks are connected, wifi will be
12715          * unused unless an application explicitly requests to use it.
12716          *
12717          * See ConnectivityService for more info.
12718          *
12719          * (0 = disabled, 1 = enabled)
12720          * @hide
12721          */
12722         @Readable
12723         public static final String WIFI_ALWAYS_REQUESTED = "wifi_always_requested";
12724 
12725         /**
12726          * Size of the event buffer for IP connectivity metrics.
12727          * @hide
12728          */
12729         @Readable
12730         public static final String CONNECTIVITY_METRICS_BUFFER_SIZE =
12731               "connectivity_metrics_buffer_size";
12732 
12733         /** {@hide} */
12734         @Readable
12735         public static final String NETSTATS_ENABLED = "netstats_enabled";
12736         /** {@hide} */
12737         @Readable
12738         public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval";
12739         /**
12740          * @deprecated
12741          * {@hide}
12742          */
12743         @Deprecated
12744         @Readable
12745         public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age";
12746         /** {@hide} */
12747         @Readable
12748         public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes";
12749         /** {@hide} */
12750         @Readable
12751         public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled";
12752         /** {@hide} */
12753         @Readable
12754         public static final String NETSTATS_AUGMENT_ENABLED = "netstats_augment_enabled";
12755         /** {@hide} */
12756         @Readable
12757         public static final String NETSTATS_COMBINE_SUBTYPE_ENABLED =
12758                 "netstats_combine_subtype_enabled";
12759 
12760         /** {@hide} */
12761         @Readable
12762         public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration";
12763         /** {@hide} */
12764         @Readable
12765         public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes";
12766         /** {@hide} */
12767         @Readable
12768         public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age";
12769         /** {@hide} */
12770         @Readable
12771         public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age";
12772 
12773         /** {@hide} */
12774         @Readable
12775         public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration";
12776         /** {@hide} */
12777         @Readable
12778         public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes";
12779         /** {@hide} */
12780         @Readable
12781         public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age";
12782         /** {@hide} */
12783         @Readable
12784         public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age";
12785 
12786         /** {@hide} */
12787         @Readable
12788         public static final String NETSTATS_UID_TAG_BUCKET_DURATION =
12789                 "netstats_uid_tag_bucket_duration";
12790         /** {@hide} */
12791         @Readable
12792         public static final String NETSTATS_UID_TAG_PERSIST_BYTES =
12793                 "netstats_uid_tag_persist_bytes";
12794         /** {@hide} */
12795         @Readable
12796         public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age";
12797         /** {@hide} */
12798         @Readable
12799         public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age";
12800 
12801         /** {@hide} */
12802         @Readable
12803         public static final String NETPOLICY_QUOTA_ENABLED = "netpolicy_quota_enabled";
12804         /** {@hide} */
12805         @Readable
12806         public static final String NETPOLICY_QUOTA_UNLIMITED = "netpolicy_quota_unlimited";
12807         /** {@hide} */
12808         @Readable
12809         public static final String NETPOLICY_QUOTA_LIMITED = "netpolicy_quota_limited";
12810         /** {@hide} */
12811         @Readable
12812         public static final String NETPOLICY_QUOTA_FRAC_JOBS = "netpolicy_quota_frac_jobs";
12813         /** {@hide} */
12814         @Readable
12815         public static final String NETPOLICY_QUOTA_FRAC_MULTIPATH =
12816                 "netpolicy_quota_frac_multipath";
12817 
12818         /** {@hide} */
12819         @Readable
12820         public static final String NETPOLICY_OVERRIDE_ENABLED = "netpolicy_override_enabled";
12821 
12822         /**
12823         * User preference for which network(s) should be used. Only the
12824         * connectivity service should touch this.
12825         */
12826         @Readable
12827         public static final String NETWORK_PREFERENCE = "network_preference";
12828 
12829         /**
12830         * Which package name to use for network scoring. If null, or if the package is not a valid
12831         * scorer app, external network scores will neither be requested nor accepted.
12832         * @hide
12833         */
12834         @Readable
12835         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
12836         public static final String NETWORK_SCORER_APP = "network_scorer_app";
12837 
12838         /**
12839          * Whether night display forced auto mode is available.
12840          * 0 = unavailable, 1 = available.
12841          * @hide
12842          */
12843         @Readable
12844         public static final String NIGHT_DISPLAY_FORCED_AUTO_MODE_AVAILABLE =
12845                 "night_display_forced_auto_mode_available";
12846 
12847         /**
12848          * If Unix epoch time between two NITZ signals is greater than this value then the second
12849          * signal cannot be ignored.
12850          *
12851          * <p>This value is in milliseconds. It is used for telephony-based time and time zone
12852          * detection.
12853          * @hide
12854          */
12855         @Readable
12856         public static final String NITZ_UPDATE_DIFF = "nitz_update_diff";
12857 
12858         /**
12859          * If the elapsed realtime between two NITZ signals is greater than this value then the
12860          * second signal cannot be ignored.
12861          *
12862          * <p>This value is in milliseconds. It is used for telephony-based time and time zone
12863          * detection.
12864          * @hide
12865          */
12866         @Readable
12867         public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing";
12868 
12869         /**
12870          * If the device connects to a telephony network and was disconnected from a telephony
12871          * network for less than this time, a previously received NITZ signal can be restored.
12872          *
12873          * <p>This value is in milliseconds. It is used for telephony-based time and time zone
12874          * detection.
12875          * @hide
12876          */
12877         public static final String NITZ_NETWORK_DISCONNECT_RETENTION =
12878                 "nitz_network_disconnect_retention";
12879 
12880         /**
12881          * SNTP client config: The preferred NTP server. This setting overrides the static
12882          * config.xml configuration when present and valid.
12883          *
12884          * <p>The legacy form is the NTP server name as a string.
12885          * <p>Newer code should use the form: ntp://{server name}[:port] (the standard NTP port,
12886          * 123, is used if not specified).
12887          *
12888          * <p>The settings value can consist of a pipe ("|") delimited list of server names or
12889          * ntp:// URIs. When present, all server name / ntp:// URIs must be valid or the entire
12890          * setting value will be ignored and Android's xml config will be used.
12891          *
12892          * <p>For example, the following examples are valid:
12893          * <ul>
12894          *     <li>"time.android.com"</li>
12895          *     <li>"ntp://time.android.com"</li>
12896          *     <li>"ntp://time.android.com:123"</li>
12897          *     <li>"time.android.com|time.other"</li>
12898          *     <li>"ntp://time.android.com:123|ntp://time.other:123"</li>
12899          *     <li>"time.android.com|ntp://time.other:123"</li>
12900          * </ul>
12901          *
12902          * @hide
12903          */
12904         @Readable
12905         public static final String NTP_SERVER = "ntp_server";
12906 
12907         /**
12908          * SNTP client config: Timeout to wait for an NTP server response. This setting overrides
12909          * the static config.xml configuration when present and valid.
12910          *
12911          * <p>The value is the timeout in milliseconds. It must be > 0.
12912          *
12913          * @hide
12914          */
12915         @Readable
12916         public static final String NTP_TIMEOUT = "ntp_timeout";
12917 
12918         /** {@hide} */
12919         @Readable
12920         public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval";
12921 
12922         /**
12923          * Whether or not Settings should enable psd API.
12924          * {@hide}
12925          */
12926         @Readable
12927         public static final String SETTINGS_USE_PSD_API = "settings_use_psd_api";
12928 
12929         /**
12930          * Whether or not Settings should enable external provider API.
12931          * {@hide}
12932          */
12933         @Readable
12934         public static final String SETTINGS_USE_EXTERNAL_PROVIDER_API =
12935                 "settings_use_external_provider_api";
12936 
12937         /**
12938         * Sample validity in seconds to configure for the system DNS resolver.
12939         * {@hide}
12940         */
12941         @Readable
12942         public static final String DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS =
12943                "dns_resolver_sample_validity_seconds";
12944 
12945         /**
12946         * Success threshold in percent for use with the system DNS resolver.
12947         * {@hide}
12948         */
12949         @Readable
12950         public static final String DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT =
12951                 "dns_resolver_success_threshold_percent";
12952 
12953         /**
12954         * Minimum number of samples needed for statistics to be considered meaningful in the
12955         * system DNS resolver.
12956         * {@hide}
12957         */
12958         @Readable
12959         public static final String DNS_RESOLVER_MIN_SAMPLES = "dns_resolver_min_samples";
12960 
12961         /**
12962         * Maximum number taken into account for statistics purposes in the system DNS resolver.
12963         * {@hide}
12964         */
12965         @Readable
12966         public static final String DNS_RESOLVER_MAX_SAMPLES = "dns_resolver_max_samples";
12967 
12968         /**
12969         * Whether to disable the automatic scheduling of system updates.
12970         * 1 = system updates won't be automatically scheduled (will always
12971         * present notification instead).
12972         * 0 = system updates will be automatically scheduled. (default)
12973         * @hide
12974         */
12975         @SystemApi
12976         @Readable
12977         public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update";
12978 
12979         /** Timeout for package verification.
12980         * @hide */
12981         @Readable
12982         public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
12983 
12984         /** Timeout for package verification during streaming installations.
12985          * @hide */
12986         @Readable
12987         public static final String PACKAGE_STREAMING_VERIFIER_TIMEOUT =
12988                 "streaming_verifier_timeout";
12989 
12990         /** Timeout for app integrity verification.
12991          * @hide */
12992         @Readable
12993         public static final String APP_INTEGRITY_VERIFICATION_TIMEOUT =
12994                 "app_integrity_verification_timeout";
12995 
12996         /** Default response code for package verification.
12997         * @hide */
12998         @Readable
12999         public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response";
13000 
13001         /**
13002         * Show package verification setting in the Settings app.
13003         * 1 = show (default)
13004         * 0 = hide
13005         * @hide
13006         */
13007         @Readable
13008         public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible";
13009 
13010         /**
13011         * Run package verification on apps installed through ADB/ADT/USB
13012         * 1 = perform package verification on ADB installs (default)
13013         * 0 = bypass package verification on ADB installs
13014         * @hide
13015         */
13016         @Readable
13017         public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs";
13018 
13019         /**
13020          * Run integrity checks for integrity rule providers.
13021          * 0 = bypass integrity verification on installs from rule providers (default)
13022          * 1 = perform integrity verification on installs from rule providers
13023          * @hide
13024          */
13025         @Readable
13026         public static final String INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER =
13027                 "verify_integrity_for_rule_provider";
13028 
13029         /**
13030         * Time since last fstrim (milliseconds) after which we force one to happen
13031         * during device startup.  If unset, the default is 3 days.
13032         * @hide
13033         */
13034         @Readable
13035         public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval";
13036 
13037         /**
13038         * The interval in milliseconds at which to check packet counts on the
13039         * mobile data interface when screen is on, to detect possible data
13040         * connection problems.
13041         * @hide
13042         */
13043         @Readable
13044         public static final String PDP_WATCHDOG_POLL_INTERVAL_MS =
13045                "pdp_watchdog_poll_interval_ms";
13046 
13047         /**
13048         * The interval in milliseconds at which to check packet counts on the
13049         * mobile data interface when screen is off, to detect possible data
13050         * connection problems.
13051         * @hide
13052         */
13053         @Readable
13054         public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS =
13055                "pdp_watchdog_long_poll_interval_ms";
13056 
13057         /**
13058         * The interval in milliseconds at which to check packet counts on the
13059         * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT}
13060         * outgoing packets has been reached without incoming packets.
13061         * @hide
13062         */
13063         @Readable
13064         public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS =
13065                "pdp_watchdog_error_poll_interval_ms";
13066 
13067         /**
13068         * The number of outgoing packets sent without seeing an incoming packet
13069         * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT}
13070         * device is logged to the event log
13071         * @hide
13072         */
13073         @Readable
13074         public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT =
13075                "pdp_watchdog_trigger_packet_count";
13076 
13077         /**
13078         * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS})
13079         * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before
13080         * attempting data connection recovery.
13081         * @hide
13082         */
13083         @Readable
13084         public static final String PDP_WATCHDOG_ERROR_POLL_COUNT =
13085                "pdp_watchdog_error_poll_count";
13086 
13087         /**
13088         * The number of failed PDP reset attempts before moving to something more
13089         * drastic: re-registering to the network.
13090         * @hide
13091         */
13092         @Readable
13093         public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT =
13094                "pdp_watchdog_max_pdp_reset_fail_count";
13095 
13096         /**
13097         * URL to open browser on to allow user to manage a prepay account
13098         * @hide
13099         */
13100         @Readable
13101         public static final String SETUP_PREPAID_DATA_SERVICE_URL =
13102                "setup_prepaid_data_service_url";
13103 
13104         /**
13105         * URL to attempt a GET on to see if this is a prepay device
13106         * @hide
13107         */
13108         @Readable
13109         public static final String SETUP_PREPAID_DETECTION_TARGET_URL =
13110                "setup_prepaid_detection_target_url";
13111 
13112         /**
13113         * Host to check for a redirect to after an attempt to GET
13114         * SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there,
13115         * this is a prepaid device with zero balance.)
13116         * @hide
13117         */
13118         @Readable
13119         public static final String SETUP_PREPAID_DETECTION_REDIR_HOST =
13120                "setup_prepaid_detection_redir_host";
13121 
13122         /**
13123         * The interval in milliseconds at which to check the number of SMS sent out without asking
13124         * for use permit, to limit the un-authorized SMS usage.
13125         *
13126         * @hide
13127         */
13128         @Readable
13129         public static final String SMS_OUTGOING_CHECK_INTERVAL_MS =
13130                "sms_outgoing_check_interval_ms";
13131 
13132         /**
13133         * The number of outgoing SMS sent without asking for user permit (of {@link
13134         * #SMS_OUTGOING_CHECK_INTERVAL_MS}
13135         *
13136         * @hide
13137         */
13138         @Readable
13139         public static final String SMS_OUTGOING_CHECK_MAX_COUNT =
13140                "sms_outgoing_check_max_count";
13141 
13142         /**
13143         * Used to disable SMS short code confirmation - defaults to true.
13144         * True indcates we will do the check, etc.  Set to false to disable.
13145         * @see com.android.internal.telephony.SmsUsageMonitor
13146         * @hide
13147         */
13148         @Readable
13149         public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation";
13150 
13151         /**
13152          * Used to select which country we use to determine premium sms codes.
13153          * One of com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_SIM,
13154          * com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_NETWORK,
13155          * or com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_BOTH.
13156          * @hide
13157          */
13158         @Readable
13159         public static final String SMS_SHORT_CODE_RULE = "sms_short_code_rule";
13160 
13161         /**
13162          * Used to select TCP's default initial receiver window size in segments - defaults to a
13163          * build config value.
13164          * @hide
13165          */
13166         @Readable
13167         public static final String TCP_DEFAULT_INIT_RWND = "tcp_default_init_rwnd";
13168 
13169         /**
13170          * Used to disable Tethering on a device - defaults to true.
13171          * @hide
13172          */
13173         @SystemApi
13174         @Readable
13175         public static final String TETHER_SUPPORTED = "tether_supported";
13176 
13177         /**
13178          * Used to require DUN APN on the device or not - defaults to a build config value
13179          * which defaults to false.
13180          * @hide
13181          */
13182         @Readable
13183         public static final String TETHER_DUN_REQUIRED = "tether_dun_required";
13184 
13185         /**
13186          * Used to hold a gservices-provisioned apn value for DUN.  If set, or the
13187          * corresponding build config values are set it will override the APN DB
13188          * values.
13189          * Consists of a comma separated list of strings:
13190          * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
13191          * note that empty fields can be omitted: "name,apn,,,,,,,,,310,260,,DUN"
13192          * @hide
13193          */
13194         @Readable
13195         public static final String TETHER_DUN_APN = "tether_dun_apn";
13196 
13197         /**
13198          * Used to disable trying to talk to any available tethering offload HAL.
13199          *
13200          * Integer values are interpreted as boolean, and the absence of an explicit setting
13201          * is interpreted as |false|.
13202          * @hide
13203          */
13204         @SystemApi
13205         @Readable
13206         public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
13207 
13208         /**
13209          * Use the old dnsmasq DHCP server for tethering instead of the framework implementation.
13210          *
13211          * Integer values are interpreted as boolean, and the absence of an explicit setting
13212          * is interpreted as |false|.
13213          * @hide
13214          */
13215         @Readable
13216         public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER =
13217                 "tether_enable_legacy_dhcp_server";
13218 
13219         /**
13220          * List of certificate (hex string representation of the application's certificate - SHA-1
13221          * or SHA-256) and carrier app package pairs which are whitelisted to prompt the user for
13222          * install when a sim card with matching UICC carrier privilege rules is inserted.  The
13223          * certificate is used as a key, so the certificate encoding here must be the same as the
13224          * certificate encoding used on the SIM.
13225          *
13226          * The value is "cert1:package1;cert2:package2;..."
13227          * @hide
13228          */
13229         @SystemApi
13230         @Readable
13231         public static final String CARRIER_APP_WHITELIST = "carrier_app_whitelist";
13232 
13233         /**
13234          * Map of package name to application names. The application names cannot and will not be
13235          * localized. App names may not contain colons or semicolons.
13236          *
13237          * The value is "packageName1:appName1;packageName2:appName2;..."
13238          * @hide
13239          */
13240         @SystemApi
13241         @Readable
13242         public static final String CARRIER_APP_NAMES = "carrier_app_names";
13243 
13244         /**
13245         * USB Mass Storage Enabled
13246         */
13247         @Readable
13248         public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
13249 
13250         /**
13251         * If this setting is set (to anything), then all references
13252         * to Gmail on the device must change to Google Mail.
13253         */
13254         @Readable
13255         public static final String USE_GOOGLE_MAIL = "use_google_mail";
13256 
13257         /**
13258          * Whether or not switching/creating users is enabled by user.
13259          * @hide
13260          */
13261         @Readable
13262         public static final String USER_SWITCHER_ENABLED = "user_switcher_enabled";
13263 
13264         /**
13265          * Webview Data reduction proxy key.
13266          * @hide
13267          */
13268         @Readable
13269         public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY =
13270                 "webview_data_reduction_proxy_key";
13271 
13272         /**
13273         * Name of the package used as WebView provider (if unset the provider is instead determined
13274         * by the system).
13275         * @hide
13276         */
13277         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
13278         @Readable
13279         public static final String WEBVIEW_PROVIDER = "webview_provider";
13280 
13281         /**
13282         * Developer setting to enable WebView multiprocess rendering.
13283         * @hide
13284         */
13285         @SystemApi
13286         @Readable
13287         public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
13288 
13289         /**
13290         * The maximum number of notifications shown in 24 hours when switching networks.
13291         * @hide
13292         */
13293         @Readable
13294         public static final String NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT =
13295               "network_switch_notification_daily_limit";
13296 
13297         /**
13298         * The minimum time in milliseconds between notifications when switching networks.
13299         * @hide
13300         */
13301         @Readable
13302         public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS =
13303               "network_switch_notification_rate_limit_millis";
13304 
13305         /**
13306         * Whether to automatically switch away from wifi networks that lose Internet access.
13307         * Only meaningful if config_networkAvoidBadWifi is set to 0, otherwise the system always
13308         * avoids such networks. Valid values are:
13309         *
13310         * 0: Don't avoid bad wifi, don't prompt the user. Get stuck on bad wifi like it's 2013.
13311         * null: Ask the user whether to switch away from bad wifi.
13312         * 1: Avoid bad wifi.
13313         *
13314         * @hide
13315         */
13316         @Readable
13317         public static final String NETWORK_AVOID_BAD_WIFI = "network_avoid_bad_wifi";
13318 
13319         /**
13320         * User setting for ConnectivityManager.getMeteredMultipathPreference(). This value may be
13321         * overridden by the system based on device or application state. If null, the value
13322         * specified by config_networkMeteredMultipathPreference is used.
13323         *
13324         * @hide
13325         */
13326         @Readable
13327         public static final String NETWORK_METERED_MULTIPATH_PREFERENCE =
13328                "network_metered_multipath_preference";
13329 
13330         /**
13331          * Default daily multipath budget used by ConnectivityManager.getMultipathPreference()
13332          * on metered networks. This default quota is only used if quota could not be determined
13333          * from data plan or data limit/warning set by the user.
13334          * @hide
13335          */
13336         @Readable
13337         public static final String NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES =
13338                 "network_default_daily_multipath_quota_bytes";
13339 
13340         /**
13341          * Network watchlist last report time.
13342          * @hide
13343          */
13344         @Readable
13345         public static final String NETWORK_WATCHLIST_LAST_REPORT_TIME =
13346                 "network_watchlist_last_report_time";
13347 
13348         /**
13349         * The thresholds of the wifi throughput badging (SD, HD etc.) as a comma-delimited list of
13350         * colon-delimited key-value pairs. The key is the badging enum value defined in
13351         * android.net.ScoredNetwork and the value is the minimum sustained network throughput in
13352         * kbps required for the badge. For example: "10:3000,20:5000,30:25000"
13353         *
13354         * @hide
13355         */
13356         @SystemApi
13357         @Readable
13358         public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds";
13359 
13360         /**
13361         * Whether Wifi display is enabled/disabled
13362         * 0=disabled. 1=enabled.
13363         * @hide
13364         */
13365         @Readable
13366         public static final String WIFI_DISPLAY_ON = "wifi_display_on";
13367 
13368         /**
13369         * Whether Wifi display certification mode is enabled/disabled
13370         * 0=disabled. 1=enabled.
13371         * @hide
13372         */
13373         @Readable
13374         public static final String WIFI_DISPLAY_CERTIFICATION_ON =
13375                "wifi_display_certification_on";
13376 
13377         /**
13378         * WPS Configuration method used by Wifi display, this setting only
13379         * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled).
13380         *
13381         * Possible values are:
13382         *
13383         * WpsInfo.INVALID: use default WPS method chosen by framework
13384         * WpsInfo.PBC    : use Push button
13385         * WpsInfo.KEYPAD : use Keypad
13386         * WpsInfo.DISPLAY: use Display
13387         * @hide
13388         */
13389         @Readable
13390         public static final String WIFI_DISPLAY_WPS_CONFIG =
13391            "wifi_display_wps_config";
13392 
13393         /**
13394         * Whether to notify the user of open networks.
13395         * <p>
13396         * If not connected and the scan results have an open network, we will
13397         * put this notification up. If we attempt to connect to a network or
13398         * the open network(s) disappear, we remove the notification. When we
13399         * show the notification, we will not show it again for
13400         * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time.
13401         *
13402         * @deprecated This feature is no longer controlled by this setting in
13403         * {@link android.os.Build.VERSION_CODES#O}.
13404         */
13405         @Deprecated
13406         @Readable
13407         public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
13408                "wifi_networks_available_notification_on";
13409 
13410         /**
13411         * {@hide}
13412         */
13413         @Readable
13414         public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON =
13415                "wimax_networks_available_notification_on";
13416 
13417         /**
13418         * Delay (in seconds) before repeating the Wi-Fi networks available notification.
13419         * Connecting to a network will reset the timer.
13420         * @deprecated This is no longer used or set by the platform.
13421         */
13422         @Deprecated
13423         @Readable
13424         public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
13425                "wifi_networks_available_repeat_delay";
13426 
13427         /**
13428         * 802.11 country code in ISO 3166 format
13429         * @hide
13430         */
13431         @Readable
13432         public static final String WIFI_COUNTRY_CODE = "wifi_country_code";
13433 
13434         /**
13435         * The interval in milliseconds to issue wake up scans when wifi needs
13436         * to connect. This is necessary to connect to an access point when
13437         * device is on the move and the screen is off.
13438         * @hide
13439         */
13440         @Readable
13441         public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS =
13442                "wifi_framework_scan_interval_ms";
13443 
13444         /**
13445         * The interval in milliseconds after which Wi-Fi is considered idle.
13446         * When idle, it is possible for the device to be switched from Wi-Fi to
13447         * the mobile data network.
13448         * @hide
13449         */
13450         @Readable
13451         public static final String WIFI_IDLE_MS = "wifi_idle_ms";
13452 
13453         /**
13454         * When the number of open networks exceeds this number, the
13455         * least-recently-used excess networks will be removed.
13456         * @deprecated This is no longer used or set by the platform.
13457         */
13458         @Deprecated
13459         @Readable
13460         public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
13461 
13462         /**
13463         * Whether the Wi-Fi should be on.  Only the Wi-Fi service should touch this.
13464         */
13465         @Readable
13466         public static final String WIFI_ON = "wifi_on";
13467 
13468         /**
13469         * Setting to allow scans to be enabled even wifi is turned off for connectivity.
13470         * @hide
13471         * @deprecated To be removed. Use {@link WifiManager#setScanAlwaysAvailable(boolean)} for
13472         * setting the value and {@link WifiManager#isScanAlwaysAvailable()} for query.
13473         */
13474         @Deprecated
13475         @Readable
13476         public static final String WIFI_SCAN_ALWAYS_AVAILABLE =
13477                 "wifi_scan_always_enabled";
13478 
13479         /**
13480          * Indicate whether factory reset request is pending.
13481          *
13482          * Type: int (0 for false, 1 for true)
13483          * @hide
13484          * @deprecated To be removed.
13485          */
13486         @Deprecated
13487         @Readable
13488         public static final String WIFI_P2P_PENDING_FACTORY_RESET =
13489                 "wifi_p2p_pending_factory_reset";
13490 
13491         /**
13492          * Whether soft AP will shut down after a timeout period when no devices are connected.
13493          *
13494          * Type: int (0 for false, 1 for true)
13495          * @hide
13496          * @deprecated To be removed. Use {@link SoftApConfiguration.Builder#
13497          * setAutoShutdownEnabled(boolean)} for setting the value and {@link SoftApConfiguration#
13498          * isAutoShutdownEnabled()} for query.
13499          */
13500         @Deprecated
13501         @Readable
13502         public static final String SOFT_AP_TIMEOUT_ENABLED = "soft_ap_timeout_enabled";
13503 
13504         /**
13505          * Value to specify if Wi-Fi Wakeup feature is enabled.
13506          *
13507          * Type: int (0 for false, 1 for true)
13508          * @hide
13509          * @deprecated Use {@link WifiManager#setAutoWakeupEnabled(boolean)} for setting the value
13510          * and {@link WifiManager#isAutoWakeupEnabled()} for query.
13511          */
13512         @Deprecated
13513         @SystemApi
13514         @Readable
13515         public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
13516 
13517         /**
13518          * Value to specify if wifi settings migration is complete or not.
13519          * Note: This should only be used from within {@link android.net.wifi.WifiMigration} class.
13520          *
13521          * Type: int (0 for false, 1 for true)
13522          * @hide
13523          */
13524         @Readable
13525         public static final String WIFI_MIGRATION_COMPLETED = "wifi_migration_completed";
13526 
13527         /**
13528          * Whether UWB should be enabled.
13529          * @hide
13530          */
13531         public static final String UWB_ENABLED = "uwb_enabled";
13532 
13533         /**
13534          * Value to specify whether network quality scores and badging should be shown in the UI.
13535          *
13536          * Type: int (0 for false, 1 for true)
13537          * @deprecated {@link NetworkScoreManager} is deprecated.
13538          * @hide
13539          */
13540         @Deprecated
13541         @Readable
13542         public static final String NETWORK_SCORING_UI_ENABLED = "network_scoring_ui_enabled";
13543 
13544         /**
13545          * Value to specify how long in milliseconds to retain seen score cache curves to be used
13546          * when generating SSID only bases score curves.
13547          *
13548          * Type: long
13549          * @deprecated {@link NetworkScoreManager} is deprecated.
13550          * @hide
13551          */
13552         @Deprecated
13553         @Readable
13554         public static final String SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS =
13555                 "speed_label_cache_eviction_age_millis";
13556 
13557         /**
13558          * Value to specify if network recommendations from
13559          * {@link com.android.server.NetworkScoreService} are enabled.
13560          *
13561          * Type: int
13562          * Valid values:
13563          *   -1 = Forced off
13564          *    0 = Disabled
13565          *    1 = Enabled
13566          *
13567          * Most readers of this setting should simply check if value == 1 to determine the
13568          * enabled state.
13569          * @hide
13570          * @deprecated To be removed.
13571          */
13572         @Deprecated
13573         @Readable
13574         public static final String NETWORK_RECOMMENDATIONS_ENABLED =
13575                 "network_recommendations_enabled";
13576 
13577         /**
13578          * Which package name to use for network recommendations. If null, network recommendations
13579          * will neither be requested nor accepted.
13580          *
13581          * Use {@link NetworkScoreManager#getActiveScorerPackage()} to read this value and
13582          * {@link NetworkScoreManager#setActiveScorer(String)} to write it.
13583          *
13584          * Type: string - package name
13585          * @deprecated {@link NetworkScoreManager} is deprecated.
13586          * @hide
13587          */
13588         @Deprecated
13589         @Readable
13590         public static final String NETWORK_RECOMMENDATIONS_PACKAGE =
13591                 "network_recommendations_package";
13592 
13593         /**
13594          * The package name of the application that connect and secures high quality open wifi
13595          * networks automatically.
13596          *
13597          * Type: string package name or null if the feature is either not provided or disabled.
13598          * @deprecated {@link NetworkScoreManager} is deprecated.
13599          * @hide
13600          */
13601         @Deprecated
13602         @TestApi
13603         @Readable
13604         public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package";
13605 
13606         /**
13607          * The expiration time in milliseconds for the {@link android.net.WifiKey} request cache in
13608          * {@link com.android.server.wifi.RecommendedNetworkEvaluator}.
13609          *
13610          * Type: long
13611          * @deprecated {@link NetworkScoreManager} is deprecated.
13612          * @hide
13613          */
13614         @Deprecated
13615         @Readable
13616         public static final String RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS =
13617                 "recommended_network_evaluator_cache_expiry_ms";
13618 
13619         /**
13620          * Whether wifi scan throttle is enabled or not.
13621          *
13622          * Type: int (0 for false, 1 for true)
13623          * @hide
13624          * @deprecated Use {@link WifiManager#setScanThrottleEnabled(boolean)} for setting the value
13625          * and {@link WifiManager#isScanThrottleEnabled()} for query.
13626          */
13627         @Deprecated
13628         @Readable
13629         public static final String WIFI_SCAN_THROTTLE_ENABLED = "wifi_scan_throttle_enabled";
13630 
13631         /**
13632         * Settings to allow BLE scans to be enabled even when Bluetooth is turned off for
13633         * connectivity.
13634         * @hide
13635         */
13636         @Readable
13637         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13638         @SuppressLint("NoSettingsProvider")
13639         public static final String BLE_SCAN_ALWAYS_AVAILABLE = "ble_scan_always_enabled";
13640 
13641         /**
13642          * The length in milliseconds of a BLE scan window in a low-power scan mode.
13643          * @hide
13644          */
13645         @Readable
13646         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13647         @SuppressLint("NoSettingsProvider")
13648         public static final String BLE_SCAN_LOW_POWER_WINDOW_MS = "ble_scan_low_power_window_ms";
13649 
13650         /**
13651          * The length in milliseconds of a BLE scan window in a balanced scan mode.
13652          * @hide
13653          */
13654         @Readable
13655         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13656         @SuppressLint("NoSettingsProvider")
13657         public static final String BLE_SCAN_BALANCED_WINDOW_MS = "ble_scan_balanced_window_ms";
13658 
13659         /**
13660          * The length in milliseconds of a BLE scan window in a low-latency scan mode.
13661          * @hide
13662          */
13663         @Readable
13664         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13665         @SuppressLint("NoSettingsProvider")
13666         public static final String BLE_SCAN_LOW_LATENCY_WINDOW_MS =
13667                 "ble_scan_low_latency_window_ms";
13668 
13669         /**
13670          * The length in milliseconds of a BLE scan interval in a low-power scan mode.
13671          * @hide
13672          */
13673         @Readable
13674         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13675         @SuppressLint("NoSettingsProvider")
13676         public static final String BLE_SCAN_LOW_POWER_INTERVAL_MS =
13677                 "ble_scan_low_power_interval_ms";
13678 
13679         /**
13680          * The length in milliseconds of a BLE scan interval in a balanced scan mode.
13681          * @hide
13682          */
13683         @Readable
13684         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13685         @SuppressLint("NoSettingsProvider")
13686         public static final String BLE_SCAN_BALANCED_INTERVAL_MS =
13687                 "ble_scan_balanced_interval_ms";
13688 
13689         /**
13690          * The length in milliseconds of a BLE scan interval in a low-latency scan mode.
13691          * @hide
13692          */
13693         @Readable
13694         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13695         @SuppressLint("NoSettingsProvider")
13696         public static final String BLE_SCAN_LOW_LATENCY_INTERVAL_MS =
13697                 "ble_scan_low_latency_interval_ms";
13698 
13699         /**
13700          * The mode that BLE scanning clients will be moved to when in the background.
13701          * @hide
13702          */
13703         @Readable
13704         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
13705         @SuppressLint("NoSettingsProvider")
13706         public static final String BLE_SCAN_BACKGROUND_MODE = "ble_scan_background_mode";
13707 
13708         /**
13709         * The interval in milliseconds to scan as used by the wifi supplicant
13710         * @hide
13711         */
13712         @Readable
13713         public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS =
13714                "wifi_supplicant_scan_interval_ms";
13715 
13716         /**
13717          * whether frameworks handles wifi auto-join
13718          * @hide
13719          */
13720         @Readable
13721         public static final String WIFI_ENHANCED_AUTO_JOIN =
13722                 "wifi_enhanced_auto_join";
13723 
13724         /**
13725          * whether settings show RSSI
13726          * @hide
13727          */
13728         @Readable
13729         public static final String WIFI_NETWORK_SHOW_RSSI =
13730                 "wifi_network_show_rssi";
13731 
13732         /**
13733         * The interval in milliseconds to scan at supplicant when p2p is connected
13734         * @hide
13735         */
13736         @Readable
13737         public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS =
13738                "wifi_scan_interval_p2p_connected_ms";
13739 
13740         /**
13741         * Whether the Wi-Fi watchdog is enabled.
13742         */
13743         @Readable
13744         public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
13745 
13746         /**
13747         * Setting to turn off poor network avoidance on Wi-Fi. Feature is enabled by default and
13748         * the setting needs to be set to 0 to disable it.
13749         * @hide
13750         */
13751         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
13752         @Readable
13753         public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED =
13754                "wifi_watchdog_poor_network_test_enabled";
13755 
13756         /**
13757         * Setting to enable verbose logging in Wi-Fi; disabled by default, and setting to 1
13758         * will enable it. In the future, additional values may be supported.
13759         * @hide
13760         * @deprecated Use {@link WifiManager#setVerboseLoggingEnabled(boolean)} for setting the
13761         * value and {@link WifiManager#isVerboseLoggingEnabled()} for query.
13762         */
13763         @Deprecated
13764         @Readable
13765         public static final String WIFI_VERBOSE_LOGGING_ENABLED =
13766                "wifi_verbose_logging_enabled";
13767 
13768         /**
13769          * Setting to enable connected MAC randomization in Wi-Fi; disabled by default, and
13770          * setting to 1 will enable it. In the future, additional values may be supported.
13771          * @deprecated MAC randomization is now a per-network setting
13772          * @hide
13773          */
13774         @Deprecated
13775         @Readable
13776         public static final String WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED =
13777                 "wifi_connected_mac_randomization_enabled";
13778 
13779         /**
13780          * Parameters to adjust the performance of framework wifi scoring methods.
13781          * <p>
13782          * Encoded as a comma-separated key=value list, for example:
13783          *   "rssi5=-80:-77:-70:-57,rssi2=-83:-80:-73:-60,horizon=15"
13784          * This is intended for experimenting with new parameter values,
13785          * and is normally unset or empty. The example does not include all
13786          * parameters that may be honored.
13787          * Default values are provided by code or device configurations.
13788          * Errors in the parameters will cause the entire setting to be ignored.
13789          * @hide
13790          * @deprecated This is no longer used or set by the platform.
13791          */
13792         @Deprecated
13793         @Readable
13794         public static final String WIFI_SCORE_PARAMS =
13795                 "wifi_score_params";
13796 
13797         /**
13798         * The maximum number of times we will retry a connection to an access
13799         * point for which we have failed in acquiring an IP address from DHCP.
13800         * A value of N means that we will make N+1 connection attempts in all.
13801         */
13802         @Readable
13803         public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
13804 
13805         /**
13806         * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile
13807         * data connectivity to be established after a disconnect from Wi-Fi.
13808         */
13809         @Readable
13810         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
13811            "wifi_mobile_data_transition_wakelock_timeout_ms";
13812 
13813         /**
13814         * This setting controls whether WiFi configurations created by a Device Owner app
13815         * should be locked down (that is, be editable or removable only by the Device Owner App,
13816         * not even by Settings app).
13817         * This setting takes integer values. Non-zero values mean DO created configurations
13818         * are locked down. Value of zero means they are not. Default value in the absence of
13819         * actual value to this setting is 0.
13820         */
13821         @Readable
13822         public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN =
13823                "wifi_device_owner_configs_lockdown";
13824 
13825         /**
13826         * The operational wifi frequency band
13827         * Set to one of {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO},
13828         * {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ} or
13829         * {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ}
13830         *
13831         * @hide
13832         */
13833         @Readable
13834         public static final String WIFI_FREQUENCY_BAND = "wifi_frequency_band";
13835 
13836         /**
13837         * The Wi-Fi peer-to-peer device name
13838         * @hide
13839         * @deprecated Use {@link WifiP2pManager#setDeviceName(WifiP2pManager.Channel, String,
13840         * WifiP2pManager.ActionListener)} for setting the value and
13841         * {@link android.net.wifi.p2p.WifiP2pDevice#deviceName} for query.
13842         */
13843         @Deprecated
13844         @Readable
13845         public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
13846 
13847         /**
13848         * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect
13849         * from an ephemeral network if there is no BSSID for that network with a non-null score that
13850         * has been seen in this time period.
13851         *
13852         * If this is less than or equal to zero, we use a more conservative behavior and only check
13853         * for a non-null score from the currently connected or target BSSID.
13854         * @hide
13855         */
13856         @Readable
13857         public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS =
13858                "wifi_ephemeral_out_of_range_timeout_ms";
13859 
13860         /**
13861         * The number of milliseconds to delay when checking for data stalls during
13862         * non-aggressive detection. (screen is turned off.)
13863         * @hide
13864         */
13865         @Readable
13866         public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
13867                "data_stall_alarm_non_aggressive_delay_in_ms";
13868 
13869         /**
13870         * The number of milliseconds to delay when checking for data stalls during
13871         * aggressive detection. (screen on or suspected data stall)
13872         * @hide
13873         */
13874         @Readable
13875         public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
13876                "data_stall_alarm_aggressive_delay_in_ms";
13877 
13878         /**
13879         * The number of milliseconds to allow the provisioning apn to remain active
13880         * @hide
13881         */
13882         @Readable
13883         public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS =
13884                "provisioning_apn_alarm_delay_in_ms";
13885 
13886         /**
13887         * The interval in milliseconds at which to check gprs registration
13888         * after the first registration mismatch of gprs and voice service,
13889         * to detect possible data network registration problems.
13890         *
13891         * @hide
13892         */
13893         @Readable
13894         public static final String GPRS_REGISTER_CHECK_PERIOD_MS =
13895                "gprs_register_check_period_ms";
13896 
13897         /**
13898         * Nonzero causes Log.wtf() to crash.
13899         * @hide
13900         */
13901         @Readable
13902         public static final String WTF_IS_FATAL = "wtf_is_fatal";
13903 
13904         /**
13905         * Ringer mode. This is used internally, changing this value will not
13906         * change the ringer mode. See AudioManager.
13907         */
13908         @Readable
13909         public static final String MODE_RINGER = "mode_ringer";
13910 
13911         /**
13912          * Overlay display devices setting.
13913          * The associated value is a specially formatted string that describes the
13914          * size and density of simulated secondary display devices.
13915          * <p>
13916          * Format:
13917          * <pre>
13918          * [display1];[display2];...
13919          * </pre>
13920          * with each display specified as:
13921          * <pre>
13922          * [mode1]|[mode2]|...,[flag1],[flag2],...
13923          * </pre>
13924          * with each mode specified as:
13925          * <pre>
13926          * [width]x[height]/[densityDpi]
13927          * </pre>
13928          * Supported flags:
13929          * <ul>
13930          * <li><pre>secure</pre>: creates a secure display</li>
13931          * <li><pre>own_content_only</pre>: only shows this display's own content</li>
13932          * <li><pre>should_show_system_decorations</pre>: supports system decorations</li>
13933          * </ul>
13934          * </p><p>
13935          * Example:
13936          * <ul>
13937          * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li>
13938          * <li><code>1920x1080/320,secure;1280x720/213</code>: make two overlays, the first at
13939          * 1080p and secure; the second at 720p.</li>
13940          * <li><code>1920x1080/320|3840x2160/640</code>: make one overlay that is 1920x1080 at
13941          * 213dpi by default, but can also be upscaled to 3840x2160 at 640dpi by the system if the
13942          * display device allows.</li>
13943          * <li>If the value is empty, then no overlay display devices are created.</li>
13944          * </ul></p>
13945          *
13946          * @hide
13947          */
13948         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
13949         @TestApi
13950         @Readable
13951         public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
13952 
13953         /**
13954          * Threshold values for the duration and level of a discharge cycle,
13955          * under which we log discharge cycle info.
13956          *
13957          * @hide
13958          */
13959         @Readable
13960         public static final String
13961                 BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold";
13962 
13963         /** @hide */
13964         @Readable
13965         public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold";
13966 
13967         /**
13968          * Flag for allowing ActivityManagerService to send ACTION_APP_ERROR
13969          * intents on application crashes and ANRs. If this is disabled, the
13970          * crash/ANR dialog will never display the "Report" button.
13971          * <p>
13972          * Type: int (0 = disallow, 1 = allow)
13973          *
13974          * @hide
13975          */
13976         @Readable
13977         public static final String SEND_ACTION_APP_ERROR = "send_action_app_error";
13978 
13979         /**
13980          * Maximum age of entries kept by {@link DropBoxManager}.
13981          *
13982          * @hide
13983          */
13984         @Readable
13985         public static final String DROPBOX_AGE_SECONDS = "dropbox_age_seconds";
13986 
13987         /**
13988          * Maximum number of entry files which {@link DropBoxManager} will keep
13989          * around.
13990          *
13991          * @hide
13992          */
13993         @Readable
13994         public static final String DROPBOX_MAX_FILES = "dropbox_max_files";
13995 
13996         /**
13997          * Maximum amount of disk space used by {@link DropBoxManager} no matter
13998          * what.
13999          *
14000          * @hide
14001          */
14002         @Readable
14003         public static final String DROPBOX_QUOTA_KB = "dropbox_quota_kb";
14004 
14005         /**
14006          * Percent of free disk (excluding reserve) which {@link DropBoxManager}
14007          * will use.
14008          *
14009          * @hide
14010          */
14011         @Readable
14012         public static final String DROPBOX_QUOTA_PERCENT = "dropbox_quota_percent";
14013 
14014         /**
14015          * Percent of total disk which {@link DropBoxManager} will never dip
14016          * into.
14017          *
14018          * @hide
14019          */
14020         @Readable
14021         public static final String DROPBOX_RESERVE_PERCENT = "dropbox_reserve_percent";
14022 
14023         /**
14024          * Prefix for per-tag dropbox disable/enable settings.
14025          *
14026          * @hide
14027          */
14028         @Readable
14029         public static final String DROPBOX_TAG_PREFIX = "dropbox:";
14030 
14031         /**
14032          * Lines of logcat to include with system crash/ANR/etc. reports, as a
14033          * prefix of the dropbox tag of the report type. For example,
14034          * "logcat_for_system_server_anr" controls the lines of logcat captured
14035          * with system server ANR reports. 0 to disable.
14036          *
14037          * @hide
14038          */
14039         @Readable
14040         public static final String ERROR_LOGCAT_PREFIX = "logcat_for_";
14041 
14042         /**
14043          * Maximum number of bytes of a system crash/ANR/etc. report that
14044          * ActivityManagerService should send to DropBox, as a prefix of the
14045          * dropbox tag of the report type. For example,
14046          * "max_error_bytes_for_system_server_anr" controls the maximum
14047          * number of bytes captured with system server ANR reports.
14048          * <p>
14049          * Type: int (max size in bytes)
14050          *
14051          * @hide
14052          */
14053         @Readable
14054         public static final String MAX_ERROR_BYTES_PREFIX = "max_error_bytes_for_";
14055 
14056         /**
14057          * The interval in minutes after which the amount of free storage left
14058          * on the device is logged to the event log
14059          *
14060          * @hide
14061          */
14062         @Readable
14063         public static final String SYS_FREE_STORAGE_LOG_INTERVAL = "sys_free_storage_log_interval";
14064 
14065         /**
14066          * Threshold for the amount of change in disk free space required to
14067          * report the amount of free space. Used to prevent spamming the logs
14068          * when the disk free space isn't changing frequently.
14069          *
14070          * @hide
14071          */
14072         @Readable
14073         public static final String
14074                 DISK_FREE_CHANGE_REPORTING_THRESHOLD = "disk_free_change_reporting_threshold";
14075 
14076         /**
14077          * Minimum percentage of free storage on the device that is used to
14078          * determine if the device is running low on storage. The default is 10.
14079          * <p>
14080          * Say this value is set to 10, the device is considered running low on
14081          * storage if 90% or more of the device storage is filled up.
14082          *
14083          * @hide
14084          */
14085         @Readable
14086         public static final String
14087                 SYS_STORAGE_THRESHOLD_PERCENTAGE = "sys_storage_threshold_percentage";
14088 
14089         /**
14090          * Maximum byte size of the low storage threshold. This is to ensure
14091          * that {@link #SYS_STORAGE_THRESHOLD_PERCENTAGE} does not result in an
14092          * overly large threshold for large storage devices. Currently this must
14093          * be less than 2GB. This default is 500MB.
14094          *
14095          * @hide
14096          */
14097         @Readable
14098         public static final String
14099                 SYS_STORAGE_THRESHOLD_MAX_BYTES = "sys_storage_threshold_max_bytes";
14100 
14101         /**
14102          * Minimum bytes of free storage on the device before the data partition
14103          * is considered full. By default, 1 MB is reserved to avoid system-wide
14104          * SQLite disk full exceptions.
14105          *
14106          * @hide
14107          */
14108         @Readable
14109         public static final String
14110                 SYS_STORAGE_FULL_THRESHOLD_BYTES = "sys_storage_full_threshold_bytes";
14111 
14112         /**
14113          * Minimum percentage of storage on the device that is reserved for
14114          * cached data.
14115          *
14116          * @hide
14117          */
14118         @Readable
14119         public static final String
14120                 SYS_STORAGE_CACHE_PERCENTAGE = "sys_storage_cache_percentage";
14121 
14122         /**
14123          * The maximum reconnect delay for short network outages or when the
14124          * network is suspended due to phone use.
14125          *
14126          * @hide
14127          */
14128         @Readable
14129         public static final String
14130                 SYNC_MAX_RETRY_DELAY_IN_SECONDS = "sync_max_retry_delay_in_seconds";
14131 
14132         /**
14133          * The number of milliseconds to delay before sending out
14134          * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. Ignored.
14135          *
14136          * @hide
14137          */
14138         @Readable
14139         public static final String CONNECTIVITY_CHANGE_DELAY = "connectivity_change_delay";
14140 
14141 
14142         /**
14143          * Network sampling interval, in seconds. We'll generate link information
14144          * about bytes/packets sent and error rates based on data sampled in this interval
14145          *
14146          * @hide
14147          */
14148         @Readable
14149         public static final String CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS =
14150                 "connectivity_sampling_interval_in_seconds";
14151 
14152         /**
14153          * The series of successively longer delays used in retrying to download PAC file.
14154          * Last delay is used between successful PAC downloads.
14155          *
14156          * @hide
14157          */
14158         @Readable
14159         public static final String PAC_CHANGE_DELAY = "pac_change_delay";
14160 
14161         /**
14162          * Don't attempt to detect captive portals.
14163          *
14164          * @hide
14165          */
14166         public static final int CAPTIVE_PORTAL_MODE_IGNORE = 0;
14167 
14168         /**
14169          * When detecting a captive portal, display a notification that
14170          * prompts the user to sign in.
14171          *
14172          * @hide
14173          */
14174         public static final int CAPTIVE_PORTAL_MODE_PROMPT = 1;
14175 
14176         /**
14177          * When detecting a captive portal, immediately disconnect from the
14178          * network and do not reconnect to that network in the future.
14179          *
14180          * @hide
14181          */
14182         public static final int CAPTIVE_PORTAL_MODE_AVOID = 2;
14183 
14184         /**
14185          * What to do when connecting a network that presents a captive portal.
14186          * Must be one of the CAPTIVE_PORTAL_MODE_* constants above.
14187          *
14188          * The default for this setting is CAPTIVE_PORTAL_MODE_PROMPT.
14189          * @hide
14190          */
14191         @Readable
14192         public static final String CAPTIVE_PORTAL_MODE = "captive_portal_mode";
14193 
14194         /**
14195          * Setting to turn off captive portal detection. Feature is enabled by
14196          * default and the setting needs to be set to 0 to disable it.
14197          *
14198          * @deprecated use CAPTIVE_PORTAL_MODE_IGNORE to disable captive portal detection
14199          * @hide
14200          */
14201         @Deprecated
14202         @Readable
14203         public static final String
14204                 CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled";
14205 
14206         /**
14207          * The server used for captive portal detection upon a new conection. A
14208          * 204 response code from the server is used for validation.
14209          * TODO: remove this deprecated symbol.
14210          *
14211          * @hide
14212          */
14213         @Readable
14214         public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server";
14215 
14216         /**
14217          * The URL used for HTTPS captive portal detection upon a new connection.
14218          * A 204 response code from the server is used for validation.
14219          *
14220          * @hide
14221          */
14222         @Readable
14223         public static final String CAPTIVE_PORTAL_HTTPS_URL = "captive_portal_https_url";
14224 
14225         /**
14226          * The URL used for HTTP captive portal detection upon a new connection.
14227          * A 204 response code from the server is used for validation.
14228          *
14229          * @hide
14230          */
14231         @Readable
14232         public static final String CAPTIVE_PORTAL_HTTP_URL = "captive_portal_http_url";
14233 
14234         /**
14235          * The URL used for fallback HTTP captive portal detection when previous HTTP
14236          * and HTTPS captive portal detection attemps did not return a conclusive answer.
14237          *
14238          * @hide
14239          */
14240         @Readable
14241         public static final String CAPTIVE_PORTAL_FALLBACK_URL = "captive_portal_fallback_url";
14242 
14243         /**
14244          * A comma separated list of URLs used for captive portal detection in addition to the
14245          * fallback HTTP url associated with the CAPTIVE_PORTAL_FALLBACK_URL settings.
14246          *
14247          * @hide
14248          */
14249         @Readable
14250         public static final String CAPTIVE_PORTAL_OTHER_FALLBACK_URLS =
14251                 "captive_portal_other_fallback_urls";
14252 
14253         /**
14254          * A list of captive portal detection specifications used in addition to the fallback URLs.
14255          * Each spec has the format url@@/@@statusCodeRegex@@/@@contentRegex. Specs are separated
14256          * by "@@,@@".
14257          * @hide
14258          */
14259         @Readable
14260         public static final String CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS =
14261                 "captive_portal_fallback_probe_specs";
14262 
14263         /**
14264          * Whether to use HTTPS for network validation. This is enabled by default and the setting
14265          * needs to be set to 0 to disable it. This setting is a misnomer because captive portals
14266          * don't actually use HTTPS, but it's consistent with the other settings.
14267          *
14268          * @hide
14269          */
14270         @Readable
14271         public static final String CAPTIVE_PORTAL_USE_HTTPS = "captive_portal_use_https";
14272 
14273         /**
14274          * Which User-Agent string to use in the header of the captive portal detection probes.
14275          * The User-Agent field is unset when this setting has no value (HttpUrlConnection default).
14276          *
14277          * @hide
14278          */
14279         @Readable
14280         public static final String CAPTIVE_PORTAL_USER_AGENT = "captive_portal_user_agent";
14281 
14282         /**
14283          * Whether to try cellular data recovery when a bad network is reported.
14284          *
14285          * @hide
14286          */
14287         @Readable
14288         public static final String DATA_STALL_RECOVERY_ON_BAD_NETWORK =
14289                 "data_stall_recovery_on_bad_network";
14290 
14291         /**
14292          * Minumim duration in millisecodns between cellular data recovery attempts
14293          *
14294          * @hide
14295          */
14296         @Readable
14297         public static final String MIN_DURATION_BETWEEN_RECOVERY_STEPS_IN_MS =
14298                 "min_duration_between_recovery_steps";
14299 
14300         /**
14301          * Let user pick default install location.
14302          *
14303          * @hide
14304          */
14305         @Readable
14306         public static final String SET_INSTALL_LOCATION = "set_install_location";
14307 
14308         /**
14309          * Default install location value.
14310          * 0 = auto, let system decide
14311          * 1 = internal
14312          * 2 = sdcard
14313          * @hide
14314          */
14315         @Readable
14316         public static final String DEFAULT_INSTALL_LOCATION = "default_install_location";
14317 
14318         /**
14319          * ms during which to consume extra events related to Inet connection
14320          * condition after a transtion to fully-connected
14321          *
14322          * @hide
14323          */
14324         @Readable
14325         public static final String
14326                 INET_CONDITION_DEBOUNCE_UP_DELAY = "inet_condition_debounce_up_delay";
14327 
14328         /**
14329          * ms during which to consume extra events related to Inet connection
14330          * condtion after a transtion to partly-connected
14331          *
14332          * @hide
14333          */
14334         @Readable
14335         public static final String
14336                 INET_CONDITION_DEBOUNCE_DOWN_DELAY = "inet_condition_debounce_down_delay";
14337 
14338         /** {@hide} */
14339         @Readable
14340         public static final String
14341                 READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default";
14342 
14343         /**
14344          * Host name and port for global http proxy. Uses ':' seperator for
14345          * between host and port.
14346          */
14347         @Readable
14348         public static final String HTTP_PROXY = "http_proxy";
14349 
14350         /**
14351          * Host name for global http proxy. Set via ConnectivityManager.
14352          *
14353          * @hide
14354          */
14355         @Readable
14356         public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host";
14357 
14358         /**
14359          * Integer host port for global http proxy. Set via ConnectivityManager.
14360          *
14361          * @hide
14362          */
14363         @Readable
14364         public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port";
14365 
14366         /**
14367          * Exclusion list for global proxy. This string contains a list of
14368          * comma-separated domains where the global proxy does not apply.
14369          * Domains should be listed in a comma- separated list. Example of
14370          * acceptable formats: ".domain1.com,my.domain2.com" Use
14371          * ConnectivityManager to set/get.
14372          *
14373          * @hide
14374          */
14375         @Readable
14376         public static final String
14377                 GLOBAL_HTTP_PROXY_EXCLUSION_LIST = "global_http_proxy_exclusion_list";
14378 
14379         /**
14380          * The location PAC File for the proxy.
14381          * @hide
14382          */
14383         @Readable
14384         public static final String
14385                 GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url";
14386 
14387         /**
14388          * Enables the UI setting to allow the user to specify the global HTTP
14389          * proxy and associated exclusion list.
14390          *
14391          * @hide
14392          */
14393         @Readable
14394         public static final String SET_GLOBAL_HTTP_PROXY = "set_global_http_proxy";
14395 
14396         /**
14397          * Setting for default DNS in case nobody suggests one
14398          *
14399          * @hide
14400          */
14401         @Readable
14402         public static final String DEFAULT_DNS_SERVER = "default_dns_server";
14403 
14404         /**
14405          * The requested Private DNS mode (string), and an accompanying specifier (string).
14406          *
14407          * Currently, the specifier holds the chosen provider name when the mode requests
14408          * a specific provider. It may be used to store the provider name even when the
14409          * mode changes so that temporarily disabling and re-enabling the specific
14410          * provider mode does not necessitate retyping the provider hostname.
14411          *
14412          * @hide
14413          */
14414         @Readable
14415         public static final String PRIVATE_DNS_MODE = "private_dns_mode";
14416 
14417         /**
14418          * @hide
14419          */
14420         @Readable
14421         public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier";
14422 
14423         /**
14424           * Forced override of the default mode (hardcoded as "automatic", nee "opportunistic").
14425           * This allows changing the default mode without effectively disabling other modes,
14426           * all of which require explicit user action to enable/configure. See also b/79719289.
14427           *
14428           * Value is a string, suitable for assignment to PRIVATE_DNS_MODE above.
14429           *
14430           * {@hide}
14431           */
14432         @Readable
14433         public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode";
14434 
14435 
14436         /** {@hide} */
14437         @Readable
14438         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
14439         @SuppressLint("NoSettingsProvider")
14440         public static final String
14441                 BLUETOOTH_BTSNOOP_DEFAULT_MODE = "bluetooth_btsnoop_default_mode";
14442         /** {@hide} */
14443         @Readable
14444         public static final String
14445                 BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_";
14446         /** {@hide} */
14447         @Readable
14448         public static final String
14449                 BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_";
14450         /** {@hide} */
14451         @Readable
14452         public static final String
14453                 BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX = "bluetooth_a2dp_src_priority_";
14454         /** {@hide} */
14455         @Readable
14456         public static final String BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX =
14457                 "bluetooth_a2dp_supports_optional_codecs_";
14458         /** {@hide} */
14459         @Readable
14460         public static final String BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX =
14461                 "bluetooth_a2dp_optional_codecs_enabled_";
14462         /** {@hide} */
14463         @Readable
14464         public static final String
14465                 BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_";
14466         /** {@hide} */
14467         @Readable
14468         public static final String
14469                 BLUETOOTH_MAP_PRIORITY_PREFIX = "bluetooth_map_priority_";
14470         /** {@hide} */
14471         @Readable
14472         public static final String
14473                 BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX = "bluetooth_map_client_priority_";
14474         /** {@hide} */
14475         @Readable
14476         public static final String
14477                 BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX = "bluetooth_pbap_client_priority_";
14478         /** {@hide} */
14479         @Readable
14480         public static final String
14481                 BLUETOOTH_SAP_PRIORITY_PREFIX = "bluetooth_sap_priority_";
14482         /** {@hide} */
14483         @Readable
14484         public static final String
14485                 BLUETOOTH_PAN_PRIORITY_PREFIX = "bluetooth_pan_priority_";
14486         /** {@hide} */
14487         @Readable
14488         public static final String
14489                 BLUETOOTH_HEARING_AID_PRIORITY_PREFIX = "bluetooth_hearing_aid_priority_";
14490 
14491         /**
14492          * Enable/disable radio bug detection
14493          *
14494          * {@hide}
14495          */
14496         @Readable
14497         public static final String
14498                 ENABLE_RADIO_BUG_DETECTION = "enable_radio_bug_detection";
14499 
14500         /**
14501          * Count threshold of RIL wakelock timeout for radio bug detection
14502          *
14503          * {@hide}
14504          */
14505         @Readable
14506         public static final String
14507                 RADIO_BUG_WAKELOCK_TIMEOUT_COUNT_THRESHOLD =
14508                 "radio_bug_wakelock_timeout_count_threshold";
14509 
14510         /**
14511          * Count threshold of RIL system error for radio bug detection
14512          *
14513          * {@hide}
14514          */
14515         @Readable
14516         public static final String
14517                 RADIO_BUG_SYSTEM_ERROR_COUNT_THRESHOLD =
14518                 "radio_bug_system_error_count_threshold";
14519 
14520         /**
14521          * Activity manager specific settings.
14522          * This is encoded as a key=value list, separated by commas. Ex:
14523          *
14524          * "gc_timeout=5000,max_cached_processes=24"
14525          *
14526          * The following keys are supported:
14527          *
14528          * <pre>
14529          * max_cached_processes                 (int)
14530          * background_settle_time               (long)
14531          * fgservice_min_shown_time             (long)
14532          * fgservice_min_report_time            (long)
14533          * fgservice_screen_on_before_time      (long)
14534          * fgservice_screen_on_after_time       (long)
14535          * content_provider_retain_time         (long)
14536          * gc_timeout                           (long)
14537          * gc_min_interval                      (long)
14538          * full_pss_min_interval                (long)
14539          * full_pss_lowered_interval            (long)
14540          * power_check_interval                 (long)
14541          * power_check_max_cpu_1                (int)
14542          * power_check_max_cpu_2                (int)
14543          * power_check_max_cpu_3                (int)
14544          * power_check_max_cpu_4                (int)
14545          * service_usage_interaction_time       (long)
14546          * usage_stats_interaction_interval     (long)
14547          * service_restart_duration             (long)
14548          * service_reset_run_duration           (long)
14549          * service_restart_duration_factor      (int)
14550          * service_min_restart_time_between     (long)
14551          * service_max_inactivity               (long)
14552          * service_bg_start_timeout             (long)
14553          * service_bg_activity_start_timeout    (long)
14554          * process_start_async                  (boolean)
14555          * </pre>
14556          *
14557          * <p>
14558          * Type: string
14559          * @hide
14560          * @see com.android.server.am.ActivityManagerConstants
14561          */
14562         @Readable
14563         public static final String ACTIVITY_MANAGER_CONSTANTS = "activity_manager_constants";
14564 
14565         /**
14566          * Feature flag to enable or disable the activity starts logging feature.
14567          * Type: int (0 for false, 1 for true)
14568          * Default: 1
14569          * @hide
14570          */
14571         @Readable
14572         public static final String ACTIVITY_STARTS_LOGGING_ENABLED
14573                 = "activity_starts_logging_enabled";
14574 
14575         /**
14576          * Feature flag to enable or disable the foreground service starts logging feature.
14577          * Type: int (0 for false, 1 for true)
14578          * Default: 1
14579          * @hide
14580          */
14581         @Readable
14582         public static final String FOREGROUND_SERVICE_STARTS_LOGGING_ENABLED =
14583                 "foreground_service_starts_logging_enabled";
14584 
14585         /**
14586          * @hide
14587          * @see com.android.server.appbinding.AppBindingConstants
14588          */
14589         @Readable
14590         public static final String APP_BINDING_CONSTANTS = "app_binding_constants";
14591 
14592         /**
14593          * App ops specific settings.
14594          * This is encoded as a key=value list, separated by commas. Ex:
14595          *
14596          * "state_settle_time=10000"
14597          *
14598          * The following keys are supported:
14599          *
14600          * <pre>
14601          * top_state_settle_time                (long)
14602          * fg_service_state_settle_time         (long)
14603          * bg_state_settle_time                 (long)
14604          * </pre>
14605          *
14606          * <p>
14607          * Type: string
14608          * @hide
14609          * @see com.android.server.AppOpsService.Constants
14610          */
14611         @TestApi
14612         @Readable
14613         public static final String APP_OPS_CONSTANTS = "app_ops_constants";
14614 
14615         /**
14616          * Battery Saver specific settings
14617          * This is encoded as a key=value list, separated by commas. Ex:
14618          *
14619          * "vibration_disabled=true,adjust_brightness_factor=0.5"
14620          *
14621          * The following keys are supported:
14622          *
14623          * <pre>
14624          * advertise_is_enabled              (boolean)
14625          * datasaver_disabled                (boolean)
14626          * enable_night_mode                 (boolean)
14627          * launch_boost_disabled             (boolean)
14628          * vibration_disabled                (boolean)
14629          * animation_disabled                (boolean)
14630          * soundtrigger_disabled             (boolean)
14631          * fullbackup_deferred               (boolean)
14632          * keyvaluebackup_deferred           (boolean)
14633          * firewall_disabled                 (boolean)
14634          * gps_mode                          (int)
14635          * adjust_brightness_disabled        (boolean)
14636          * adjust_brightness_factor          (float)
14637          * force_all_apps_standby            (boolean)
14638          * force_background_check            (boolean)
14639          * optional_sensors_disabled         (boolean)
14640          * aod_disabled                      (boolean)
14641          * quick_doze_enabled                (boolean)
14642          * </pre>
14643          * @hide
14644          * @see com.android.server.power.batterysaver.BatterySaverPolicy
14645          */
14646         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
14647         @TestApi
14648         @Readable
14649         public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants";
14650 
14651         /**
14652          * Battery Saver device specific settings
14653          * This is encoded as a key=value list, separated by commas.
14654          *
14655          * The following keys are supported:
14656          *
14657          * <pre>
14658          *     cpufreq-i (list of "core-number:frequency" pairs concatenated with /)
14659          *     cpufreq-n (list of "core-number:frequency" pairs concatenated with /)
14660          * </pre>
14661          *
14662          * See {@link com.android.server.power.batterysaver.BatterySaverPolicy} for the details.
14663          *
14664          * @hide
14665          */
14666         @Readable
14667         public static final String BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS =
14668                 "battery_saver_device_specific_constants";
14669 
14670         /**
14671          * Battery tip specific settings
14672          * This is encoded as a key=value list, separated by commas. Ex:
14673          *
14674          * "battery_tip_enabled=true,summary_enabled=true,high_usage_enabled=true,"
14675          * "high_usage_app_count=3,reduced_battery_enabled=false,reduced_battery_percent=50,"
14676          * "high_usage_battery_draining=25,high_usage_period_ms=3000"
14677          *
14678          * The following keys are supported:
14679          *
14680          * <pre>
14681          * battery_tip_enabled              (boolean)
14682          * summary_enabled                  (boolean)
14683          * battery_saver_tip_enabled        (boolean)
14684          * high_usage_enabled               (boolean)
14685          * high_usage_app_count             (int)
14686          * high_usage_period_ms             (long)
14687          * high_usage_battery_draining      (int)
14688          * app_restriction_enabled          (boolean)
14689          * reduced_battery_enabled          (boolean)
14690          * reduced_battery_percent          (int)
14691          * low_battery_enabled              (boolean)
14692          * low_battery_hour                 (int)
14693          * </pre>
14694          * @hide
14695          */
14696         @Readable
14697         public static final String BATTERY_TIP_CONSTANTS = "battery_tip_constants";
14698 
14699         /**
14700          * Battery anomaly detection specific settings
14701          * This is encoded as a key=value list, separated by commas.
14702          * wakeup_blacklisted_tags is a string, encoded as a set of tags, encoded via
14703          * {@link Uri#encode(String)}, separated by colons. Ex:
14704          *
14705          * "anomaly_detection_enabled=true,wakelock_threshold=2000,wakeup_alarm_enabled=true,"
14706          * "wakeup_alarm_threshold=10,wakeup_blacklisted_tags=tag1:tag2:with%2Ccomma:with%3Acolon"
14707          *
14708          * The following keys are supported:
14709          *
14710          * <pre>
14711          * anomaly_detection_enabled       (boolean)
14712          * wakelock_enabled                (boolean)
14713          * wakelock_threshold              (long)
14714          * wakeup_alarm_enabled            (boolean)
14715          * wakeup_alarm_threshold          (long)
14716          * wakeup_blacklisted_tags         (string)
14717          * bluetooth_scan_enabled          (boolean)
14718          * bluetooth_scan_threshold        (long)
14719          * </pre>
14720          * @hide
14721          */
14722         @Readable
14723         public static final String ANOMALY_DETECTION_CONSTANTS = "anomaly_detection_constants";
14724 
14725         /**
14726          * An integer to show the version of the anomaly config. Ex: 1, which means
14727          * current version is 1.
14728          * @hide
14729          */
14730         @Readable
14731         public static final String ANOMALY_CONFIG_VERSION = "anomaly_config_version";
14732 
14733         /**
14734          * A base64-encoded string represents anomaly stats config, used for
14735          * {@link android.app.StatsManager}.
14736          * @hide
14737          */
14738         @Readable
14739         public static final String ANOMALY_CONFIG = "anomaly_config";
14740 
14741         /**
14742          * Always on display(AOD) specific settings
14743          * This is encoded as a key=value list, separated by commas. Ex:
14744          *
14745          * "prox_screen_off_delay=10000,screen_brightness_array=0:1:2:3:4"
14746          *
14747          * The following keys are supported:
14748          *
14749          * <pre>
14750          * screen_brightness_array         (int[])
14751          * dimming_scrim_array             (int[])
14752          * prox_screen_off_delay           (long)
14753          * prox_cooldown_trigger           (long)
14754          * prox_cooldown_period            (long)
14755          * </pre>
14756          * @hide
14757          */
14758         @Readable
14759         public static final String ALWAYS_ON_DISPLAY_CONSTANTS = "always_on_display_constants";
14760 
14761         /**
14762         * UidCpuPower global setting. This links the sys.uidcpupower system property.
14763         * The following values are supported:
14764         * 0 -> /proc/uid_cpupower/* are disabled
14765         * 1 -> /proc/uid_cpupower/* are enabled
14766         * Any other value defaults to enabled.
14767         * @hide
14768         */
14769         @Readable
14770         public static final String SYS_UIDCPUPOWER = "sys_uidcpupower";
14771 
14772         /**
14773         * traced global setting. This controls weather the deamons: traced and
14774         * traced_probes run. This links the sys.traced system property.
14775         * The following values are supported:
14776         * 0 -> traced and traced_probes are disabled
14777         * 1 -> traced and traced_probes are enabled
14778         * Any other value defaults to disabled.
14779         * @hide
14780         */
14781         @Readable
14782         public static final String SYS_TRACED = "sys_traced";
14783 
14784         /**
14785          * An integer to reduce the FPS by this factor. Only for experiments. Need to reboot the
14786          * device for this setting to take full effect.
14787          *
14788          * @hide
14789          */
14790         @Readable
14791         public static final String FPS_DEVISOR = "fps_divisor";
14792 
14793         /**
14794          * Flag to enable or disable display panel low power mode (lpm)
14795          * false -> Display panel power saving mode is disabled.
14796          * true  -> Display panel power saving mode is enabled.
14797          *
14798          * @hide
14799          */
14800         @Readable
14801         public static final String DISPLAY_PANEL_LPM = "display_panel_lpm";
14802 
14803         /**
14804          * App time limit usage source setting.
14805          * This controls which app in a task will be considered the source of usage when
14806          * calculating app usage time limits.
14807          *
14808          * 1 -> task root app
14809          * 2 -> current app
14810          * Any other value defaults to task root app.
14811          *
14812          * Need to reboot the device for this setting to take effect.
14813          * @hide
14814          */
14815         @Readable
14816         public static final String APP_TIME_LIMIT_USAGE_SOURCE = "app_time_limit_usage_source";
14817 
14818         /**
14819          * Enable ART bytecode verification verifications for debuggable apps.
14820          * 0 = disable, 1 = enable.
14821          * @hide
14822          */
14823         @Readable
14824         public static final String ART_VERIFIER_VERIFY_DEBUGGABLE =
14825                 "art_verifier_verify_debuggable";
14826 
14827         /**
14828          * Power manager specific settings.
14829          * This is encoded as a key=value list, separated by commas. Ex:
14830          *
14831          * "no_cached_wake_locks=1"
14832          *
14833          * The following keys are supported:
14834          *
14835          * <pre>
14836          * no_cached_wake_locks                 (boolean)
14837          * </pre>
14838          *
14839          * <p>
14840          * Type: string
14841          * @hide
14842          * @see com.android.server.power.PowerManagerConstants
14843          */
14844         @Readable
14845         public static final String POWER_MANAGER_CONSTANTS = "power_manager_constants";
14846 
14847         /**
14848          * ShortcutManager specific settings.
14849          * This is encoded as a key=value list, separated by commas. Ex:
14850          *
14851          * "reset_interval_sec=86400,max_updates_per_interval=1"
14852          *
14853          * The following keys are supported:
14854          *
14855          * <pre>
14856          * reset_interval_sec              (long)
14857          * max_updates_per_interval        (int)
14858          * max_icon_dimension_dp           (int, DP)
14859          * max_icon_dimension_dp_lowram    (int, DP)
14860          * max_shortcuts                   (int)
14861          * icon_quality                    (int, 0-100)
14862          * icon_format                     (String)
14863          * </pre>
14864          *
14865          * <p>
14866          * Type: string
14867          * @hide
14868          * @see com.android.server.pm.ShortcutService.ConfigConstants
14869          */
14870         @Readable
14871         public static final String SHORTCUT_MANAGER_CONSTANTS = "shortcut_manager_constants";
14872 
14873         /**
14874          * DevicePolicyManager specific settings.
14875          * This is encoded as a key=value list, separated by commas. Ex:
14876          *
14877          * <pre>
14878          * das_died_service_reconnect_backoff_sec       (long)
14879          * das_died_service_reconnect_backoff_increase  (float)
14880          * das_died_service_reconnect_max_backoff_sec   (long)
14881          * </pre>
14882          *
14883          * <p>
14884          * Type: string
14885          * @hide
14886          * see also com.android.server.devicepolicy.DevicePolicyConstants
14887          */
14888         @Readable
14889         public static final String DEVICE_POLICY_CONSTANTS = "device_policy_constants";
14890 
14891         /**
14892          * TextClassifier specific settings.
14893          * This is encoded as a key=value list, separated by commas. String[] types like
14894          * entity_list_default use ":" as delimiter for values. Ex:
14895          *
14896          * <pre>
14897          * classify_text_max_range_length                   (int)
14898          * detect_language_from_text_enabled                (boolean)
14899          * entity_list_default                              (String[])
14900          * entity_list_editable                             (String[])
14901          * entity_list_not_editable                         (String[])
14902          * generate_links_log_sample_rate                   (int)
14903          * generate_links_max_text_length                   (int)
14904          * in_app_conversation_action_types_default         (String[])
14905          * lang_id_context_settings                         (float[])
14906          * lang_id_threshold_override                       (float)
14907          * local_textclassifier_enabled                     (boolean)
14908          * model_dark_launch_enabled                        (boolean)
14909          * notification_conversation_action_types_default   (String[])
14910          * smart_linkify_enabled                            (boolean)
14911          * smart_select_animation_enabled                   (boolean)
14912          * smart_selection_enabled                          (boolean)
14913          * smart_text_share_enabled                         (boolean)
14914          * suggest_selection_max_range_length               (int)
14915          * system_textclassifier_enabled                    (boolean)
14916          * template_intent_factory_enabled                  (boolean)
14917          * translate_in_classification_enabled              (boolean)
14918          * </pre>
14919          *
14920          * <p>
14921          * Type: string
14922          * @hide
14923          * see also android.view.textclassifier.TextClassificationConstants
14924          */
14925         @Readable
14926         public static final String TEXT_CLASSIFIER_CONSTANTS = "text_classifier_constants";
14927 
14928         /**
14929          * BatteryStats specific settings.
14930          * This is encoded as a key=value list, separated by commas. Ex: "foo=1,bar=true"
14931          *
14932          * The following keys are supported:
14933          * <pre>
14934          * track_cpu_times_by_proc_state (boolean)
14935          * track_cpu_active_cluster_time (boolean)
14936          * read_binary_cpu_time          (boolean)
14937          * proc_state_cpu_times_read_delay_ms (long)
14938          * external_stats_collection_rate_limit_ms (long)
14939          * battery_level_collection_delay_ms (long)
14940          * max_history_files (int)
14941          * max_history_buffer_kb (int)
14942          * battery_charged_delay_ms (int)
14943          * </pre>
14944          *
14945          * <p>
14946          * Type: string
14947          * @hide
14948          * see also com.android.internal.os.BatteryStatsImpl.Constants
14949          */
14950         @Readable
14951         public static final String BATTERY_STATS_CONSTANTS = "battery_stats_constants";
14952 
14953         /**
14954          * SyncManager specific settings.
14955          *
14956          * <p>
14957          * Type: string
14958          * @hide
14959          * @see com.android.server.content.SyncManagerConstants
14960          */
14961         @Readable
14962         public static final String SYNC_MANAGER_CONSTANTS = "sync_manager_constants";
14963 
14964         /**
14965          * Broadcast dispatch tuning parameters specific to foreground broadcasts.
14966          *
14967          * This is encoded as a key=value list, separated by commas. Ex: "foo=1,bar=true"
14968          *
14969          * The following keys are supported:
14970          * <pre>
14971          * bcast_timeout                (long)
14972          * bcast_slow_time              (long)
14973          * bcast_deferral               (long)
14974          * bcast_deferral_decay_factor  (float)
14975          * bcast_deferral_floor         (long)
14976          * bcast_allow_bg_activity_start_timeout    (long)
14977          * </pre>
14978          *
14979          * @hide
14980          */
14981         @Readable
14982         public static final String BROADCAST_FG_CONSTANTS = "bcast_fg_constants";
14983 
14984         /**
14985          * Broadcast dispatch tuning parameters specific to background broadcasts.
14986          *
14987          * This is encoded as a key=value list, separated by commas. Ex: "foo=1,bar=true".
14988          * See {@link #BROADCAST_FG_CONSTANTS} for the list of supported keys.
14989          *
14990          * @hide
14991          */
14992         @Readable
14993         public static final String BROADCAST_BG_CONSTANTS = "bcast_bg_constants";
14994 
14995         /**
14996          * Broadcast dispatch tuning parameters specific to specific "offline" broadcasts.
14997          *
14998          * This is encoded as a key=value list, separated by commas. Ex: "foo=1,bar=true".
14999          * See {@link #BROADCAST_FG_CONSTANTS} for the list of supported keys.
15000          *
15001          * @hide
15002          */
15003         @Readable
15004         public static final String BROADCAST_OFFLOAD_CONSTANTS = "bcast_offload_constants";
15005 
15006         /**
15007          * Whether or not App Standby feature is enabled by system. This controls throttling of apps
15008          * based on usage patterns and predictions. Platform will turn on this feature if both this
15009          * flag and {@link #ADAPTIVE_BATTERY_MANAGEMENT_ENABLED} is on.
15010          * Type: int (0 for false, 1 for true)
15011          * Default: 1
15012          * @hide
15013          * @see #ADAPTIVE_BATTERY_MANAGEMENT_ENABLED
15014          */
15015         @SystemApi
15016         @Readable
15017         public static final String APP_STANDBY_ENABLED = "app_standby_enabled";
15018 
15019         /**
15020          * Whether or not adaptive battery feature is enabled by user. Platform will turn on this
15021          * feature if both this flag and {@link #APP_STANDBY_ENABLED} is on.
15022          * Type: int (0 for false, 1 for true)
15023          * Default: 1
15024          * @hide
15025          * @see #APP_STANDBY_ENABLED
15026          */
15027         @Readable
15028         public static final String ADAPTIVE_BATTERY_MANAGEMENT_ENABLED =
15029                 "adaptive_battery_management_enabled";
15030 
15031         /**
15032          * Whether or not app auto restriction is enabled. When it is enabled, settings app will
15033          * auto restrict the app if it has bad behavior (e.g. hold wakelock for long time).
15034          *
15035          * Type: boolean (0 for false, 1 for true)
15036          * Default: 1
15037          *
15038          * @hide
15039          */
15040         @Readable
15041         public static final String APP_AUTO_RESTRICTION_ENABLED =
15042                 "app_auto_restriction_enabled";
15043 
15044         /**
15045          * Whether or not to enable Forced App Standby on small battery devices.
15046          * Type: int (0 for false, 1 for true)
15047          * Default: 0
15048          * @hide
15049          */
15050         @Readable
15051         public static final String FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED
15052                 = "forced_app_standby_for_small_battery_enabled";
15053 
15054         /**
15055          * Whether to enable the TARE subsystem or not.
15056          * Valid values are
15057          * {@link android.app.tare.EconomyManager#ENABLE_TARE_ON EconomyManager.ENABLE_TARE_*}.
15058          *
15059          * @hide
15060          */
15061         public static final String ENABLE_TARE = "enable_tare";
15062 
15063         /**
15064          * Whether to show the TARE page in Developer Options or not.
15065          * 1 = true, everything else = false
15066          *
15067          * @hide
15068          */
15069         public static final String SHOW_TARE_DEVELOPER_OPTIONS = "show_tare_developer_options";
15070 
15071         /**
15072          * Settings for AlarmManager's TARE EconomicPolicy (list of its economic factors).
15073          *
15074          * Keys are listed in {@link android.app.tare.EconomyManager}.
15075          *
15076          * @hide
15077          */
15078         public static final String TARE_ALARM_MANAGER_CONSTANTS = "tare_alarm_manager_constants";
15079 
15080         /**
15081          * Settings for JobScheduler's TARE EconomicPolicy (list of its economic factors).
15082          *
15083          * Keys are listed in {@link android.app.tare.EconomyManager}.
15084          *
15085          * @hide
15086          */
15087         public static final String TARE_JOB_SCHEDULER_CONSTANTS = "tare_job_scheduler_constants";
15088 
15089         /**
15090          * Whether or not to enable the User Absent, Radios Off feature on small battery devices.
15091          * Type: int (0 for false, 1 for true)
15092          * Default: 0
15093          * @hide
15094          */
15095         @Readable
15096         public static final String USER_ABSENT_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED
15097                 = "user_absent_radios_off_for_small_battery_enabled";
15098 
15099         /**
15100          * Whether or not to enable the User Absent, Touch Off feature on small battery devices.
15101          * Type: int (0 for false, 1 for true)
15102          * Default: 0
15103          * @hide
15104          */
15105         @Readable
15106         public static final String USER_ABSENT_TOUCH_OFF_FOR_SMALL_BATTERY_ENABLED
15107                 = "user_absent_touch_off_for_small_battery_enabled";
15108 
15109         /**
15110          * Whether or not to turn on Wifi when proxy is disconnected.
15111          * Type: int (0 for false, 1 for true)
15112          * Default: 1
15113          * @hide
15114          */
15115         @Readable
15116         public static final String WIFI_ON_WHEN_PROXY_DISCONNECTED
15117                 = "wifi_on_when_proxy_disconnected";
15118 
15119         /**
15120          * Time Only Mode specific settings.
15121          * This is encoded as a key=value list, separated by commas. Ex: "foo=1,bar=true"
15122          *
15123          * The following keys are supported:
15124          *
15125          * <pre>
15126          * enabled                  (boolean)
15127          * disable_home             (boolean)
15128          * disable_tilt_to_wake     (boolean)
15129          * disable_touch_to_wake    (boolean)
15130          * </pre>
15131          * Type: string
15132          * @hide
15133          */
15134         @Readable
15135         public static final String TIME_ONLY_MODE_CONSTANTS
15136                 = "time_only_mode_constants";
15137 
15138         /**
15139          * Whether of not to send keycode sleep for ungaze when Home is the foreground activity on
15140          * watch type devices.
15141          * Type: int (0 for false, 1 for true)
15142          * Default: 1
15143          * @hide
15144          */
15145         @Readable
15146         public static final String UNGAZE_SLEEP_ENABLED = "ungaze_sleep_enabled";
15147 
15148         /**
15149          * Whether or not Network Watchlist feature is enabled.
15150          * Type: int (0 for false, 1 for true)
15151          * Default: 0
15152          * @hide
15153          */
15154         @Readable
15155         public static final String NETWORK_WATCHLIST_ENABLED = "network_watchlist_enabled";
15156 
15157         /**
15158          * Whether or not show hidden launcher icon apps feature is enabled.
15159          * Type: int (0 for false, 1 for true)
15160          * Default: 1
15161          * @hide
15162          */
15163         @Readable
15164         public static final String SHOW_HIDDEN_LAUNCHER_ICON_APPS_ENABLED =
15165                 "show_hidden_icon_apps_enabled";
15166 
15167         /**
15168          * Whether or not show new app installed notification is enabled.
15169          * Type: int (0 for false, 1 for true)
15170          * Default: 0
15171          * @hide
15172          */
15173         @Readable
15174         public static final String SHOW_NEW_APP_INSTALLED_NOTIFICATION_ENABLED =
15175                 "show_new_app_installed_notification_enabled";
15176 
15177         /**
15178          * Flag to keep background restricted profiles running after exiting. If disabled,
15179          * the restricted profile can be put into stopped state as soon as the user leaves it.
15180          * Type: int (0 for false, 1 for true)
15181          *
15182          * Overridden by the system based on device information. If null, the value specified
15183          * by {@code config_keepRestrictedProfilesInBackground} is used.
15184          *
15185          * @hide
15186          */
15187         @Readable
15188         public static final String KEEP_PROFILE_IN_BACKGROUND = "keep_profile_in_background";
15189 
15190         /**
15191          * The default time in ms within which a subsequent connection from an always allowed system
15192          * is allowed to reconnect without user interaction.
15193          *
15194          * @hide
15195          */
15196         public static final long DEFAULT_ADB_ALLOWED_CONNECTION_TIME = 604800000;
15197 
15198         /**
15199          * When the user first connects their device to a system a prompt is displayed to allow
15200          * the adb connection with an option to 'Always allow' connections from this system. If the
15201          * user selects this always allow option then the connection time is stored for the system.
15202          * This setting is the time in ms within which a subsequent connection from an always
15203          * allowed system is allowed to reconnect without user interaction.
15204          *
15205          * Type: long
15206          *
15207          * @hide
15208          */
15209         @Readable
15210         public static final String ADB_ALLOWED_CONNECTION_TIME =
15211                 "adb_allowed_connection_time";
15212 
15213         /**
15214          * Scaling factor for normal window animations.
15215          *
15216          * The value is a float. Setting to 0.0f will disable window animations.
15217          */
15218         @Readable
15219         public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
15220 
15221         /**
15222          * Setting to disable cross-window blurs. This includes window blur behind, (see
15223          *  {@link LayoutParams#setBlurBehindRadius}) and window background blur (see
15224          *  {@link Window#setBackgroundBlurRadius}).
15225          *
15226          * The value is a boolean (1 or 0).
15227          * @hide
15228          */
15229         @TestApi
15230         @Readable
15231         @SuppressLint("NoSettingsProvider")
15232         public static final String DISABLE_WINDOW_BLURS = "disable_window_blurs";
15233 
15234         /**
15235          * Scaling factor for activity transition animations.
15236          *
15237          * The value is a float. Setting to 0.0f will disable window animations.
15238          */
15239         @Readable
15240         public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
15241 
15242         /**
15243          * Scaling factor for Animator-based animations. This affects both the
15244          * start delay and duration of all such animations.
15245          *
15246          * The value is a float. Setting to 0.0f will cause animations to end immediately.
15247          * The default value is 1.0f.
15248          */
15249         @Readable
15250         public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
15251 
15252         /**
15253          * Scaling factor for normal window animations. Setting to 0 will
15254          * disable window animations.
15255          *
15256          * @hide
15257          */
15258         @Readable
15259         public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations";
15260 
15261         /**
15262          * If 0, the compatibility mode is off for all applications.
15263          * If 1, older applications run under compatibility mode.
15264          * TODO: remove this settings before code freeze (bug/1907571)
15265          * @hide
15266          */
15267         @Readable
15268         public static final String COMPATIBILITY_MODE = "compatibility_mode";
15269 
15270         /**
15271          * CDMA only settings
15272          * Emergency Tone  0 = Off
15273          *                 1 = Alert
15274          *                 2 = Vibrate
15275          * @hide
15276          */
15277         @Readable
15278         public static final String EMERGENCY_TONE = "emergency_tone";
15279 
15280         /**
15281          * CDMA only settings
15282          * Whether the auto retry is enabled. The value is
15283          * boolean (1 or 0).
15284          * @hide
15285          */
15286         @Readable
15287         public static final String CALL_AUTO_RETRY = "call_auto_retry";
15288 
15289         /**
15290          * A setting that can be read whether the emergency affordance is currently needed.
15291          * The value is a boolean (1 or 0).
15292          * @hide
15293          */
15294         @Readable
15295         public static final String EMERGENCY_AFFORDANCE_NEEDED = "emergency_affordance_needed";
15296 
15297         /**
15298          * The power button "cooldown" period in milliseconds after the Emergency gesture is
15299          * triggered, during which single-key actions on the power button are suppressed. Cooldown
15300          * period is disabled if set to zero.
15301          *
15302          * @hide
15303          */
15304         public static final String EMERGENCY_GESTURE_POWER_BUTTON_COOLDOWN_PERIOD_MS =
15305                 "emergency_gesture_power_button_cooldown_period_ms";
15306 
15307         /**
15308          * The minimum time in milliseconds to perform the emergency gesture.
15309          *
15310          * @hide
15311          */
15312         public static final String EMERGENCY_GESTURE_TAP_DETECTION_MIN_TIME_MS =
15313                 "emergency_gesture_tap_detection_min_time_ms";
15314 
15315         /**
15316          * The maximum duration in milliseconds for which the emergency gesture UI can stay
15317          * "sticky", where the notification pull-down shade and navigation gestures/buttons are
15318          *  temporarily disabled. The feature is disabled completely if the value is set to zero.
15319          *
15320          * @hide
15321          */
15322         public static final String EMERGENCY_GESTURE_STICKY_UI_MAX_DURATION_MILLIS =
15323                 "emergency_gesture_sticky_ui_max_duration_millis";
15324 
15325         /**
15326          * Whether to enable automatic system server heap dumps. This only works on userdebug or
15327          * eng builds, not on user builds. This is set by the user and overrides the config value.
15328          * 1 means enable, 0 means disable.
15329          *
15330          * @hide
15331          */
15332         @Readable
15333         public static final String ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS =
15334                 "enable_automatic_system_server_heap_dumps";
15335 
15336         /**
15337          * See RIL_PreferredNetworkType in ril.h
15338          * @hide
15339          */
15340         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
15341         @Readable
15342         public static final String PREFERRED_NETWORK_MODE =
15343                 "preferred_network_mode";
15344 
15345         /**
15346          * Name of an application package to be debugged.
15347          */
15348         @Readable
15349         public static final String DEBUG_APP = "debug_app";
15350 
15351         /**
15352          * If 1, when launching DEBUG_APP it will wait for the debugger before
15353          * starting user code.  If 0, it will run normally.
15354          */
15355         @Readable
15356         public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
15357 
15358         /**
15359          * Allow GPU debug layers?
15360          * 0 = no
15361          * 1 = yes
15362          * @hide
15363          */
15364         @Readable
15365         public static final String ENABLE_GPU_DEBUG_LAYERS = "enable_gpu_debug_layers";
15366 
15367         /**
15368          * App allowed to load GPU debug layers
15369          * @hide
15370          */
15371         @Readable
15372         public static final String GPU_DEBUG_APP = "gpu_debug_app";
15373 
15374         /**
15375          * Package containing ANGLE libraries other than system, which are only available
15376          * to dumpable apps that opt-in.
15377          * @hide
15378          */
15379         @Readable
15380         public static final String ANGLE_DEBUG_PACKAGE = "angle_debug_package";
15381 
15382         /**
15383          * Force all PKGs to use ANGLE, regardless of any other settings
15384          * The value is a boolean (1 or 0).
15385          * @hide
15386          */
15387         @Readable
15388         public static final String ANGLE_GL_DRIVER_ALL_ANGLE = "angle_gl_driver_all_angle";
15389 
15390         /**
15391          * List of PKGs that have an OpenGL driver selected
15392          * @hide
15393          */
15394         @Readable
15395         public static final String ANGLE_GL_DRIVER_SELECTION_PKGS =
15396                 "angle_gl_driver_selection_pkgs";
15397 
15398         /**
15399          * List of selected OpenGL drivers, corresponding to the PKGs in GLOBAL_SETTINGS_DRIVER_PKGS
15400          * @hide
15401          */
15402         @Readable
15403         public static final String ANGLE_GL_DRIVER_SELECTION_VALUES =
15404                 "angle_gl_driver_selection_values";
15405 
15406         /**
15407          * Lists of ANGLE EGL features for debugging.
15408          * Each list of features is separated by a comma, each feature in each list is separated by
15409          * a colon.
15410          * e.g. feature1:feature2:feature3,feature1:feature3:feature5
15411          * @hide
15412          */
15413         @Readable
15414         public static final String ANGLE_EGL_FEATURES = "angle_egl_features";
15415 
15416         /**
15417          * Show the "ANGLE In Use" dialog box to the user when ANGLE is the OpenGL driver.
15418          * The value is a boolean (1 or 0).
15419          * @hide
15420          */
15421         @Readable
15422         public static final String SHOW_ANGLE_IN_USE_DIALOG_BOX = "show_angle_in_use_dialog_box";
15423 
15424         /**
15425          * Updatable driver global preference for all Apps.
15426          * 0 = Default
15427          * 1 = All Apps use updatable production driver
15428          * 2 = All apps use updatable prerelease driver
15429          * 3 = All Apps use system graphics driver
15430          * @hide
15431          */
15432         @Readable
15433         public static final String UPDATABLE_DRIVER_ALL_APPS = "updatable_driver_all_apps";
15434 
15435         /**
15436          * List of Apps selected to use updatable production driver.
15437          * i.e. <pkg1>,<pkg2>,...,<pkgN>
15438          * @hide
15439          */
15440         @Readable
15441         public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS =
15442                 "updatable_driver_production_opt_in_apps";
15443 
15444         /**
15445          * List of Apps selected to use updatable prerelease driver.
15446          * i.e. <pkg1>,<pkg2>,...,<pkgN>
15447          * @hide
15448          */
15449         @Readable
15450         public static final String UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS =
15451                 "updatable_driver_prerelease_opt_in_apps";
15452 
15453         /**
15454          * List of Apps selected not to use updatable production driver.
15455          * i.e. <pkg1>,<pkg2>,...,<pkgN>
15456          * @hide
15457          */
15458         @Readable
15459         public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS =
15460                 "updatable_driver_production_opt_out_apps";
15461 
15462         /**
15463          * Apps on the denylist that are forbidden to use updatable production driver.
15464          * @hide
15465          */
15466         @Readable
15467         public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLIST =
15468                 "updatable_driver_production_denylist";
15469 
15470         /**
15471          * List of denylists, each denylist is a denylist for a specific version of
15472          * updatable production driver.
15473          * @hide
15474          */
15475         @Readable
15476         public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLISTS =
15477                 "updatable_driver_production_denylists";
15478 
15479         /**
15480          * Apps on the allowlist that are allowed to use updatable production driver.
15481          * The string is a list of application package names, seperated by comma.
15482          * i.e. <apk1>,<apk2>,...,<apkN>
15483          * @hide
15484          */
15485         @Readable
15486         public static final String UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST =
15487                 "updatable_driver_production_allowlist";
15488 
15489         /**
15490          * List of libraries in sphal accessible by updatable driver
15491          * The string is a list of library names, separated by colon.
15492          * i.e. <lib1>:<lib2>:...:<libN>
15493          * @hide
15494          */
15495         @Readable
15496         public static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES =
15497                 "updatable_driver_sphal_libraries";
15498 
15499         /**
15500          * Ordered GPU debug layer list for Vulkan
15501          * i.e. <layer1>:<layer2>:...:<layerN>
15502          * @hide
15503          */
15504         @Readable
15505         public static final String GPU_DEBUG_LAYERS = "gpu_debug_layers";
15506 
15507         /**
15508          * Ordered GPU debug layer list for GLES
15509          * i.e. <layer1>:<layer2>:...:<layerN>
15510          * @hide
15511          */
15512         @Readable
15513         public static final String GPU_DEBUG_LAYERS_GLES = "gpu_debug_layers_gles";
15514 
15515         /**
15516          * Addition app for GPU layer discovery
15517          * @hide
15518          */
15519         @Readable
15520         public static final String GPU_DEBUG_LAYER_APP = "gpu_debug_layer_app";
15521 
15522         /**
15523          * Control whether the process CPU usage meter should be shown.
15524          *
15525          * @deprecated This functionality is no longer available as of
15526          * {@link android.os.Build.VERSION_CODES#N_MR1}.
15527          */
15528         @Deprecated
15529         @Readable
15530         public static final String SHOW_PROCESSES = "show_processes";
15531 
15532         /**
15533          * If 1 low power mode (aka battery saver) is enabled.
15534          * @hide
15535          */
15536         @TestApi
15537         @Readable
15538         public static final String LOW_POWER_MODE = "low_power";
15539 
15540         /**
15541          * If 1 extra low power mode is enabled.
15542          * @hide
15543          */
15544         public static final String EXTRA_LOW_POWER_MODE = "extra_low_power";
15545 
15546         /**
15547          * If 1, battery saver ({@link #LOW_POWER_MODE}) will be re-activated after the device
15548          * is unplugged from a charger or rebooted.
15549          * @hide
15550          */
15551         @TestApi
15552         @Readable
15553         public static final String LOW_POWER_MODE_STICKY = "low_power_sticky";
15554 
15555         /**
15556          * When a device is unplugged from a changer (or is rebooted), do not re-activate battery
15557          * saver even if {@link #LOW_POWER_MODE_STICKY} is 1, if the battery level is equal to or
15558          * above this threshold.
15559          *
15560          * @hide
15561          */
15562         @Readable
15563         public static final String LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL =
15564                 "low_power_sticky_auto_disable_level";
15565 
15566         /**
15567          * Whether sticky battery saver should be deactivated once the battery level has reached the
15568          * threshold specified by {@link #LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL}.
15569          *
15570          * @hide
15571          */
15572         @Readable
15573         public static final String LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED =
15574                 "low_power_sticky_auto_disable_enabled";
15575 
15576         /**
15577          * Battery level [1-100] at which low power mode automatically turns on.
15578          * If 0, it will not automatically turn on. For Q and newer, it will only automatically
15579          * turn on if the value is greater than 0 and the {@link #AUTOMATIC_POWER_SAVE_MODE}
15580          * setting is also set to
15581          * {@link android.os.PowerManager.AutoPowerSaveMode#POWER_SAVE_MODE_TRIGGER_PERCENTAGE}.
15582          * @see #AUTOMATIC_POWER_SAVE_MODE
15583          * @see android.os.PowerManager#getPowerSaveModeTrigger()
15584          * @hide
15585          */
15586         @Readable
15587         public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level";
15588 
15589         /**
15590          * Whether battery saver is currently set to trigger based on percentage, dynamic power
15591          * savings trigger, or none. See {@link AutoPowerSaveModeTriggers} for
15592          * accepted values.
15593          *
15594          *  @hide
15595          */
15596         @TestApi
15597         @Readable
15598         public static final String AUTOMATIC_POWER_SAVE_MODE = "automatic_power_save_mode";
15599 
15600         /**
15601          * The setting that backs the disable threshold for the setPowerSavingsWarning api in
15602          * PowerManager
15603          *
15604          * @see android.os.PowerManager#setDynamicPowerSaveHint(boolean, int)
15605          * @hide
15606          */
15607         @TestApi
15608         @Readable
15609         public static final String DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD =
15610                 "dynamic_power_savings_disable_threshold";
15611 
15612         /**
15613          * The setting which backs the setDynamicPowerSaveHint api in PowerManager.
15614          *
15615          * @see android.os.PowerManager#setDynamicPowerSaveHint(boolean, int)
15616          * @hide
15617          */
15618         @TestApi
15619         @Readable
15620         public static final String DYNAMIC_POWER_SAVINGS_ENABLED = "dynamic_power_savings_enabled";
15621 
15622         /**
15623          * A long value indicating how much longer the system battery is estimated to last in
15624          * millis. See {@link #BATTERY_ESTIMATES_LAST_UPDATE_TIME} for the last time this value
15625          * was updated.
15626          *
15627          * @deprecated Use {@link PowerManager#getBatteryDischargePrediction()} instead.
15628          * @hide
15629          */
15630         @Deprecated
15631         @Readable
15632         public static final String TIME_REMAINING_ESTIMATE_MILLIS =
15633                 "time_remaining_estimate_millis";
15634 
15635         /**
15636          * A boolean indicating whether {@link #TIME_REMAINING_ESTIMATE_MILLIS} is customized
15637          * to the device's usage or using global models. See
15638          * {@link #BATTERY_ESTIMATES_LAST_UPDATE_TIME} for the last time this value was updated.
15639          *
15640          * @deprecated Use {@link PowerManager#isBatteryDischargePredictionPersonalized()} instead.
15641          *
15642          * @hide
15643          */
15644         @Deprecated
15645         @Readable
15646         public static final String TIME_REMAINING_ESTIMATE_BASED_ON_USAGE =
15647                 "time_remaining_estimate_based_on_usage";
15648 
15649         /**
15650          * A long value indicating how long the system battery takes to deplete from 100% to 0% on
15651          * average based on historical drain rates. See {@link #BATTERY_ESTIMATES_LAST_UPDATE_TIME}
15652          * for the last time this value was updated.
15653          *
15654          * @deprecated Use {@link PowerManager#getHistoricalDischargeTime()} instead.
15655          * @hide
15656          */
15657         @Deprecated
15658         @Readable
15659         public static final String AVERAGE_TIME_TO_DISCHARGE = "average_time_to_discharge";
15660 
15661         /**
15662          * A long indicating the epoch time in milliseconds when
15663          * {@link #TIME_REMAINING_ESTIMATE_MILLIS}, {@link #TIME_REMAINING_ESTIMATE_BASED_ON_USAGE},
15664          * and {@link #AVERAGE_TIME_TO_DISCHARGE} were last updated.
15665          *
15666          * @hide
15667          * @deprecated No longer needed due to {@link PowerManager#getBatteryDischargePrediction}.
15668          */
15669         @Deprecated
15670         @Readable
15671         public static final String BATTERY_ESTIMATES_LAST_UPDATE_TIME =
15672                 "battery_estimates_last_update_time";
15673 
15674         /**
15675          * The max value for {@link #LOW_POWER_MODE_TRIGGER_LEVEL}. If this setting is not set
15676          * or the value is 0, the default max will be used.
15677          *
15678          * @hide
15679          */
15680         @Readable
15681         public static final String LOW_POWER_MODE_TRIGGER_LEVEL_MAX = "low_power_trigger_level_max";
15682 
15683         /**
15684          * See com.android.settingslib.fuelgauge.BatterySaverUtils.
15685          * @hide
15686          */
15687         @Readable
15688         public static final String LOW_POWER_MODE_SUGGESTION_PARAMS =
15689                 "low_power_mode_suggestion_params";
15690 
15691         /**
15692          * Whether low power mode reminder is enabled. If this value is 0, the device will not
15693          * receive low power notification.
15694          *
15695          * @hide
15696          */
15697         public static final String LOW_POWER_MODE_REMINDER_ENABLED =
15698                 "low_power_mode_reminder_enabled";
15699 
15700         /**
15701          * If not 0, the activity manager will aggressively finish activities and
15702          * processes as soon as they are no longer needed.  If 0, the normal
15703          * extended lifetime is used.
15704          */
15705         @Readable
15706         public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
15707 
15708         /**
15709          * If nonzero, all system error dialogs will be hidden.  For example, the
15710          * crash and ANR dialogs will not be shown, and the system will just proceed
15711          * as if they had been accepted by the user.
15712          * @hide
15713          */
15714         @TestApi
15715         @Readable
15716         public static final String HIDE_ERROR_DIALOGS = "hide_error_dialogs";
15717 
15718         /**
15719          * Use Dock audio output for media:
15720          *      0 = disabled
15721          *      1 = enabled
15722          * @hide
15723          */
15724         @Readable
15725         public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled";
15726 
15727         /**
15728          * The surround sound formats AC3, DTS or IEC61937 are
15729          * available for use if they are detected.
15730          * This is the default mode.
15731          *
15732          * Note that AUTO is equivalent to ALWAYS for Android TVs and other
15733          * devices that have an S/PDIF output. This is because S/PDIF
15734          * is unidirectional and the TV cannot know if a decoder is
15735          * connected. So it assumes they are always available.
15736          * @hide
15737          */
15738          public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0;
15739 
15740         /**
15741          * AC3, DTS or IEC61937 are NEVER available, even if they
15742          * are detected by the hardware. Those formats will not be
15743          * reported.
15744          *
15745          * An example use case would be an AVR reports that it is capable of
15746          * surround sound decoding but is broken. If NEVER is chosen
15747          * then apps must use PCM output instead of encoded output.
15748          * @hide
15749          */
15750          public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1;
15751 
15752         /**
15753          * AC3, DTS or IEC61937 are ALWAYS available, even if they
15754          * are not detected by the hardware. Those formats will be
15755          * reported as part of the HDMI output capability. Applications
15756          * are then free to use either PCM or encoded output.
15757          *
15758          * An example use case would be a when TV was connected over
15759          * TOS-link to an AVR. But the TV could not see it because TOS-link
15760          * is unidirectional.
15761          * @hide
15762          */
15763          public static final int ENCODED_SURROUND_OUTPUT_ALWAYS = 2;
15764 
15765         /**
15766          * Surround sound formats are available according to the choice
15767          * of user, even if they are not detected by the hardware. Those
15768          * formats will be reported as part of the HDMI output capability.
15769          * Applications are then free to use either PCM or encoded output.
15770          *
15771          * An example use case would be an AVR that doesn't report a surround
15772          * format while the user knows the AVR does support it.
15773          * @hide
15774          */
15775         public static final int ENCODED_SURROUND_OUTPUT_MANUAL = 3;
15776 
15777         /**
15778          * The maximum value for surround sound output mode in Android S.
15779          * @hide
15780          */
15781         public static final int ENCODED_SURROUND_SC_MAX = ENCODED_SURROUND_OUTPUT_MANUAL;
15782 
15783         /**
15784          * Set to ENCODED_SURROUND_OUTPUT_AUTO,
15785          * ENCODED_SURROUND_OUTPUT_NEVER,
15786          * ENCODED_SURROUND_OUTPUT_ALWAYS or
15787          * ENCODED_SURROUND_OUTPUT_MANUAL
15788          * @hide
15789          */
15790         @Readable
15791         public static final String ENCODED_SURROUND_OUTPUT = "encoded_surround_output";
15792 
15793         /**
15794          * Surround sounds formats that are enabled when ENCODED_SURROUND_OUTPUT is set to
15795          * ENCODED_SURROUND_OUTPUT_MANUAL. Encoded as comma separated list. Allowed values
15796          * are the format constants defined in AudioFormat.java. Ex:
15797          *
15798          * "5,6"
15799          *
15800          * @hide
15801          */
15802         @Readable
15803         public static final String ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS =
15804                 "encoded_surround_output_enabled_formats";
15805 
15806         /**
15807          * Persisted safe headphone volume management state by AudioService
15808          * @hide
15809          */
15810         @Readable
15811         public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state";
15812 
15813         /**
15814          * Persisted safe hearding current CSD value. Values are stored as float percentages where
15815          * 1.f represents 100% sound dose has been reached.
15816          * @hide
15817          */
15818         public static final String AUDIO_SAFE_CSD_CURRENT_VALUE = "audio_safe_csd_current_value";
15819 
15820         /**
15821          * Persisted safe hearding next CSD warning value. Values are stored as float percentages.
15822          * @hide
15823          */
15824         public static final String AUDIO_SAFE_CSD_NEXT_WARNING = "audio_safe_csd_next_warning";
15825 
15826         /**
15827          * Persisted safe hearding dose records (see {@link android.media.SoundDoseRecord})
15828          * @hide
15829          */
15830         public static final String AUDIO_SAFE_CSD_DOSE_RECORDS = "audio_safe_csd_dose_records";
15831 
15832         /**
15833          * URL for tzinfo (time zone) updates
15834          * @hide
15835          */
15836         @Readable
15837         public static final String TZINFO_UPDATE_CONTENT_URL = "tzinfo_content_url";
15838 
15839         /**
15840          * URL for tzinfo (time zone) update metadata
15841          * @hide
15842          */
15843         @Readable
15844         public static final String TZINFO_UPDATE_METADATA_URL = "tzinfo_metadata_url";
15845 
15846         /**
15847          * URL for selinux (mandatory access control) updates
15848          * @hide
15849          */
15850         @Readable
15851         public static final String SELINUX_UPDATE_CONTENT_URL = "selinux_content_url";
15852 
15853         /**
15854          * URL for selinux (mandatory access control) update metadata
15855          * @hide
15856          */
15857         @Readable
15858         public static final String SELINUX_UPDATE_METADATA_URL = "selinux_metadata_url";
15859 
15860         /**
15861          * URL for sms short code updates
15862          * @hide
15863          */
15864         @Readable
15865         public static final String SMS_SHORT_CODES_UPDATE_CONTENT_URL =
15866                 "sms_short_codes_content_url";
15867 
15868         /**
15869          * URL for sms short code update metadata
15870          * @hide
15871          */
15872         @Readable
15873         public static final String SMS_SHORT_CODES_UPDATE_METADATA_URL =
15874                 "sms_short_codes_metadata_url";
15875 
15876         /**
15877          * URL for apn_db updates
15878          * @hide
15879          */
15880         @Readable
15881         public static final String APN_DB_UPDATE_CONTENT_URL = "apn_db_content_url";
15882 
15883         /**
15884          * URL for apn_db update metadata
15885          * @hide
15886          */
15887         @Readable
15888         public static final String APN_DB_UPDATE_METADATA_URL = "apn_db_metadata_url";
15889 
15890         /**
15891          * URL for cert pinlist updates
15892          * @hide
15893          */
15894         @Readable
15895         public static final String CERT_PIN_UPDATE_CONTENT_URL = "cert_pin_content_url";
15896 
15897         /**
15898          * URL for cert pinlist updates
15899          * @hide
15900          */
15901         @Readable
15902         public static final String CERT_PIN_UPDATE_METADATA_URL = "cert_pin_metadata_url";
15903 
15904         /**
15905          * URL for intent firewall updates
15906          * @hide
15907          */
15908         @Readable
15909         public static final String INTENT_FIREWALL_UPDATE_CONTENT_URL =
15910                 "intent_firewall_content_url";
15911 
15912         /**
15913          * URL for intent firewall update metadata
15914          * @hide
15915          */
15916         @Readable
15917         public static final String INTENT_FIREWALL_UPDATE_METADATA_URL =
15918                 "intent_firewall_metadata_url";
15919 
15920         /**
15921          * URL for lang id model updates
15922          * @hide
15923          */
15924         @Readable
15925         public static final String LANG_ID_UPDATE_CONTENT_URL = "lang_id_content_url";
15926 
15927         /**
15928          * URL for lang id model update metadata
15929          * @hide
15930          */
15931         @Readable
15932         public static final String LANG_ID_UPDATE_METADATA_URL = "lang_id_metadata_url";
15933 
15934         /**
15935          * URL for smart selection model updates
15936          * @hide
15937          */
15938         @Readable
15939         public static final String SMART_SELECTION_UPDATE_CONTENT_URL =
15940                 "smart_selection_content_url";
15941 
15942         /**
15943          * URL for smart selection model update metadata
15944          * @hide
15945          */
15946         @Readable
15947         public static final String SMART_SELECTION_UPDATE_METADATA_URL =
15948                 "smart_selection_metadata_url";
15949 
15950         /**
15951          * URL for conversation actions model updates
15952          * @hide
15953          */
15954         @Readable
15955         public static final String CONVERSATION_ACTIONS_UPDATE_CONTENT_URL =
15956                 "conversation_actions_content_url";
15957 
15958         /**
15959          * URL for conversation actions model update metadata
15960          * @hide
15961          */
15962         @Readable
15963         public static final String CONVERSATION_ACTIONS_UPDATE_METADATA_URL =
15964                 "conversation_actions_metadata_url";
15965 
15966         /**
15967          * SELinux enforcement status. If 0, permissive; if 1, enforcing.
15968          * @hide
15969          */
15970         @Readable
15971         public static final String SELINUX_STATUS = "selinux_status";
15972 
15973         /**
15974          * Developer setting to force RTL layout.
15975          * @hide
15976          */
15977         @Readable
15978         public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl";
15979 
15980         /**
15981          * Milliseconds after screen-off after which low battery sounds will be silenced.
15982          *
15983          * If zero, battery sounds will always play.
15984          * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider.
15985          *
15986          * @hide
15987          */
15988         @Readable
15989         public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout";
15990 
15991         /**
15992          * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after
15993          * the caller is done with this, they should call {@link ContentResolver#delete} to
15994          * clean up any value that they may have written.
15995          *
15996          * @hide
15997          */
15998         @Readable
15999         public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms";
16000 
16001         /**
16002          * Defines global runtime overrides to window policy.
16003          *
16004          * See {@link com.android.server.wm.PolicyControl} for value format.
16005          *
16006          * @hide
16007          */
16008         @Readable
16009         public static final String POLICY_CONTROL = "policy_control";
16010 
16011         /**
16012          * {@link android.view.DisplayCutout DisplayCutout} emulation mode.
16013          *
16014          * @hide
16015          */
16016         @Readable
16017         public static final String EMULATE_DISPLAY_CUTOUT = "emulate_display_cutout";
16018 
16019         /** @hide */ public static final int EMULATE_DISPLAY_CUTOUT_OFF = 0;
16020         /** @hide */ public static final int EMULATE_DISPLAY_CUTOUT_ON = 1;
16021 
16022         /**
16023          * A colon separated list of keys for Settings Slices.
16024          *
16025          * @hide
16026          */
16027         @Readable
16028         public static final String BLOCKED_SLICES = "blocked_slices";
16029 
16030         /**
16031          * Defines global zen mode.  ZEN_MODE_OFF, ZEN_MODE_IMPORTANT_INTERRUPTIONS,
16032          * or ZEN_MODE_NO_INTERRUPTIONS.
16033          *
16034          * @hide
16035          */
16036         @UnsupportedAppUsage
16037         @Readable
16038         public static final String ZEN_MODE = "zen_mode";
16039 
16040         /** @hide */
16041         @UnsupportedAppUsage
16042         public static final int ZEN_MODE_OFF = 0;
16043         /** @hide */
16044         @UnsupportedAppUsage
16045         public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1;
16046         /** @hide */
16047         @UnsupportedAppUsage
16048         public static final int ZEN_MODE_NO_INTERRUPTIONS = 2;
16049         /** @hide */
16050         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
16051         public static final int ZEN_MODE_ALARMS = 3;
16052 
16053         /**
16054          * A comma-separated list of HDR formats that have been disabled by the user.
16055          * <p>
16056          * If present, these formats will not be reported to apps, even if the display supports
16057          * them. This list is treated as empty if the ARE_USER_DISABLED_HDR_FORMATS_ALLOWED setting
16058          * is '1'.
16059          * </p>
16060          * @hide
16061          */
16062         @TestApi
16063         @Readable
16064         @SuppressLint("NoSettingsProvider")
16065         public static final String USER_DISABLED_HDR_FORMATS = "user_disabled_hdr_formats";
16066 
16067         /**
16068          * Whether or not user-disabled HDR formats are allowed.
16069          * <p>
16070          * The value is boolean (1 or 0). The value '1' means the user preference for disabling a
16071          * format is ignored, and the disabled formats are still reported to apps (if supported
16072          * by the display). The value '0' means the user-disabled formats are not reported to
16073          * apps, even if the display supports them.
16074          * </p><p>
16075          * The list of formats disabled by the user are contained in the
16076          * USER_DISABLED_HDR_FORMATS setting. This list is treated as empty when the value of
16077          * this setting is '1'.
16078          * </p>
16079          * @hide
16080          */
16081         @TestApi
16082         @Readable
16083         @SuppressLint("NoSettingsProvider")
16084         public static final String ARE_USER_DISABLED_HDR_FORMATS_ALLOWED =
16085                 "are_user_disabled_hdr_formats_allowed";
16086 
16087         /**
16088          * Whether or not syncs (bulk set operations) for {@link DeviceConfig} are currently
16089          * persistently disabled. This is only used for the {@link
16090          * Config#SYNC_DISABLED_MODE_PERSISTENT persistent} mode, {@link
16091          * Config#SYNC_DISABLED_MODE_UNTIL_REBOOT until_reboot} mode is not stored in settings.
16092          * The value is boolean (1 or 0). The value '1' means that {@link
16093          * DeviceConfig#setProperties(DeviceConfig.Properties)} will return {@code false}.
16094          *
16095          * @hide
16096          */
16097         public static final String DEVICE_CONFIG_SYNC_DISABLED = "device_config_sync_disabled";
16098 
16099 
16100         /**
16101          * Whether back preview animations are played when user does a back gesture or presses
16102          * the back button.
16103          * @hide
16104          */
16105         public static final String ENABLE_BACK_ANIMATION = "enable_back_animation";
16106 
zenModeToString(int mode)16107         /** @hide */ public static String zenModeToString(int mode) {
16108             if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS";
16109             if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS";
16110             if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS";
16111             return "ZEN_MODE_OFF";
16112         }
16113 
isValidZenMode(int value)16114         /** @hide */ public static boolean isValidZenMode(int value) {
16115             switch (value) {
16116                 case Global.ZEN_MODE_OFF:
16117                 case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
16118                 case Global.ZEN_MODE_ALARMS:
16119                 case Global.ZEN_MODE_NO_INTERRUPTIONS:
16120                     return true;
16121                 default:
16122                     return false;
16123             }
16124         }
16125 
16126         /**
16127          * Value of the ringer before entering zen mode.
16128          *
16129          * @hide
16130          */
16131         @Readable
16132         public static final String ZEN_MODE_RINGER_LEVEL = "zen_mode_ringer_level";
16133 
16134         /**
16135          * Opaque value, changes when persisted zen mode configuration changes.
16136          *
16137          * @hide
16138          */
16139         @UnsupportedAppUsage
16140         @Readable
16141         public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag";
16142 
16143         /**
16144          * @deprecated Use {@link android.provider.Settings.Secure#ZEN_DURATION} instead
16145          * @hide
16146          */
16147         @Deprecated
16148         public static final String ZEN_DURATION = "zen_duration";
16149 
16150         /**
16151          * @deprecated Use {@link android.provider.Settings.Secure#ZEN_DURATION_PROMPT} instead
16152          * @hide
16153          */
16154         @Deprecated
16155         public static final int ZEN_DURATION_PROMPT = -1;
16156 
16157         /**
16158          * @deprecated Use {@link android.provider.Settings.Secure#ZEN_DURATION_FOREVER} instead
16159          * @hide
16160          */
16161         @Deprecated
16162         public static final int ZEN_DURATION_FOREVER = 0;
16163 
16164         /**
16165          * Defines global heads up toggle.  One of HEADS_UP_OFF, HEADS_UP_ON.
16166          *
16167          * @hide
16168          */
16169         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
16170         @Readable
16171         public static final String HEADS_UP_NOTIFICATIONS_ENABLED =
16172                 "heads_up_notifications_enabled";
16173 
16174         /** @hide */
16175         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
16176         public static final int HEADS_UP_OFF = 0;
16177         /** @hide */
16178         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
16179         public static final int HEADS_UP_ON = 1;
16180 
16181         /**
16182          * The refresh rate chosen by the user.
16183          *
16184          * @hide
16185          */
16186         @TestApi
16187         @Readable
16188         @SuppressLint("NoSettingsProvider")
16189         public static final String USER_PREFERRED_REFRESH_RATE = "user_preferred_refresh_rate";
16190 
16191         /**
16192          * The resolution height chosen by the user.
16193          *
16194          * @hide
16195          */
16196         @TestApi
16197         @Readable
16198         @SuppressLint("NoSettingsProvider")
16199         public static final String USER_PREFERRED_RESOLUTION_HEIGHT =
16200                 "user_preferred_resolution_height";
16201 
16202         /**
16203          * The resolution width chosen by the user.
16204          *
16205          * @hide
16206          */
16207         @TestApi
16208         @Readable
16209         @SuppressLint("NoSettingsProvider")
16210         public static final String USER_PREFERRED_RESOLUTION_WIDTH =
16211                 "user_preferred_resolution_width";
16212 
16213         /**
16214          * The HDR output mode chosen by the user. This is one of:
16215          * {@link android.hardware.display.HdrConversionMode#HDR_CONVERSION_PASSTHROUGH},
16216          * {@link android.hardware.display.HdrConversionMode#HDR_CONVERSION_SYSTEM},
16217          * {@link android.hardware.display.HdrConversionMode#HDR_CONVERSION_FORCE}.
16218          *
16219          * @hide
16220          */
16221         @TestApi
16222         @Readable
16223         public static final String HDR_CONVERSION_MODE = "hdr_conversion_mode";
16224 
16225         /**
16226          * The output HDR type chosen by the user in case when {@link #HDR_CONVERSION_MODE} is
16227          * {@link #HDR_CONVERSION_FORCE}. This is one of:
16228          * {@link android.view.Display.HdrCapabilities#HDR_TYPE_INVALID},
16229          * {@link android.view.Display.HdrCapabilities#HDR_TYPE_DOLBY_VISION},
16230          * {@link android.view.Display.HdrCapabilities#HDR_TYPE_HDR10},
16231          * {@link android.view.Display.HdrCapabilities#HDR_TYPE_HLG},
16232          * {@link android.view.Display.HdrCapabilities#HDR_TYPE_HDR10_PLUS}
16233          * <p>
16234          * The value is {@link android.view.Display.HdrCapabilities#HDR_TYPE_INVALID} when user
16235          * chooses SDR output type. </p>
16236          *
16237          * @hide
16238          */
16239         @TestApi
16240         @Readable
16241         public static final String HDR_FORCE_CONVERSION_TYPE = "hdr_force_conversion_type";
16242 
16243         /**
16244          * The name of the device
16245          */
16246         @Readable
16247         public static final String DEVICE_NAME = "device_name";
16248 
16249         /**
16250          * Whether the NetworkScoringService has been first initialized.
16251          * <p>
16252          * Type: int (0 for false, 1 for true)
16253          * @hide
16254          */
16255         @Readable
16256         public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned";
16257 
16258         /**
16259          * On devices that use full-disk encryption, indicates whether the primary user's lockscreen
16260          * credential is required to decrypt the device on boot.
16261          * <p>
16262          * This setting does not do anything on devices that use file-based encryption.  With
16263          * file-based encryption, the device boots without a credential being needed, but the
16264          * lockscreen credential is required to unlock credential-encrypted storage.  All devices
16265          * that launched with Android 10 or higher use file-based encryption.
16266          * <p>
16267          * Type: int (0 for false, 1 for true)
16268          *
16269          * @hide
16270          */
16271         @SystemApi
16272         @Readable
16273         public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
16274 
16275         /**
16276          * Whether the Volte is enabled. If this setting is not set then we use the Carrier Config
16277          * value
16278          * {@link android.telephony.CarrierConfigManager#KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL}.
16279          * <p>
16280          * Type: int (0 for false, 1 for true)
16281          * @hide
16282          * @deprecated Use
16283          * {@link android.provider.Telephony.SimInfo#COLUMN_ENHANCED_4G_MODE_ENABLED} instead.
16284          */
16285         @Deprecated
16286         @Readable
16287         public static final String ENHANCED_4G_MODE_ENABLED =
16288                 Telephony.SimInfo.COLUMN_ENHANCED_4G_MODE_ENABLED;
16289 
16290         /**
16291          * Whether VT (Video Telephony over IMS) is enabled
16292          * <p>
16293          * Type: int (0 for false, 1 for true)
16294          *
16295          * @hide
16296          * @deprecated Use {@link android.provider.Telephony.SimInfo#COLUMN_VT_IMS_ENABLED} instead.
16297          */
16298         @Deprecated
16299         @Readable
16300         public static final String VT_IMS_ENABLED = Telephony.SimInfo.COLUMN_VT_IMS_ENABLED;
16301 
16302         /**
16303          * Whether WFC is enabled
16304          * <p>
16305          * Type: int (0 for false, 1 for true)
16306          *
16307          * @hide
16308          * @deprecated Use
16309          * {@link android.provider.Telephony.SimInfo#COLUMN_WFC_IMS_ENABLED} instead.
16310          */
16311         @Deprecated
16312         @Readable
16313         public static final String WFC_IMS_ENABLED = Telephony.SimInfo.COLUMN_WFC_IMS_ENABLED;
16314 
16315         /**
16316          * WFC mode on home/non-roaming network.
16317          * <p>
16318          * Type: int - 2=Wi-Fi preferred, 1=Cellular preferred, 0=Wi-Fi only
16319          *
16320          * @hide
16321          * @deprecated Use {@link android.provider.Telephony.SimInfo#COLUMN_WFC_IMS_MODE} instead.
16322          */
16323         @Deprecated
16324         @Readable
16325         public static final String WFC_IMS_MODE = Telephony.SimInfo.COLUMN_WFC_IMS_MODE;
16326 
16327         /**
16328          * WFC mode on roaming network.
16329          * <p>
16330          * Type: int - see {@link #WFC_IMS_MODE} for values
16331          *
16332          * @hide
16333          * @deprecated Use {@link android.provider.Telephony.SimInfo#COLUMN_WFC_IMS_ROAMING_MODE}
16334          * instead.
16335          */
16336         @Deprecated
16337         @Readable
16338         public static final String WFC_IMS_ROAMING_MODE =
16339                 Telephony.SimInfo.COLUMN_WFC_IMS_ROAMING_MODE;
16340 
16341         /**
16342          * Whether WFC roaming is enabled
16343          * <p>
16344          * Type: int (0 for false, 1 for true)
16345          *
16346          * @hide
16347          * @deprecated Use {@link android.provider.Telephony.SimInfo#COLUMN_WFC_IMS_ROAMING_ENABLED}
16348          * instead
16349          */
16350         @Deprecated
16351         @Readable
16352         public static final String WFC_IMS_ROAMING_ENABLED =
16353                 Telephony.SimInfo.COLUMN_WFC_IMS_ROAMING_ENABLED;
16354 
16355         /**
16356          * Whether user can enable/disable LTE as a preferred network. A carrier might control
16357          * this via gservices, OMA-DM, carrier app, etc.
16358          * <p>
16359          * Type: int (0 for false, 1 for true)
16360          * @hide
16361          */
16362         @Readable
16363         public static final String LTE_SERVICE_FORCED = "lte_service_forced";
16364 
16365 
16366         /**
16367          * Specifies the behaviour the lid triggers when closed
16368          * <p>
16369          * See WindowManagerPolicy.WindowManagerFuncs
16370          * @hide
16371          */
16372         @Readable
16373         public static final String LID_BEHAVIOR = "lid_behavior";
16374 
16375         /**
16376          * Ephemeral app cookie max size in bytes.
16377          * <p>
16378          * Type: int
16379          * @hide
16380          */
16381         @Readable
16382         public static final String EPHEMERAL_COOKIE_MAX_SIZE_BYTES =
16383                 "ephemeral_cookie_max_size_bytes";
16384 
16385         /**
16386          * Toggle to enable/disable the entire ephemeral feature. By default, ephemeral is
16387          * enabled. Set to zero to disable.
16388          * <p>
16389          * Type: int (0 for false, 1 for true)
16390          *
16391          * @hide
16392          */
16393         @Readable
16394         public static final String ENABLE_EPHEMERAL_FEATURE = "enable_ephemeral_feature";
16395 
16396         /**
16397          * Toggle to enable/disable dexopt for instant applications. The default is for dexopt
16398          * to be disabled.
16399          * <p>
16400          * Type: int (0 to disable, 1 to enable)
16401          *
16402          * @hide
16403          */
16404         @Readable
16405         public static final String INSTANT_APP_DEXOPT_ENABLED = "instant_app_dexopt_enabled";
16406 
16407         /**
16408          * The min period for caching installed instant apps in milliseconds.
16409          * <p>
16410          * Type: long
16411          * @hide
16412          */
16413         @Readable
16414         public static final String INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD =
16415                 "installed_instant_app_min_cache_period";
16416 
16417         /**
16418          * The max period for caching installed instant apps in milliseconds.
16419          * <p>
16420          * Type: long
16421          * @hide
16422          */
16423         @Readable
16424         public static final String INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD =
16425                 "installed_instant_app_max_cache_period";
16426 
16427         /**
16428          * The min period for caching uninstalled instant apps in milliseconds.
16429          * <p>
16430          * Type: long
16431          * @hide
16432          */
16433         @Readable
16434         public static final String UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD =
16435                 "uninstalled_instant_app_min_cache_period";
16436 
16437         /**
16438          * The max period for caching uninstalled instant apps in milliseconds.
16439          * <p>
16440          * Type: long
16441          * @hide
16442          */
16443         @Readable
16444         public static final String UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD =
16445                 "uninstalled_instant_app_max_cache_period";
16446 
16447         /**
16448          * The min period for caching unused static shared libs in milliseconds.
16449          * <p>
16450          * Type: long
16451          * @hide
16452          */
16453         @Readable
16454         public static final String UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
16455                 "unused_static_shared_lib_min_cache_period";
16456 
16457         /**
16458          * Allows switching users when system user is locked.
16459          * <p>
16460          * Type: int
16461          * @hide
16462          */
16463         @Readable
16464         public static final String ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED =
16465                 "allow_user_switching_when_system_user_locked";
16466 
16467         /**
16468          * Boot count since the device starts running API level 24.
16469          * <p>
16470          * Type: int
16471          */
16472         @Readable
16473         public static final String BOOT_COUNT = "boot_count";
16474 
16475         /**
16476          * Whether the safe boot is disallowed.
16477          *
16478          * <p>This setting should have the identical value as the corresponding user restriction.
16479          * The purpose of the setting is to make the restriction available in early boot stages
16480          * before the user restrictions are loaded.
16481          * @hide
16482          */
16483         @Readable
16484         public static final String SAFE_BOOT_DISALLOWED = "safe_boot_disallowed";
16485 
16486         /**
16487          * Indicates whether this device is currently in retail demo mode. If true, the device
16488          * usage is severely limited.
16489          * <p>
16490          * Type: int (0 for false, 1 for true)
16491          *
16492          * @hide
16493          */
16494         @SystemApi
16495         @Readable
16496         public static final String DEVICE_DEMO_MODE = "device_demo_mode";
16497 
16498         /**
16499          * The reason for the settings database being downgraded. This is only for
16500          * troubleshooting purposes and its value should not be interpreted in any way.
16501          *
16502          * Type: string
16503          *
16504          * @hide
16505          */
16506         @Readable
16507         public static final String DATABASE_DOWNGRADE_REASON = "database_downgrade_reason";
16508 
16509         /**
16510          * The build id of when the settings database was first created (or re-created due it
16511          * being missing).
16512          *
16513          * Type: string
16514          *
16515          * @hide
16516          */
16517         @Readable
16518         public static final String DATABASE_CREATION_BUILDID = "database_creation_buildid";
16519 
16520         /**
16521          * Flag to toggle journal mode WAL on or off for the contacts database. WAL is enabled by
16522          * default. Set to 0 to disable.
16523          *
16524          * @hide
16525          */
16526         @Readable
16527         public static final String CONTACTS_DATABASE_WAL_ENABLED = "contacts_database_wal_enabled";
16528 
16529         /**
16530          * Flag to enable the link to location permissions in location setting. Set to 0 to disable.
16531          *
16532          * @hide
16533          */
16534         @Readable
16535         public static final String LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED =
16536                 "location_settings_link_to_permissions_enabled";
16537 
16538         /**
16539          * Flag to set the waiting time for removing invisible euicc profiles inside System >
16540          * Settings.
16541          * Type: long
16542          *
16543          * @hide
16544          */
16545         @Readable
16546         public static final String EUICC_REMOVING_INVISIBLE_PROFILES_TIMEOUT_MILLIS =
16547                 "euicc_removing_invisible_profiles_timeout_millis";
16548 
16549         /**
16550          * Flag to set the waiting time for euicc factory reset inside System > Settings
16551          * Type: long
16552          *
16553          * @hide
16554          */
16555         @Readable
16556         public static final String EUICC_FACTORY_RESET_TIMEOUT_MILLIS =
16557                 "euicc_factory_reset_timeout_millis";
16558 
16559         /**
16560          * Flag to set the waiting time for euicc slot switch.
16561          * Type: long
16562          *
16563          * @hide
16564          */
16565         public static final String EUICC_SWITCH_SLOT_TIMEOUT_MILLIS =
16566                 "euicc_switch_slot_timeout_millis";
16567 
16568         /**
16569          * Flag to set the waiting time for enabling multi SIM slot.
16570          * Type: long
16571          *
16572          * @hide
16573          */
16574         public static final String ENABLE_MULTI_SLOT_TIMEOUT_MILLIS =
16575                 "enable_multi_slot_timeout_millis";
16576 
16577         /**
16578          * Flag to set the timeout for when to refresh the storage settings cached data.
16579          * Type: long
16580          *
16581          * @hide
16582          */
16583         @Readable
16584         public static final String STORAGE_SETTINGS_CLOBBER_THRESHOLD =
16585                 "storage_settings_clobber_threshold";
16586 
16587         /**
16588          * If set to 1, SettingsProvider's restoreAnyVersion="true" attribute will be ignored
16589          * and restoring to lower version of platform API will be skipped.
16590          *
16591          * @hide
16592          */
16593         @Readable
16594         public static final String OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION =
16595                 "override_settings_provider_restore_any_version";
16596         /**
16597          * Flag to toggle whether system services report attribution chains when they attribute
16598          * battery use via a {@code WorkSource}.
16599          *
16600          * Type: int (0 to disable, 1 to enable)
16601          *
16602          * @hide
16603          */
16604         @Readable
16605         public static final String CHAINED_BATTERY_ATTRIBUTION_ENABLED =
16606                 "chained_battery_attribution_enabled";
16607 
16608         /**
16609          * Toggle to enable/disable the incremental ADB installation by default.
16610          * If not set, default adb installations are incremental; set to zero to use full ones.
16611          * Note: only ADB uses it, no usages in the Framework code.
16612          * <p>
16613          * Type: int (0 to disable, 1 to enable)
16614          *
16615          * @hide
16616          */
16617         @Readable
16618         public static final String ENABLE_ADB_INCREMENTAL_INSTALL_DEFAULT =
16619                 "enable_adb_incremental_install_default";
16620 
16621         /**
16622          * The packages whitelisted to be run in autofill compatibility mode. The list
16623          * of packages is {@code ":"} colon delimited, and each entry has the name of the
16624          * package and an optional list of url bar resource ids (the list is delimited by
16625          * brackets&mdash{@code [} and {@code ]}&mdash and is also comma delimited).
16626          *
16627          * <p>For example, a list with 3 packages {@code p1}, {@code p2}, and {@code p3}, where
16628          * package {@code p1} have one id ({@code url_bar}, {@code p2} has none, and {@code p3 }
16629          * have 2 ids {@code url_foo} and {@code url_bas}) would be
16630          * {@code p1[url_bar]:p2:p3[url_foo,url_bas]}
16631          *
16632          * @hide
16633          * @deprecated Use {@link android.view.autofill.AutofillManager
16634          * #DEVICE_CONFIG_AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES} instead.
16635          */
16636         @Deprecated
16637         @SystemApi
16638         @Readable
16639         public static final String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES =
16640                 "autofill_compat_mode_allowed_packages";
16641 
16642         /**
16643          * Level of autofill logging.
16644          *
16645          * <p>Valid values are
16646          * {@link android.view.autofill.AutofillManager#NO_LOGGING},
16647          * {@link android.view.autofill.AutofillManager#FLAG_ADD_CLIENT_DEBUG}, or
16648          * {@link android.view.autofill.AutofillManager#FLAG_ADD_CLIENT_VERBOSE}.
16649          *
16650          * @hide
16651          */
16652         @Readable
16653         public static final String AUTOFILL_LOGGING_LEVEL = "autofill_logging_level";
16654 
16655         /**
16656          * Maximum number of partitions that can be allowed in an autofill session.
16657          *
16658          * @hide
16659          */
16660         @Readable
16661         public static final String AUTOFILL_MAX_PARTITIONS_SIZE = "autofill_max_partitions_size";
16662 
16663         /**
16664          * Maximum number of visible datasets in the Autofill dataset picker UI, or {@code 0} to use
16665          * the default value from resources.
16666          *
16667          * @hide
16668          */
16669         @Readable
16670         public static final String AUTOFILL_MAX_VISIBLE_DATASETS = "autofill_max_visible_datasets";
16671 
16672         /**
16673          * Indicates whether a stylus has ever been used on the device.
16674          *
16675          * @hide
16676          */
16677         @Readable
16678         @SuppressLint("NoSettingsProvider")
16679         public static final String STYLUS_EVER_USED = "stylus_ever_used";
16680 
16681         /**
16682          * Exemptions to the hidden API blacklist.
16683          *
16684          * @hide
16685          */
16686         @TestApi
16687         @Readable
16688         public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS =
16689                 "hidden_api_blacklist_exemptions";
16690 
16691         /**
16692          * Hidden API enforcement policy for apps.
16693          *
16694          * Values correspond to @{@link
16695          * android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy}
16696          *
16697          * @hide
16698          */
16699         @TestApi
16700         @Readable
16701         public static final String HIDDEN_API_POLICY = "hidden_api_policy";
16702 
16703         /**
16704          * Flag for forcing {@link com.android.server.compat.OverrideValidatorImpl}
16705          * to consider this a non-debuggable build.
16706          *
16707          * @hide
16708          */
16709         public static final String FORCE_NON_DEBUGGABLE_FINAL_BUILD_FOR_COMPAT =
16710                 "force_non_debuggable_final_build_for_compat";
16711 
16712 
16713         /**
16714          * Current version of signed configuration applied.
16715          *
16716          * @hide
16717          */
16718         @Readable
16719         public static final String SIGNED_CONFIG_VERSION = "signed_config_version";
16720 
16721         /**
16722          * Timeout for a single {@link android.media.soundtrigger.SoundTriggerDetectionService}
16723          * operation (in ms).
16724          *
16725          * @hide
16726          */
16727         @Readable
16728         public static final String SOUND_TRIGGER_DETECTION_SERVICE_OP_TIMEOUT =
16729                 "sound_trigger_detection_service_op_timeout";
16730 
16731         /**
16732          * Maximum number of {@link android.media.soundtrigger.SoundTriggerDetectionService}
16733          * operations per day.
16734          *
16735          * @hide
16736          */
16737         @Readable
16738         public static final String MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY =
16739                 "max_sound_trigger_detection_service_ops_per_day";
16740 
16741         /**
16742          * Setting to determine if the Clockwork Home application is ready.
16743          *
16744          * <p>
16745          * Set to 1 when the Clockwork Home application has finished starting up.
16746          * </p>
16747          *
16748          * @hide
16749          */
16750         public static final String CLOCKWORK_HOME_READY = "clockwork_home_ready";
16751 
16752         /**
16753          * Indicates whether aware is available in the current location.
16754          * @hide
16755          */
16756         @Readable
16757         public static final String AWARE_ALLOWED = "aware_allowed";
16758 
16759         /**
16760          * Overrides internal R.integer.config_longPressOnPowerBehavior.
16761          * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
16762          * Used by PhoneWindowManager.
16763          * @hide
16764          */
16765         @Readable
16766         public static final String POWER_BUTTON_LONG_PRESS =
16767                 "power_button_long_press";
16768 
16769         /**
16770          * Override internal R.integer.config_longPressOnPowerDurationMs. It determines the length
16771          * of power button press to be considered a long press in milliseconds.
16772          * Used by PhoneWindowManager.
16773          * @hide
16774          */
16775         @Readable
16776         public static final String POWER_BUTTON_LONG_PRESS_DURATION_MS =
16777                 "power_button_long_press_duration_ms";
16778 
16779         /**
16780          * Overrides internal R.integer.config_veryLongPressOnPowerBehavior.
16781          * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
16782          * Used by PhoneWindowManager.
16783          * @hide
16784          */
16785         @Readable
16786         public static final String POWER_BUTTON_VERY_LONG_PRESS =
16787                 "power_button_very_long_press";
16788 
16789         /**
16790          * Overrides internal R.integer.config_keyChordPowerVolumeUp.
16791          * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
16792          * Used by PhoneWindowManager.
16793          * @hide
16794          */
16795         @Readable
16796         public static final String KEY_CHORD_POWER_VOLUME_UP =
16797                 "key_chord_power_volume_up";
16798 
16799         /**
16800          * Record audio from near-field microphone (ie. TV remote)
16801          * Allows audio recording regardless of sensor privacy state,
16802          * as it is an intentional user interaction: hold-to-talk
16803          *
16804          * Type: int (0 to disable, 1 to enable)
16805          *
16806          * @hide
16807          */
16808         public static final String RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO_ENABLED =
16809                 "receive_explicit_user_interaction_audio_enabled";
16810 
16811         /**
16812          * Keyguard should be on the left hand side of the screen, for wide screen layouts.
16813          *
16814          * @hide
16815          */
16816         public static final int ONE_HANDED_KEYGUARD_SIDE_LEFT = 0;
16817 
16818         /**
16819          * Keyguard should be on the right hand side of the screen, for wide screen layouts.
16820          *
16821          * @hide
16822          */
16823         public static final int ONE_HANDED_KEYGUARD_SIDE_RIGHT = 1;
16824         /**
16825          * In one handed mode, which side the keyguard should be on. Allowable values are one of
16826          * the ONE_HANDED_KEYGUARD_SIDE_* constants.
16827          *
16828          * @hide
16829          */
16830         public static final String ONE_HANDED_KEYGUARD_SIDE = "one_handed_keyguard_side";
16831 
16832         /**
16833          * Global settings that shouldn't be persisted.
16834          *
16835          * @hide
16836          */
16837         public static final String[] TRANSIENT_SETTINGS = {
16838                 CLOCKWORK_HOME_READY,
16839         };
16840 
16841         /**
16842          * Keys we no longer back up under the current schema, but want to continue to
16843          * process when restoring historical backup datasets.
16844          *
16845          * All settings in {@link LEGACY_RESTORE_SETTINGS} array *must* have a non-null validator,
16846          * otherwise they won't be restored.
16847          *
16848          * @hide
16849          */
16850         public static final String[] LEGACY_RESTORE_SETTINGS = {
16851         };
16852 
16853         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
16854         private static final ContentProviderHolder sProviderHolder =
16855                 new ContentProviderHolder(CONTENT_URI);
16856 
16857         // Populated lazily, guarded by class object:
16858         @UnsupportedAppUsage
16859         private static final NameValueCache sNameValueCache = new NameValueCache(
16860                     CONTENT_URI,
16861                     CALL_METHOD_GET_GLOBAL,
16862                     CALL_METHOD_PUT_GLOBAL,
16863                     CALL_METHOD_DELETE_GLOBAL,
16864                     sProviderHolder,
16865                     Global.class);
16866 
16867         // Certain settings have been moved from global to the per-user secure namespace
16868         @UnsupportedAppUsage
16869         private static final HashSet<String> MOVED_TO_SECURE;
16870         static {
16871             MOVED_TO_SECURE = new HashSet<>(8);
16872             MOVED_TO_SECURE.add(Global.INSTALL_NON_MARKET_APPS);
16873             MOVED_TO_SECURE.add(Global.ZEN_DURATION);
16874             MOVED_TO_SECURE.add(Global.SHOW_ZEN_UPGRADE_NOTIFICATION);
16875             MOVED_TO_SECURE.add(Global.SHOW_ZEN_SETTINGS_SUGGESTION);
16876             MOVED_TO_SECURE.add(Global.ZEN_SETTINGS_UPDATED);
16877             MOVED_TO_SECURE.add(Global.ZEN_SETTINGS_SUGGESTION_VIEWED);
16878             MOVED_TO_SECURE.add(Global.CHARGING_SOUNDS_ENABLED);
16879             MOVED_TO_SECURE.add(Global.CHARGING_VIBRATION_ENABLED);
16880             MOVED_TO_SECURE.add(Global.NOTIFICATION_BUBBLES);
16881             MOVED_TO_SECURE.add(Global.BUGREPORT_IN_POWER_MENU);
16882             MOVED_TO_SECURE.add(Global.CUSTOM_BUGREPORT_HANDLER_APP);
16883             MOVED_TO_SECURE.add(Global.CUSTOM_BUGREPORT_HANDLER_USER);
16884         }
16885 
16886         // Certain settings have been moved from global to the per-user system namespace
16887         private static final HashSet<String> MOVED_TO_SYSTEM;
16888         static {
16889             MOVED_TO_SYSTEM = new HashSet<>(1);
16890             MOVED_TO_SYSTEM.add(Global.APPLY_RAMPING_RINGER);
16891         }
16892 
16893         /** @hide */
getMovedToSecureSettings(Set<String> outKeySet)16894         public static void getMovedToSecureSettings(Set<String> outKeySet) {
16895             outKeySet.addAll(MOVED_TO_SECURE);
16896         }
16897 
16898         /** @hide */
getMovedToSystemSettings(Set<String> outKeySet)16899         public static void getMovedToSystemSettings(Set<String> outKeySet) {
16900             outKeySet.addAll(MOVED_TO_SYSTEM);
16901         }
16902 
16903         /** @hide */
clearProviderForTest()16904         public static void clearProviderForTest() {
16905             sProviderHolder.clearProviderForTest();
16906             sNameValueCache.clearGenerationTrackerForTest();
16907         }
16908 
16909         /** @hide */
getPublicSettings(Set<String> allKeys, Set<String> readableKeys, ArrayMap<String, Integer> readableKeysWithMaxTargetSdk)16910         public static void getPublicSettings(Set<String> allKeys, Set<String> readableKeys,
16911                 ArrayMap<String, Integer> readableKeysWithMaxTargetSdk) {
16912             getPublicSettingsForClass(Global.class, allKeys, readableKeys,
16913                     readableKeysWithMaxTargetSdk);
16914         }
16915 
16916         /**
16917          * Look up a name in the database.
16918          * @param resolver to access the database with
16919          * @param name to look up in the table
16920          * @return the corresponding value, or null if not present
16921          */
getString(ContentResolver resolver, String name)16922         public static String getString(ContentResolver resolver, String name) {
16923             return getStringForUser(resolver, name, resolver.getUserId());
16924         }
16925 
16926         /** @hide */
16927         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
getStringForUser(ContentResolver resolver, String name, int userHandle)16928         public static String getStringForUser(ContentResolver resolver, String name,
16929                 int userHandle) {
16930             if (MOVED_TO_SECURE.contains(name)) {
16931                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
16932                         + " to android.provider.Settings.Secure, returning read-only value.");
16933                 return Secure.getStringForUser(resolver, name, userHandle);
16934             }
16935             if (MOVED_TO_SYSTEM.contains(name)) {
16936                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
16937                         + " to android.provider.Settings.System, returning read-only value.");
16938                 return System.getStringForUser(resolver, name, userHandle);
16939             }
16940             return sNameValueCache.getStringForUser(resolver, name, userHandle);
16941         }
16942 
16943         /**
16944          * Store a name/value pair into the database.
16945          * @param resolver to access the database with
16946          * @param name to store
16947          * @param value to associate with the name
16948          * @return true if the value was set, false on database errors
16949          */
putString(ContentResolver resolver, String name, String value)16950         public static boolean putString(ContentResolver resolver,
16951                 String name, String value) {
16952             return putStringForUser(resolver, name, value, null, false, resolver.getUserId(),
16953                     DEFAULT_OVERRIDEABLE_BY_RESTORE);
16954         }
16955 
16956         /**
16957          * Store a name/value pair into the database.
16958          *
16959          * @param resolver to access the database with
16960          * @param name to store
16961          * @param value to associate with the name
16962          * @param tag to associated with the setting.
16963          * @param makeDefault whether to make the value the default one.
16964          * @param overrideableByRestore whether restore can override this value
16965          * @return true if the value was set, false on database errors
16966          *
16967          * @hide
16968          */
16969         @RequiresPermission(Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE)
putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, boolean overrideableByRestore)16970         public static boolean putString(@NonNull ContentResolver resolver,
16971                 @NonNull String name, @Nullable String value, @Nullable String tag,
16972                 boolean makeDefault, boolean overrideableByRestore) {
16973             return putStringForUser(resolver, name, value, tag, makeDefault,
16974                     resolver.getUserId(), overrideableByRestore);
16975         }
16976 
16977         /**
16978          * Store a name/value pair into the database.
16979          * <p>
16980          * The method takes an optional tag to associate with the setting
16981          * which can be used to clear only settings made by your package and
16982          * associated with this tag by passing the tag to {@link
16983          * #resetToDefaults(ContentResolver, String)}. Anyone can override
16984          * the current tag. Also if another package changes the setting
16985          * then the tag will be set to the one specified in the set call
16986          * which can be null. Also any of the settings setters that do not
16987          * take a tag as an argument effectively clears the tag.
16988          * </p><p>
16989          * For example, if you set settings A and B with tags T1 and T2 and
16990          * another app changes setting A (potentially to the same value), it
16991          * can assign to it a tag T3 (note that now the package that changed
16992          * the setting is not yours). Now if you reset your changes for T1 and
16993          * T2 only setting B will be reset and A not (as it was changed by
16994          * another package) but since A did not change you are in the desired
16995          * initial state. Now if the other app changes the value of A (assuming
16996          * you registered an observer in the beginning) you would detect that
16997          * the setting was changed by another app and handle this appropriately
16998          * (ignore, set back to some value, etc).
16999          * </p><p>
17000          * Also the method takes an argument whether to make the value the
17001          * default for this setting. If the system already specified a default
17002          * value, then the one passed in here will <strong>not</strong>
17003          * be set as the default.
17004          * </p>
17005          *
17006          * @param resolver to access the database with.
17007          * @param name to store.
17008          * @param value to associate with the name.
17009          * @param tag to associated with the setting.
17010          * @param makeDefault whether to make the value the default one.
17011          * @return true if the value was set, false on database errors.
17012          *
17013          * @see #resetToDefaults(ContentResolver, String)
17014          *
17015          * @hide
17016          */
17017         @SystemApi
17018         @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault)17019         public static boolean putString(@NonNull ContentResolver resolver,
17020                 @NonNull String name, @Nullable String value, @Nullable String tag,
17021                 boolean makeDefault) {
17022             return putStringForUser(resolver, name, value, tag, makeDefault,
17023                     resolver.getUserId(), DEFAULT_OVERRIDEABLE_BY_RESTORE);
17024         }
17025 
17026         /**
17027          * Reset the settings to their defaults. This would reset <strong>only</strong>
17028          * settings set by the caller's package. Think of it of a way to undo your own
17029          * changes to the secure settings. Passing in the optional tag will reset only
17030          * settings changed by your package and associated with this tag.
17031          *
17032          * @param resolver Handle to the content resolver.
17033          * @param tag Optional tag which should be associated with the settings to reset.
17034          *
17035          * @see #putString(ContentResolver, String, String, String, boolean)
17036          *
17037          * @hide
17038          */
17039         @SystemApi
17040         @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
resetToDefaults(@onNull ContentResolver resolver, @Nullable String tag)17041         public static void resetToDefaults(@NonNull ContentResolver resolver,
17042                 @Nullable String tag) {
17043             resetToDefaultsAsUser(resolver, tag, RESET_MODE_PACKAGE_DEFAULTS,
17044                     resolver.getUserId());
17045         }
17046 
17047         /**
17048          * Reset the settings to their defaults for a given user with a specific mode. The
17049          * optional tag argument is valid only for {@link #RESET_MODE_PACKAGE_DEFAULTS}
17050          * allowing resetting the settings made by a package and associated with the tag.
17051          *
17052          * @param resolver Handle to the content resolver.
17053          * @param tag Optional tag which should be associated with the settings to reset.
17054          * @param mode The reset mode.
17055          * @param userHandle The user for which to reset to defaults.
17056          *
17057          * @see #RESET_MODE_PACKAGE_DEFAULTS
17058          * @see #RESET_MODE_UNTRUSTED_DEFAULTS
17059          * @see #RESET_MODE_UNTRUSTED_CHANGES
17060          * @see #RESET_MODE_TRUSTED_DEFAULTS
17061          *
17062          * @hide
17063          */
resetToDefaultsAsUser(@onNull ContentResolver resolver, @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle)17064         public static void resetToDefaultsAsUser(@NonNull ContentResolver resolver,
17065                 @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle) {
17066             try {
17067                 Bundle arg = new Bundle();
17068                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
17069                 if (tag != null) {
17070                     arg.putString(CALL_METHOD_TAG_KEY, tag);
17071                 }
17072                 arg.putInt(CALL_METHOD_RESET_MODE_KEY, mode);
17073                 IContentProvider cp = sProviderHolder.getProvider(resolver);
17074                 cp.call(resolver.getAttributionSource(),
17075                         sProviderHolder.mUri.getAuthority(), CALL_METHOD_RESET_GLOBAL, null, arg);
17076             } catch (RemoteException e) {
17077                 Log.w(TAG, "Can't reset do defaults for " + CONTENT_URI, e);
17078             }
17079         }
17080 
17081         /** @hide */
17082         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
putStringForUser(ContentResolver resolver, String name, String value, int userHandle)17083         public static boolean putStringForUser(ContentResolver resolver,
17084                 String name, String value, int userHandle) {
17085             return putStringForUser(resolver, name, value, null, false, userHandle,
17086                     DEFAULT_OVERRIDEABLE_BY_RESTORE);
17087         }
17088 
17089         /** @hide */
putStringForUser(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, @UserIdInt int userHandle, boolean overrideableByRestore)17090         public static boolean putStringForUser(@NonNull ContentResolver resolver,
17091                 @NonNull String name, @Nullable String value, @Nullable String tag,
17092                 boolean makeDefault, @UserIdInt int userHandle, boolean overrideableByRestore) {
17093             if (LOCAL_LOGV) {
17094                 Log.v(TAG, "Global.putString(name=" + name + ", value=" + value + ") for "
17095                         + userHandle);
17096             }
17097             // Global and Secure have the same access policy so we can forward writes
17098             if (MOVED_TO_SECURE.contains(name)) {
17099                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
17100                         + " to android.provider.Settings.Secure, value is unchanged.");
17101                 return Secure.putStringForUser(resolver, name, value, tag,
17102                         makeDefault, userHandle, overrideableByRestore);
17103             }
17104             // Global and System have the same access policy so we can forward writes
17105             if (MOVED_TO_SYSTEM.contains(name)) {
17106                 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
17107                         + " to android.provider.Settings.System, value is unchanged.");
17108                 return System.putStringForUser(resolver, name, value, tag,
17109                         makeDefault, userHandle, overrideableByRestore);
17110             }
17111             return sNameValueCache.putStringForUser(resolver, name, value, tag,
17112                     makeDefault, userHandle, overrideableByRestore);
17113         }
17114 
17115         /**
17116          * Construct the content URI for a particular name/value pair,
17117          * useful for monitoring changes with a ContentObserver.
17118          * @param name to look up in the table
17119          * @return the corresponding content URI, or null if not present
17120          */
getUriFor(String name)17121         public static Uri getUriFor(String name) {
17122             return getUriFor(CONTENT_URI, name);
17123         }
17124 
17125         /**
17126          * Convenience function for retrieving a single secure settings value
17127          * as an integer.  Note that internally setting values are always
17128          * stored as strings; this function converts the string to an integer
17129          * for you.  The default value will be returned if the setting is
17130          * not defined or not an integer.
17131          *
17132          * @param cr The ContentResolver to access.
17133          * @param name The name of the setting to retrieve.
17134          * @param def Value to return if the setting is not defined.
17135          *
17136          * @return The setting's current value, or 'def' if it is not defined
17137          * or not a valid integer.
17138          */
getInt(ContentResolver cr, String name, int def)17139         public static int getInt(ContentResolver cr, String name, int def) {
17140             String v = getString(cr, name);
17141             return parseIntSettingWithDefault(v, def);
17142         }
17143 
17144         /**
17145          * Convenience function for retrieving a single secure settings value
17146          * as an integer.  Note that internally setting values are always
17147          * stored as strings; this function converts the string to an integer
17148          * for you.
17149          * <p>
17150          * This version does not take a default value.  If the setting has not
17151          * been set, or the string value is not a number,
17152          * it throws {@link SettingNotFoundException}.
17153          *
17154          * @param cr The ContentResolver to access.
17155          * @param name The name of the setting to retrieve.
17156          *
17157          * @throws SettingNotFoundException Thrown if a setting by the given
17158          * name can't be found or the setting value is not an integer.
17159          *
17160          * @return The setting's current value.
17161          */
getInt(ContentResolver cr, String name)17162         public static int getInt(ContentResolver cr, String name)
17163                 throws SettingNotFoundException {
17164             String v = getString(cr, name);
17165             return parseIntSetting(v, name);
17166         }
17167 
17168         /**
17169          * Convenience function for updating a single settings value as an
17170          * integer. This will either create a new entry in the table if the
17171          * given name does not exist, or modify the value of the existing row
17172          * with that name.  Note that internally setting values are always
17173          * stored as strings, so this function converts the given value to a
17174          * string before storing it.
17175          *
17176          * @param cr The ContentResolver to access.
17177          * @param name The name of the setting to modify.
17178          * @param value The new value for the setting.
17179          * @return true if the value was set, false on database errors
17180          */
putInt(ContentResolver cr, String name, int value)17181         public static boolean putInt(ContentResolver cr, String name, int value) {
17182             return putString(cr, name, Integer.toString(value));
17183         }
17184 
17185         /**
17186          * Convenience function for retrieving a single secure settings value
17187          * as a {@code long}.  Note that internally setting values are always
17188          * stored as strings; this function converts the string to a {@code long}
17189          * for you.  The default value will be returned if the setting is
17190          * not defined or not a {@code long}.
17191          *
17192          * @param cr The ContentResolver to access.
17193          * @param name The name of the setting to retrieve.
17194          * @param def Value to return if the setting is not defined.
17195          *
17196          * @return The setting's current value, or 'def' if it is not defined
17197          * or not a valid {@code long}.
17198          */
getLong(ContentResolver cr, String name, long def)17199         public static long getLong(ContentResolver cr, String name, long def) {
17200             String v = getString(cr, name);
17201             return parseLongSettingWithDefault(v, def);
17202         }
17203 
17204         /**
17205          * Convenience function for retrieving a single secure settings value
17206          * as a {@code long}.  Note that internally setting values are always
17207          * stored as strings; this function converts the string to a {@code long}
17208          * for you.
17209          * <p>
17210          * This version does not take a default value.  If the setting has not
17211          * been set, or the string value is not a number,
17212          * it throws {@link SettingNotFoundException}.
17213          *
17214          * @param cr The ContentResolver to access.
17215          * @param name The name of the setting to retrieve.
17216          *
17217          * @return The setting's current value.
17218          * @throws SettingNotFoundException Thrown if a setting by the given
17219          * name can't be found or the setting value is not an integer.
17220          */
getLong(ContentResolver cr, String name)17221         public static long getLong(ContentResolver cr, String name)
17222                 throws SettingNotFoundException {
17223             String v = getString(cr, name);
17224             return parseLongSetting(v, name);
17225         }
17226 
17227         /**
17228          * Convenience function for updating a secure settings value as a long
17229          * integer. This will either create a new entry in the table if the
17230          * given name does not exist, or modify the value of the existing row
17231          * with that name.  Note that internally setting values are always
17232          * stored as strings, so this function converts the given value to a
17233          * string before storing it.
17234          *
17235          * @param cr The ContentResolver to access.
17236          * @param name The name of the setting to modify.
17237          * @param value The new value for the setting.
17238          * @return true if the value was set, false on database errors
17239          */
putLong(ContentResolver cr, String name, long value)17240         public static boolean putLong(ContentResolver cr, String name, long value) {
17241             return putString(cr, name, Long.toString(value));
17242         }
17243 
17244         /**
17245          * Convenience function for retrieving a single secure settings value
17246          * as a floating point number.  Note that internally setting values are
17247          * always stored as strings; this function converts the string to an
17248          * float for you. The default value will be returned if the setting
17249          * is not defined or not a valid float.
17250          *
17251          * @param cr The ContentResolver to access.
17252          * @param name The name of the setting to retrieve.
17253          * @param def Value to return if the setting is not defined.
17254          *
17255          * @return The setting's current value, or 'def' if it is not defined
17256          * or not a valid float.
17257          */
getFloat(ContentResolver cr, String name, float def)17258         public static float getFloat(ContentResolver cr, String name, float def) {
17259             String v = getString(cr, name);
17260             return parseFloatSettingWithDefault(v, def);
17261         }
17262 
17263         /**
17264          * Convenience function for retrieving a single secure settings value
17265          * as a float.  Note that internally setting values are always
17266          * stored as strings; this function converts the string to a float
17267          * for you.
17268          * <p>
17269          * This version does not take a default value.  If the setting has not
17270          * been set, or the string value is not a number,
17271          * it throws {@link SettingNotFoundException}.
17272          *
17273          * @param cr The ContentResolver to access.
17274          * @param name The name of the setting to retrieve.
17275          *
17276          * @throws SettingNotFoundException Thrown if a setting by the given
17277          * name can't be found or the setting value is not a float.
17278          *
17279          * @return The setting's current value.
17280          */
getFloat(ContentResolver cr, String name)17281         public static float getFloat(ContentResolver cr, String name)
17282                 throws SettingNotFoundException {
17283             String v = getString(cr, name);
17284             return parseFloatSetting(v, name);
17285         }
17286 
17287         /**
17288          * Convenience function for updating a single settings value as a
17289          * floating point number. This will either create a new entry in the
17290          * table if the given name does not exist, or modify the value of the
17291          * existing row with that name.  Note that internally setting values
17292          * are always stored as strings, so this function converts the given
17293          * value to a string before storing it.
17294          *
17295          * @param cr The ContentResolver to access.
17296          * @param name The name of the setting to modify.
17297          * @param value The new value for the setting.
17298          * @return true if the value was set, false on database errors
17299          */
putFloat(ContentResolver cr, String name, float value)17300         public static boolean putFloat(ContentResolver cr, String name, float value) {
17301             return putString(cr, name, Float.toString(value));
17302         }
17303 
17304         /**
17305           * Subscription Id to be used for voice call on a multi sim device.
17306           * @hide
17307           */
17308         @Readable
17309         public static final String MULTI_SIM_VOICE_CALL_SUBSCRIPTION = "multi_sim_voice_call";
17310 
17311         /**
17312           * Used to provide option to user to select subscription during dial.
17313           * The supported values are 0 = disable or 1 = enable prompt.
17314           * @hide
17315           */
17316         @UnsupportedAppUsage
17317         @Readable
17318         public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt";
17319 
17320         /**
17321           * Subscription Id to be used for data call on a multi sim device.
17322           * @hide
17323           */
17324         @Readable
17325         public static final String MULTI_SIM_DATA_CALL_SUBSCRIPTION = "multi_sim_data_call";
17326 
17327         /**
17328           * Subscription Id to be used for SMS on a multi sim device.
17329           * @hide
17330           */
17331         @Readable
17332         public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms";
17333 
17334         /**
17335           * Used to provide option to user to select subscription during send SMS.
17336           * The value 1 - enable, 0 - disable
17337           * @hide
17338           */
17339         @Readable
17340         public static final String MULTI_SIM_SMS_PROMPT = "multi_sim_sms_prompt";
17341 
17342         /** User preferred subscriptions setting.
17343           * This holds the details of the user selected subscription from the card and
17344           * the activation status. Each settings string have the comma separated values
17345           * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index
17346           * @hide
17347          */
17348         @UnsupportedAppUsage
17349         @Readable
17350         public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1",
17351                 "user_preferred_sub2","user_preferred_sub3"};
17352 
17353         /**
17354          * Which subscription is enabled for a physical slot.
17355          * @hide
17356          */
17357         @Readable
17358         public static final String ENABLED_SUBSCRIPTION_FOR_SLOT = "enabled_subscription_for_slot";
17359 
17360         /**
17361          * Whether corresponding logical modem is enabled for a physical slot.
17362          * The value 1 - enable, 0 - disable
17363          * @hide
17364          */
17365         @Readable
17366         public static final String MODEM_STACK_ENABLED_FOR_SLOT = "modem_stack_enabled_for_slot";
17367 
17368         /**
17369          * Whether to enable new contacts aggregator or not.
17370          * The value 1 - enable, 0 - disable
17371          * @hide
17372          */
17373         @Readable
17374         public static final String NEW_CONTACT_AGGREGATOR = "new_contact_aggregator";
17375 
17376         /**
17377          * Whether to enable contacts metadata syncing or not
17378          * The value 1 - enable, 0 - disable
17379          *
17380          * @removed
17381          */
17382         @Deprecated
17383         @Readable
17384         public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
17385 
17386         /**
17387          * Whether to enable contacts metadata syncing or not
17388          * The value 1 - enable, 0 - disable
17389          */
17390         @Readable
17391         public static final String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled";
17392 
17393         /**
17394          * Whether to enable cellular on boot.
17395          * The value 1 - enable, 0 - disable
17396          * @hide
17397          */
17398         @Readable
17399         public static final String ENABLE_CELLULAR_ON_BOOT = "enable_cellular_on_boot";
17400 
17401         /**
17402          * The maximum allowed notification enqueue rate in Hertz.
17403          *
17404          * Should be a float, and includes updates only.
17405          * @hide
17406          */
17407         @Readable
17408         public static final String MAX_NOTIFICATION_ENQUEUE_RATE = "max_notification_enqueue_rate";
17409 
17410         /**
17411          * Displays toasts when an app posts a notification that does not specify a valid channel.
17412          *
17413          * The value 1 - enable, 0 - disable
17414          * @hide
17415          */
17416         @Readable
17417         public static final String SHOW_NOTIFICATION_CHANNEL_WARNINGS =
17418                 "show_notification_channel_warnings";
17419 
17420         /**
17421          * Whether cell is enabled/disabled
17422          * @hide
17423          */
17424         @Readable
17425         public static final String CELL_ON = "cell_on";
17426 
17427         /**
17428          * Global settings which can be accessed by instant apps.
17429          * @hide
17430          */
17431         public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
17432         static {
17433             INSTANT_APP_SETTINGS.add(WAIT_FOR_DEBUGGER);
17434             INSTANT_APP_SETTINGS.add(DEVICE_PROVISIONED);
17435             INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES);
17436             INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RTL);
17437             INSTANT_APP_SETTINGS.add(EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
17438             INSTANT_APP_SETTINGS.add(AIRPLANE_MODE_ON);
17439             INSTANT_APP_SETTINGS.add(WINDOW_ANIMATION_SCALE);
17440             INSTANT_APP_SETTINGS.add(TRANSITION_ANIMATION_SCALE);
17441             INSTANT_APP_SETTINGS.add(ANIMATOR_DURATION_SCALE);
17442             INSTANT_APP_SETTINGS.add(DEBUG_VIEW_ATTRIBUTES);
17443             INSTANT_APP_SETTINGS.add(DEBUG_VIEW_ATTRIBUTES_APPLICATION_PACKAGE);
17444             INSTANT_APP_SETTINGS.add(WTF_IS_FATAL);
17445             INSTANT_APP_SETTINGS.add(SEND_ACTION_APP_ERROR);
17446             INSTANT_APP_SETTINGS.add(ZEN_MODE);
17447         }
17448 
17449         /**
17450          * Whether to show the high temperature warning notification.
17451          * @hide
17452          */
17453         @Readable
17454         public static final String SHOW_TEMPERATURE_WARNING = "show_temperature_warning";
17455 
17456         /**
17457          * Whether to show the usb high temperature alarm notification.
17458          * @hide
17459          */
17460         @Readable
17461         public static final String SHOW_USB_TEMPERATURE_ALARM = "show_usb_temperature_alarm";
17462 
17463         /**
17464          * Temperature at which the high temperature warning notification should be shown.
17465          * @hide
17466          */
17467         @Readable
17468         public static final String WARNING_TEMPERATURE = "warning_temperature";
17469 
17470         /**
17471          * Whether the diskstats logging task is enabled/disabled.
17472          * @hide
17473          */
17474         @Readable
17475         public static final String ENABLE_DISKSTATS_LOGGING = "enable_diskstats_logging";
17476 
17477         /**
17478          * Whether the cache quota calculation task is enabled/disabled.
17479          * @hide
17480          */
17481         @Readable
17482         public static final String ENABLE_CACHE_QUOTA_CALCULATION =
17483                 "enable_cache_quota_calculation";
17484 
17485         /**
17486          * Whether the Deletion Helper no threshold toggle is available.
17487          * @hide
17488          */
17489         @Readable
17490         public static final String ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE =
17491                 "enable_deletion_helper_no_threshold_toggle";
17492 
17493         /**
17494          * The list of snooze options for notifications
17495          * This is encoded as a key=value list, separated by commas. Ex:
17496          *
17497          * "default=60,options_array=15:30:60:120"
17498          *
17499          * The following keys are supported:
17500          *
17501          * <pre>
17502          * default               (int)
17503          * options_array         (int[])
17504          * </pre>
17505          *
17506          * All delays in integer minutes. Array order is respected.
17507          * Options will be used in order up to the maximum allowed by the UI.
17508          * @hide
17509          */
17510         @Readable
17511         public static final String NOTIFICATION_SNOOZE_OPTIONS =
17512                 "notification_snooze_options";
17513 
17514         /**
17515          * When enabled, notifications the notification assistant service has modified will show an
17516          * indicator. When tapped, this indicator will describe the adjustment made and solicit
17517          * feedback. This flag will also add a "automatic" option to the long press menu.
17518          *
17519          * The value 1 - enable, 0 - disable
17520          * @hide
17521          */
17522         public static final String NOTIFICATION_FEEDBACK_ENABLED = "notification_feedback_enabled";
17523 
17524         /**
17525          * Settings key for the ratio of notification dismissals to notification views - one of the
17526          * criteria for showing the notification blocking helper.
17527          *
17528          * <p>The value is a float ranging from 0.0 to 1.0 (the closer to 0.0, the more intrusive
17529          * the blocking helper will be).
17530          *
17531          * @hide
17532          */
17533         @Readable
17534         public static final String BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT =
17535                 "blocking_helper_dismiss_to_view_ratio";
17536 
17537         /**
17538          * Settings key for the longest streak of dismissals  - one of the criteria for showing the
17539          * notification blocking helper.
17540          *
17541          * <p>The value is an integer greater than 0.
17542          *
17543          * @hide
17544          */
17545         @Readable
17546         public static final String BLOCKING_HELPER_STREAK_LIMIT = "blocking_helper_streak_limit";
17547 
17548         /**
17549          * Configuration flags for SQLite Compatibility WAL. Encoded as a key-value list, separated
17550          * by commas. E.g.: compatibility_wal_supported=true, wal_syncmode=OFF
17551          *
17552          * Supported keys:<br/>
17553          * <li>
17554          * <ul> {@code legacy_compatibility_wal_enabled} : A {code boolean} flag that determines
17555          * whether or not "compatibility WAL" mode is enabled by default. This is a legacy flag
17556          * and is honoured on Android Q and higher. This flag will be removed in a future release.
17557          * </ul>
17558          * <ul> {@code wal_syncmode} : A {@code String} representing the synchronization mode to use
17559          * when WAL is enabled, either via {@code legacy_compatibility_wal_enabled} or using the
17560          * obsolete {@code compatibility_wal_supported} flag.
17561          * </ul>
17562          * <ul> {@code truncate_size} : A {@code int} flag that specifies the truncate size of the
17563          * WAL journal.
17564          * </ul>
17565          * <ul> {@code compatibility_wal_supported} : A {code boolean} flag that specifies whether
17566          * the legacy "compatibility WAL" mode is enabled by default. This flag is obsolete and is
17567          * only supported on Android Pie.
17568          * </ul>
17569          * </li>
17570          *
17571          * @hide
17572          */
17573         @Readable
17574         public static final String SQLITE_COMPATIBILITY_WAL_FLAGS =
17575                 "sqlite_compatibility_wal_flags";
17576 
17577         /**
17578          * Enable GNSS Raw Measurements Full Tracking?
17579          * 0 = no
17580          * 1 = yes
17581          * @hide
17582          */
17583         @Readable
17584         public static final String ENABLE_GNSS_RAW_MEAS_FULL_TRACKING =
17585                 "enable_gnss_raw_meas_full_tracking";
17586 
17587         /**
17588          * Whether the notification should be ongoing (persistent) when a carrier app install is
17589          * required.
17590          *
17591          * The value is a boolean (1 or 0).
17592          * @hide
17593          */
17594         @SystemApi
17595         @Readable
17596         public static final String INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT =
17597                 "install_carrier_app_notification_persistent";
17598 
17599         /**
17600          * The amount of time (ms) to hide the install carrier app notification after the user has
17601          * ignored it. After this time passes, the notification will be shown again
17602          *
17603          * The value is a long
17604          * @hide
17605          */
17606         @SystemApi
17607         @Readable
17608         public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS =
17609                 "install_carrier_app_notification_sleep_millis";
17610 
17611         /**
17612          * Whether we've enabled zram on this device. Takes effect on
17613          * reboot. The value "1" enables zram; "0" disables it, and
17614          * everything else is unspecified.
17615          * @hide
17616          */
17617         @Readable
17618         public static final String ZRAM_ENABLED =
17619                 "zram_enabled";
17620 
17621         /**
17622          * Whether the app freezer is enabled on this device.
17623          * The value of "enabled" enables the app freezer, "disabled" disables it and
17624          * "device_default" will let the system decide whether to enable the freezer or not
17625          * @hide
17626          */
17627         @Readable
17628         public static final String CACHED_APPS_FREEZER_ENABLED = "cached_apps_freezer";
17629 
17630         /**
17631          * Configuration flags for smart replies in notifications.
17632          * This is encoded as a key=value list, separated by commas. Ex:
17633          *
17634          * "enabled=1,max_squeeze_remeasure_count=3"
17635          *
17636          * The following keys are supported:
17637          *
17638          * <pre>
17639          * enabled                           (boolean)
17640          * requires_targeting_p              (boolean)
17641          * max_squeeze_remeasure_attempts    (int)
17642          * edit_choices_before_sending       (boolean)
17643          * show_in_heads_up                  (boolean)
17644          * min_num_system_generated_replies  (int)
17645          * max_num_actions                   (int)
17646          * </pre>
17647          * @see com.android.systemui.statusbar.policy.SmartReplyConstants
17648          * @hide
17649          */
17650         @Readable
17651         public static final String SMART_REPLIES_IN_NOTIFICATIONS_FLAGS =
17652                 "smart_replies_in_notifications_flags";
17653 
17654         /**
17655          * Configuration flags for the automatic generation of smart replies and smart actions in
17656          * notifications. This is encoded as a key=value list, separated by commas. Ex:
17657          * "generate_replies=false,generate_actions=true".
17658          *
17659          * The following keys are supported:
17660          *
17661          * <pre>
17662          * generate_replies                 (boolean)
17663          * generate_actions                 (boolean)
17664          * </pre>
17665          * @hide
17666          */
17667         @Readable
17668         public static final String SMART_SUGGESTIONS_IN_NOTIFICATIONS_FLAGS =
17669                 "smart_suggestions_in_notifications_flags";
17670 
17671         /**
17672          * If nonzero, crashes in foreground processes will bring up a dialog.
17673          * Otherwise, the process will be silently killed.
17674          * @hide
17675          */
17676         @TestApi
17677         @Readable
17678         @SuppressLint("NoSettingsProvider")
17679         public static final String SHOW_FIRST_CRASH_DIALOG = "show_first_crash_dialog";
17680 
17681         /**
17682          * If nonzero, crash dialogs will show an option to restart the app.
17683          * @hide
17684          */
17685         @Readable
17686         public static final String SHOW_RESTART_IN_CRASH_DIALOG = "show_restart_in_crash_dialog";
17687 
17688         /**
17689          * If nonzero, crash dialogs will show an option to mute all future crash dialogs for
17690          * this app.
17691          * @hide
17692          */
17693         @Readable
17694         public static final String SHOW_MUTE_IN_CRASH_DIALOG = "show_mute_in_crash_dialog";
17695 
17696 
17697         /**
17698          * If nonzero, will show the zen upgrade notification when the user toggles DND on/off.
17699          * @hide
17700          * @deprecated - Use {@link android.provider.Settings.Secure#SHOW_ZEN_UPGRADE_NOTIFICATION}
17701          */
17702         @Deprecated
17703         public static final String SHOW_ZEN_UPGRADE_NOTIFICATION = "show_zen_upgrade_notification";
17704 
17705         /**
17706          * If nonzero, will show the zen update settings suggestion.
17707          * @hide
17708          * @deprecated - Use {@link android.provider.Settings.Secure#SHOW_ZEN_SETTINGS_SUGGESTION}
17709          */
17710         @Deprecated
17711         public static final String SHOW_ZEN_SETTINGS_SUGGESTION = "show_zen_settings_suggestion";
17712 
17713         /**
17714          * If nonzero, zen has not been updated to reflect new changes.
17715          * @deprecated - Use {@link android.provider.Settings.Secure#ZEN_SETTINGS_UPDATED}
17716          * @hide
17717          */
17718         @Deprecated
17719         public static final String ZEN_SETTINGS_UPDATED = "zen_settings_updated";
17720 
17721         /**
17722          * If nonzero, zen setting suggestion has been viewed by user
17723          * @hide
17724          * @deprecated - Use {@link android.provider.Settings.Secure#ZEN_SETTINGS_SUGGESTION_VIEWED}
17725          */
17726         @Deprecated
17727         public static final String ZEN_SETTINGS_SUGGESTION_VIEWED =
17728                 "zen_settings_suggestion_viewed";
17729 
17730         /**
17731          * Backup and restore agent timeout parameters.
17732          * These parameters are represented by a comma-delimited key-value list.
17733          *
17734          * The following strings are supported as keys:
17735          * <pre>
17736          *     kv_backup_agent_timeout_millis         (long)
17737          *     full_backup_agent_timeout_millis       (long)
17738          *     shared_backup_agent_timeout_millis     (long)
17739          *     restore_agent_timeout_millis           (long)
17740          *     restore_agent_finished_timeout_millis  (long)
17741          * </pre>
17742          *
17743          * They map to milliseconds represented as longs.
17744          *
17745          * Ex: "kv_backup_agent_timeout_millis=30000,full_backup_agent_timeout_millis=300000"
17746          *
17747          * @hide
17748          */
17749         @Readable
17750         public static final String BACKUP_AGENT_TIMEOUT_PARAMETERS =
17751                 "backup_agent_timeout_parameters";
17752 
17753         /**
17754          * Blocklist of GNSS satellites.
17755          *
17756          * This is a list of integers separated by commas to represent pairs of (constellation,
17757          * svid). Thus, the number of integers should be even.
17758          *
17759          * E.g.: "3,0,5,24" denotes (constellation=3, svid=0) and (constellation=5, svid=24) are
17760          * blocklisted. Note that svid=0 denotes all svids in the constellation are blocklisted.
17761          *
17762          * @hide
17763          */
17764         public static final String GNSS_SATELLITE_BLOCKLIST = "gnss_satellite_blocklist";
17765 
17766         /**
17767          * Duration of updates in millisecond for GNSS location request from HAL to framework.
17768          *
17769          * If zero, the GNSS location request feature is disabled.
17770          *
17771          * The value is a non-negative long.
17772          *
17773          * @hide
17774          */
17775         @Readable
17776         public static final String GNSS_HAL_LOCATION_REQUEST_DURATION_MILLIS =
17777                 "gnss_hal_location_request_duration_millis";
17778 
17779         /**
17780          * Binder call stats settings.
17781          *
17782          * The following strings are supported as keys:
17783          * <pre>
17784          *     enabled              (boolean)
17785          *     detailed_tracking    (boolean)
17786          *     upload_data          (boolean)
17787          *     sampling_interval    (int)
17788          * </pre>
17789          *
17790          * @hide
17791          */
17792         @Readable
17793         public static final String BINDER_CALLS_STATS = "binder_calls_stats";
17794 
17795         /**
17796          * Looper stats settings.
17797          *
17798          * The following strings are supported as keys:
17799          * <pre>
17800          *     enabled              (boolean)
17801          *     sampling_interval    (int)
17802          * </pre>
17803          *
17804          * @hide
17805          */
17806         @Readable
17807         public static final String LOOPER_STATS = "looper_stats";
17808 
17809         /**
17810          * Settings for collecting statistics on CPU usage per thread
17811          *
17812          * The following strings are supported as keys:
17813          * <pre>
17814          *     num_buckets          (int)
17815          *     collected_uids       (string)
17816          *     minimum_total_cpu_usage_millis (int)
17817          * </pre>
17818          *
17819          * @hide
17820          */
17821         @Readable
17822         public static final String KERNEL_CPU_THREAD_READER = "kernel_cpu_thread_reader";
17823 
17824         /**
17825          * Whether we've enabled native flags health check on this device. Takes effect on
17826          * reboot. The value "1" enables native flags health check; otherwise it's disabled.
17827          * @hide
17828          */
17829         @Readable
17830         public static final String NATIVE_FLAGS_HEALTH_CHECK_ENABLED =
17831                 "native_flags_health_check_enabled";
17832 
17833         /**
17834          * Parameter for {@link #APPOP_HISTORY_PARAMETERS} that controls the mode
17835          * in which the historical registry operates.
17836          *
17837          * @hide
17838          */
17839         @Readable
17840         public static final String APPOP_HISTORY_MODE = "mode";
17841 
17842         /**
17843          * Parameter for {@link #APPOP_HISTORY_PARAMETERS} that controls how long
17844          * is the interval between snapshots in the base case i.e. the most recent
17845          * part of the history.
17846          *
17847          * @hide
17848          */
17849         @Readable
17850         public static final String APPOP_HISTORY_BASE_INTERVAL_MILLIS = "baseIntervalMillis";
17851 
17852         /**
17853          * Parameter for {@link #APPOP_HISTORY_PARAMETERS} that controls the base
17854          * for the logarithmic step when building app op history.
17855          *
17856          * @hide
17857          */
17858         @Readable
17859         public static final String APPOP_HISTORY_INTERVAL_MULTIPLIER = "intervalMultiplier";
17860 
17861         /**
17862          * Appop history parameters. These parameters are represented by
17863          * a comma-delimited key-value list.
17864          *
17865          * The following strings are supported as keys:
17866          * <pre>
17867          *     mode                  (int)
17868          *     baseIntervalMillis    (long)
17869          *     intervalMultiplier    (int)
17870          * </pre>
17871          *
17872          * Ex: "mode=HISTORICAL_MODE_ENABLED_ACTIVE,baseIntervalMillis=1000,intervalMultiplier=10"
17873          *
17874          * @see #APPOP_HISTORY_MODE
17875          * @see #APPOP_HISTORY_BASE_INTERVAL_MILLIS
17876          * @see #APPOP_HISTORY_INTERVAL_MULTIPLIER
17877          *
17878          * @hide
17879          */
17880         @Readable
17881         public static final String APPOP_HISTORY_PARAMETERS =
17882                 "appop_history_parameters";
17883 
17884         /**
17885          * Auto revoke parameters. These parameters are represented by
17886          * a comma-delimited key-value list.
17887          *
17888          * <pre>
17889          *     enabledForPreRApps    (bolean)
17890          *     unusedThresholdMs     (long)
17891          *     checkFrequencyMs      (long)
17892          * </pre>
17893          *
17894          * Ex: "enabledForPreRApps=false,unusedThresholdMs=7776000000,checkFrequencyMs=1296000000"
17895          *
17896          * @hide
17897          */
17898         @Readable
17899         public static final String AUTO_REVOKE_PARAMETERS =
17900                 "auto_revoke_parameters";
17901 
17902         /**
17903          * Delay for sending ACTION_CHARGING after device is plugged in.
17904          * This is used as an override for constants defined in BatteryStatsImpl for
17905          * ease of experimentation.
17906          *
17907          * @see com.android.internal.os.BatteryStatsImpl.Constants.KEY_BATTERY_CHARGED_DELAY_MS
17908          * @hide
17909          */
17910         @Readable
17911         public static final String BATTERY_CHARGING_STATE_UPDATE_DELAY =
17912                 "battery_charging_state_update_delay";
17913 
17914         /**
17915          * A serialized string of params that will be loaded into a text classifier action model.
17916          *
17917          * @hide
17918          */
17919         @Readable
17920         public static final String TEXT_CLASSIFIER_ACTION_MODEL_PARAMS =
17921                 "text_classifier_action_model_params";
17922 
17923         /**
17924          * The amount of time to suppress "power-off" from the power button after the device has
17925          * woken due to a gesture (lifting the phone).  Since users have learned to hit the power
17926          * button immediately when lifting their device, it can cause the device to turn off if a
17927          * gesture has just woken the device. This value tells us the milliseconds to wait after
17928          * a gesture before "power-off" via power-button is functional again. A value of 0 is no
17929          * delay, and reverts to the old behavior.
17930          *
17931          * @hide
17932          */
17933         @Readable
17934         public static final String POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE =
17935                 "power_button_suppression_delay_after_gesture_wake";
17936 
17937         /**
17938          * The usage amount of advanced battery. The value is 0~100.
17939          *
17940          * @hide
17941          */
17942         @Readable
17943         public static final String ADVANCED_BATTERY_USAGE_AMOUNT = "advanced_battery_usage_amount";
17944 
17945         /**
17946          * For 5G NSA capable devices, determines whether NR tracking indications are on
17947          * when the screen is off.
17948          *
17949          * Values are:
17950          * 0: off - All 5G NSA tracking indications are off when the screen is off.
17951          * 1: extended - All 5G NSA tracking indications are on when the screen is off as long as
17952          *    the device is camped on 5G NSA (5G icon is showing in status bar).
17953          *    If the device is not camped on 5G NSA, tracking indications are off.
17954          * 2: always on - All 5G NSA tracking indications are on whether the screen is on or off.
17955          * @hide
17956          */
17957         @Readable
17958         public static final String NR_NSA_TRACKING_SCREEN_OFF_MODE =
17959                 "nr_nsa_tracking_screen_off_mode";
17960 
17961         /**
17962          * Whether to show People Space.
17963          * Values are:
17964          * 0: Disabled (default)
17965          * 1: Enabled
17966          * @hide
17967          */
17968         public static final String SHOW_PEOPLE_SPACE = "show_people_space";
17969 
17970         /**
17971          * Which types of conversation(s) to show in People Space.
17972          * Values are:
17973          * 0: Single user-selected conversation (default)
17974          * 1: Priority conversations only
17975          * 2: All conversations
17976          * @hide
17977          */
17978         public static final String PEOPLE_SPACE_CONVERSATION_TYPE =
17979                 "people_space_conversation_type";
17980 
17981         /**
17982          * Whether to show new notification dismissal.
17983          * Values are:
17984          * 0: Disabled
17985          * 1: Enabled
17986          * @hide
17987          */
17988         public static final String SHOW_NEW_NOTIF_DISMISS = "show_new_notif_dismiss";
17989 
17990         /**
17991          * The maximum allowed obscuring opacity by UID to propagate touches.
17992          *
17993          * For certain window types (eg. SAWs), the decision of honoring {@link LayoutParams
17994          * #FLAG_NOT_TOUCHABLE} or not depends on the combined obscuring opacity of the windows
17995          * above the touch-consuming window.
17996          *
17997          * For a certain UID:
17998          * <ul>
17999          *     <li>If it's the same as the UID of the touch-consuming window, allow it to propagate
18000          *     the touch.
18001          *     <li>Otherwise take all its windows of eligible window types above the touch-consuming
18002          *     window, compute their combined obscuring opacity considering that {@code
18003          *     opacity(A, B) = 1 - (1 - opacity(A))*(1 - opacity(B))}. If the computed value is
18004          *     lesser than or equal to this setting and there are no other windows preventing the
18005          *     touch, allow the UID to propagate the touch.
18006          * </ul>
18007          *
18008          * @see android.hardware.input.InputManager#getMaximumObscuringOpacityForTouch()
18009          * @see android.hardware.input.InputManager#setMaximumObscuringOpacityForTouch(float)
18010          *
18011          * @hide
18012          */
18013         @Readable
18014         public static final String MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH =
18015                 "maximum_obscuring_opacity_for_touch";
18016 
18017         /**
18018          * Used to enable / disable the Restricted Networking Mode in which network access is
18019          * restricted to apps holding the CONNECTIVITY_USE_RESTRICTED_NETWORKS permission.
18020          *
18021          * Values are:
18022          * 0: disabled
18023          * 1: enabled
18024          * @hide
18025          */
18026         public static final String RESTRICTED_NETWORKING_MODE = "restricted_networking_mode";
18027 
18028         /**
18029          * Setting indicating whether Low Power Standby is enabled, if supported.
18030          *
18031          * Values are:
18032          * 0: disabled
18033          * 1: enabled
18034          *
18035          * @hide
18036          */
18037         public static final String LOW_POWER_STANDBY_ENABLED = "low_power_standby_enabled";
18038 
18039         /**
18040          * Setting indicating whether Low Power Standby is allowed to be active during doze
18041          * maintenance mode.
18042          *
18043          * Values are:
18044          * 0: Low Power Standby will be disabled during doze maintenance mode
18045          * 1: Low Power Standby can be active during doze maintenance mode
18046          *
18047          * @hide
18048          */
18049         public static final String LOW_POWER_STANDBY_ACTIVE_DURING_MAINTENANCE =
18050                 "low_power_standby_active_during_maintenance";
18051 
18052         /**
18053          * Timeout for the system server watchdog.
18054          *
18055          * @see {@link com.android.server.Watchdog}.
18056          *
18057          * @hide
18058          */
18059         public static final String WATCHDOG_TIMEOUT_MILLIS =
18060                 "system_server_watchdog_timeout_ms";
18061 
18062         /**
18063          * Whether to enable managed device provisioning via the role holder.
18064          *
18065          * @hide
18066          */
18067         public static final String MANAGED_PROVISIONING_DEFER_PROVISIONING_TO_ROLE_HOLDER =
18068                 "managed_provisioning_defer_provisioning_to_role_holder";
18069 
18070         /**
18071          * State of whether review notification permissions notification needs to
18072          * be shown the user, and whether the user has interacted.
18073          *
18074          * Valid values:
18075          *   -1 = UNKNOWN
18076          *    0 = SHOULD_SHOW
18077          *    1 = USER_INTERACTED
18078          *    2 = DISMISSED
18079          *    3 = RESHOWN
18080          * @hide
18081          */
18082         public static final String REVIEW_PERMISSIONS_NOTIFICATION_STATE =
18083                 "review_permissions_notification_state";
18084 
18085         /**
18086          * Whether repair mode is active on the device.
18087          * <p>
18088          * Set to 1 for true and 0 for false.
18089          *
18090          * @hide
18091          */
18092         public static final String REPAIR_MODE_ACTIVE = "repair_mode_active";
18093 
18094         /**
18095          * Settings migrated from Wear OS settings provider.
18096          * @hide
18097          */
18098         public static class Wearable {
18099             /**
18100              * Whether the user has any pay tokens on their watch.
18101              * @hide
18102              */
18103             public static final String HAS_PAY_TOKENS = "has_pay_tokens";
18104 
18105             /**
18106              * Gcm checkin timeout in minutes.
18107              * @hide
18108              */
18109             public static final String GMS_CHECKIN_TIMEOUT_MIN = "gms_checkin_timeout_min";
18110 
18111             /**
18112              * If hotword detection should be enabled.
18113              * @hide
18114              */
18115             public static final String HOTWORD_DETECTION_ENABLED = "hotword_detection_enabled";
18116 
18117             /**
18118              * Whether Smart Replies are enabled within Wear.
18119              * @hide
18120              */
18121             public static final String SMART_REPLIES_ENABLED = "smart_replies_enabled";
18122 
18123             /**
18124              * The default vibration pattern.
18125              * @hide
18126              */
18127             public static final String DEFAULT_VIBRATION = "default_vibration";
18128 
18129             /**
18130              * If FLP should obtain location data from the paired device.
18131              * @hide
18132              */
18133             public static final String OBTAIN_PAIRED_DEVICE_LOCATION =
18134                     "obtain_paired_device_location";
18135 
18136             /**
18137              * The play store availability on companion phone.
18138              * @hide
18139              */
18140             public static final String PHONE_PLAY_STORE_AVAILABILITY =
18141                     "phone_play_store_availability";
18142 
18143             // Possible phone play store availability states
18144             /** @hide */
18145             public static final int PHONE_PLAY_STORE_AVAILABILITY_UNKNOWN = 0;
18146             /** @hide */
18147             public static final int PHONE_PLAY_STORE_AVAILABLE = 1;
18148             /** @hide */
18149             public static final int PHONE_PLAY_STORE_UNAVAILABLE = 2;
18150 
18151             /**
18152              * Whether the bug report is enabled.
18153              * @hide
18154              */
18155             public static final String BUG_REPORT = "bug_report";
18156 
18157             // Possible bug report states
18158             /** @hide */
18159             public static final int BUG_REPORT_DISABLED = 0;
18160             /** @hide */
18161             public static final int BUG_REPORT_ENABLED = 1;
18162 
18163             /**
18164              * The enabled/disabled state of the SmartIlluminate.
18165              * @hide
18166              */
18167             public static final String SMART_ILLUMINATE_ENABLED = "smart_illuminate_enabled";
18168 
18169             /**
18170              * Whether automatic time is enabled on the watch.
18171              * @hide
18172              */
18173             public static final String CLOCKWORK_AUTO_TIME = "clockwork_auto_time";
18174 
18175             // Possible clockwork auto time states
18176             /** @hide */
18177             public static final int SYNC_TIME_FROM_PHONE = 0;
18178             /** @hide */
18179             public static final int SYNC_TIME_FROM_NETWORK = 1;
18180             /** @hide */
18181             public static final int AUTO_TIME_OFF = 2;
18182             /** @hide */
18183             public static final int INVALID_AUTO_TIME_STATE = 3;
18184 
18185 
18186             /**
18187              * Whether automatic time zone is enabled on the watch.
18188              * @hide
18189              */
18190             public static final String CLOCKWORK_AUTO_TIME_ZONE = "clockwork_auto_time_zone";
18191 
18192             // Possible clockwork auto time zone states
18193             /** @hide */
18194             public static final int SYNC_TIME_ZONE_FROM_PHONE = 0;
18195             /** @hide */
18196             public static final int SYNC_TIME_ZONE_FROM_NETWORK = 1;
18197             /** @hide */
18198             public static final int AUTO_TIME_ZONE_OFF = 2;
18199             /** @hide */
18200             public static final int INVALID_AUTO_TIME_ZONE_STATE = 3;
18201 
18202             /**
18203              * Whether 24 hour time format is enabled on the watch.
18204              * @hide
18205              */
18206             public static final String CLOCKWORK_24HR_TIME = "clockwork_24hr_time";
18207 
18208             /**
18209              * Whether the auto wifi toggle setting is enabled.
18210              * @hide
18211              */
18212             public static final String AUTO_WIFI = "auto_wifi";
18213 
18214             // Possible force wifi on states
18215             /** @hide */
18216             public static final int AUTO_WIFI_DISABLED = 0;
18217             /** @hide */
18218             public static final int AUTO_WIFI_ENABLED = 1;
18219 
18220             /**
18221              * The number of minutes after the WiFi enters power save mode.
18222              * @hide
18223              */
18224             public static final String WIFI_POWER_SAVE = "wifi_power_save";
18225 
18226             /**
18227              * The time at which we should no longer skip the wifi requirement check (we skip the
18228              * wifi requirement until this time). The time is in millis since epoch.
18229              * @hide
18230              */
18231             public static final String ALT_BYPASS_WIFI_REQUIREMENT_TIME_MILLIS =
18232                     "alt_bypass_wifi_requirement_time_millis";
18233 
18234             /**
18235              * Whether the setup was skipped.
18236              * @hide
18237              */
18238             public static final String SETUP_SKIPPED = "setup_skipped";
18239 
18240             // Possible setup_skipped states
18241             /** @hide */
18242             public static final int SETUP_SKIPPED_UNKNOWN = 0;
18243             /** @hide */
18244             public static final int SETUP_SKIPPED_YES = 1;
18245             /** @hide */
18246             public static final int SETUP_SKIPPED_NO = 2;
18247 
18248             /**
18249              * The last requested call forwarding action.
18250              * @hide
18251              */
18252             public static final String LAST_CALL_FORWARD_ACTION = "last_call_forward_action";
18253 
18254             // Possible call forwarding actions
18255             /** @hide */
18256             public static final int CALL_FORWARD_ACTION_ON = 1;
18257             /** @hide */
18258             public static final int CALL_FORWARD_ACTION_OFF = 2;
18259             /** @hide */
18260             public static final int CALL_FORWARD_NO_LAST_ACTION = -1;
18261 
18262             // Stem button settings.
18263             /** @hide */
18264             public static final String STEM_1_TYPE = "STEM_1_TYPE";
18265             /** @hide */
18266             public static final String STEM_1_DATA = "STEM_1_DATA";
18267             /** @hide */
18268             public static final String STEM_1_DEFAULT_DATA = "STEM_1_DEFAULT_DATA";
18269             /** @hide */
18270             public static final String STEM_2_TYPE = "STEM_2_TYPE";
18271             /** @hide */
18272             public static final String STEM_2_DATA = "STEM_2_DATA";
18273             /** @hide */
18274             public static final String STEM_2_DEFAULT_DATA = "STEM_2_DEFAULT_DATA";
18275             /** @hide */
18276             public static final String STEM_3_TYPE = "STEM_3_TYPE";
18277             /** @hide */
18278             public static final String STEM_3_DATA = "STEM_3_DATA";
18279             /** @hide */
18280             public static final String STEM_3_DEFAULT_DATA = "STEM_3_DEFAULT_DATA";
18281 
18282             // Stem types
18283             /** @hide */
18284             public static final int STEM_TYPE_UNKNOWN = -1;
18285             /** @hide */
18286             public static final int STEM_TYPE_APP_LAUNCH = 0;
18287             /** @hide */
18288             public static final int STEM_TYPE_CONTACT_LAUNCH = 1;
18289 
18290             /**
18291              * If the device should be muted when off body.
18292              * @hide
18293              */
18294             public static final String MUTE_WHEN_OFF_BODY_ENABLED = "obtain_mute_when_off_body";
18295 
18296             /**
18297              * Wear OS version string.
18298              * @hide
18299              */
18300             public static final String WEAR_OS_VERSION_STRING = "wear_os_version_string";
18301 
18302             /**
18303              * Whether there is a side button.
18304              * @hide
18305              */
18306             public static final String SIDE_BUTTON = "side_button";
18307 
18308             /**
18309              * The android wear system version.
18310              * @hide
18311              */
18312             public static final String ANDROID_WEAR_VERSION = "android_wear_version";
18313 
18314             /**
18315              * The wear system capabiltiies.
18316              * @hide
18317              */
18318             public static final String SYSTEM_CAPABILITIES = "system_capabilities";
18319 
18320             /**
18321              * The android wear system edition.
18322              * @hide
18323              */
18324             public static final String SYSTEM_EDITION = "android_wear_system_edition";
18325 
18326             /**
18327              * The Wear platform MR number.
18328              * @hide
18329              */
18330             public static final String WEAR_PLATFORM_MR_NUMBER = "wear_platform_mr_number";
18331 
18332             /**
18333              * The mobile signal detector setting.
18334              * @hide
18335              */
18336             public static final String MOBILE_SIGNAL_DETECTOR = "mobile_signal_detector";
18337 
18338 
18339             /**
18340              * Whether ambient is currently enabled.
18341              * @hide
18342              */
18343             public static final String AMBIENT_ENABLED = "ambient_enabled";
18344 
18345             /**
18346              * Whether ambient tilt to wake is enabled.
18347              * @hide
18348              */
18349             public static final String AMBIENT_TILT_TO_WAKE = "ambient_tilt_to_wake";
18350 
18351             /**
18352              * Whether ambient low bit mode is enabled by developer options.
18353              * @hide
18354              */
18355             public static final String AMBIENT_LOW_BIT_ENABLED_DEV = "ambient_low_bit_enabled_dev";
18356 
18357             /**
18358              * Whether ambient touch to wake is enabled.
18359              * @hide
18360              */
18361             public static final String AMBIENT_TOUCH_TO_WAKE = "ambient_touch_to_wake";
18362 
18363             /**
18364              * Whether ambient tilt to bright is enabled.
18365              * @hide
18366              */
18367             public static final String AMBIENT_TILT_TO_BRIGHT = "ambient_tilt_to_bright";
18368 
18369             /**
18370              * Whether touch and hold to edit WF is enabled
18371              * @hide
18372              */
18373             public static final String GESTURE_TOUCH_AND_HOLD_WATCH_FACE_ENABLED =
18374                     "gesture_touch_and_hold_watchface_enabled";
18375 
18376             /**
18377              * Whether screenshot is enabled.
18378              * @hide
18379              */
18380             public static final String SCREENSHOT_ENABLED = "screenshot_enabled";
18381 
18382             /**
18383              * Whether bedtime mode is enabled.
18384              * @hide
18385              */
18386             public static final String BEDTIME_MODE = "bedtime_mode";
18387 
18388             /**
18389              * Whether hard bedtime mode is active thus limiting user interactions.
18390              */
18391             public static final String BEDTIME_HARD_MODE = "bedtime_hard_mode";
18392 
18393             /**
18394              * Whether the current watchface is decomposable.
18395              * @hide
18396              */
18397             public static final String DECOMPOSABLE_WATCHFACE = "current_watchface_decomposable";
18398 
18399             /**
18400              * Whether to force ambient when docked.
18401              * @hide
18402              */
18403             public static final String AMBIENT_FORCE_WHEN_DOCKED = "ambient_force_when_docked";
18404 
18405             /**
18406              * Whether the ambient low bit mode is enabled.
18407              * @hide
18408              */
18409             public static final String AMBIENT_LOW_BIT_ENABLED = "ambient_low_bit_enabled";
18410 
18411             /**
18412              * The timeout duration in minutes of ambient mode when plugged in.
18413              * @hide
18414              */
18415             public static final String AMBIENT_PLUGGED_TIMEOUT_MIN = "ambient_plugged_timeout_min";
18416 
18417             /**
18418              * What OS does paired device has.
18419              * @hide
18420              */
18421             public static final String PAIRED_DEVICE_OS_TYPE = "paired_device_os_type";
18422 
18423             // Possible values of PAIRED_DEVICE_OS_TYPE
18424             /** @hide */
18425             public static final int PAIRED_DEVICE_OS_TYPE_UNKNOWN = 0;
18426             /** @hide */
18427             public static final int PAIRED_DEVICE_OS_TYPE_ANDROID = 1;
18428             /** @hide */
18429             public static final int PAIRED_DEVICE_OS_TYPE_IOS = 2;
18430 
18431             /**
18432              * The bluetooth settings selected BLE role for the companion.
18433              * @hide
18434              */
18435             public static final String COMPANION_BLE_ROLE = "companion_ble_role";
18436 
18437             // Possible values of COMPANION_BLE_ROLE
18438             /** @hide */
18439             public static final int BLUETOOTH_ROLE_CENTRAL = 1;
18440             /** @hide */
18441             public static final int BLUETOOTH_ROLE_PERIPHERAL = 2;
18442 
18443             /**
18444              * The bluetooth settings stored companion device name.
18445              * @hide
18446              */
18447             public static final String COMPANION_NAME = "companion_bt_name";
18448 
18449             /**
18450              * The user's last setting for hfp client.
18451              * @hide
18452              */
18453             public static final String USER_HFP_CLIENT_SETTING = "user_hfp_client_setting";
18454 
18455             // Possible hfp client user setting values
18456             /** @hide */
18457             public static final int HFP_CLIENT_UNSET = 0;
18458             /** @hide */
18459             public static final int HFP_CLIENT_ENABLED = 1;
18460             /** @hide */
18461             public static final int HFP_CLIENT_DISABLED = 2;
18462 
18463             /**
18464              * The companion phone's android version.
18465              * @hide
18466              */
18467             public static final String COMPANION_OS_VERSION = "wear_companion_os_version";
18468 
18469             // Companion os version constants
18470             /** @hide */
18471             public static final int COMPANION_OS_VERSION_UNDEFINED = -1;
18472 
18473             /**
18474              * The companion App name.
18475              * @hide
18476              */
18477             public static final String COMPANION_APP_NAME = "wear_companion_app_name";
18478 
18479             /**
18480              * A boolean value to indicate if we want to support all languages in LE edition on
18481              * wear. 1 for supporting, 0 for not supporting.
18482              * @hide
18483              */
18484             public static final String ENABLE_ALL_LANGUAGES = "enable_all_languages";
18485 
18486             /**
18487              * The Locale (as language tag) the user chose at startup.
18488              * @hide
18489              */
18490             public static final String SETUP_LOCALE = "setup_locale";
18491 
18492             /**
18493              * The version of oem setup present.
18494              * @hide
18495              */
18496             public static final String OEM_SETUP_VERSION = "oem_setup_version";
18497 
18498             /**
18499              * The key to indicate to Setup Wizard if OEM setup is completed in Wear Services.
18500              * @hide
18501              */
18502             public static final String OEM_SETUP_COMPLETED_STATUS = "oem_setup_completed_status";
18503 
18504              /**
18505               * Constant provided to Setup Wizard to inform about failure of OEM setup in Wear
18506               * Services. The value should be provided with setting name {@link
18507               * #OEM_SETUP_COMPLETED_STATUS}.
18508               * @hide
18509               */
18510             public static final int OEM_SETUP_COMPLETED_FAILURE = 0;
18511 
18512             /**
18513              * Constant provided to Setup Wizard to inform about successful completion of OEM setup
18514              * in Wear Services. The value should be provided with setting name {@link
18515              * #OEM_SETUP_COMPLETED_STATUS}.
18516              * @hide
18517              */
18518             public static final int OEM_SETUP_COMPLETED_SUCCESS = 1;
18519 
18520             /**
18521              * Controls the gestures feature.
18522              * @hide
18523              */
18524             public static final String MASTER_GESTURES_ENABLED = "master_gestures_enabled";
18525 
18526             /**
18527              * Whether or not ungaze is enabled.
18528              * @hide
18529              */
18530             public static final String UNGAZE_ENABLED = "ungaze_enabled";
18531 
18532             /**
18533              * The device's battery saver mode, which can be one of the following:
18534              * -{@link BATTERY_SAVER_MODE_NONE}
18535              * -{@link BATTERY_SAVER_MODE_LIGHT}
18536              * -{@link BATTERY_SAVER_MODE_TRADITIONAL_WATCH}
18537              * -{@link BATTERY_SAVER_MODE_TIME_ONLY}
18538              * -{@link BATTERY_SAVER_MODE_CUSTOM}
18539              * @hide
18540              */
18541             public static final String BATTERY_SAVER_MODE = "battery_saver_mode";
18542 
18543             /**
18544              * Not in Battery Saver Mode
18545              * @hide
18546              */
18547             public static final int BATTERY_SAVER_MODE_NONE = 0;
18548             /**
18549              * In Lightweight Battery Saver Mode
18550              * @hide
18551              */
18552             public static final int BATTERY_SAVER_MODE_LIGHT = 1;
18553             /**
18554              * In Traditional Watch Mode Battery Saver Mode
18555              * @hide
18556              */
18557             public static final int BATTERY_SAVER_MODE_TRADITIONAL_WATCH = 2;
18558             /**
18559              * In Time-only Mode Battery Saver Mode
18560              * @hide
18561              */
18562             public static final int BATTERY_SAVER_MODE_TIME_ONLY = 3;
18563             /**
18564              * Partner's Battery Saver implementation is being used
18565              * @hide
18566              */
18567             public static final int BATTERY_SAVER_MODE_CUSTOM = 4;
18568 
18569             /**
18570              * The maximum ambient mode duration when an activity is allowed to auto resume.
18571              * @hide
18572              */
18573             public static final String WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_MS =
18574                     "wear_activity_auto_resume_timeout_ms";
18575 
18576             /**
18577              * If the current {@code WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_MS} value is set by user.
18578              * 1 for true, 0 for false.
18579              * @hide
18580              */
18581             public static final String WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_SET_BY_USER =
18582                     "wear_activity_auto_resume_timeout_set_by_user";
18583 
18584             /**
18585              * If burn in protection is enabled.
18586              * @hide
18587              */
18588             public static final String BURN_IN_PROTECTION_ENABLED = "burn_in_protection";
18589 
18590             /**
18591              * Whether the device has combined location setting enabled.
18592              *
18593              * @deprecated Use LocationManager as the source of truth for all location states.
18594              *
18595              * @hide
18596              */
18597             @Deprecated
18598             public static final String COMBINED_LOCATION_ENABLED = "combined_location_enable";
18599 
18600             /**
18601              * The wrist orientation mode of the device
18602              * Valid values - LEFT_WRIST_ROTATION_0 = "0" (default), LEFT_WRIST_ROTATION_180 = "1",
18603              *          RIGHT_WRIST_ROTATION_0 = "2", RIGHT_WRIST_ROTATION_180 = "3"
18604              * @hide
18605              */
18606             public static final String WRIST_ORIENTATION_MODE = "wear_wrist_orientation_mode";
18607 
18608             /**
18609              * Current lock screen state of the device
18610              * (null = default value of this setting (lockscreen is never set),
18611              * 0 = {@link #LOCK_SCREEN_STATE_NONE},
18612              * 1 = {@link #LOCK_SCREEN_STATE_PIN},
18613              * 2 = {@link #LOCK_SCREEN_STATE_PATTERN})
18614              * @hide
18615              */
18616             public static final String LOCK_SCREEN_STATE = "lock_screen_state";
18617 
18618             /**
18619              * No lock screen set
18620              * One of the possible states for {@link #LOCK_SCREEN_STATE}.
18621              * @hide
18622              */
18623             public static final int LOCK_SCREEN_STATE_NONE = 0;
18624 
18625             /**
18626              * Lock screen set as a pin
18627              * One of the possible states for {@link #LOCK_SCREEN_STATE}.
18628              * @hide
18629              */
18630             public static final int LOCK_SCREEN_STATE_PIN = 1;
18631 
18632             /**
18633              * Lock screen set as a pattern
18634              * One of the possible states for {@link #LOCK_SCREEN_STATE}.
18635              * @hide
18636              */
18637             public static final int LOCK_SCREEN_STATE_PATTERN = 2;
18638 
18639             /**
18640              * Setting indicating the name of the Wear OS app package containing the device's sysui.
18641              *
18642              * @hide
18643              */
18644             public static final String CLOCKWORK_SYSUI_PACKAGE = "clockwork_sysui_package";
18645 
18646             /**
18647              * Setting indicating the name of the main activity of the Wear OS sysui.
18648              *
18649              * @hide
18650              */
18651             public static final String CLOCKWORK_SYSUI_MAIN_ACTIVITY =
18652                     "clockwork_sysui_main_activity";
18653 
18654             /**
18655              * Setting to disable power button long press launching Assistant. It's boolean, i.e.
18656              * enabled = 1, disabled = 0. By default, this setting is enabled.
18657              *
18658              * @hide
18659              */
18660             public static final String CLOCKWORK_LONG_PRESS_TO_ASSISTANT_ENABLED =
18661                     "clockwork_long_press_to_assistant_enabled";
18662 
18663             /**
18664              * Whether the device has Cooldown Mode enabled.
18665              * @hide
18666              */
18667             public static final String COOLDOWN_MODE_ON = "cooldown_mode_on";
18668 
18669             /**
18670              * Whether the device has Wet Mode/ Touch Lock Mode enabled.
18671              * @hide
18672              */
18673             public static final String WET_MODE_ON = "wet_mode_on";
18674 
18675             /**
18676              * Whether the RSB wake feature is enabled.
18677              * @hide
18678              */
18679             public static final String RSB_WAKE_ENABLED = "rsb_wake_enabled";
18680 
18681             /**
18682              * Whether the screen-unlock (keyguard) sound is enabled.
18683              * @hide
18684              */
18685             public static final String SCREEN_UNLOCK_SOUND_ENABLED = "screen_unlock_sound_enabled";
18686 
18687             /**
18688              * Whether charging sounds are enabled.
18689              * @hide
18690              */
18691             public static final String CHARGING_SOUNDS_ENABLED = "wear_charging_sounds_enabled";
18692 
18693             /**
18694              * Whether dynamic color theming (e.g. Material You) is enabled for apps which support
18695              * it.
18696              *
18697              * @hide
18698              */
18699             public static final String DYNAMIC_COLOR_THEME_ENABLED = "dynamic_color_theme_enabled";
18700 
18701             /**
18702              * Current state of accessibility vibration watch feature
18703              * (0 = false, 1 = true)
18704              *
18705              * @hide
18706              */
18707             public static final String ACCESSIBILITY_VIBRATION_WATCH_ENABLED =
18708                     "a11y_vibration_watch_enabled";
18709 
18710             /**
18711              * Stores current type of accessibility vibration
18712              * (0 = {@link #ACCESSIBILITY_VIBRATION_WATCH_TYPE_DIGIT},
18713              * 1 = {@link #ACCESSIBILITY_VIBRATION_WATCH_TYPE_TERSE)
18714              *
18715              * @hide
18716              */
18717             public static final String ACCESSIBILITY_VIBRATION_WATCH_TYPE =
18718                     "a11y_vibration_watch_type";
18719 
18720             /**
18721              * Vibration watch type digit
18722              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_TYPE}.
18723              *
18724              * @hide
18725              */
18726             public static final int ACCESSIBILITY_VIBRATION_WATCH_TYPE_DIGIT = 0;
18727 
18728             /**
18729              * Vibration watch type terse
18730              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_TYPE}.
18731              *
18732              * @hide
18733              */
18734             public static final int ACCESSIBILITY_VIBRATION_WATCH_TYPE_TERSE = 1;
18735 
18736             /**
18737              * Stores current accessibility vibration watch speed
18738              * (0 = {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_SLOW},
18739              * 1 = {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED_SLOW},
18740              * 2 = {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED_MEDIUM},
18741              * 3 = {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED_FAST},
18742              * 4 = {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_FAST})
18743              */
18744             public static final String ACCESSIBILITY_VIBRATION_WATCH_SPEED = "vibration_speed";
18745 
18746             /**
18747              * Vibration watch speed type very slow
18748              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED}.
18749              *
18750              * @hide
18751              */
18752             public static final int ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_SLOW = 0;
18753 
18754             /**
18755              * Vibration watch speed type slow
18756              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED}.
18757              *
18758              * @hide
18759              */
18760             public static final int ACCESSIBILITY_VIBRATION_WATCH_SPEED_SLOW = 1;
18761 
18762             /**
18763              * Vibration watch speed type medium
18764              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED}.
18765              *
18766              * @hide
18767              */
18768             public static final int ACCESSIBILITY_VIBRATION_WATCH_SPEED_MEDIUM = 2;
18769 
18770             /**
18771              * Vibration watch speed type fast
18772              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED}.
18773              *
18774              * @hide
18775              */
18776             public static final int ACCESSIBILITY_VIBRATION_WATCH_SPEED_FAST = 3;
18777 
18778             /**
18779              * Vibration watch speed type very fast
18780              * One of the possible states for {@link #ACCESSIBILITY_VIBRATION_WATCH_SPEED}.
18781              *
18782              * @hide
18783              */
18784             public static final int ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_FAST = 4;
18785 
18786             /**
18787              * The key to indicate the data migration status on device upgrade in Wear Services.
18788              * @hide
18789              */
18790             public static final String UPGRADE_DATA_MIGRATION_STATUS =
18791                     "upgrade_data_migration_status";
18792 
18793             /**
18794              * Constant indicating that the data migration is not needed.
18795              *
18796              * The value should be provided with setting name {@link
18797              * #UPGRADE_DATA_MIGRATION_STATUS}.
18798              * @hide
18799              */
18800             public static final int UPGRADE_DATA_MIGRATION_NOT_NEEDED = 0;
18801 
18802             /**
18803              * Constant indicating that the data migration is not yet finished.
18804              *
18805              * The value should be provided with setting name {@link
18806              * #UPGRADE_DATA_MIGRATION_STATUS}.
18807              * @hide
18808              */
18809             public static final int UPGRADE_DATA_MIGRATION_PENDING = 1;
18810 
18811             /**
18812              * Constant indicating that the data migration is finished.
18813              *
18814              * The value should be provided with setting name {@link
18815              * #UPGRADE_DATA_MIGRATION_STATUS}.
18816              * @hide
18817              */
18818             public static final int UPGRADE_DATA_MIGRATION_DONE = 2;
18819 
18820             /**
18821              * Whether to disable AOD while plugged.
18822              * (0 = false, 1 = true)
18823              * @hide
18824              */
18825             public static final String DISABLE_AOD_WHILE_PLUGGED = "disable_aod_while_plugged";
18826 
18827             /**
18828              * Whether the user has consented for network location provider (NLP).
18829              * This setting key will only be used once during OOBE to set NLP initial value through
18830              * the companion app ToS. This setting key will be synced over from Companion and
18831              * corresponding toggle in GMS will be enabled.
18832              * @hide
18833              */
18834             public static final String NETWORK_LOCATION_OPT_IN = "network_location_opt_in";
18835 
18836             /**
18837              * The custom foreground color.
18838              * @hide
18839              */
18840             public static final String CUSTOM_COLOR_FOREGROUND = "custom_foreground_color";
18841 
18842             /**
18843              * The custom background color.
18844              * @hide
18845              */
18846             public static final String CUSTOM_COLOR_BACKGROUND = "custom_background_color";
18847 
18848             /** The status of the phone switching process.
18849              * @hide
18850              */
18851             public static final String PHONE_SWITCHING_STATUS = "phone_switching_status";
18852 
18853             /**
18854              * Phone switching not started
18855              * @hide
18856              */
18857             public static final int PHONE_SWITCHING_STATUS_NOT_STARTED = 0;
18858 
18859             /**
18860              * Phone switching started
18861              * @hide
18862              */
18863             public static final int PHONE_SWITCHING_STATUS_STARTED = 1;
18864 
18865             /**
18866              * Phone switching completed and was successful
18867              * @hide
18868              */
18869             public static final int PHONE_SWITCHING_STATUS_SUCCESS = 2;
18870 
18871             /**
18872              * Phone switching was cancelled
18873              * @hide
18874              */
18875             public static final int PHONE_SWITCHING_STATUS_CANCELLED = 3;
18876 
18877             /**
18878              * Phone switching failed
18879              * @hide
18880              */
18881             public static final int PHONE_SWITCHING_STATUS_FAILED = 4;
18882 
18883             /**
18884              * Phone switching is in progress of advertising to new companion device.
18885              * @hide
18886              */
18887             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_ADVERTISING = 5;
18888 
18889             /**
18890              * Phone switching successfully bonded with new companion device.
18891              * @hide
18892              */
18893             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_BONDED = 6;
18894 
18895             /**
18896              * Phone switching successfully completed on phone side.
18897              * @hide
18898              */
18899             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_PHONE_COMPLETE = 7;
18900 
18901             /**
18902              * Connection config migration in progress.
18903              * @hide
18904              */
18905             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION = 8;
18906 
18907             /**
18908              * Connection config migration failed.
18909              * @hide
18910              */
18911             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION_FAILED = 9;
18912 
18913             /**
18914              * Connection config migration cancellation in progress.
18915              * @hide
18916              */
18917             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION_CANCELLED = 10;
18918 
18919             /**
18920              * Connection config migration success.
18921              * @hide
18922              */
18923             public static final int PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION_SUCCESS = 11;
18924 
18925 
18926             /**
18927              * Whether the device has enabled the feature to reduce motion and animation
18928              * (0 = false, 1 = true)
18929              * @hide
18930              */
18931             public static final String REDUCE_MOTION = "reduce_motion";
18932 
18933             /**
18934              * Whether RTL swipe-to-dismiss is enabled by developer options.
18935              * (0 = false, 1 = true)
18936              * @hide
18937              */
18938             public static final String RTL_SWIPE_TO_DISMISS_ENABLED_DEV =
18939                     "rtl_swipe_to_dismiss_enabled_dev";
18940 
18941             /**
18942              * Tethered Configuration state.
18943              * @hide
18944              */
18945             public static final String TETHER_CONFIG_STATE = "tethered_config_state";
18946 
18947             /**
18948              * Tethered configuration state is unknown.
18949              * @hide
18950              */
18951             public static final int TETHERED_CONFIG_UNKNOWN = 0;
18952 
18953             /**
18954              * Device is set into standalone mode.
18955              * @hide
18956              */
18957             public static final int TETHERED_CONFIG_STANDALONE = 1;
18958 
18959             /**
18960              * Device is set in tethered mode.
18961              * @hide
18962              */
18963             public static final int TETHERED_CONFIG_TETHERED = 2;
18964 
18965 
18966             /**
18967              * Whether phone switching is supported.
18968              *
18969              * (0 = false, 1 = true)
18970              * @hide
18971              */
18972             public static final String PHONE_SWITCHING_SUPPORTED = "phone_switching_supported";
18973 
18974             /**
18975              * Setting indicating the name of the Wear OS package that hosts the Media Controls UI.
18976              *
18977              * @hide
18978              */
18979             public static final String WEAR_MEDIA_CONTROLS_PACKAGE = "wear_media_controls_package";
18980 
18981             /**
18982              * Setting indicating the name of the Wear OS package responsible for bridging media.
18983              *
18984              * @hide
18985              */
18986             public static final String WEAR_MEDIA_SESSIONS_PACKAGE = "wear_media_sessions_package";
18987         }
18988     }
18989 
18990     /**
18991      * Configuration system settings, containing settings which are applied identically for all
18992      * defined users. Only Android can read these and only a specific configuration service can
18993      * write these.
18994      *
18995      * @hide
18996      */
18997     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
18998     public static final class Config extends NameValueTable {
18999 
19000         /**
19001          * The modes that can be used when disabling syncs to the 'config' settings.
19002          * @hide
19003          */
19004         @IntDef(prefix = "SYNC_DISABLED_MODE_",
19005                 value = { SYNC_DISABLED_MODE_NONE, SYNC_DISABLED_MODE_PERSISTENT,
19006                         SYNC_DISABLED_MODE_UNTIL_REBOOT })
19007         @Retention(RetentionPolicy.SOURCE)
19008         @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
19009         public @interface SyncDisabledMode {}
19010 
19011         /**
19012          * Sync is not disabled.
19013          *
19014          * @deprecated use the constant in DeviceConfig
19015          *
19016          * @hide
19017          */
19018         @Deprecated
19019         public static final int SYNC_DISABLED_MODE_NONE = DeviceConfig.SYNC_DISABLED_MODE_NONE;
19020 
19021         /**
19022          * Disabling of Config bulk update / syncing is persistent, i.e. it survives a device
19023          * reboot.
19024          *
19025          * @deprecated use the constant in DeviceConfig
19026          *
19027          * @hide
19028          */
19029         @Deprecated
19030         public static final int SYNC_DISABLED_MODE_PERSISTENT =
19031                 DeviceConfig.SYNC_DISABLED_MODE_PERSISTENT;
19032 
19033         /**
19034          * Disabling of Config bulk update / syncing is not persistent, i.e. it will not survive a
19035          * device reboot.
19036          *
19037          * @deprecated use the constant in DeviceConfig
19038          *
19039          * @hide
19040          */
19041         @Deprecated
19042         public static final int SYNC_DISABLED_MODE_UNTIL_REBOOT =
19043                 DeviceConfig.SYNC_DISABLED_MODE_UNTIL_REBOOT;
19044 
19045         /**
19046          * The content:// style URL for the config table.
19047          *
19048          * @hide
19049          */
19050         public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/config");
19051 
19052         private static final ContentProviderHolder sProviderHolder =
19053                 new ContentProviderHolder(CONTENT_URI);
19054 
19055         // Populated lazily, guarded by class object:
19056         private static final NameValueCache sNameValueCache = new NameValueCache(
19057                 CONTENT_URI,
19058                 CALL_METHOD_GET_CONFIG,
19059                 CALL_METHOD_PUT_CONFIG,
19060                 CALL_METHOD_DELETE_CONFIG,
19061                 CALL_METHOD_LIST_CONFIG,
19062                 CALL_METHOD_SET_ALL_CONFIG,
19063                 sProviderHolder,
19064                 Config.class);
19065 
19066         // Should never be invoked
Config()19067         private Config() {
19068         }
19069 
19070         /**
19071          * Look up a name in the database.
19072          * @param name to look up in the table
19073          * @return the corresponding value, or null if not present
19074          *
19075          * @hide
19076          */
19077         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19078         @Nullable
19079         @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
getString(@onNull String name)19080         public static String getString(@NonNull String name) {
19081             ContentResolver resolver = getContentResolver();
19082             return sNameValueCache.getStringForUser(resolver, name, resolver.getUserId());
19083         }
19084 
19085         /**
19086          * Look up a list of names in the database, within the specified namespace.
19087          *
19088          * @param namespace to which the names belong
19089          * @param names to look up in the table
19090          * @return a non null, but possibly empty, map from name to value for any of the names that
19091          *         were found during lookup.
19092          *
19093          * @hide
19094          */
19095         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19096         @NonNull
19097         @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
getStrings(@onNull String namespace, @NonNull List<String> names)19098         public static Map<String, String> getStrings(@NonNull String namespace,
19099                 @NonNull List<String> names) {
19100             return getStrings(getContentResolver(), namespace, names);
19101         }
19102 
19103         /**
19104          * Look up a list of names in the database, within the specified namespace.
19105          *
19106          * @param resolver to access the database with
19107          * @param namespace to which the names belong
19108          * @param names to look up in the table
19109          * @return a non null, but possibly empty, map from name to value for any of the names that
19110          *         were found during lookup.
19111          *
19112          * @hide
19113          */
19114         @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
getStrings(@onNull ContentResolver resolver, @NonNull String namespace, @NonNull List<String> names)19115         public static Map<String, String> getStrings(@NonNull ContentResolver resolver,
19116                 @NonNull String namespace, @NonNull List<String> names) {
19117             List<String> compositeNames = new ArrayList<>(names.size());
19118             for (String name : names) {
19119                 compositeNames.add(createCompositeName(namespace, name));
19120             }
19121 
19122             String prefix = createPrefix(namespace);
19123             ArrayMap<String, String> rawKeyValues = sNameValueCache.getStringsForPrefix(
19124                     resolver, prefix, compositeNames);
19125             int size = rawKeyValues.size();
19126             int substringLength = prefix.length();
19127             ArrayMap<String, String> keyValues = new ArrayMap<>(size);
19128             for (int i = 0; i < size; ++i) {
19129                 keyValues.put(rawKeyValues.keyAt(i).substring(substringLength),
19130                         rawKeyValues.valueAt(i));
19131             }
19132             return keyValues;
19133         }
19134 
19135         /**
19136          * Store a name/value pair into the database within the specified namespace.
19137          * <p>
19138          * Also the method takes an argument whether to make the value the default for this setting.
19139          * If the system already specified a default value, then the one passed in here will
19140          * <strong>not</strong> be set as the default.
19141          * </p>
19142          *
19143          * @param namespace to store the name/value pair in.
19144          * @param name to store.
19145          * @param value to associate with the name.
19146          * @param makeDefault whether to make the value the default one.
19147          * @return true if the value was set, false on database errors.
19148          *
19149          * @see #resetToDefaults(ContentResolver, int, String)
19150          *
19151          * @hide
19152          */
19153         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19154         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
putString(@onNull String namespace, @NonNull String name, @Nullable String value, boolean makeDefault)19155         public static boolean putString(@NonNull String namespace,
19156                 @NonNull String name, @Nullable String value, boolean makeDefault) {
19157             ContentResolver resolver = getContentResolver();
19158             return sNameValueCache.putStringForUser(resolver, createCompositeName(namespace, name),
19159                     value, null, makeDefault, resolver.getUserId(),
19160                     DEFAULT_OVERRIDEABLE_BY_RESTORE);
19161         }
19162 
19163         /**
19164          * Clear all name/value pairs for the provided namespace and save new name/value pairs in
19165          * their place.
19166          *
19167          * @param namespace to which the names should be set.
19168          * @param keyValues map of key names (without the prefix) to values.
19169          * @return true if the name/value pairs were set, false if setting was blocked
19170          *
19171          * @hide
19172          */
19173         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19174         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
setStrings(@onNull String namespace, @NonNull Map<String, String> keyValues)19175         public static boolean setStrings(@NonNull String namespace,
19176                 @NonNull Map<String, String> keyValues)
19177                 throws DeviceConfig.BadConfigException {
19178             return setStrings(getContentResolver(), namespace, keyValues);
19179         }
19180 
19181         /**
19182          * Clear all name/value pairs for the provided namespace and save new name/value pairs in
19183          * their place.
19184          *
19185          * @param resolver to access the database with.
19186          * @param namespace to which the names should be set.
19187          * @param keyValues map of key names (without the prefix) to values.
19188          * @return true if the name/value pairs were set, false if setting was blocked
19189          *
19190          * @hide
19191          */
19192         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
setStrings(@onNull ContentResolver resolver, @NonNull String namespace, @NonNull Map<String, String> keyValues)19193         public static boolean setStrings(@NonNull ContentResolver resolver,
19194                 @NonNull String namespace, @NonNull Map<String, String> keyValues)
19195                 throws DeviceConfig.BadConfigException {
19196             HashMap<String, String> compositeKeyValueMap = new HashMap<>(keyValues.keySet().size());
19197             for (Map.Entry<String, String> entry : keyValues.entrySet()) {
19198                 compositeKeyValueMap.put(
19199                         createCompositeName(namespace, entry.getKey()), entry.getValue());
19200             }
19201             int result = sNameValueCache.setStringsForPrefix(
19202                     resolver, createPrefix(namespace), compositeKeyValueMap);
19203             if (result == SET_ALL_RESULT_SUCCESS) {
19204                 return true;
19205             } else if (result == SET_ALL_RESULT_DISABLED) {
19206                 return false;
19207             }
19208             // If can't set given configuration that means it's bad
19209             throw new DeviceConfig.BadConfigException();
19210         }
19211 
19212         /**
19213          * Delete a name/value pair from the database for the specified namespace.
19214          *
19215          * @param namespace to delete the name/value pair from.
19216          * @param name to delete.
19217          * @return true if the value was deleted, false on database errors. If the name/value pair
19218          * did not exist, return True.
19219          *
19220          * @see #resetToDefaults(ContentResolver, int, String)
19221          *
19222          * @hide
19223          */
19224         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19225         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
deleteString(@onNull String namespace, @NonNull String name)19226         public static boolean deleteString(@NonNull String namespace,
19227                 @NonNull String name) {
19228             ContentResolver resolver = getContentResolver();
19229             return sNameValueCache.deleteStringForUser(resolver,
19230                     createCompositeName(namespace, name), resolver.getUserId());
19231         }
19232 
19233         /**
19234          * Reset the values to their defaults.
19235          * <p>
19236          * The method accepts an optional prefix parameter. If provided, only pairs with a name that
19237          * starts with the exact prefix will be reset. Otherwise all will be reset.
19238          *
19239          * @param resetMode The reset mode to use.
19240          * @param namespace Optionally, to limit which which namespace is reset.
19241          *
19242          * @see #putString(ContentResolver, String, String, String, boolean)
19243          *
19244          * @hide
19245          */
19246         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19247         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
resetToDefaults(@esetMode int resetMode, @Nullable String namespace)19248         public static void resetToDefaults(@ResetMode int resetMode,
19249                 @Nullable String namespace) {
19250             try {
19251                 ContentResolver resolver = getContentResolver();
19252                 Bundle arg = new Bundle();
19253                 arg.putInt(CALL_METHOD_USER_KEY, resolver.getUserId());
19254                 arg.putInt(CALL_METHOD_RESET_MODE_KEY, resetMode);
19255                 if (namespace != null) {
19256                     arg.putString(Settings.CALL_METHOD_PREFIX_KEY, createPrefix(namespace));
19257                 }
19258                 IContentProvider cp = sProviderHolder.getProvider(resolver);
19259                 cp.call(resolver.getAttributionSource(),
19260                         sProviderHolder.mUri.getAuthority(), CALL_METHOD_RESET_CONFIG, null, arg);
19261             } catch (RemoteException e) {
19262                 Log.w(TAG, "Can't reset to defaults for " + CONTENT_URI, e);
19263             }
19264         }
19265 
19266         /**
19267          * Bridge method between {@link DeviceConfig#setSyncDisabledMode(int)} and the
19268          * {@link com.android.providers.settings.SettingsProvider} implementation.
19269          *
19270          * @hide
19271          */
19272         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19273         @SuppressLint("AndroidFrameworkRequiresPermission")
19274         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
setSyncDisabledMode(@yncDisabledMode int disableSyncMode)19275         public static void setSyncDisabledMode(@SyncDisabledMode int disableSyncMode) {
19276             try {
19277                 ContentResolver resolver = getContentResolver();
19278                 Bundle args = new Bundle();
19279                 args.putInt(CALL_METHOD_SYNC_DISABLED_MODE_KEY, disableSyncMode);
19280                 IContentProvider cp = sProviderHolder.getProvider(resolver);
19281                 cp.call(resolver.getAttributionSource(), sProviderHolder.mUri.getAuthority(),
19282                         CALL_METHOD_SET_SYNC_DISABLED_MODE_CONFIG, null, args);
19283             } catch (RemoteException e) {
19284                 Log.w(TAG, "Can't set sync disabled mode " + CONTENT_URI, e);
19285             }
19286         }
19287 
19288         /**
19289          * Bridge method between {@link DeviceConfig#getSyncDisabledMode()} and the
19290          * {@link com.android.providers.settings.SettingsProvider} implementation.
19291          *
19292          * @hide
19293          */
19294         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19295         @SuppressLint("AndroidFrameworkRequiresPermission")
19296         @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
getSyncDisabledMode()19297         public static int getSyncDisabledMode() {
19298             try {
19299                 ContentResolver resolver = getContentResolver();
19300                 Bundle args = Bundle.EMPTY;
19301                 IContentProvider cp = sProviderHolder.getProvider(resolver);
19302                 Bundle bundle = cp.call(resolver.getAttributionSource(),
19303                         sProviderHolder.mUri.getAuthority(),
19304                         CALL_METHOD_GET_SYNC_DISABLED_MODE_CONFIG,
19305                         null, args);
19306                 return bundle.getInt(KEY_CONFIG_GET_SYNC_DISABLED_MODE_RETURN);
19307             } catch (RemoteException e) {
19308                 Log.w(TAG, "Can't query sync disabled mode " + CONTENT_URI, e);
19309             }
19310             return -1;
19311         }
19312 
19313         /**
19314          * Setter callback for monitoring Config table.
19315          *
19316          * @param executor the {@link Executor} on which to invoke the callback
19317          * @param callback callback to set
19318          *
19319          * @hide
19320          */
19321         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19322         @RequiresPermission(Manifest.permission.MONITOR_DEVICE_CONFIG_ACCESS)
setMonitorCallback( @onNull ContentResolver resolver, @NonNull @CallbackExecutor Executor executor, @NonNull DeviceConfig.MonitorCallback callback)19323         public static void setMonitorCallback(
19324                 @NonNull ContentResolver resolver,
19325                 @NonNull @CallbackExecutor Executor executor,
19326                 @NonNull DeviceConfig.MonitorCallback callback) {
19327             setMonitorCallbackAsUser(executor, resolver, resolver.getUserId(), callback);
19328         }
19329 
19330         /**
19331          * Clear callback for monitoring Config table.
19332          * this may only be used to clear callback function registered by
19333          * {@link Config#setMonitorCallback}
19334          * @hide
19335          */
19336         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
19337         @RequiresPermission(Manifest.permission.MONITOR_DEVICE_CONFIG_ACCESS)
clearMonitorCallback(@onNull ContentResolver resolver)19338         public static void clearMonitorCallback(@NonNull ContentResolver resolver) {
19339             try {
19340                 Bundle arg = new Bundle();
19341                 arg.putInt(CALL_METHOD_USER_KEY, resolver.getUserId());
19342                 IContentProvider cp = sProviderHolder.getProvider(resolver);
19343                 cp.call(resolver.getAttributionSource(),
19344                         sProviderHolder.mUri.getAuthority(),
19345                         CALL_METHOD_UNREGISTER_MONITOR_CALLBACK_CONFIG, null, arg);
19346             } catch (RemoteException e) {
19347                 Log.w(TAG, "Can't clear config monitor callback", e);
19348             }
19349         }
19350 
19351 
19352         /**
19353          * Register a content observer.
19354          *
19355          * @hide
19356          */
19357         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
registerContentObserver(@ullable String namespace, boolean notifyForDescendants, @NonNull ContentObserver observer)19358         public static void registerContentObserver(@Nullable String namespace,
19359                 boolean notifyForDescendants, @NonNull ContentObserver observer) {
19360             ActivityThread.currentApplication().getContentResolver()
19361                     .registerContentObserver(createNamespaceUri(namespace),
19362                          notifyForDescendants, observer);
19363         }
19364 
19365         /**
19366          * Unregister a content observer.
19367          * this may only be used with content observers registered through
19368          * {@link Config#registerContentObserver}
19369          *
19370          * @hide
19371          */
19372         @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
unregisterContentObserver(@onNull ContentObserver observer)19373         public static void unregisterContentObserver(@NonNull ContentObserver observer) {
19374             ActivityThread.currentApplication().getContentResolver()
19375               .unregisterContentObserver(observer);
19376         }
19377 
19378         /**
19379          * Determine whether the calling process of an IPC <em>or you</em> have been
19380          * granted a particular permission.  This is the same as
19381          * {@link #checkCallingPermission}, except it grants your own permissions
19382          * if you are not currently processing an IPC.  Use with care!
19383          *
19384          * @param permission The name of the permission being checked.
19385          *
19386          * @return {@link PackageManager#PERMISSION_GRANTED} if the calling
19387          * pid/uid is allowed that permission, or
19388          * {@link PackageManager#PERMISSION_DENIED} if it is not.
19389          *
19390          * @see PackageManager#checkPermission(String, String)
19391          * @see #checkPermission
19392          * @see #checkCallingPermission
19393          * @hide
19394          */
19395         @PermissionMethod(orSelf = true)
19396         @PackageManager.PermissionResult
checkCallingOrSelfPermission(@onNull @ermissionName String permission)19397         public static int checkCallingOrSelfPermission(@NonNull @PermissionName String permission) {
19398             return ActivityThread.currentApplication()
19399                .getApplicationContext().checkCallingOrSelfPermission(permission);
19400         }
19401 
19402         /**
19403          * Enforces READ_DEVICE_CONFIG permission if namespace is not one of public namespaces.
19404          * @hide
19405          */
enforceReadPermission(String namespace)19406         public static void enforceReadPermission(String namespace) {
19407             if (ActivityThread.currentApplication().getApplicationContext()
19408                     .checkCallingOrSelfPermission(Manifest.permission.READ_DEVICE_CONFIG)
19409                     != PackageManager.PERMISSION_GRANTED) {
19410                 if (!DeviceConfig.getPublicNamespaces().contains(namespace)) {
19411                     throw new SecurityException("Permission denial: reading from settings requires:"
19412                         + Manifest.permission.READ_DEVICE_CONFIG);
19413                 }
19414             }
19415         }
19416 
setMonitorCallbackAsUser( @onNull @allbackExecutor Executor executor, @NonNull ContentResolver resolver, @UserIdInt int userHandle, @NonNull DeviceConfig.MonitorCallback callback)19417         private static void setMonitorCallbackAsUser(
19418                 @NonNull @CallbackExecutor Executor executor,
19419                 @NonNull ContentResolver resolver, @UserIdInt int userHandle,
19420                 @NonNull DeviceConfig.MonitorCallback callback) {
19421             try {
19422                 Bundle arg = new Bundle();
19423                 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
19424                 arg.putParcelable(CALL_METHOD_MONITOR_CALLBACK_KEY,
19425                         new RemoteCallback(result -> {
19426                             handleMonitorCallback(result, executor, callback);
19427                         }));
19428                 IContentProvider cp = sProviderHolder.getProvider(resolver);
19429                 cp.call(resolver.getAttributionSource(),
19430                         sProviderHolder.mUri.getAuthority(),
19431                         CALL_METHOD_REGISTER_MONITOR_CALLBACK_CONFIG, null, arg);
19432             } catch (RemoteException e) {
19433                 Log.w(TAG, "Can't set config monitor callback", e);
19434             }
19435         }
19436 
19437         /** @hide */
clearProviderForTest()19438         public static void clearProviderForTest() {
19439             sProviderHolder.clearProviderForTest();
19440             sNameValueCache.clearGenerationTrackerForTest();
19441         }
19442 
handleMonitorCallback( Bundle result, @NonNull @CallbackExecutor Executor executor, DeviceConfig.MonitorCallback monitorCallback)19443         private static void handleMonitorCallback(
19444                 Bundle result,
19445                 @NonNull @CallbackExecutor Executor executor,
19446                 DeviceConfig.MonitorCallback monitorCallback) {
19447             String callbackType = result.getString(EXTRA_MONITOR_CALLBACK_TYPE, "");
19448             switch (callbackType) {
19449                 case EXTRA_NAMESPACE_UPDATED_CALLBACK:
19450                     String updatedNamespace = result.getString(EXTRA_NAMESPACE);
19451                     if (updatedNamespace != null) {
19452                         executor.execute(() -> monitorCallback.onNamespaceUpdate(updatedNamespace));
19453                     }
19454                     break;
19455                 case EXTRA_ACCESS_CALLBACK:
19456                     String callingPackage = result.getString(EXTRA_CALLING_PACKAGE, null);
19457                     String namespace = result.getString(EXTRA_NAMESPACE, null);
19458                     if (namespace != null && callingPackage != null) {
19459                         executor.execute(() ->
19460                                 monitorCallback.onDeviceConfigAccess(callingPackage, namespace));
19461                     }
19462                     break;
19463                 default:
19464                     Slog.w(TAG, "Unrecognized DeviceConfig callback");
19465                     break;
19466             }
19467         }
19468 
createCompositeName(@onNull String namespace, @NonNull String name)19469         private static String createCompositeName(@NonNull String namespace, @NonNull String name) {
19470             Preconditions.checkNotNull(namespace);
19471             Preconditions.checkNotNull(name);
19472             return createPrefix(namespace) + name;
19473         }
19474 
createPrefix(@onNull String namespace)19475         private static String createPrefix(@NonNull String namespace) {
19476             Preconditions.checkNotNull(namespace);
19477             return namespace + "/";
19478         }
19479 
createNamespaceUri(@onNull String namespace)19480         private static Uri createNamespaceUri(@NonNull String namespace) {
19481             Preconditions.checkNotNull(namespace);
19482             return CONTENT_URI.buildUpon().appendPath(namespace).build();
19483         }
19484 
getContentResolver()19485         private static ContentResolver getContentResolver() {
19486             return ActivityThread.currentApplication().getContentResolver();
19487         }
19488     }
19489 
19490     /**
19491      * User-defined bookmarks and shortcuts.  The target of each bookmark is an
19492      * Intent URL, allowing it to be either a web page or a particular
19493      * application activity.
19494      *
19495      * @hide
19496      */
19497     public static final class Bookmarks implements BaseColumns
19498     {
19499         private static final String TAG = "Bookmarks";
19500 
19501         /**
19502          * The content:// style URL for this table
19503          */
19504         @UnsupportedAppUsage
19505         public static final Uri CONTENT_URI =
19506             Uri.parse("content://" + AUTHORITY + "/bookmarks");
19507 
19508         /**
19509          * The row ID.
19510          * <p>Type: INTEGER</p>
19511          */
19512         public static final String ID = "_id";
19513 
19514         /**
19515          * Descriptive name of the bookmark that can be displayed to the user.
19516          * If this is empty, the title should be resolved at display time (use
19517          * {@link #getTitle(Context, Cursor)} any time you want to display the
19518          * title of a bookmark.)
19519          * <P>
19520          * Type: TEXT
19521          * </P>
19522          */
19523         public static final String TITLE = "title";
19524 
19525         /**
19526          * Arbitrary string (displayed to the user) that allows bookmarks to be
19527          * organized into categories.  There are some special names for
19528          * standard folders, which all start with '@'.  The label displayed for
19529          * the folder changes with the locale (via {@link #getLabelForFolder}) but
19530          * the folder name does not change so you can consistently query for
19531          * the folder regardless of the current locale.
19532          *
19533          * <P>Type: TEXT</P>
19534          *
19535          */
19536         public static final String FOLDER = "folder";
19537 
19538         /**
19539          * The Intent URL of the bookmark, describing what it points to.  This
19540          * value is given to {@link android.content.Intent#getIntent} to create
19541          * an Intent that can be launched.
19542          * <P>Type: TEXT</P>
19543          */
19544         public static final String INTENT = "intent";
19545 
19546         /**
19547          * Optional shortcut character associated with this bookmark.
19548          * <P>Type: INTEGER</P>
19549          */
19550         public static final String SHORTCUT = "shortcut";
19551 
19552         /**
19553          * The order in which the bookmark should be displayed
19554          * <P>Type: INTEGER</P>
19555          */
19556         public static final String ORDERING = "ordering";
19557 
19558         private static final String[] sIntentProjection = { INTENT };
19559         private static final String[] sShortcutProjection = { ID, SHORTCUT };
19560         private static final String sShortcutSelection = SHORTCUT + "=?";
19561 
19562         /**
19563          * Convenience function to retrieve the bookmarked Intent for a
19564          * particular shortcut key.
19565          *
19566          * @param cr The ContentResolver to query.
19567          * @param shortcut The shortcut key.
19568          *
19569          * @return Intent The bookmarked URL, or null if there is no bookmark
19570          *         matching the given shortcut.
19571          */
getIntentForShortcut(ContentResolver cr, char shortcut)19572         public static Intent getIntentForShortcut(ContentResolver cr, char shortcut)
19573         {
19574             Intent intent = null;
19575 
19576             Cursor c = cr.query(CONTENT_URI,
19577                     sIntentProjection, sShortcutSelection,
19578                     new String[] { String.valueOf((int) shortcut) }, ORDERING);
19579             // Keep trying until we find a valid shortcut
19580             try {
19581                 while (intent == null && c.moveToNext()) {
19582                     try {
19583                         String intentURI = c.getString(c.getColumnIndexOrThrow(INTENT));
19584                         intent = Intent.parseUri(intentURI, 0);
19585                     } catch (java.net.URISyntaxException e) {
19586                         // The stored URL is bad...  ignore it.
19587                     } catch (IllegalArgumentException e) {
19588                         // Column not found
19589                         Log.w(TAG, "Intent column not found", e);
19590                     }
19591                 }
19592             } finally {
19593                 if (c != null) c.close();
19594             }
19595 
19596             return intent;
19597         }
19598 
19599         /**
19600          * Add a new bookmark to the system.
19601          *
19602          * @param cr The ContentResolver to query.
19603          * @param intent The desired target of the bookmark.
19604          * @param title Bookmark title that is shown to the user; null if none
19605          *            or it should be resolved to the intent's title.
19606          * @param folder Folder in which to place the bookmark; null if none.
19607          * @param shortcut Shortcut that will invoke the bookmark; 0 if none. If
19608          *            this is non-zero and there is an existing bookmark entry
19609          *            with this same shortcut, then that existing shortcut is
19610          *            cleared (the bookmark is not removed).
19611          * @return The unique content URL for the new bookmark entry.
19612          */
19613         @UnsupportedAppUsage
add(ContentResolver cr, Intent intent, String title, String folder, char shortcut, int ordering)19614         public static Uri add(ContentResolver cr,
19615                                            Intent intent,
19616                                            String title,
19617                                            String folder,
19618                                            char shortcut,
19619                                            int ordering)
19620         {
19621             // If a shortcut is supplied, and it is already defined for
19622             // another bookmark, then remove the old definition.
19623             if (shortcut != 0) {
19624                 cr.delete(CONTENT_URI, sShortcutSelection,
19625                         new String[] { String.valueOf((int) shortcut) });
19626             }
19627 
19628             ContentValues values = new ContentValues();
19629             if (title != null) values.put(TITLE, title);
19630             if (folder != null) values.put(FOLDER, folder);
19631             values.put(INTENT, intent.toUri(0));
19632             if (shortcut != 0) values.put(SHORTCUT, (int) shortcut);
19633             values.put(ORDERING, ordering);
19634             return cr.insert(CONTENT_URI, values);
19635         }
19636 
19637         /**
19638          * Return the folder name as it should be displayed to the user.  This
19639          * takes care of localizing special folders.
19640          *
19641          * @param r Resources object for current locale; only need access to
19642          *          system resources.
19643          * @param folder The value found in the {@link #FOLDER} column.
19644          *
19645          * @return CharSequence The label for this folder that should be shown
19646          *         to the user.
19647          */
getLabelForFolder(Resources r, String folder)19648         public static CharSequence getLabelForFolder(Resources r, String folder) {
19649             return folder;
19650         }
19651 
19652         /**
19653          * Return the title as it should be displayed to the user. This takes
19654          * care of localizing bookmarks that point to activities.
19655          *
19656          * @param context A context.
19657          * @param cursor A cursor pointing to the row whose title should be
19658          *        returned. The cursor must contain at least the {@link #TITLE}
19659          *        and {@link #INTENT} columns.
19660          * @return A title that is localized and can be displayed to the user,
19661          *         or the empty string if one could not be found.
19662          */
getTitle(Context context, Cursor cursor)19663         public static CharSequence getTitle(Context context, Cursor cursor) {
19664             int titleColumn = cursor.getColumnIndex(TITLE);
19665             int intentColumn = cursor.getColumnIndex(INTENT);
19666             if (titleColumn == -1 || intentColumn == -1) {
19667                 throw new IllegalArgumentException(
19668                         "The cursor must contain the TITLE and INTENT columns.");
19669             }
19670 
19671             String title = cursor.getString(titleColumn);
19672             if (!TextUtils.isEmpty(title)) {
19673                 return title;
19674             }
19675 
19676             String intentUri = cursor.getString(intentColumn);
19677             if (TextUtils.isEmpty(intentUri)) {
19678                 return "";
19679             }
19680 
19681             Intent intent;
19682             try {
19683                 intent = Intent.parseUri(intentUri, 0);
19684             } catch (URISyntaxException e) {
19685                 return "";
19686             }
19687 
19688             PackageManager packageManager = context.getPackageManager();
19689             ResolveInfo info = packageManager.resolveActivity(intent, 0);
19690             return info != null ? info.loadLabel(packageManager) : "";
19691         }
19692     }
19693 
19694     /**
19695      * <p>
19696      *     A Settings panel is floating UI that contains a fixed subset of settings to address a
19697      *     particular user problem. For example, the
19698      *     {@link #ACTION_INTERNET_CONNECTIVITY Internet Panel} surfaces settings related to
19699      *     connecting to the internet.
19700      * <p>
19701      *     Settings panels appear above the calling app to address the problem without
19702      *     the user needing to open Settings and thus leave their current screen.
19703      */
19704     public static final class Panel {
Panel()19705         private Panel() {
19706         }
19707 
19708         /**
19709          * Activity Action: Show a settings dialog containing settings to enable internet
19710          * connection.
19711          * <p>
19712          * Input: Nothing.
19713          * <p>
19714          * Output: Nothing.
19715          */
19716         @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)
19717         public static final String ACTION_INTERNET_CONNECTIVITY =
19718                 "android.settings.panel.action.INTERNET_CONNECTIVITY";
19719 
19720         /**
19721          * Activity Action: Show a settings dialog containing NFC-related settings.
19722          * <p>
19723          * Input: Nothing.
19724          * <p>
19725          * Output: Nothing.
19726          */
19727         @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)
19728         public static final String ACTION_NFC =
19729                 "android.settings.panel.action.NFC";
19730 
19731         /**
19732          * Activity Action: Show a settings dialog containing controls for Wifi.
19733          * <p>
19734          * Input: Nothing.
19735          * <p>
19736          * Output: Nothing.
19737          */
19738         @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)
19739         public static final String ACTION_WIFI =
19740                 "android.settings.panel.action.WIFI";
19741 
19742         /**
19743          * Activity Action: Show a settings dialog containing all volume streams.
19744          * <p>
19745          * Input: Nothing.
19746          * <p>
19747          * Output: Nothing.
19748          */
19749         @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)
19750         public static final String ACTION_VOLUME =
19751                 "android.settings.panel.action.VOLUME";
19752     }
19753 
19754     /**
19755      * Activity Action: Show setting page to process the addition of Wi-Fi networks to the user's
19756      * saved network list. The app should send a new intent with an extra that holds a maximum
19757      * of five {@link android.net.wifi.WifiNetworkSuggestion} that specify credentials for the
19758      * networks to be added to the user's database. The Intent should be sent via the
19759      * {@link android.app.Activity#startActivityForResult(Intent, int)} API.
19760      * <p>
19761      * Note: The app sending the Intent to add the credentials doesn't get any ownership over the
19762      * newly added network(s). For the Wi-Fi stack, these networks will look like the user
19763      * manually added them from the Settings UI.
19764      * <p>
19765      * Input: The app should put parcelable array list of
19766      * {@link android.net.wifi.WifiNetworkSuggestion} into the {@link #EXTRA_WIFI_NETWORK_LIST}
19767      * extra.
19768      * <p>
19769      * Output: After {@link android.app.Activity#startActivityForResult(Intent, int)}, the
19770      * callback {@link android.app.Activity#onActivityResult(int, int, Intent)} will have a
19771      * result code {@link android.app.Activity#RESULT_OK} to indicate user pressed the save
19772      * button to save the networks or {@link android.app.Activity#RESULT_CANCELED} to indicate
19773      * that the user rejected the request. Additionally, an integer array list, stored in
19774      * {@link #EXTRA_WIFI_NETWORK_RESULT_LIST}, will indicate the process result of each network.
19775      */
19776     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19777     public static final String ACTION_WIFI_ADD_NETWORKS =
19778             "android.settings.WIFI_ADD_NETWORKS";
19779 
19780     /**
19781      * A bundle extra of {@link #ACTION_WIFI_ADD_NETWORKS} intent action that indicates the list
19782      * of the {@link android.net.wifi.WifiNetworkSuggestion} elements. The maximum count of the
19783      * {@link android.net.wifi.WifiNetworkSuggestion} elements in the list will be five.
19784      * <p>
19785      * For example:
19786      * To provide credentials for one open and one WPA2 networks:
19787      *
19788      * <pre>{@code
19789      * final WifiNetworkSuggestion suggestion1 =
19790      *       new WifiNetworkSuggestion.Builder()
19791      *       .setSsid("test111111")
19792      *       .build();
19793      * final WifiNetworkSuggestion suggestion2 =
19794      *       new WifiNetworkSuggestion.Builder()
19795      *       .setSsid("test222222")
19796      *       .setWpa2Passphrase("test123456")
19797      *       .build();
19798      * final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<>;
19799      * suggestionsList.add(suggestion1);
19800      * suggestionsList.add(suggestion2);
19801      * Bundle bundle = new Bundle();
19802      * bundle.putParcelableArrayList(Settings.EXTRA_WIFI_NETWORK_LIST,(ArrayList<? extends
19803      * Parcelable>) suggestionsList);
19804      * final Intent intent = new Intent(Settings.ACTION_WIFI_ADD_NETWORKS);
19805      * intent.putExtras(bundle);
19806      * startActivityForResult(intent, 0);
19807      * }</pre>
19808      */
19809     public static final String EXTRA_WIFI_NETWORK_LIST =
19810             "android.provider.extra.WIFI_NETWORK_LIST";
19811 
19812     /**
19813      * A bundle extra of the result of {@link #ACTION_WIFI_ADD_NETWORKS} intent action that
19814      * indicates the action result of the saved {@link android.net.wifi.WifiNetworkSuggestion}.
19815      * Its value is a list of integers, and all the elements will be 1:1 mapping to the elements
19816      * in {@link #EXTRA_WIFI_NETWORK_LIST}, if user press cancel to cancel the add networks
19817      * request, then its value will be null.
19818      * <p>
19819      * Note: The integer value will be one of the {@link #ADD_WIFI_RESULT_SUCCESS},
19820      * {@link #ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED}, or {@link #ADD_WIFI_RESULT_ALREADY_EXISTS}}.
19821      */
19822     public static final String EXTRA_WIFI_NETWORK_RESULT_LIST =
19823             "android.provider.extra.WIFI_NETWORK_RESULT_LIST";
19824 
19825     /** @hide */
19826     @Retention(RetentionPolicy.SOURCE)
19827     @IntDef(prefix = {"ADD_WIFI_RESULT_"}, value = {
19828             ADD_WIFI_RESULT_SUCCESS,
19829             ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED,
19830             ADD_WIFI_RESULT_ALREADY_EXISTS
19831     })
19832     public @interface AddWifiResult {
19833     }
19834 
19835     /**
19836      * A result of {@link #ACTION_WIFI_ADD_NETWORKS} intent action that saving or updating the
19837      * corresponding Wi-Fi network was successful.
19838      */
19839     public static final int ADD_WIFI_RESULT_SUCCESS = 0;
19840 
19841     /**
19842      * A result of {@link #ACTION_WIFI_ADD_NETWORKS} intent action that saving the corresponding
19843      * Wi-Fi network failed.
19844      */
19845     public static final int ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED = 1;
19846 
19847     /**
19848      * A result of {@link #ACTION_WIFI_ADD_NETWORKS} intent action that indicates the Wi-Fi network
19849      * already exists.
19850      */
19851     public static final int ADD_WIFI_RESULT_ALREADY_EXISTS = 2;
19852 
19853     /**
19854      * Activity Action: Allows user to select current bug report handler.
19855      * <p>
19856      * Input: Nothing.
19857      * <p>
19858      * Output: Nothing.
19859      *
19860      * @hide
19861      */
19862     @SystemApi
19863     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19864     public static final String ACTION_BUGREPORT_HANDLER_SETTINGS =
19865             "android.settings.BUGREPORT_HANDLER_SETTINGS";
19866 
19867     private static final String[] PM_WRITE_SETTINGS = {
19868         android.Manifest.permission.WRITE_SETTINGS
19869     };
19870     private static final String[] PM_CHANGE_NETWORK_STATE = {
19871         android.Manifest.permission.CHANGE_NETWORK_STATE,
19872         android.Manifest.permission.WRITE_SETTINGS
19873     };
19874     private static final String[] PM_SYSTEM_ALERT_WINDOW = {
19875         android.Manifest.permission.SYSTEM_ALERT_WINDOW
19876     };
19877 
19878     /**
19879      * Activity Action: Show screen for controlling which apps have access to manage external
19880      * storage.
19881      * <p>
19882      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
19883      * <p>
19884      * If you want to control a specific app's access to manage external storage, use
19885      * {@link #ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION} instead.
19886      * <p>
19887      * Output: Nothing.
19888      * @see #ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
19889      */
19890     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19891     public static final String ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION =
19892             "android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION";
19893 
19894     /**
19895      * Activity Action: Show screen for controlling if the app specified in the data URI of the
19896      * intent can manage external storage.
19897      * <p>
19898      * Launching the corresponding activity requires the permission
19899      * {@link Manifest.permission#MANAGE_EXTERNAL_STORAGE}.
19900      * <p>
19901      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
19902      * <p>
19903      * Input: The Intent's data URI MUST specify the application package name whose ability of
19904      * managing external storage you want to control.
19905      * For example "package:com.my.app".
19906      * <p>
19907      * Output: Nothing.
19908      * @see #ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
19909      */
19910     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19911     public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION =
19912             "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION";
19913 
19914     /**
19915      * Activity Action: Show screen for controlling whether an app can send full screen intents.
19916      * <p>
19917      *     Input: the intent's data URI must specify the application package name for which you want
19918      *     to manage full screen intents.
19919      * <p>
19920      * Output: Nothing.
19921      */
19922     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19923     public static final String ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT =
19924             "android.settings.MANAGE_APP_USE_FULL_SCREEN_INTENT";
19925 
19926     /**
19927      * Activity Action: For system or preinstalled apps to show their {@link Activity} embedded
19928      * in Settings app on large screen devices.
19929      *
19930      * Developers should resolve the Intent action before using it.
19931      *
19932      * <p>
19933      *     Input: {@link #EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI} must be included to
19934      * specify the intent for the activity which will be embedded in Settings app.
19935      * It's an intent URI string from {@code intent.toUri(Intent.URI_INTENT_SCHEME)}.
19936      *
19937      *     Input: {@link #EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY} must be included to
19938      * specify a key that indicates the menu item which will be highlighted on settings home menu.
19939      * <p>
19940      * Output: Nothing.
19941      */
19942     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
19943     public static final String ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY =
19944             "android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY";
19945 
19946     /**
19947      * Activity Extra: Specify the intent for the {@link Activity} which will be embedded in
19948      * Settings app. It's an intent URI string from
19949      * {@code intent.toUri(Intent.URI_INTENT_SCHEME)}.
19950      * <p>
19951      * This must be passed as an extra field to
19952      * {@link #ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY}.
19953      */
19954     public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI =
19955             "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI";
19956 
19957     /**
19958      * Activity Extra: Specify a key that indicates the menu item which should be highlighted on
19959      * settings home menu.
19960      * <p>
19961      * This must be passed as an extra field to
19962      * {@link #ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY}.
19963      */
19964     public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY =
19965             "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY";
19966 
19967     /**
19968      * Performs a strict and comprehensive check of whether a calling package is allowed to
19969      * write/modify system settings, as the condition differs for pre-M, M+, and
19970      * privileged/preinstalled apps. If the provided uid does not match the
19971      * callingPackage, a negative result will be returned.
19972      * @hide
19973      */
19974     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
isCallingPackageAllowedToWriteSettings(Context context, int uid, String callingPackage, boolean throwException)19975     public static boolean isCallingPackageAllowedToWriteSettings(Context context, int uid,
19976             String callingPackage, boolean throwException) {
19977         return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
19978                 callingPackage, null /*attribution not needed when not making note */,
19979                 throwException, AppOpsManager.OP_WRITE_SETTINGS, PM_WRITE_SETTINGS,
19980                 false);
19981     }
19982 
19983     /**
19984      * @deprecated Use {@link #checkAndNoteWriteSettingsOperation(Context, int, String, String,
19985      * boolean)} instead.
19986      *
19987      * @hide
19988      */
19989     @Deprecated
19990     @SystemApi
checkAndNoteWriteSettingsOperation(@onNull Context context, int uid, @NonNull String callingPackage, boolean throwException)19991     public static boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
19992             @NonNull String callingPackage, boolean throwException) {
19993         return checkAndNoteWriteSettingsOperation(context, uid, callingPackage, null,
19994                 throwException);
19995     }
19996 
19997     /**
19998      * Performs a strict and comprehensive check of whether a calling package is allowed to
19999      * write/modify system settings, as the condition differs for pre-M, M+, and
20000      * privileged/preinstalled apps. If the provided uid does not match the
20001      * callingPackage, a negative result will be returned. The caller is expected to have
20002      * the WRITE_SETTINGS permission declared.
20003      *
20004      * Note: if the check is successful, the operation of this app will be updated to the
20005      * current time.
20006      * @hide
20007      */
20008     @SystemApi
checkAndNoteWriteSettingsOperation(@onNull Context context, int uid, @NonNull String callingPackage, @Nullable String callingAttributionTag, boolean throwException)20009     public static boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
20010             @NonNull String callingPackage, @Nullable String callingAttributionTag,
20011             boolean throwException) {
20012         return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
20013                 callingPackage, callingAttributionTag, throwException,
20014                 AppOpsManager.OP_WRITE_SETTINGS, PM_WRITE_SETTINGS, true);
20015     }
20016 
20017     /**
20018      * Performs a strict and comprehensive check of whether a calling package is allowed to
20019      * draw on top of other apps, as the conditions differs for pre-M, M+, and
20020      * privileged/preinstalled apps. If the provided uid does not match the callingPackage,
20021      * a negative result will be returned.
20022      * @hide
20023      */
20024     @UnsupportedAppUsage
isCallingPackageAllowedToDrawOverlays(Context context, int uid, String callingPackage, boolean throwException)20025     public static boolean isCallingPackageAllowedToDrawOverlays(Context context, int uid,
20026             String callingPackage, boolean throwException) {
20027         return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
20028                 callingPackage, null /*attribution not needed when not making note */,
20029                 throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, PM_SYSTEM_ALERT_WINDOW,
20030                 false);
20031     }
20032 
20033     /**
20034      * Performs a strict and comprehensive check of whether a calling package is allowed to
20035      * draw on top of other apps, as the conditions differs for pre-M, M+, and
20036      * privileged/preinstalled apps. If the provided uid does not match the callingPackage,
20037      * a negative result will be returned.
20038      *
20039      * Note: if the check is successful, the operation of this app will be updated to the
20040      * current time.
20041      * @hide
20042      */
checkAndNoteDrawOverlaysOperation(Context context, int uid, String callingPackage, String callingAttributionTag, boolean throwException)20043     public static boolean checkAndNoteDrawOverlaysOperation(Context context, int uid,
20044             String callingPackage, String callingAttributionTag, boolean throwException) {
20045         return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
20046                 callingPackage, callingAttributionTag, throwException,
20047                 AppOpsManager.OP_SYSTEM_ALERT_WINDOW, PM_SYSTEM_ALERT_WINDOW, true);
20048     }
20049 
20050     /**
20051      * @deprecated Use {@link #isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context,
20052      * int, String, String, boolean, int, String[], boolean)} instead.
20053      *
20054      * @hide
20055      */
20056     @Deprecated
20057     @UnsupportedAppUsage
isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[] permissions, boolean makeNote)20058     public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context,
20059             int uid, String callingPackage, boolean throwException, int appOpsOpCode,
20060             String[] permissions, boolean makeNote) {
20061         return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
20062                 callingPackage, null, throwException, appOpsOpCode, permissions, makeNote);
20063     }
20064 
20065     /**
20066      * Helper method to perform a general and comprehensive check of whether an operation that is
20067      * protected by appops can be performed by a caller or not. e.g. OP_SYSTEM_ALERT_WINDOW and
20068      * OP_WRITE_SETTINGS
20069      * @hide
20070      */
isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, int uid, String callingPackage, String callingAttributionTag, boolean throwException, int appOpsOpCode, String[] permissions, boolean makeNote)20071     public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context,
20072             int uid, String callingPackage, String callingAttributionTag, boolean throwException,
20073             int appOpsOpCode, String[] permissions, boolean makeNote) {
20074         if (callingPackage == null) {
20075             return false;
20076         }
20077 
20078         AppOpsManager appOpsMgr = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
20079         int mode = AppOpsManager.MODE_DEFAULT;
20080         if (makeNote) {
20081             mode = appOpsMgr.noteOpNoThrow(appOpsOpCode, uid, callingPackage, callingAttributionTag,
20082                     null);
20083         } else {
20084             mode = appOpsMgr.checkOpNoThrow(appOpsOpCode, uid, callingPackage);
20085         }
20086 
20087         switch (mode) {
20088             case AppOpsManager.MODE_ALLOWED:
20089                 return true;
20090 
20091             case AppOpsManager.MODE_DEFAULT:
20092                 // this is the default operating mode after an app's installation
20093                 // In this case we will check all associated static permission to see
20094                 // if it is granted during install time.
20095                 for (String permission : permissions) {
20096                     if (context.checkCallingOrSelfPermission(permission) == PackageManager
20097                             .PERMISSION_GRANTED) {
20098                         // if either of the permissions are granted, we will allow it
20099                         return true;
20100                     }
20101                 }
20102 
20103             default:
20104                 // this is for all other cases trickled down here...
20105                 if (!throwException) {
20106                     return false;
20107                 }
20108         }
20109 
20110         // prepare string to throw SecurityException
20111         StringBuilder exceptionMessage = new StringBuilder();
20112         exceptionMessage.append(callingPackage);
20113         exceptionMessage.append(" was not granted ");
20114         if (permissions.length > 1) {
20115             exceptionMessage.append(" either of these permissions: ");
20116         } else {
20117             exceptionMessage.append(" this permission: ");
20118         }
20119         for (int i = 0; i < permissions.length; i++) {
20120             exceptionMessage.append(permissions[i]);
20121             exceptionMessage.append((i == permissions.length - 1) ? "." : ", ");
20122         }
20123 
20124         throw new SecurityException(exceptionMessage.toString());
20125     }
20126 
20127     /**
20128      * Retrieves a correponding package name for a given uid. It will query all
20129      * packages that are associated with the given uid, but it will return only
20130      * the zeroth result.
20131      * Note: If package could not be found, a null is returned.
20132      * @hide
20133      */
getPackageNameForUid(Context context, int uid)20134     public static String getPackageNameForUid(Context context, int uid) {
20135         String[] packages = context.getPackageManager().getPackagesForUid(uid);
20136         if (packages == null) {
20137             return null;
20138         }
20139         return packages[0];
20140     }
20141 }
20142