blob: ccd1a6bbe09ad3edaf6a439e2c8b055c6a9881ac [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
17package android.provider;
18
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080019import android.annotation.SdkConstant;
20import android.annotation.SdkConstant.SdkConstantType;
Bryce Leecdfebd62015-02-02 08:19:11 -080021import android.annotation.SystemApi;
Adrian Roos7811d9f2015-07-27 15:10:13 -070022import android.app.ActivityThread;
Billy Lau6ad2d662015-07-18 00:26:58 +010023import android.app.AppOpsManager;
Adrian Roos7811d9f2015-07-27 15:10:13 -070024import android.app.Application;
Narayan Kamathee69ff42011-06-28 12:07:18 +010025import android.app.SearchManager;
Jeff Sharkey6e2bee72012-10-01 13:39:08 -070026import android.app.WallpaperManager;
Mike LeBeau5d34e9b2010-02-10 19:34:56 -080027import android.content.ComponentName;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080028import android.content.ContentResolver;
29import android.content.ContentValues;
30import android.content.Context;
Brad Fitzpatrick1877d012010-03-04 17:48:13 -080031import android.content.IContentProvider;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080032import android.content.Intent;
Dianne Hackbornb8b11a02010-03-10 15:53:11 -080033import android.content.pm.ActivityInfo;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080034import android.content.pm.PackageManager;
35import android.content.pm.ResolveInfo;
36import android.content.res.Configuration;
37import android.content.res.Resources;
38import android.database.Cursor;
39import android.database.SQLException;
David Christie3f7b6522013-08-06 19:19:08 -070040import android.location.LocationManager;
Jeff Sharkey625239a2012-09-26 22:03:49 -070041import android.net.ConnectivityManager;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080042import android.net.Uri;
Irfan Sheriff36f74132010-11-04 16:57:37 -070043import android.net.wifi.WifiManager;
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -070044import android.os.BatteryManager;
Billy Lau6ad2d662015-07-18 00:26:58 +010045import android.os.Binder;
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -070046import android.os.Bundle;
Jeff Sharkey625239a2012-09-26 22:03:49 -070047import android.os.DropBoxManager;
Amith Yamasani52c489c2012-03-28 11:42:42 -070048import android.os.IBinder;
Amith Yamasani7ab8c4a2012-04-06 09:27:12 -070049import android.os.Process;
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -070050import android.os.RemoteException;
Amith Yamasani52c489c2012-03-28 11:42:42 -070051import android.os.ServiceManager;
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -070052import android.os.SystemProperties;
Dianne Hackbornf02b60a2012-08-16 10:48:27 -070053import android.os.UserHandle;
Jeff Sharkey625239a2012-09-26 22:03:49 -070054import android.os.Build.VERSION_CODES;
Narayan Kamath6d632962011-08-24 11:51:37 +010055import android.speech.tts.TextToSpeech;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080056import android.text.TextUtils;
57import android.util.AndroidException;
Svetoslav683914b2015-01-15 14:22:26 -080058import android.util.ArrayMap;
59import android.util.ArraySet;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080060import android.util.Log;
61
Svetoslav683914b2015-01-15 14:22:26 -080062import com.android.internal.util.ArrayUtils;
Amith Yamasani52c489c2012-03-28 11:42:42 -070063import com.android.internal.widget.ILockSettings;
64
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080065import java.net.URISyntaxException;
Svetoslav683914b2015-01-15 14:22:26 -080066import java.text.SimpleDateFormat;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080067import java.util.HashMap;
68import java.util.HashSet;
Elliott Hughescb64d432013-08-02 10:00:44 -070069import java.util.Locale;
Svetoslav683914b2015-01-15 14:22:26 -080070import java.util.Map;
71import java.util.Set;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080072
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080073/**
74 * The Settings provider contains global system-level device preferences.
75 */
76public final class Settings {
77
78 // Intent actions for Settings
79
80 /**
81 * Activity Action: Show system settings.
82 * <p>
83 * Input: Nothing.
84 * <p>
Gilles Debunnee90bed12011-08-30 14:28:27 -070085 * Output: Nothing.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080086 */
87 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
88 public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
89
90 /**
91 * Activity Action: Show settings to allow configuration of APNs.
92 * <p>
93 * Input: Nothing.
94 * <p>
Gilles Debunnee90bed12011-08-30 14:28:27 -070095 * Output: Nothing.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080096 */
97 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
98 public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS";
99
100 /**
101 * Activity Action: Show settings to allow configuration of current location
102 * sources.
103 * <p>
104 * In some cases, a matching Activity may not exist, so ensure you
105 * safeguard against this.
106 * <p>
107 * Input: Nothing.
108 * <p>
109 * Output: Nothing.
110 */
111 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
112 public static final String ACTION_LOCATION_SOURCE_SETTINGS =
113 "android.settings.LOCATION_SOURCE_SETTINGS";
114
115 /**
116 * Activity Action: Show settings to allow configuration of wireless controls
117 * such as Wi-Fi, Bluetooth and Mobile networks.
118 * <p>
119 * In some cases, a matching Activity may not exist, so ensure you
120 * safeguard against this.
121 * <p>
122 * Input: Nothing.
123 * <p>
124 * Output: Nothing.
125 */
126 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
127 public static final String ACTION_WIRELESS_SETTINGS =
128 "android.settings.WIRELESS_SETTINGS";
129
130 /**
131 * Activity Action: Show settings to allow entering/exiting airplane mode.
132 * <p>
133 * In some cases, a matching Activity may not exist, so ensure you
134 * safeguard against this.
135 * <p>
136 * Input: Nothing.
137 * <p>
138 * Output: Nothing.
139 */
140 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
141 public static final String ACTION_AIRPLANE_MODE_SETTINGS =
142 "android.settings.AIRPLANE_MODE_SETTINGS";
143
144 /**
Barnaby Jamesb3006d32015-04-02 17:49:54 -0700145 * Activity Action: Modify Airplane mode settings using a voice command.
Barnaby James48f35522014-07-16 14:27:39 -0700146 * <p>
147 * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
148 * <p>
149 * This intent MUST be started using
150 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
151 * startVoiceActivity}.
152 * <p>
Barnaby Jamesb3006d32015-04-02 17:49:54 -0700153 * Note: The activity implementing this intent MUST verify that
Barnaby James48f35522014-07-16 14:27:39 -0700154 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
155 * modifying the setting.
156 * <p>
Barnaby Jamesb3006d32015-04-02 17:49:54 -0700157 * Input: To tell which state airplane mode should be set to, add the
158 * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified.
159 * If the extra is not included, no changes will be made.
Barnaby James48f35522014-07-16 14:27:39 -0700160 * <p>
161 * Output: Nothing.
162 */
163 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
164 public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE =
165 "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
166
167 /**
Dianne Hackborndd9b82c2009-09-03 00:18:47 -0700168 * Activity Action: Show settings for accessibility modules.
169 * <p>
170 * In some cases, a matching Activity may not exist, so ensure you
171 * safeguard against this.
172 * <p>
173 * Input: Nothing.
174 * <p>
175 * Output: Nothing.
176 */
177 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
178 public static final String ACTION_ACCESSIBILITY_SETTINGS =
179 "android.settings.ACCESSIBILITY_SETTINGS";
180
181 /**
Dianne Hackborna3fb40d2014-08-12 15:06:50 -0700182 * Activity Action: Show settings to control access to usage information.
183 * <p>
184 * In some cases, a matching Activity may not exist, so ensure you
185 * safeguard against this.
186 * <p>
187 * Input: Nothing.
188 * <p>
189 * Output: Nothing.
190 */
191 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
192 public static final String ACTION_USAGE_ACCESS_SETTINGS =
193 "android.settings.USAGE_ACCESS_SETTINGS";
194
195 /**
Jason Monk6f909782015-04-17 14:30:25 -0400196 * Activity Category: Show application settings related to usage access.
197 * <p>
198 * An activity that provides a user interface for adjusting usage access related
199 * preferences for its containing application. Optional but recommended for apps that
200 * use {@link android.Manifest.permission#PACKAGE_USAGE_STATS}.
201 * <p>
202 * The activity may define meta-data to describe what usage access is
203 * used for within their app with {@link #METADATA_USAGE_ACCESS_REASON}, which
204 * will be displayed in Settings.
205 * <p>
206 * Input: Nothing.
207 * <p>
208 * Output: Nothing.
209 */
210 @SdkConstant(SdkConstantType.INTENT_CATEGORY)
211 public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG =
212 "android.intent.category.USAGE_ACCESS_CONFIG";
213
214 /**
215 * Metadata key: Reason for needing usage access.
216 * <p>
217 * A key for metadata attached to an activity that receives action
218 * {@link #INTENT_CATEGORY_USAGE_ACCESS_CONFIG}, shown to the
219 * user as description of how the app uses usage access.
220 * <p>
221 */
222 public static final String METADATA_USAGE_ACCESS_REASON =
223 "android.settings.metadata.USAGE_ACCESS_REASON";
224
225 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800226 * Activity Action: Show settings to allow configuration of security and
227 * location privacy.
228 * <p>
229 * In some cases, a matching Activity may not exist, so ensure you
230 * safeguard against this.
231 * <p>
232 * Input: Nothing.
233 * <p>
234 * Output: Nothing.
235 */
236 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
237 public static final String ACTION_SECURITY_SETTINGS =
238 "android.settings.SECURITY_SETTINGS";
239
240 /**
Maggie Benthall0469f412013-09-05 15:30:26 -0400241 * Activity Action: Show trusted credentials settings, opening to the user tab,
242 * to allow management of installed credentials.
243 * <p>
244 * In some cases, a matching Activity may not exist, so ensure you
245 * safeguard against this.
246 * <p>
247 * Input: Nothing.
248 * <p>
249 * Output: Nothing.
250 * @hide
251 */
252 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
253 public static final String ACTION_TRUSTED_CREDENTIALS_USER =
254 "com.android.settings.TRUSTED_CREDENTIALS_USER";
255
256 /**
257 * Activity Action: Show dialog explaining that an installed CA cert may enable
258 * monitoring of encrypted network traffic.
259 * <p>
260 * In some cases, a matching Activity may not exist, so ensure you
261 * safeguard against this.
262 * <p>
263 * Input: Nothing.
264 * <p>
265 * Output: Nothing.
266 * @hide
267 */
268 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
269 public static final String ACTION_MONITORING_CERT_INFO =
270 "com.android.settings.MONITORING_CERT_INFO";
271
272 /**
Amith Yamasanic15255a2009-09-23 15:33:19 -0700273 * Activity Action: Show settings to allow configuration of privacy options.
274 * <p>
275 * In some cases, a matching Activity may not exist, so ensure you
276 * safeguard against this.
277 * <p>
278 * Input: Nothing.
279 * <p>
280 * Output: Nothing.
281 */
282 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
283 public static final String ACTION_PRIVACY_SETTINGS =
284 "android.settings.PRIVACY_SETTINGS";
285
286 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800287 * Activity Action: Show settings to allow configuration of Wi-Fi.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800288 * <p>
289 * In some cases, a matching Activity may not exist, so ensure you
290 * safeguard against this.
291 * <p>
292 * Input: Nothing.
293 * <p>
294 * Output: Nothing.
295
296 */
297 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
298 public static final String ACTION_WIFI_SETTINGS =
299 "android.settings.WIFI_SETTINGS";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700300
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800301 /**
302 * Activity Action: Show settings to allow configuration of a static IP
303 * address for Wi-Fi.
304 * <p>
305 * In some cases, a matching Activity may not exist, so ensure you safeguard
306 * against this.
307 * <p>
308 * Input: Nothing.
309 * <p>
310 * Output: Nothing.
311 */
312 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
313 public static final String ACTION_WIFI_IP_SETTINGS =
314 "android.settings.WIFI_IP_SETTINGS";
315
316 /**
317 * Activity Action: Show settings to allow configuration of Bluetooth.
318 * <p>
319 * In some cases, a matching Activity may not exist, so ensure you
320 * safeguard against this.
321 * <p>
322 * Input: Nothing.
323 * <p>
324 * Output: Nothing.
325 */
326 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
327 public static final String ACTION_BLUETOOTH_SETTINGS =
328 "android.settings.BLUETOOTH_SETTINGS";
329
330 /**
Jeff Brownc05c1ae2015-05-05 13:46:30 -0700331 * Activity Action: Show settings to allow configuration of cast endpoints.
Jeff Brown1a937b02014-07-01 22:13:04 -0700332 * <p>
333 * In some cases, a matching Activity may not exist, so ensure you
334 * safeguard against this.
335 * <p>
336 * Input: Nothing.
337 * <p>
338 * Output: Nothing.
339 */
340 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
341 public static final String ACTION_CAST_SETTINGS =
342 "android.settings.CAST_SETTINGS";
343
344 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800345 * Activity Action: Show settings to allow configuration of date and time.
346 * <p>
347 * In some cases, a matching Activity may not exist, so ensure you
348 * safeguard against this.
349 * <p>
350 * Input: Nothing.
351 * <p>
352 * Output: Nothing.
353 */
354 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
355 public static final String ACTION_DATE_SETTINGS =
356 "android.settings.DATE_SETTINGS";
357
358 /**
359 * Activity Action: Show settings to allow configuration of sound and volume.
360 * <p>
361 * In some cases, a matching Activity may not exist, so ensure you
362 * safeguard against this.
363 * <p>
364 * Input: Nothing.
365 * <p>
366 * Output: Nothing.
367 */
368 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
369 public static final String ACTION_SOUND_SETTINGS =
370 "android.settings.SOUND_SETTINGS";
371
372 /**
373 * Activity Action: Show settings to allow configuration of display.
374 * <p>
375 * In some cases, a matching Activity may not exist, so ensure you
376 * safeguard against this.
377 * <p>
378 * Input: Nothing.
379 * <p>
380 * Output: Nothing.
381 */
382 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
383 public static final String ACTION_DISPLAY_SETTINGS =
384 "android.settings.DISPLAY_SETTINGS";
385
386 /**
387 * Activity Action: Show settings to allow configuration of locale.
388 * <p>
389 * In some cases, a matching Activity may not exist, so ensure you
390 * safeguard against this.
391 * <p>
392 * Input: Nothing.
393 * <p>
394 * Output: Nothing.
395 */
396 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
397 public static final String ACTION_LOCALE_SETTINGS =
398 "android.settings.LOCALE_SETTINGS";
399
400 /**
401 * Activity Action: Show settings to configure input methods, in particular
402 * allowing the user to enable input methods.
403 * <p>
404 * In some cases, a matching Activity may not exist, so ensure you
405 * safeguard against this.
406 * <p>
407 * Input: Nothing.
408 * <p>
409 * Output: Nothing.
410 */
411 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
Dianne Hackborna3fb40d2014-08-12 15:06:50 -0700412 public static final String ACTION_VOICE_INPUT_SETTINGS =
413 "android.settings.VOICE_INPUT_SETTINGS";
414
415 /**
416 * Activity Action: Show settings to configure input methods, in particular
417 * allowing the user to enable input methods.
418 * <p>
419 * In some cases, a matching Activity may not exist, so ensure you
420 * safeguard against this.
421 * <p>
422 * Input: Nothing.
423 * <p>
424 * Output: Nothing.
425 */
426 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800427 public static final String ACTION_INPUT_METHOD_SETTINGS =
428 "android.settings.INPUT_METHOD_SETTINGS";
429
430 /**
Tadashi G. Takaokaf49688f2011-01-20 17:56:13 +0900431 * Activity Action: Show settings to enable/disable input method subtypes.
satok86417ea2010-10-27 14:11:03 +0900432 * <p>
433 * In some cases, a matching Activity may not exist, so ensure you
434 * safeguard against this.
435 * <p>
Tadashi G. Takaoka25480202011-01-20 23:13:02 +0900436 * To tell which input method's subtypes are displayed in the settings, add
437 * {@link #EXTRA_INPUT_METHOD_ID} extra to this Intent with the input method id.
438 * If there is no extra in this Intent, subtypes from all installed input methods
439 * will be displayed in the settings.
440 *
441 * @see android.view.inputmethod.InputMethodInfo#getId
442 * <p>
satok86417ea2010-10-27 14:11:03 +0900443 * Input: Nothing.
444 * <p>
445 * Output: Nothing.
446 */
447 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
Tadashi G. Takaokaf49688f2011-01-20 17:56:13 +0900448 public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS =
449 "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
satok86417ea2010-10-27 14:11:03 +0900450
451 /**
satok7cfc0ed2011-06-20 21:29:36 +0900452 * Activity Action: Show a dialog to select input method.
453 * <p>
454 * In some cases, a matching Activity may not exist, so ensure you
455 * safeguard against this.
456 * <p>
457 * Input: Nothing.
458 * <p>
459 * Output: Nothing.
460 * @hide
461 */
462 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
463 public static final String ACTION_SHOW_INPUT_METHOD_PICKER =
464 "android.settings.SHOW_INPUT_METHOD_PICKER";
465
466 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800467 * Activity Action: Show settings to manage the user input dictionary.
468 * <p>
Chet Haasee8222dd2013-09-05 07:44:18 -0700469 * Starting with {@link android.os.Build.VERSION_CODES#KITKAT},
Satoshi Kataoka2aa2bc52013-07-30 14:25:11 +0900470 * it is guaranteed there will always be an appropriate implementation for this Intent action.
471 * In prior releases of the platform this was optional, so ensure you safeguard against it.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800472 * <p>
473 * Input: Nothing.
474 * <p>
475 * Output: Nothing.
476 */
477 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
478 public static final String ACTION_USER_DICTIONARY_SETTINGS =
479 "android.settings.USER_DICTIONARY_SETTINGS";
480
481 /**
Gilles Debunnee90bed12011-08-30 14:28:27 -0700482 * Activity Action: Adds a word to the user dictionary.
483 * <p>
484 * In some cases, a matching Activity may not exist, so ensure you
485 * safeguard against this.
486 * <p>
487 * Input: An extra with key <code>word</code> that contains the word
488 * that should be added to the dictionary.
489 * <p>
490 * Output: Nothing.
491 *
492 * @hide
493 */
494 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
495 public static final String ACTION_USER_DICTIONARY_INSERT =
496 "com.android.settings.USER_DICTIONARY_INSERT";
497
498 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800499 * Activity Action: Show settings to allow configuration of application-related settings.
500 * <p>
501 * In some cases, a matching Activity may not exist, so ensure you
502 * safeguard against this.
503 * <p>
504 * Input: Nothing.
505 * <p>
506 * Output: Nothing.
507 */
508 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
509 public static final String ACTION_APPLICATION_SETTINGS =
510 "android.settings.APPLICATION_SETTINGS";
511
512 /**
513 * Activity Action: Show settings to allow configuration of application
Dianne Hackborn8d866e52012-10-10 18:39:45 -0700514 * development-related settings. As of
515 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} this action is
516 * a required part of the platform.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800517 * <p>
518 * Input: Nothing.
519 * <p>
520 * Output: Nothing.
521 */
522 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
523 public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS =
524 "android.settings.APPLICATION_DEVELOPMENT_SETTINGS";
525
526 /**
527 * Activity Action: Show settings to allow configuration of quick launch shortcuts.
528 * <p>
529 * In some cases, a matching Activity may not exist, so ensure you
530 * safeguard against this.
531 * <p>
532 * Input: Nothing.
533 * <p>
534 * Output: Nothing.
535 */
536 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
537 public static final String ACTION_QUICK_LAUNCH_SETTINGS =
538 "android.settings.QUICK_LAUNCH_SETTINGS";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700539
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800540 /**
541 * Activity Action: Show settings to manage installed applications.
542 * <p>
543 * In some cases, a matching Activity may not exist, so ensure you
544 * safeguard against this.
545 * <p>
546 * Input: Nothing.
547 * <p>
548 * Output: Nothing.
549 */
550 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
551 public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS =
552 "android.settings.MANAGE_APPLICATIONS_SETTINGS";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700553
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800554 /**
Winson Chung44e8ff92010-09-27 14:36:52 -0700555 * Activity Action: Show settings to manage all applications.
556 * <p>
557 * In some cases, a matching Activity may not exist, so ensure you
558 * safeguard against this.
559 * <p>
560 * Input: Nothing.
561 * <p>
562 * Output: Nothing.
563 */
564 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
565 public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS =
566 "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
567
568 /**
Billy Lau6ad2d662015-07-18 00:26:58 +0100569 * Activity Action: Show screen for controlling which apps can draw on top of other apps.
Billy Laucbe540f2015-06-25 01:51:44 +0100570 * <p>
571 * In some cases, a matching Activity may not exist, so ensure you
572 * safeguard against this.
573 * <p>
Billy Lau6ad2d662015-07-18 00:26:58 +0100574 * Input: Optionally, the Intent's data URI can specify the application package name to
575 * directly invoke the management GUI specific to the package name. For example
576 * "package:com.my.app".
Billy Laucbe540f2015-06-25 01:51:44 +0100577 * <p>
578 * Output: Nothing.
579 */
580 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
581 public static final String ACTION_MANAGE_OVERLAY_PERMISSION =
Billy Lau22b3f4c2015-07-08 00:31:01 +0100582 "android.settings.action.MANAGE_OVERLAY_PERMISSION";
583
584 /**
Billy Lau6ad2d662015-07-18 00:26:58 +0100585 * Activity Action: Show screen for controlling which apps are allowed to write/modify
586 * system settings.
Billy Lau22b3f4c2015-07-08 00:31:01 +0100587 * <p>
588 * In some cases, a matching Activity may not exist, so ensure you
589 * safeguard against this.
590 * <p>
Billy Lau6ad2d662015-07-18 00:26:58 +0100591 * Input: Optionally, the Intent's data URI can specify the application package name to
592 * directly invoke the management GUI specific to the package name. For example
593 * "package:com.my.app".
Billy Lau22b3f4c2015-07-08 00:31:01 +0100594 * <p>
595 * Output: Nothing.
596 */
597 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
598 public static final String ACTION_MANAGE_WRITE_SETTINGS =
599 "android.settings.action.MANAGE_WRITE_SETTINGS";
Billy Laucbe540f2015-06-25 01:51:44 +0100600
601 /**
Dianne Hackbornb7bb3b32010-06-06 22:47:50 -0700602 * Activity Action: Show screen of details about a particular application.
603 * <p>
604 * In some cases, a matching Activity may not exist, so ensure you
605 * safeguard against this.
606 * <p>
607 * Input: The Intent's data URI specifies the application package name
608 * to be shown, with the "package" scheme. That is "package:com.my.app".
609 * <p>
610 * Output: Nothing.
611 */
612 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
613 public static final String ACTION_APPLICATION_DETAILS_SETTINGS =
614 "android.settings.APPLICATION_DETAILS_SETTINGS";
615
616 /**
Jason Monk287b8892015-06-10 10:39:23 -0400617 * Activity Action: Show screen for controlling which apps can ignore battery optimizations.
618 * <p>
Dianne Hackbornc7b57b12015-08-10 14:52:52 -0700619 * Input: Nothing.
620 * <p>
621 * Output: Nothing.
622 * <p>
623 * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
624 * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
625 * already ignoring optimizations. You can use
626 * {@link #ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS} to ask the user to put you
627 * on this list.
628 */
629 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
630 public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS =
631 "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
632
633 /**
634 * Activity Action: Ask the user to allow an to ignore battery optimizations (that is,
635 * put them on the whitelist of apps shown by
636 * {@link #ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}). For an app to use this, it also
637 * must hold the {@link android.Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}
638 * permission.
639 * <p><b>Note:</b> most applications should <em>not</em> use this; there are many facilities
640 * provided by the platform for applications to operate correctly in the various power
641 * saving mode. This is only for unusual applications that need to deeply control their own
642 * execution, at the potential expense of the user's battery life. Note that these applications
643 * greatly run the risk of showing to the user has how power consumers on their device.</p>
644 * <p>
645 * Input: The Intent's data URI must specify the application package name
Jason Monk287b8892015-06-10 10:39:23 -0400646 * to be shown, with the "package" scheme. That is "package:com.my.app".
647 * <p>
648 * Output: Nothing.
Dianne Hackborn1958e5e2015-06-12 18:11:41 -0700649 * <p>
650 * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations
651 * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is
652 * already ignoring optimizations.
Jason Monk287b8892015-06-10 10:39:23 -0400653 */
654 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
Dianne Hackbornc7b57b12015-08-10 14:52:52 -0700655 public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS =
656 "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
Jason Monk287b8892015-06-10 10:39:23 -0400657
658 /**
Dianne Hackborn35654b62013-01-14 17:38:02 -0800659 * @hide
660 * Activity Action: Show the "app ops" settings screen.
661 * <p>
662 * Input: Nothing.
663 * <p>
664 * Output: Nothing.
665 */
666 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
667 public static final String ACTION_APP_OPS_SETTINGS =
668 "android.settings.APP_OPS_SETTINGS";
669
670 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800671 * Activity Action: Show settings for system update functionality.
672 * <p>
673 * In some cases, a matching Activity may not exist, so ensure you
674 * safeguard against this.
675 * <p>
676 * Input: Nothing.
677 * <p>
678 * Output: Nothing.
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700679 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800680 * @hide
681 */
682 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
683 public static final String ACTION_SYSTEM_UPDATE_SETTINGS =
684 "android.settings.SYSTEM_UPDATE_SETTINGS";
685
686 /**
687 * Activity Action: Show settings to allow configuration of sync settings.
688 * <p>
689 * In some cases, a matching Activity may not exist, so ensure you
690 * safeguard against this.
691 * <p>
Erikeebc8e22010-02-18 13:27:19 -0800692 * The account types available to add via the add account button may be restricted by adding an
693 * {@link #EXTRA_AUTHORITIES} extra to this Intent with one or more syncable content provider's
694 * authorities. Only account types which can sync with that content provider will be offered to
695 * the user.
696 * <p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800697 * Input: Nothing.
698 * <p>
699 * Output: Nothing.
700 */
701 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
702 public static final String ACTION_SYNC_SETTINGS =
703 "android.settings.SYNC_SETTINGS";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700704
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800705 /**
Erikeebc8e22010-02-18 13:27:19 -0800706 * Activity Action: Show add account screen for creating a new account.
707 * <p>
708 * In some cases, a matching Activity may not exist, so ensure you
709 * safeguard against this.
710 * <p>
711 * The account types available to add may be restricted by adding an {@link #EXTRA_AUTHORITIES}
712 * extra to the Intent with one or more syncable content provider's authorities. Only account
713 * types which can sync with that content provider will be offered to the user.
714 * <p>
Alon Albert50359c22013-02-26 14:47:48 -0800715 * Account types can also be filtered by adding an {@link #EXTRA_ACCOUNT_TYPES} extra to the
716 * Intent with one or more account types.
717 * <p>
Erikeebc8e22010-02-18 13:27:19 -0800718 * Input: Nothing.
719 * <p>
720 * Output: Nothing.
721 */
722 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
723 public static final String ACTION_ADD_ACCOUNT =
724 "android.settings.ADD_ACCOUNT_SETTINGS";
725
726 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800727 * Activity Action: Show settings for selecting the network operator.
728 * <p>
729 * In some cases, a matching Activity may not exist, so ensure you
730 * safeguard against this.
731 * <p>
732 * Input: Nothing.
733 * <p>
734 * Output: Nothing.
735 */
736 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
737 public static final String ACTION_NETWORK_OPERATOR_SETTINGS =
738 "android.settings.NETWORK_OPERATOR_SETTINGS";
739
740 /**
741 * Activity Action: Show settings for selection of 2G/3G.
742 * <p>
743 * In some cases, a matching Activity may not exist, so ensure you
744 * safeguard against this.
745 * <p>
746 * Input: Nothing.
747 * <p>
748 * Output: Nothing.
749 */
750 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
751 public static final String ACTION_DATA_ROAMING_SETTINGS =
752 "android.settings.DATA_ROAMING_SETTINGS";
753
754 /**
755 * Activity Action: Show settings for internal storage.
756 * <p>
757 * In some cases, a matching Activity may not exist, so ensure you
758 * safeguard against this.
759 * <p>
760 * Input: Nothing.
761 * <p>
762 * Output: Nothing.
763 */
764 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
765 public static final String ACTION_INTERNAL_STORAGE_SETTINGS =
766 "android.settings.INTERNAL_STORAGE_SETTINGS";
767 /**
768 * Activity Action: Show settings for memory card storage.
769 * <p>
770 * In some cases, a matching Activity may not exist, so ensure you
771 * safeguard against this.
772 * <p>
773 * Input: Nothing.
774 * <p>
775 * Output: Nothing.
776 */
777 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
778 public static final String ACTION_MEMORY_CARD_SETTINGS =
779 "android.settings.MEMORY_CARD_SETTINGS";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700780
Justin Mattsonef340352010-01-13 21:05:46 -0800781 /**
782 * Activity Action: Show settings for global search.
783 * <p>
784 * In some cases, a matching Activity may not exist, so ensure you
785 * safeguard against this.
786 * <p>
787 * Input: Nothing.
788 * <p>
789 * Output: Nothing
790 */
791 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
792 public static final String ACTION_SEARCH_SETTINGS =
793 "android.search.action.SEARCH_SETTINGS";
794
Daniel Sandler9d8b8762010-01-22 20:50:15 -0500795 /**
796 * Activity Action: Show general device information settings (serial
797 * number, software version, phone number, etc.).
798 * <p>
799 * In some cases, a matching Activity may not exist, so ensure you
800 * safeguard against this.
801 * <p>
802 * Input: Nothing.
803 * <p>
804 * Output: Nothing
805 */
806 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
807 public static final String ACTION_DEVICE_INFO_SETTINGS =
808 "android.settings.DEVICE_INFO_SETTINGS";
809
Martijn Coenen9b3c83f2011-07-28 11:21:39 -0500810 /**
Nick Pellycccf01d2011-10-31 14:49:40 -0700811 * Activity Action: Show NFC settings.
812 * <p>
813 * This shows UI that allows NFC to be turned on or off.
Martijn Coenen9b3c83f2011-07-28 11:21:39 -0500814 * <p>
815 * In some cases, a matching Activity may not exist, so ensure you
816 * safeguard against this.
817 * <p>
818 * Input: Nothing.
819 * <p>
820 * Output: Nothing
Nick Pellycccf01d2011-10-31 14:49:40 -0700821 * @see android.nfc.NfcAdapter#isEnabled()
822 */
823 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
824 public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
825
826 /**
827 * Activity Action: Show NFC Sharing settings.
828 * <p>
829 * This shows UI that allows NDEF Push (Android Beam) to be turned on or
830 * off.
831 * <p>
832 * In some cases, a matching Activity may not exist, so ensure you
833 * safeguard against this.
834 * <p>
835 * Input: Nothing.
836 * <p>
837 * Output: Nothing
838 * @see android.nfc.NfcAdapter#isNdefPushEnabled()
Martijn Coenen9b3c83f2011-07-28 11:21:39 -0500839 */
840 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
841 public static final String ACTION_NFCSHARING_SETTINGS =
842 "android.settings.NFCSHARING_SETTINGS";
843
Daniel Sandlerc08cd022012-11-27 22:47:37 -0500844 /**
Martijn Coenen62c196a2013-08-09 13:43:34 -0700845 * Activity Action: Show NFC Tap & Pay settings
846 * <p>
847 * This shows UI that allows the user to configure Tap&Pay
848 * settings.
849 * <p>
850 * In some cases, a matching Activity may not exist, so ensure you
851 * safeguard against this.
852 * <p>
853 * Input: Nothing.
854 * <p>
855 * Output: Nothing
856 */
857 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
858 public static final String ACTION_NFC_PAYMENT_SETTINGS =
859 "android.settings.NFC_PAYMENT_SETTINGS";
860
861 /**
Daniel Sandlerc08cd022012-11-27 22:47:37 -0500862 * Activity Action: Show Daydream settings.
863 * <p>
864 * In some cases, a matching Activity may not exist, so ensure you
865 * safeguard against this.
866 * <p>
867 * Input: Nothing.
868 * <p>
869 * Output: Nothing.
870 * @see android.service.dreams.DreamService
Daniel Sandlerc08cd022012-11-27 22:47:37 -0500871 */
872 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
873 public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
874
Daniel Sandler5feceeb2013-03-22 18:29:23 -0700875 /**
876 * Activity Action: Show Notification listener settings.
877 * <p>
878 * In some cases, a matching Activity may not exist, so ensure you
879 * safeguard against this.
880 * <p>
881 * Input: Nothing.
882 * <p>
883 * Output: Nothing.
884 * @see android.service.notification.NotificationListenerService
Daniel Sandler5feceeb2013-03-22 18:29:23 -0700885 */
886 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
887 public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS
Chris Wren8326a8a2014-10-22 14:13:32 -0400888 = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
Daniel Sandler5feceeb2013-03-22 18:29:23 -0700889
Alan Viverette69ce69b2013-08-29 12:23:48 -0700890 /**
John Spurlock80774932015-05-07 17:38:50 -0400891 * Activity Action: Show Do Not Disturb access settings.
892 * <p>
John Spurlock7c74f782015-06-04 13:01:42 -0400893 * Users can grant and deny access to Do Not Disturb configuration from here.
894 * See {@link android.app.NotificationManager#isNotificationPolicyAccessGranted()} for more
895 * details.
John Spurlock80774932015-05-07 17:38:50 -0400896 * <p>
897 * Input: Nothing.
898 * <p>
899 * Output: Nothing.
900 */
901 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
John Spurlock7c74f782015-06-04 13:01:42 -0400902 public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
903 = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS";
John Spurlock80774932015-05-07 17:38:50 -0400904
905 /**
John Spurlock7340fc82014-04-24 18:50:12 -0400906 * @hide
907 */
908 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
909 public static final String ACTION_CONDITION_PROVIDER_SETTINGS
910 = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
911
912 /**
Alan Viverette69ce69b2013-08-29 12:23:48 -0700913 * Activity Action: Show settings for video captioning.
914 * <p>
915 * In some cases, a matching Activity may not exist, so ensure you safeguard
916 * against this.
917 * <p>
918 * Input: Nothing.
919 * <p>
920 * Output: Nothing.
921 */
922 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
923 public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
924
Svetoslav773f54d2013-09-03 14:01:43 -0700925 /**
926 * Activity Action: Show the top level print settings.
927 * <p>
928 * In some cases, a matching Activity may not exist, so ensure you
929 * safeguard against this.
930 * <p>
931 * Input: Nothing.
932 * <p>
933 * Output: Nothing.
934 */
935 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
936 public static final String ACTION_PRINT_SETTINGS =
937 "android.settings.ACTION_PRINT_SETTINGS";
938
John Spurlockde547002014-02-28 17:50:39 -0500939 /**
940 * Activity Action: Show Zen Mode configuration settings.
941 *
942 * @hide
943 */
944 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
945 public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
946
Santos Cordona4c75242014-07-09 12:07:51 -0700947 /**
John Spurlockfc746f82015-04-03 13:47:14 -0400948 * Activity Action: Show Zen Mode priority configuration settings.
949 *
950 * @hide
951 */
952 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
953 public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS
954 = "android.settings.ZEN_MODE_PRIORITY_SETTINGS";
955
956 /**
John Spurlock7af10182015-04-03 15:10:31 -0400957 * Activity Action: Show Zen Mode automation configuration settings.
958 *
959 * @hide
960 */
961 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
962 public static final String ACTION_ZEN_MODE_AUTOMATION_SETTINGS
963 = "android.settings.ZEN_MODE_AUTOMATION_SETTINGS";
964
965 /**
Barnaby Jamesb3006d32015-04-02 17:49:54 -0700966 * Activity Action: Modify do not disturb mode settings.
967 * <p>
968 * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
969 * <p>
970 * This intent MUST be started using
971 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
972 * startVoiceActivity}.
973 * <p>
974 * Note: The Activity implementing this intent MUST verify that
975 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}.
976 * returns true before modifying the setting.
977 * <p>
978 * Input: The optional {@link #EXTRA_DO_NOT_DISTURB_MODE_MINUTES} extra can be used to indicate
979 * how long the user wishes to avoid interruptions for. The optional
980 * {@link #EXTRA_DO_NOT_DISTURB_MODE_ENABLED} extra can be to indicate if the user is
981 * enabling or disabling do not disturb mode. If either extra is not included, the
982 * user maybe asked to provide the value.
983 * <p>
984 * Output: Nothing.
985 */
986 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
987 public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE =
988 "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE";
989
990 /**
John Spurlockb2278d62015-04-07 12:47:12 -0400991 * Activity Action: Show Zen Mode schedule rule configuration settings.
992 *
993 * @hide
994 */
995 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
996 public static final String ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS
997 = "android.settings.ZEN_MODE_SCHEDULE_RULE_SETTINGS";
998
999 /**
John Spurlockd60258f2015-04-30 09:30:52 -04001000 * Activity Action: Show Zen Mode event rule configuration settings.
1001 *
1002 * @hide
1003 */
1004 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1005 public static final String ACTION_ZEN_MODE_EVENT_RULE_SETTINGS
1006 = "android.settings.ZEN_MODE_EVENT_RULE_SETTINGS";
1007
1008 /**
John Spurlock39581cc2015-04-10 11:59:01 -04001009 * Activity Action: Show Zen Mode external rule configuration settings.
1010 *
1011 * @hide
1012 */
1013 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1014 public static final String ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS
1015 = "android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS";
1016
1017 /**
Santos Cordona4c75242014-07-09 12:07:51 -07001018 * Activity Action: Show the regulatory information screen for the device.
1019 * <p>
1020 * In some cases, a matching Activity may not exist, so ensure you safeguard
1021 * against this.
1022 * <p>
1023 * Input: Nothing.
1024 * <p>
1025 * Output: Nothing.
1026 */
Jeff Sharkeydd77fda2014-04-16 17:23:08 -07001027 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1028 public static final String
1029 ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
1030
Jerome Poichet7974cb32014-05-14 12:04:43 -07001031 /**
1032 * Activity Action: Show Device Name Settings.
1033 * <p>
1034 * In some cases, a matching Activity may not exist, so ensure you safeguard
Tim Kilbourn87cd0dc2014-04-14 15:37:51 -07001035 * against this.
Jerome Poichet7974cb32014-05-14 12:04:43 -07001036 *
1037 * @hide
1038 */
1039 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1040 public static final String DEVICE_NAME_SETTINGS = "android.settings.DEVICE_NAME";
1041
Tim Kilbourn87cd0dc2014-04-14 15:37:51 -07001042 /**
1043 * Activity Action: Show pairing settings.
1044 * <p>
1045 * In some cases, a matching Activity may not exist, so ensure you safeguard
1046 * against this.
1047 *
1048 * @hide
1049 */
1050 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1051 public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS";
1052
John Spurlockf8f524c2014-06-10 14:47:29 -04001053 /**
1054 * Activity Action: Show battery saver settings.
John Spurlock73466662014-10-30 13:42:05 -04001055 * <p>
1056 * In some cases, a matching Activity may not exist, so ensure you safeguard
1057 * against this.
John Spurlockf8f524c2014-06-10 14:47:29 -04001058 */
1059 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1060 public static final String ACTION_BATTERY_SAVER_SETTINGS
1061 = "android.settings.BATTERY_SAVER_SETTINGS";
1062
Amith Yamasanieb7b94a2014-07-14 18:02:08 -07001063 /**
Barnaby Jamesb3006d32015-04-02 17:49:54 -07001064 * Activity Action: Modify Battery Saver mode setting using a voice command.
1065 * <p>
1066 * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
1067 * <p>
1068 * This intent MUST be started using
1069 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
1070 * startVoiceActivity}.
1071 * <p>
1072 * Note: The activity implementing this intent MUST verify that
1073 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
1074 * modifying the setting.
1075 * <p>
1076 * Input: To tell which state batter saver mode should be set to, add the
1077 * {@link #EXTRA_BATTERY_SAVER_MODE_ENABLED} extra to this Intent with the state specified.
1078 * If the extra is not included, no changes will be made.
1079 * <p>
1080 * Output: Nothing.
1081 */
1082 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1083 public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE =
1084 "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE";
1085
1086 /**
Amith Yamasanieb7b94a2014-07-14 18:02:08 -07001087 * Activity Action: Show Home selection settings. If there are multiple activities
1088 * that can satisfy the {@link Intent#CATEGORY_HOME} intent, this screen allows you
1089 * to pick your preferred activity.
1090 */
1091 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1092 public static final String ACTION_HOME_SETTINGS
1093 = "android.settings.HOME_SETTINGS";
1094
Julia Reynolds7eba5932015-12-11 16:40:39 -05001095
1096
1097 /**
1098 * Activity Action: Show Default apps settings.
1099 * <p>
1100 * In some cases, a matching Activity may not exist, so ensure you
1101 * safeguard against this.
1102 * <p>
1103 * Input: Nothing.
1104 * <p>
1105 * Output: Nothing.
1106 */
1107 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1108 public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS
1109 = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
1110
John Spurlock2b0e09c2014-07-27 13:27:47 -04001111 /**
1112 * Activity Action: Show notification settings.
1113 *
1114 * @hide
1115 */
1116 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1117 public static final String ACTION_NOTIFICATION_SETTINGS
1118 = "android.settings.NOTIFICATION_SETTINGS";
1119
1120 /**
1121 * Activity Action: Show notification settings for a single app.
1122 *
1123 * @hide
1124 */
1125 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1126 public static final String ACTION_APP_NOTIFICATION_SETTINGS
1127 = "android.settings.APP_NOTIFICATION_SETTINGS";
1128
Chris Wrencd8f4f72014-08-27 18:48:13 -04001129 /**
1130 * Activity Action: Show notification redaction settings.
1131 *
1132 * @hide
1133 */
1134 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1135 public static final String ACTION_APP_NOTIFICATION_REDACTION
1136 = "android.settings.ACTION_APP_NOTIFICATION_REDACTION";
1137
John Spurlock2b0e09c2014-07-27 13:27:47 -04001138 /** @hide */ public static final String EXTRA_APP_UID = "app_uid";
1139 /** @hide */ public static final String EXTRA_APP_PACKAGE = "app_package";
1140
Sudheer Shanka410e6bd2015-12-31 15:29:50 +00001141 /**
1142 * Activity Action: Show a dialog with disabled by policy message.
1143 * <p> If an user action is disabled by policy, this dialog can be triggered to let
1144 * the user know about this.
1145 * <p>
1146 * Input: Nothing.
1147 * <p>
1148 * Output: Nothing.
1149 */
1150 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
1151 public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS
1152 = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
1153
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001154 // End of Intent actions for Settings
1155
Erikeebc8e22010-02-18 13:27:19 -08001156 /**
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001157 * @hide - Private call() method on SettingsProvider to read from 'system' table.
1158 */
1159 public static final String CALL_METHOD_GET_SYSTEM = "GET_system";
1160
1161 /**
1162 * @hide - Private call() method on SettingsProvider to read from 'secure' table.
1163 */
1164 public static final String CALL_METHOD_GET_SECURE = "GET_secure";
1165
1166 /**
Christopher Tate06efb532012-08-24 15:29:27 -07001167 * @hide - Private call() method on SettingsProvider to read from 'global' table.
1168 */
1169 public static final String CALL_METHOD_GET_GLOBAL = "GET_global";
1170
1171 /**
1172 * @hide - User handle argument extra to the fast-path call()-based requests
1173 */
1174 public static final String CALL_METHOD_USER_KEY = "_user";
1175
1176 /** @hide - Private call() method to write to 'system' table */
1177 public static final String CALL_METHOD_PUT_SYSTEM = "PUT_system";
1178
1179 /** @hide - Private call() method to write to 'secure' table */
1180 public static final String CALL_METHOD_PUT_SECURE = "PUT_secure";
1181
1182 /** @hide - Private call() method to write to 'global' table */
1183 public static final String CALL_METHOD_PUT_GLOBAL= "PUT_global";
1184
1185 /**
Erikeebc8e22010-02-18 13:27:19 -08001186 * Activity Extra: Limit available options in launched activity based on the given authority.
1187 * <p>
1188 * This can be passed as an extra field in an Activity Intent with one or more syncable content
1189 * provider's authorities as a String[]. This field is used by some intents to alter the
1190 * behavior of the called activity.
1191 * <p>
1192 * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types available based
1193 * on the authority given.
1194 */
Alon Albert50359c22013-02-26 14:47:48 -08001195 public static final String EXTRA_AUTHORITIES = "authorities";
1196
Alon Albertd35bf1f2013-04-18 14:26:51 -07001197 /**
1198 * Activity Extra: Limit available options in launched activity based on the given account
1199 * types.
1200 * <p>
1201 * This can be passed as an extra field in an Activity Intent with one or more account types
1202 * as a String[]. This field is used by some intents to alter the behavior of the called
1203 * activity.
1204 * <p>
1205 * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types to the specified
1206 * list.
1207 */
Alon Albert50359c22013-02-26 14:47:48 -08001208 public static final String EXTRA_ACCOUNT_TYPES = "account_types";
Erikeebc8e22010-02-18 13:27:19 -08001209
Tadashi G. Takaoka25480202011-01-20 23:13:02 +09001210 public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
1211
Barnaby James48f35522014-07-16 14:27:39 -07001212 /**
Michael Wrightc93fbd12014-09-22 20:07:59 -07001213 * Activity Extra: The device identifier to act upon.
1214 * <p>
1215 * This can be passed as an extra field in an Activity Intent with a single
1216 * InputDeviceIdentifier. This field is used by some activities to jump straight into the
1217 * settings for the given device.
1218 * <p>
Dianne Hackbornad6a99b2014-11-18 10:11:10 -08001219 * Example: The {@link #ACTION_INPUT_METHOD_SETTINGS} intent opens the keyboard layout
1220 * dialog for the given device.
Michael Wrightc93fbd12014-09-22 20:07:59 -07001221 * @hide
1222 */
1223 public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier";
1224
1225 /**
Barnaby James48f35522014-07-16 14:27:39 -07001226 * Activity Extra: Enable or disable Airplane Mode.
1227 * <p>
1228 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE}
Barnaby Jamesb3006d32015-04-02 17:49:54 -07001229 * intent as a boolean to indicate if it should be enabled.
Barnaby James48f35522014-07-16 14:27:39 -07001230 */
1231 public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
1232
Barnaby Jamesb3006d32015-04-02 17:49:54 -07001233 /**
1234 * Activity Extra: Enable or disable Battery saver mode.
1235 * <p>
1236 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE}
1237 * intent as a boolean to indicate if it should be enabled.
1238 */
1239 public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED =
1240 "android.settings.extra.battery_saver_mode_enabled";
1241
1242 /**
1243 * Activity Extra: Enable or disable Do Not Disturb mode.
1244 * <p>
1245 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
1246 * intent as a boolean to indicate if it should be enabled.
1247 */
1248 public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED =
1249 "android.settings.extra.do_not_disturb_mode_enabled";
1250
1251 /**
1252 * Activity Extra: How many minutes to enable do not disturb mode for.
1253 * <p>
1254 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE}
1255 * intent to indicate how long do not disturb mode should be enabled for.
1256 */
1257 public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES =
1258 "android.settings.extra.do_not_disturb_mode_minutes";
1259
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001260 private static final String JID_RESOURCE_PREFIX = "android";
1261
1262 public static final String AUTHORITY = "settings";
1263
1264 private static final String TAG = "Settings";
Christopher Tate06efb532012-08-24 15:29:27 -07001265 private static final boolean LOCAL_LOGV = false;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001266
David Christie3f7b6522013-08-06 19:19:08 -07001267 // Lock ensures that when enabling/disabling the master location switch, we don't end up
1268 // with a partial enable/disable state in multi-threaded situations.
1269 private static final Object mLocationSettingsLock = new Object();
1270
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001271 public static class SettingNotFoundException extends AndroidException {
1272 public SettingNotFoundException(String msg) {
1273 super(msg);
1274 }
1275 }
1276
1277 /**
1278 * Common base for tables of name/value settings.
1279 */
1280 public static class NameValueTable implements BaseColumns {
1281 public static final String NAME = "name";
1282 public static final String VALUE = "value";
1283
1284 protected static boolean putString(ContentResolver resolver, Uri uri,
1285 String name, String value) {
1286 // The database will take care of replacing duplicates.
1287 try {
1288 ContentValues values = new ContentValues();
1289 values.put(NAME, name);
1290 values.put(VALUE, value);
1291 resolver.insert(uri, values);
1292 return true;
1293 } catch (SQLException e) {
Dianne Hackborna33e3f72009-09-29 17:28:24 -07001294 Log.w(TAG, "Can't set key " + name + " in " + uri, e);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001295 return false;
1296 }
1297 }
1298
1299 public static Uri getUriFor(Uri uri, String name) {
1300 return Uri.withAppendedPath(uri, name);
1301 }
1302 }
1303
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001304 // Thread-safe.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001305 private static class NameValueCache {
1306 private final String mVersionSystemProperty;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001307 private final Uri mUri;
1308
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001309 private static final String[] SELECT_VALUE =
1310 new String[] { Settings.NameValueTable.VALUE };
1311 private static final String NAME_EQ_PLACEHOLDER = "name=?";
1312
1313 // Must synchronize on 'this' to access mValues and mValuesVersion.
Dan Egnor799f7212009-11-24 16:24:44 -08001314 private final HashMap<String, String> mValues = new HashMap<String, String>();
1315 private long mValuesVersion = 0;
1316
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001317 // Initially null; set lazily and held forever. Synchronized on 'this'.
1318 private IContentProvider mContentProvider = null;
1319
1320 // The method we'll call (or null, to not use) on the provider
1321 // for the fast path of retrieving settings.
Christopher Tate06efb532012-08-24 15:29:27 -07001322 private final String mCallGetCommand;
1323 private final String mCallSetCommand;
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001324
Christopher Tate06efb532012-08-24 15:29:27 -07001325 public NameValueCache(String versionSystemProperty, Uri uri,
1326 String getCommand, String setCommand) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001327 mVersionSystemProperty = versionSystemProperty;
1328 mUri = uri;
Christopher Tate06efb532012-08-24 15:29:27 -07001329 mCallGetCommand = getCommand;
1330 mCallSetCommand = setCommand;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001331 }
1332
Christopher Tate06efb532012-08-24 15:29:27 -07001333 private IContentProvider lazyGetProvider(ContentResolver cr) {
1334 IContentProvider cp = null;
1335 synchronized (this) {
1336 cp = mContentProvider;
1337 if (cp == null) {
1338 cp = mContentProvider = cr.acquireProvider(mUri.getAuthority());
1339 }
1340 }
1341 return cp;
1342 }
1343
1344 public boolean putStringForUser(ContentResolver cr, String name, String value,
1345 final int userHandle) {
1346 try {
1347 Bundle arg = new Bundle();
1348 arg.putString(Settings.NameValueTable.VALUE, value);
Christopher Tated5fe1472012-09-10 15:48:38 -07001349 arg.putInt(CALL_METHOD_USER_KEY, userHandle);
Christopher Tate06efb532012-08-24 15:29:27 -07001350 IContentProvider cp = lazyGetProvider(cr);
Dianne Hackborn35654b62013-01-14 17:38:02 -08001351 cp.call(cr.getPackageName(), mCallSetCommand, name, arg);
Christopher Tate06efb532012-08-24 15:29:27 -07001352 } catch (RemoteException e) {
1353 Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
1354 return false;
1355 }
1356 return true;
1357 }
1358
Christopher Tate06efb532012-08-24 15:29:27 -07001359 public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
Christopher Tate78d2a662012-09-13 16:19:44 -07001360 final boolean isSelf = (userHandle == UserHandle.myUserId());
1361 if (isSelf) {
1362 long newValuesVersion = SystemProperties.getLong(mVersionSystemProperty, 0);
Dan Egnor799f7212009-11-24 16:24:44 -08001363
Christopher Tate78d2a662012-09-13 16:19:44 -07001364 // Our own user's settings data uses a client-side cache
1365 synchronized (this) {
1366 if (mValuesVersion != newValuesVersion) {
1367 if (LOCAL_LOGV || false) {
1368 Log.v(TAG, "invalidate [" + mUri.getLastPathSegment() + "]: current "
1369 + newValuesVersion + " != cached " + mValuesVersion);
1370 }
1371
1372 mValues.clear();
1373 mValuesVersion = newValuesVersion;
Dan Egnor799f7212009-11-24 16:24:44 -08001374 }
1375
Christopher Tate78d2a662012-09-13 16:19:44 -07001376 if (mValues.containsKey(name)) {
1377 return mValues.get(name); // Could be null, that's OK -- negative caching
1378 }
Dan Egnor799f7212009-11-24 16:24:44 -08001379 }
Christopher Tate78d2a662012-09-13 16:19:44 -07001380 } else {
1381 if (LOCAL_LOGV) Log.v(TAG, "get setting for user " + userHandle
1382 + " by user " + UserHandle.myUserId() + " so skipping cache");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001383 }
Dan Egnor799f7212009-11-24 16:24:44 -08001384
Christopher Tate06efb532012-08-24 15:29:27 -07001385 IContentProvider cp = lazyGetProvider(cr);
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001386
1387 // Try the fast path first, not using query(). If this
1388 // fails (alternate Settings provider that doesn't support
1389 // this interface?) then we fall back to the query/table
1390 // interface.
Christopher Tate06efb532012-08-24 15:29:27 -07001391 if (mCallGetCommand != null) {
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001392 try {
Christopher Tate06efb532012-08-24 15:29:27 -07001393 Bundle args = null;
Christopher Tate5e08af02012-09-21 17:17:22 -07001394 if (!isSelf) {
Christopher Tate06efb532012-08-24 15:29:27 -07001395 args = new Bundle();
1396 args.putInt(CALL_METHOD_USER_KEY, userHandle);
1397 }
Dianne Hackborn35654b62013-01-14 17:38:02 -08001398 Bundle b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001399 if (b != null) {
1400 String value = b.getPairValue();
Christopher Tate78d2a662012-09-13 16:19:44 -07001401 // Don't update our cache for reads of other users' data
1402 if (isSelf) {
1403 synchronized (this) {
1404 mValues.put(name, value);
1405 }
1406 } else {
1407 if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
1408 + " by " + UserHandle.myUserId()
1409 + " so not updating cache");
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001410 }
1411 return value;
1412 }
1413 // If the response Bundle is null, we fall through
1414 // to the query interface below.
1415 } catch (RemoteException e) {
1416 // Not supported by the remote side? Fall through
1417 // to query().
1418 }
1419 }
1420
Dan Egnor799f7212009-11-24 16:24:44 -08001421 Cursor c = null;
1422 try {
Dianne Hackborn35654b62013-01-14 17:38:02 -08001423 c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE, NAME_EQ_PLACEHOLDER,
Jeff Brown75ea64f2012-01-25 19:37:13 -08001424 new String[]{name}, null, null);
Dan Egnor799f7212009-11-24 16:24:44 -08001425 if (c == null) {
1426 Log.w(TAG, "Can't get key " + name + " from " + mUri);
1427 return null;
1428 }
1429
1430 String value = c.moveToNext() ? c.getString(0) : null;
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001431 synchronized (this) {
Dan Egnor799f7212009-11-24 16:24:44 -08001432 mValues.put(name, value);
1433 }
1434 if (LOCAL_LOGV) {
1435 Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " +
1436 name + " = " + (value == null ? "(null)" : value));
1437 }
1438 return value;
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08001439 } catch (RemoteException e) {
Dan Egnor799f7212009-11-24 16:24:44 -08001440 Log.w(TAG, "Can't get key " + name + " from " + mUri, e);
1441 return null; // Return null, but don't cache it.
1442 } finally {
1443 if (c != null) c.close();
1444 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001445 }
1446 }
1447
1448 /**
Billy Lau6ad2d662015-07-18 00:26:58 +01001449 * An app can use this method to check if it is currently allowed to draw on top of other
1450 * apps. In order to be allowed to do so, an app must first declare the
1451 * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its manifest. If it
1452 * is currently disallowed, it can prompt the user to grant it this capability through a
1453 * management UI by sending an Intent with action
1454 * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}.
1455 *
1456 * @param context A context
1457 * @return true if the calling app can draw on top of other apps, false otherwise.
1458 */
1459 public static boolean canDrawOverlays(Context context) {
1460 int uid = Binder.getCallingUid();
1461 return Settings.isCallingPackageAllowedToDrawOverlays(context, uid, Settings
1462 .getPackageNameForUid(context, uid), false);
1463 }
1464
1465 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001466 * System settings, containing miscellaneous system preferences. This
1467 * table holds simple name/value pairs. There are convenience
1468 * functions for accessing individual settings entries.
1469 */
1470 public static final class System extends NameValueTable {
1471 public static final String SYS_PROP_SETTING_VERSION = "sys.settings_system_version";
1472
Svetoslav683914b2015-01-15 14:22:26 -08001473 /** @hide */
1474 public static interface Validator {
1475 public boolean validate(String value);
1476 }
1477
Dianne Hackborn139748f2012-09-24 11:36:57 -07001478 /**
1479 * The content:// style URL for this table
1480 */
1481 public static final Uri CONTENT_URI =
1482 Uri.parse("content://" + AUTHORITY + "/system");
1483
1484 private static final NameValueCache sNameValueCache = new NameValueCache(
1485 SYS_PROP_SETTING_VERSION,
1486 CONTENT_URI,
1487 CALL_METHOD_GET_SYSTEM,
1488 CALL_METHOD_PUT_SYSTEM);
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07001489
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001490 private static final HashSet<String> MOVED_TO_SECURE;
1491 static {
1492 MOVED_TO_SECURE = new HashSet<String>(30);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001493 MOVED_TO_SECURE.add(Secure.ANDROID_ID);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001494 MOVED_TO_SECURE.add(Secure.HTTP_PROXY);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001495 MOVED_TO_SECURE.add(Secure.LOCATION_PROVIDERS_ALLOWED);
Danielle Millett925a7d82012-03-19 18:02:20 -04001496 MOVED_TO_SECURE.add(Secure.LOCK_BIOMETRIC_WEAK_FLAGS);
Amith Yamasani156c4352010-03-05 17:10:03 -08001497 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_ENABLED);
1498 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_VISIBLE);
1499 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001500 MOVED_TO_SECURE.add(Secure.LOGGING_ID);
1501 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_ENABLED);
1502 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_LAST_UPDATE);
1503 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_REDIRECT_URL);
1504 MOVED_TO_SECURE.add(Secure.SETTINGS_CLASSNAME);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001505 MOVED_TO_SECURE.add(Secure.USE_GOOGLE_MAIL);
1506 MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
1507 MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
1508 MOVED_TO_SECURE.add(Secure.WIFI_NUM_OPEN_NETWORKS_KEPT);
1509 MOVED_TO_SECURE.add(Secure.WIFI_ON);
1510 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE);
1511 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_AP_COUNT);
1512 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS);
1513 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED);
1514 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS);
1515 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT);
1516 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_MAX_AP_CHECKS);
1517 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ON);
1518 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT);
1519 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS);
1520 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS);
Christopher Tateaa036a22014-05-19 16:33:27 -07001521
1522 // At one time in System, then Global, but now back in Secure
1523 MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001524 }
1525
Christopher Tate06efb532012-08-24 15:29:27 -07001526 private static final HashSet<String> MOVED_TO_GLOBAL;
Christopher Tate66488d62012-10-02 11:58:01 -07001527 private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL;
Christopher Tate06efb532012-08-24 15:29:27 -07001528 static {
1529 MOVED_TO_GLOBAL = new HashSet<String>();
Christopher Tate66488d62012-10-02 11:58:01 -07001530 MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<String>();
1531
Christopher Tate92198742012-09-07 12:00:13 -07001532 // these were originally in system but migrated to secure in the past,
1533 // so are duplicated in the Secure.* namespace
Christopher Tate66488d62012-10-02 11:58:01 -07001534 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED);
1535 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON);
1536 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING);
1537 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED);
Christopher Tate66488d62012-10-02 11:58:01 -07001538 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
1539 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY);
Christopher Tate06efb532012-08-24 15:29:27 -07001540
Christopher Tate92198742012-09-07 12:00:13 -07001541 // these are moving directly from system to global
Christopher Tate06efb532012-08-24 15:29:27 -07001542 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_ON);
1543 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_RADIOS);
1544 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
1545 MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME);
1546 MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME_ZONE);
1547 MOVED_TO_GLOBAL.add(Settings.Global.CAR_DOCK_SOUND);
1548 MOVED_TO_GLOBAL.add(Settings.Global.CAR_UNDOCK_SOUND);
1549 MOVED_TO_GLOBAL.add(Settings.Global.DESK_DOCK_SOUND);
1550 MOVED_TO_GLOBAL.add(Settings.Global.DESK_UNDOCK_SOUND);
1551 MOVED_TO_GLOBAL.add(Settings.Global.DOCK_SOUNDS_ENABLED);
1552 MOVED_TO_GLOBAL.add(Settings.Global.LOCK_SOUND);
1553 MOVED_TO_GLOBAL.add(Settings.Global.UNLOCK_SOUND);
1554 MOVED_TO_GLOBAL.add(Settings.Global.LOW_BATTERY_SOUND);
1555 MOVED_TO_GLOBAL.add(Settings.Global.POWER_SOUNDS_ENABLED);
1556 MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
1557 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY);
Eric Laurentbc0fab1f2012-09-19 11:24:41 -07001558 MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER);
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07001559 MOVED_TO_GLOBAL.add(Settings.Global.WINDOW_ANIMATION_SCALE);
1560 MOVED_TO_GLOBAL.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
1561 MOVED_TO_GLOBAL.add(Settings.Global.ANIMATOR_DURATION_SCALE);
1562 MOVED_TO_GLOBAL.add(Settings.Global.FANCY_IME_ANIMATIONS);
1563 MOVED_TO_GLOBAL.add(Settings.Global.COMPATIBILITY_MODE);
1564 MOVED_TO_GLOBAL.add(Settings.Global.EMERGENCY_TONE);
1565 MOVED_TO_GLOBAL.add(Settings.Global.CALL_AUTO_RETRY);
1566 MOVED_TO_GLOBAL.add(Settings.Global.DEBUG_APP);
1567 MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER);
1568 MOVED_TO_GLOBAL.add(Settings.Global.SHOW_PROCESSES);
1569 MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
Geremy Condraa0735112013-03-26 21:49:26 -07001570 MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_CONTENT_URL);
1571 MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_METADATA_URL);
1572 MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_CONTENT_URL);
1573 MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_METADATA_URL);
1574 MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL);
1575 MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL);
1576 MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL);
1577 MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL);
Christopher Tate06efb532012-08-24 15:29:27 -07001578 }
1579
Svetoslav683914b2015-01-15 14:22:26 -08001580 private static final Validator sBooleanValidator =
1581 new DiscreteValueValidator(new String[] {"0", "1"});
1582
1583 private static final Validator sNonNegativeIntegerValidator = new Validator() {
1584 @Override
1585 public boolean validate(String value) {
1586 try {
1587 return Integer.parseInt(value) >= 0;
1588 } catch (NumberFormatException e) {
1589 return false;
1590 }
1591 }
1592 };
1593
Svetoslav683914b2015-01-15 14:22:26 -08001594 private static final Validator sUriValidator = new Validator() {
1595 @Override
1596 public boolean validate(String value) {
1597 try {
1598 Uri.decode(value);
1599 return true;
1600 } catch (IllegalArgumentException e) {
1601 return false;
1602 }
1603 }
1604 };
1605
1606 private static final Validator sLenientIpAddressValidator = new Validator() {
1607 private static final int MAX_IPV6_LENGTH = 45;
1608
1609 @Override
1610 public boolean validate(String value) {
1611 return value.length() <= MAX_IPV6_LENGTH;
1612 }
1613 };
1614
Christopher Tate66488d62012-10-02 11:58:01 -07001615 /** @hide */
Svetoslav683914b2015-01-15 14:22:26 -08001616 public static void getMovedToGlobalSettings(Set<String> outKeySet) {
Christopher Tate66488d62012-10-02 11:58:01 -07001617 outKeySet.addAll(MOVED_TO_GLOBAL);
1618 outKeySet.addAll(MOVED_TO_SECURE_THEN_GLOBAL);
1619 }
1620
1621 /** @hide */
Svetoslav683914b2015-01-15 14:22:26 -08001622 public static void getMovedToSecureSettings(Set<String> outKeySet) {
1623 outKeySet.addAll(MOVED_TO_SECURE);
1624 }
1625
1626 /** @hide */
Christopher Tate66488d62012-10-02 11:58:01 -07001627 public static void getNonLegacyMovedKeys(HashSet<String> outKeySet) {
1628 outKeySet.addAll(MOVED_TO_GLOBAL);
1629 }
1630
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001631 /**
1632 * Look up a name in the database.
1633 * @param resolver to access the database with
1634 * @param name to look up in the table
1635 * @return the corresponding value, or null if not present
1636 */
Dianne Hackborn139748f2012-09-24 11:36:57 -07001637 public static String getString(ContentResolver resolver, String name) {
Christopher Tate06efb532012-08-24 15:29:27 -07001638 return getStringForUser(resolver, name, UserHandle.myUserId());
1639 }
1640
1641 /** @hide */
Dianne Hackborn139748f2012-09-24 11:36:57 -07001642 public static String getStringForUser(ContentResolver resolver, String name,
Christopher Tate06efb532012-08-24 15:29:27 -07001643 int userHandle) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001644 if (MOVED_TO_SECURE.contains(name)) {
1645 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1646 + " to android.provider.Settings.Secure, returning read-only value.");
Christopher Tate06efb532012-08-24 15:29:27 -07001647 return Secure.getStringForUser(resolver, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001648 }
Christopher Tate66488d62012-10-02 11:58:01 -07001649 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Christopher Tate06efb532012-08-24 15:29:27 -07001650 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1651 + " to android.provider.Settings.Global, returning read-only value.");
1652 return Global.getStringForUser(resolver, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001653 }
Christopher Tate06efb532012-08-24 15:29:27 -07001654 return sNameValueCache.getStringForUser(resolver, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001655 }
1656
1657 /**
1658 * Store a name/value pair into the database.
1659 * @param resolver to access the database with
1660 * @param name to store
1661 * @param value to associate with the name
1662 * @return true if the value was set, false on database errors
1663 */
1664 public static boolean putString(ContentResolver resolver, String name, String value) {
Christopher Tate06efb532012-08-24 15:29:27 -07001665 return putStringForUser(resolver, name, value, UserHandle.myUserId());
1666 }
1667
1668 /** @hide */
1669 public static boolean putStringForUser(ContentResolver resolver, String name, String value,
1670 int userHandle) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001671 if (MOVED_TO_SECURE.contains(name)) {
1672 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1673 + " to android.provider.Settings.Secure, value is unchanged.");
1674 return false;
1675 }
Christopher Tate66488d62012-10-02 11:58:01 -07001676 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Christopher Tate06efb532012-08-24 15:29:27 -07001677 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1678 + " to android.provider.Settings.Global, value is unchanged.");
1679 return false;
1680 }
Christopher Tate06efb532012-08-24 15:29:27 -07001681 return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001682 }
1683
1684 /**
1685 * Construct the content URI for a particular name/value pair,
1686 * useful for monitoring changes with a ContentObserver.
1687 * @param name to look up in the table
1688 * @return the corresponding content URI, or null if not present
1689 */
1690 public static Uri getUriFor(String name) {
1691 if (MOVED_TO_SECURE.contains(name)) {
1692 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1693 + " to android.provider.Settings.Secure, returning Secure URI.");
1694 return Secure.getUriFor(Secure.CONTENT_URI, name);
1695 }
Christopher Tate66488d62012-10-02 11:58:01 -07001696 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Christopher Tate06efb532012-08-24 15:29:27 -07001697 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
1698 + " to android.provider.Settings.Global, returning read-only global URI.");
1699 return Global.getUriFor(Global.CONTENT_URI, name);
1700 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001701 return getUriFor(CONTENT_URI, name);
1702 }
1703
1704 /**
1705 * Convenience function for retrieving a single system settings value
1706 * as an integer. Note that internally setting values are always
1707 * stored as strings; this function converts the string to an integer
1708 * for you. The default value will be returned if the setting is
1709 * not defined or not an integer.
1710 *
1711 * @param cr The ContentResolver to access.
1712 * @param name The name of the setting to retrieve.
1713 * @param def Value to return if the setting is not defined.
1714 *
1715 * @return The setting's current value, or 'def' if it is not defined
1716 * or not a valid integer.
1717 */
1718 public static int getInt(ContentResolver cr, String name, int def) {
Christopher Tate06efb532012-08-24 15:29:27 -07001719 return getIntForUser(cr, name, def, UserHandle.myUserId());
1720 }
1721
1722 /** @hide */
1723 public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
1724 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001725 try {
1726 return v != null ? Integer.parseInt(v) : def;
1727 } catch (NumberFormatException e) {
1728 return def;
1729 }
1730 }
1731
1732 /**
1733 * Convenience function for retrieving a single system settings value
1734 * as an integer. Note that internally setting values are always
1735 * stored as strings; this function converts the string to an integer
1736 * for you.
1737 * <p>
1738 * This version does not take a default value. If the setting has not
1739 * been set, or the string value is not a number,
1740 * it throws {@link SettingNotFoundException}.
1741 *
1742 * @param cr The ContentResolver to access.
1743 * @param name The name of the setting to retrieve.
1744 *
1745 * @throws SettingNotFoundException Thrown if a setting by the given
1746 * name can't be found or the setting value is not an integer.
1747 *
1748 * @return The setting's current value.
1749 */
1750 public static int getInt(ContentResolver cr, String name)
1751 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07001752 return getIntForUser(cr, name, UserHandle.myUserId());
1753 }
1754
1755 /** @hide */
1756 public static int getIntForUser(ContentResolver cr, String name, int userHandle)
1757 throws SettingNotFoundException {
1758 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001759 try {
1760 return Integer.parseInt(v);
1761 } catch (NumberFormatException e) {
1762 throw new SettingNotFoundException(name);
1763 }
1764 }
1765
1766 /**
1767 * Convenience function for updating a single settings value as an
1768 * integer. This will either create a new entry in the table if the
1769 * given name does not exist, or modify the value of the existing row
1770 * with that name. Note that internally setting values are always
1771 * stored as strings, so this function converts the given value to a
1772 * string before storing it.
1773 *
1774 * @param cr The ContentResolver to access.
1775 * @param name The name of the setting to modify.
1776 * @param value The new value for the setting.
1777 * @return true if the value was set, false on database errors
1778 */
1779 public static boolean putInt(ContentResolver cr, String name, int value) {
Christopher Tate06efb532012-08-24 15:29:27 -07001780 return putIntForUser(cr, name, value, UserHandle.myUserId());
1781 }
1782
1783 /** @hide */
1784 public static boolean putIntForUser(ContentResolver cr, String name, int value,
1785 int userHandle) {
1786 return putStringForUser(cr, name, Integer.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001787 }
1788
1789 /**
1790 * Convenience function for retrieving a single system settings value
1791 * as a {@code long}. Note that internally setting values are always
1792 * stored as strings; this function converts the string to a {@code long}
1793 * for you. The default value will be returned if the setting is
1794 * not defined or not a {@code long}.
1795 *
1796 * @param cr The ContentResolver to access.
1797 * @param name The name of the setting to retrieve.
1798 * @param def Value to return if the setting is not defined.
1799 *
1800 * @return The setting's current value, or 'def' if it is not defined
1801 * or not a valid {@code long}.
1802 */
1803 public static long getLong(ContentResolver cr, String name, long def) {
Christopher Tate06efb532012-08-24 15:29:27 -07001804 return getLongForUser(cr, name, def, UserHandle.myUserId());
1805 }
1806
1807 /** @hide */
1808 public static long getLongForUser(ContentResolver cr, String name, long def,
1809 int userHandle) {
1810 String valString = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001811 long value;
1812 try {
1813 value = valString != null ? Long.parseLong(valString) : def;
1814 } catch (NumberFormatException e) {
1815 value = def;
1816 }
1817 return value;
1818 }
1819
1820 /**
1821 * Convenience function for retrieving a single system settings value
1822 * as a {@code long}. Note that internally setting values are always
1823 * stored as strings; this function converts the string to a {@code long}
1824 * for you.
1825 * <p>
1826 * This version does not take a default value. If the setting has not
1827 * been set, or the string value is not a number,
1828 * it throws {@link SettingNotFoundException}.
1829 *
1830 * @param cr The ContentResolver to access.
1831 * @param name The name of the setting to retrieve.
1832 *
1833 * @return The setting's current value.
1834 * @throws SettingNotFoundException Thrown if a setting by the given
1835 * name can't be found or the setting value is not an integer.
1836 */
1837 public static long getLong(ContentResolver cr, String name)
1838 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07001839 return getLongForUser(cr, name, UserHandle.myUserId());
1840 }
1841
1842 /** @hide */
1843 public static long getLongForUser(ContentResolver cr, String name, int userHandle)
1844 throws SettingNotFoundException {
1845 String valString = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001846 try {
1847 return Long.parseLong(valString);
1848 } catch (NumberFormatException e) {
1849 throw new SettingNotFoundException(name);
1850 }
1851 }
1852
1853 /**
1854 * Convenience function for updating a single settings value as a long
1855 * integer. This will either create a new entry in the table if the
1856 * given name does not exist, or modify the value of the existing row
1857 * with that name. Note that internally setting values are always
1858 * stored as strings, so this function converts the given value to a
1859 * string before storing it.
1860 *
1861 * @param cr The ContentResolver to access.
1862 * @param name The name of the setting to modify.
1863 * @param value The new value for the setting.
1864 * @return true if the value was set, false on database errors
1865 */
1866 public static boolean putLong(ContentResolver cr, String name, long value) {
Christopher Tate06efb532012-08-24 15:29:27 -07001867 return putLongForUser(cr, name, value, UserHandle.myUserId());
1868 }
1869
1870 /** @hide */
1871 public static boolean putLongForUser(ContentResolver cr, String name, long value,
1872 int userHandle) {
1873 return putStringForUser(cr, name, Long.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001874 }
1875
1876 /**
1877 * Convenience function for retrieving a single system settings value
1878 * as a floating point number. Note that internally setting values are
1879 * always stored as strings; this function converts the string to an
1880 * float for you. The default value will be returned if the setting
1881 * is not defined or not a valid float.
1882 *
1883 * @param cr The ContentResolver to access.
1884 * @param name The name of the setting to retrieve.
1885 * @param def Value to return if the setting is not defined.
1886 *
1887 * @return The setting's current value, or 'def' if it is not defined
1888 * or not a valid float.
1889 */
1890 public static float getFloat(ContentResolver cr, String name, float def) {
Christopher Tate06efb532012-08-24 15:29:27 -07001891 return getFloatForUser(cr, name, def, UserHandle.myUserId());
1892 }
1893
1894 /** @hide */
1895 public static float getFloatForUser(ContentResolver cr, String name, float def,
1896 int userHandle) {
1897 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001898 try {
1899 return v != null ? Float.parseFloat(v) : def;
1900 } catch (NumberFormatException e) {
1901 return def;
1902 }
1903 }
1904
1905 /**
1906 * Convenience function for retrieving a single system settings value
1907 * as a float. Note that internally setting values are always
1908 * stored as strings; this function converts the string to a float
1909 * for you.
1910 * <p>
1911 * This version does not take a default value. If the setting has not
1912 * been set, or the string value is not a number,
1913 * it throws {@link SettingNotFoundException}.
1914 *
1915 * @param cr The ContentResolver to access.
1916 * @param name The name of the setting to retrieve.
1917 *
1918 * @throws SettingNotFoundException Thrown if a setting by the given
1919 * name can't be found or the setting value is not a float.
1920 *
1921 * @return The setting's current value.
1922 */
1923 public static float getFloat(ContentResolver cr, String name)
1924 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07001925 return getFloatForUser(cr, name, UserHandle.myUserId());
1926 }
1927
1928 /** @hide */
1929 public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
1930 throws SettingNotFoundException {
1931 String v = getStringForUser(cr, name, userHandle);
Brian Muramatsue1d46982010-12-06 17:34:20 -08001932 if (v == null) {
1933 throw new SettingNotFoundException(name);
1934 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001935 try {
1936 return Float.parseFloat(v);
1937 } catch (NumberFormatException e) {
1938 throw new SettingNotFoundException(name);
1939 }
1940 }
1941
1942 /**
1943 * Convenience function for updating a single settings value as a
1944 * floating point number. This will either create a new entry in the
1945 * table if the given name does not exist, or modify the value of the
1946 * existing row with that name. Note that internally setting values
1947 * are always stored as strings, so this function converts the given
1948 * value to a string before storing it.
1949 *
1950 * @param cr The ContentResolver to access.
1951 * @param name The name of the setting to modify.
1952 * @param value The new value for the setting.
1953 * @return true if the value was set, false on database errors
1954 */
1955 public static boolean putFloat(ContentResolver cr, String name, float value) {
Christopher Tate06efb532012-08-24 15:29:27 -07001956 return putFloatForUser(cr, name, value, UserHandle.myUserId());
1957 }
1958
1959 /** @hide */
1960 public static boolean putFloatForUser(ContentResolver cr, String name, float value,
1961 int userHandle) {
1962 return putStringForUser(cr, name, Float.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001963 }
1964
1965 /**
1966 * Convenience function to read all of the current
1967 * configuration-related settings into a
1968 * {@link Configuration} object.
1969 *
1970 * @param cr The ContentResolver to access.
1971 * @param outConfig Where to place the configuration settings.
1972 */
1973 public static void getConfiguration(ContentResolver cr, Configuration outConfig) {
Christopher Tate06efb532012-08-24 15:29:27 -07001974 getConfigurationForUser(cr, outConfig, UserHandle.myUserId());
1975 }
1976
1977 /** @hide */
1978 public static void getConfigurationForUser(ContentResolver cr, Configuration outConfig,
1979 int userHandle) {
1980 outConfig.fontScale = Settings.System.getFloatForUser(
1981 cr, FONT_SCALE, outConfig.fontScale, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001982 if (outConfig.fontScale < 0) {
1983 outConfig.fontScale = 1;
1984 }
1985 }
1986
1987 /**
Dianne Hackborn31ca8542011-07-19 14:58:28 -07001988 * @hide Erase the fields in the Configuration that should be applied
1989 * by the settings.
1990 */
1991 public static void clearConfiguration(Configuration inoutConfig) {
1992 inoutConfig.fontScale = 0;
1993 }
Narayan Kamath6d632962011-08-24 11:51:37 +01001994
Dianne Hackborn31ca8542011-07-19 14:58:28 -07001995 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001996 * Convenience function to write a batch of configuration-related
1997 * settings from a {@link Configuration} object.
1998 *
1999 * @param cr The ContentResolver to access.
2000 * @param config The settings to write.
2001 * @return true if the values were set, false on database errors
2002 */
2003 public static boolean putConfiguration(ContentResolver cr, Configuration config) {
Christopher Tate06efb532012-08-24 15:29:27 -07002004 return putConfigurationForUser(cr, config, UserHandle.myUserId());
2005 }
2006
2007 /** @hide */
2008 public static boolean putConfigurationForUser(ContentResolver cr, Configuration config,
2009 int userHandle) {
2010 return Settings.System.putFloatForUser(cr, FONT_SCALE, config.fontScale, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002011 }
2012
Dianne Hackbornb8b11a02010-03-10 15:53:11 -08002013 /** @hide */
2014 public static boolean hasInterestingConfigurationChanges(int changes) {
2015 return (changes&ActivityInfo.CONFIG_FONT_SCALE) != 0;
2016 }
Jaikumar Ganesh545e6702010-06-04 10:23:03 -07002017
Christopher Tate06efb532012-08-24 15:29:27 -07002018 /** @deprecated - Do not use */
2019 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002020 public static boolean getShowGTalkServiceStatus(ContentResolver cr) {
Christopher Tate06efb532012-08-24 15:29:27 -07002021 return getShowGTalkServiceStatusForUser(cr, UserHandle.myUserId());
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002022 }
2023
Christopher Tate06efb532012-08-24 15:29:27 -07002024 /**
2025 * @hide
2026 * @deprecated - Do not use
2027 */
2028 public static boolean getShowGTalkServiceStatusForUser(ContentResolver cr,
2029 int userHandle) {
2030 return getIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, 0, userHandle) != 0;
2031 }
2032
2033 /** @deprecated - Do not use */
2034 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002035 public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
Christopher Tatec8c08382012-09-19 17:18:18 -07002036 setShowGTalkServiceStatusForUser(cr, flag, UserHandle.myUserId());
Christopher Tate06efb532012-08-24 15:29:27 -07002037 }
2038
2039 /**
2040 * @hide
2041 * @deprecated - Do not use
2042 */
2043 @Deprecated
2044 public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag,
2045 int userHandle) {
2046 putIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, flag ? 1 : 0, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002047 }
2048
Svetoslav683914b2015-01-15 14:22:26 -08002049 private static final class DiscreteValueValidator implements Validator {
2050 private final String[] mValues;
2051
2052 public DiscreteValueValidator(String[] values) {
2053 mValues = values;
2054 }
2055
Svetoslav1b71ea92015-02-17 18:20:29 -08002056 @Override
Svetoslav683914b2015-01-15 14:22:26 -08002057 public boolean validate(String value) {
2058 return ArrayUtils.contains(mValues, value);
2059 }
2060 }
2061
2062 private static final class InclusiveIntegerRangeValidator implements Validator {
2063 private final int mMin;
2064 private final int mMax;
2065
2066 public InclusiveIntegerRangeValidator(int min, int max) {
2067 mMin = min;
2068 mMax = max;
2069 }
2070
Svetoslav1b71ea92015-02-17 18:20:29 -08002071 @Override
Svetoslav683914b2015-01-15 14:22:26 -08002072 public boolean validate(String value) {
2073 try {
2074 final int intValue = Integer.parseInt(value);
2075 return intValue >= mMin && intValue <= mMax;
2076 } catch (NumberFormatException e) {
2077 return false;
2078 }
2079 }
2080 }
2081
2082 private static final class InclusiveFloatRangeValidator implements Validator {
2083 private final float mMin;
2084 private final float mMax;
2085
2086 public InclusiveFloatRangeValidator(float min, float max) {
2087 mMin = min;
2088 mMax = max;
2089 }
2090
Svetoslav1b71ea92015-02-17 18:20:29 -08002091 @Override
Svetoslav683914b2015-01-15 14:22:26 -08002092 public boolean validate(String value) {
2093 try {
2094 final float floatValue = Float.parseFloat(value);
2095 return floatValue >= mMin && floatValue <= mMax;
2096 } catch (NumberFormatException e) {
2097 return false;
2098 }
2099 }
2100 }
2101
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002102 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002103 * @deprecated Use {@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002104 */
Christopher Tate06efb532012-08-24 15:29:27 -07002105 @Deprecated
2106 public static final String STAY_ON_WHILE_PLUGGED_IN = Global.STAY_ON_WHILE_PLUGGED_IN;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002107
2108 /**
2109 * What happens when the user presses the end call button if they're not
2110 * on a call.<br/>
2111 * <b>Values:</b><br/>
2112 * 0 - The end button does nothing.<br/>
2113 * 1 - The end button goes to the home screen.<br/>
2114 * 2 - The end button puts the device to sleep and locks the keyguard.<br/>
2115 * 3 - The end button goes to the home screen. If the user is already on the
2116 * home screen, it puts the device to sleep.
2117 */
2118 public static final String END_BUTTON_BEHAVIOR = "end_button_behavior";
2119
Svetoslav683914b2015-01-15 14:22:26 -08002120 private static final Validator END_BUTTON_BEHAVIOR_VALIDATOR =
2121 new InclusiveIntegerRangeValidator(0, 3);
2122
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002123 /**
David Brown458e8062010-03-08 21:52:11 -08002124 * END_BUTTON_BEHAVIOR value for "go home".
2125 * @hide
2126 */
2127 public static final int END_BUTTON_BEHAVIOR_HOME = 0x1;
2128
2129 /**
2130 * END_BUTTON_BEHAVIOR value for "go to sleep".
2131 * @hide
2132 */
2133 public static final int END_BUTTON_BEHAVIOR_SLEEP = 0x2;
2134
2135 /**
2136 * END_BUTTON_BEHAVIOR default value.
2137 * @hide
2138 */
2139 public static final int END_BUTTON_BEHAVIOR_DEFAULT = END_BUTTON_BEHAVIOR_SLEEP;
2140
2141 /**
Joe Onorato9cdffa12011-04-06 18:27:27 -07002142 * Is advanced settings mode turned on. 0 == no, 1 == yes
2143 * @hide
2144 */
2145 public static final String ADVANCED_SETTINGS = "advanced_settings";
2146
Svetoslav683914b2015-01-15 14:22:26 -08002147 private static final Validator ADVANCED_SETTINGS_VALIDATOR = sBooleanValidator;
2148
Joe Onorato9cdffa12011-04-06 18:27:27 -07002149 /**
2150 * ADVANCED_SETTINGS default value.
2151 * @hide
2152 */
2153 public static final int ADVANCED_SETTINGS_DEFAULT = 0;
2154
2155 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002156 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002157 */
Christopher Tate06efb532012-08-24 15:29:27 -07002158 @Deprecated
2159 public static final String AIRPLANE_MODE_ON = Global.AIRPLANE_MODE_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002160
2161 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002162 * @deprecated Use {@link android.provider.Settings.Global#RADIO_BLUETOOTH} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002163 */
Christopher Tate06efb532012-08-24 15:29:27 -07002164 @Deprecated
2165 public static final String RADIO_BLUETOOTH = Global.RADIO_BLUETOOTH;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002166
2167 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002168 * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIFI} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002169 */
Christopher Tate06efb532012-08-24 15:29:27 -07002170 @Deprecated
2171 public static final String RADIO_WIFI = Global.RADIO_WIFI;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002172
Robert Greenwalt8588e472011-11-08 10:12:25 -08002173 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002174 * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIMAX} instead
Robert Greenwalt8588e472011-11-08 10:12:25 -08002175 * {@hide}
2176 */
Christopher Tate06efb532012-08-24 15:29:27 -07002177 @Deprecated
2178 public static final String RADIO_WIMAX = Global.RADIO_WIMAX;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002179
2180 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002181 * @deprecated Use {@link android.provider.Settings.Global#RADIO_CELL} instead
Nick Pelly8d32a012011-08-09 07:03:49 -07002182 */
Christopher Tate06efb532012-08-24 15:29:27 -07002183 @Deprecated
2184 public static final String RADIO_CELL = Global.RADIO_CELL;
Nick Pelly8d32a012011-08-09 07:03:49 -07002185
2186 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002187 * @deprecated Use {@link android.provider.Settings.Global#RADIO_NFC} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002188 */
Christopher Tate06efb532012-08-24 15:29:27 -07002189 @Deprecated
2190 public static final String RADIO_NFC = Global.RADIO_NFC;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002191
2192 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002193 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_RADIOS} instead
2194 */
2195 @Deprecated
2196 public static final String AIRPLANE_MODE_RADIOS = Global.AIRPLANE_MODE_RADIOS;
2197
2198 /**
2199 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_TOGGLEABLE_RADIOS} instead
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -07002200 *
2201 * {@hide}
2202 */
Christopher Tate06efb532012-08-24 15:29:27 -07002203 @Deprecated
2204 public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS =
2205 Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS;
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -07002206
2207 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002208 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002209 */
Christopher Tate06efb532012-08-24 15:29:27 -07002210 @Deprecated
2211 public static final String WIFI_SLEEP_POLICY = Global.WIFI_SLEEP_POLICY;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002212
2213 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002214 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_DEFAULT} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002215 */
Christopher Tate06efb532012-08-24 15:29:27 -07002216 @Deprecated
2217 public static final int WIFI_SLEEP_POLICY_DEFAULT = Global.WIFI_SLEEP_POLICY_DEFAULT;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002218
2219 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002220 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002221 */
Christopher Tate06efb532012-08-24 15:29:27 -07002222 @Deprecated
2223 public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED =
2224 Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002225
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002226 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002227 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002228 */
Christopher Tate06efb532012-08-24 15:29:27 -07002229 @Deprecated
2230 public static final int WIFI_SLEEP_POLICY_NEVER = Global.WIFI_SLEEP_POLICY_NEVER;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002231
Eric Laurentbc0fab1f2012-09-19 11:24:41 -07002232 /**
2233 * @deprecated Use {@link android.provider.Settings.Global#MODE_RINGER} instead
2234 */
2235 @Deprecated
2236 public static final String MODE_RINGER = Global.MODE_RINGER;
2237
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002238 /**
2239 * Whether to use static IP and other static network attributes.
2240 * <p>
2241 * Set to 1 for true and 0 for false.
Jeff Sharkey625239a2012-09-26 22:03:49 -07002242 *
2243 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002244 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002245 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002246 public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip";
2247
Svetoslav683914b2015-01-15 14:22:26 -08002248 private static final Validator WIFI_USE_STATIC_IP_VALIDATOR = sBooleanValidator;
2249
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002250 /**
2251 * The static IP address.
2252 * <p>
2253 * Example: "192.168.1.51"
Jeff Sharkey625239a2012-09-26 22:03:49 -07002254 *
2255 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002256 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002257 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002258 public static final String WIFI_STATIC_IP = "wifi_static_ip";
2259
Svetoslav683914b2015-01-15 14:22:26 -08002260 private static final Validator WIFI_STATIC_IP_VALIDATOR = sLenientIpAddressValidator;
2261
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002262 /**
2263 * If using static IP, the gateway's IP address.
2264 * <p>
2265 * Example: "192.168.1.1"
Jeff Sharkey625239a2012-09-26 22:03:49 -07002266 *
2267 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002268 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002269 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002270 public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway";
2271
Svetoslav683914b2015-01-15 14:22:26 -08002272 private static final Validator WIFI_STATIC_GATEWAY_VALIDATOR = sLenientIpAddressValidator;
2273
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002274 /**
2275 * If using static IP, the net mask.
2276 * <p>
2277 * Example: "255.255.255.0"
Jeff Sharkey625239a2012-09-26 22:03:49 -07002278 *
2279 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002280 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002281 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002282 public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask";
2283
Svetoslav683914b2015-01-15 14:22:26 -08002284 private static final Validator WIFI_STATIC_NETMASK_VALIDATOR = sLenientIpAddressValidator;
2285
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002286 /**
2287 * If using static IP, the primary DNS's IP address.
2288 * <p>
2289 * Example: "192.168.1.1"
Jeff Sharkey625239a2012-09-26 22:03:49 -07002290 *
2291 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002292 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002293 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002294 public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1";
2295
Svetoslav683914b2015-01-15 14:22:26 -08002296 private static final Validator WIFI_STATIC_DNS1_VALIDATOR = sLenientIpAddressValidator;
2297
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002298 /**
2299 * If using static IP, the secondary DNS's IP address.
2300 * <p>
2301 * Example: "192.168.1.2"
Jeff Sharkey625239a2012-09-26 22:03:49 -07002302 *
2303 * @deprecated Use {@link WifiManager} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002304 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07002305 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002306 public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2";
2307
Svetoslav683914b2015-01-15 14:22:26 -08002308 private static final Validator WIFI_STATIC_DNS2_VALIDATOR = sLenientIpAddressValidator;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002309
2310 /**
2311 * Determines whether remote devices may discover and/or connect to
2312 * this device.
2313 * <P>Type: INT</P>
2314 * 2 -- discoverable and connectable
2315 * 1 -- connectable but not discoverable
2316 * 0 -- neither connectable nor discoverable
2317 */
2318 public static final String BLUETOOTH_DISCOVERABILITY =
2319 "bluetooth_discoverability";
2320
Svetoslav683914b2015-01-15 14:22:26 -08002321 private static final Validator BLUETOOTH_DISCOVERABILITY_VALIDATOR =
2322 new InclusiveIntegerRangeValidator(0, 2);
2323
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002324 /**
2325 * Bluetooth discoverability timeout. If this value is nonzero, then
2326 * Bluetooth becomes discoverable for a certain number of seconds,
2327 * after which is becomes simply connectable. The value is in seconds.
2328 */
2329 public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT =
2330 "bluetooth_discoverability_timeout";
2331
Svetoslav683914b2015-01-15 14:22:26 -08002332 private static final Validator BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR =
2333 sNonNegativeIntegerValidator;
2334
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002335 /**
Amith Yamasani156c4352010-03-05 17:10:03 -08002336 * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_ENABLED}
2337 * instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002338 */
Amith Yamasani156c4352010-03-05 17:10:03 -08002339 @Deprecated
2340 public static final String LOCK_PATTERN_ENABLED = Secure.LOCK_PATTERN_ENABLED;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002341
2342 /**
Amith Yamasani156c4352010-03-05 17:10:03 -08002343 * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_VISIBLE}
2344 * instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002345 */
Amith Yamasani156c4352010-03-05 17:10:03 -08002346 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002347 public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
2348
2349 /**
Jaikumar Ganesh545e6702010-06-04 10:23:03 -07002350 * @deprecated Use
Amith Yamasani156c4352010-03-05 17:10:03 -08002351 * {@link android.provider.Settings.Secure#LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED}
2352 * instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002353 */
Amith Yamasani156c4352010-03-05 17:10:03 -08002354 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002355 public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED =
2356 "lock_pattern_tactile_feedback_enabled";
2357
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002358 /**
2359 * A formatted string of the next alarm that is set, or the empty string
2360 * if there is no alarm set.
Adrian Roosc42a1e12014-07-07 23:35:53 +02002361 *
2362 * @deprecated Use {@link android.app.AlarmManager#getNextAlarmClock()}.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002363 */
Adrian Roosc42a1e12014-07-07 23:35:53 +02002364 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002365 public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
2366
Svetoslav683914b2015-01-15 14:22:26 -08002367 private static final Validator NEXT_ALARM_FORMATTED_VALIDATOR = new Validator() {
2368 private static final int MAX_LENGTH = 1000;
Svetoslav1b71ea92015-02-17 18:20:29 -08002369
Svetoslav683914b2015-01-15 14:22:26 -08002370 @Override
2371 public boolean validate(String value) {
2372 // TODO: No idea what the correct format is.
Svetoslav64d6e9c2015-02-12 11:30:36 -08002373 return value == null || value.length() < MAX_LENGTH;
Svetoslav683914b2015-01-15 14:22:26 -08002374 }
2375 };
2376
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002377 /**
2378 * Scaling factor for fonts, float.
2379 */
2380 public static final String FONT_SCALE = "font_scale";
2381
Svetoslav683914b2015-01-15 14:22:26 -08002382 private static final Validator FONT_SCALE_VALIDATOR = new Validator() {
2383 @Override
2384 public boolean validate(String value) {
2385 try {
2386 return Float.parseFloat(value) >= 0;
2387 } catch (NumberFormatException e) {
2388 return false;
2389 }
2390 }
2391 };
2392
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002393 /**
2394 * Name of an application package to be debugged.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002395 *
2396 * @deprecated Use {@link Global#DEBUG_APP} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002397 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002398 @Deprecated
2399 public static final String DEBUG_APP = Global.DEBUG_APP;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002400
2401 /**
2402 * If 1, when launching DEBUG_APP it will wait for the debugger before
2403 * starting user code. If 0, it will run normally.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002404 *
2405 * @deprecated Use {@link Global#WAIT_FOR_DEBUGGER} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002406 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002407 @Deprecated
2408 public static final String WAIT_FOR_DEBUGGER = Global.WAIT_FOR_DEBUGGER;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002409
2410 /**
2411 * Whether or not to dim the screen. 0=no 1=yes
Jeff Brown96307042012-07-27 15:51:34 -07002412 * @deprecated This setting is no longer used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002413 */
Jeff Brown96307042012-07-27 15:51:34 -07002414 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002415 public static final String DIM_SCREEN = "dim_screen";
2416
Svetoslav683914b2015-01-15 14:22:26 -08002417 private static final Validator DIM_SCREEN_VALIDATOR = sBooleanValidator;
2418
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002419 /**
Jeff Brown05af6ad2014-09-30 20:54:30 -07002420 * The amount of time in milliseconds before the device goes to sleep or begins
2421 * to dream after a period of inactivity. This value is also known as the
2422 * user activity timeout period since the screen isn't necessarily turned off
2423 * when it expires.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002424 */
2425 public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
2426
Svetoslav683914b2015-01-15 14:22:26 -08002427 private static final Validator SCREEN_OFF_TIMEOUT_VALIDATOR = sNonNegativeIntegerValidator;
2428
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002429 /**
2430 * The screen backlight brightness between 0 and 255.
2431 */
2432 public static final String SCREEN_BRIGHTNESS = "screen_brightness";
2433
Svetoslav683914b2015-01-15 14:22:26 -08002434 private static final Validator SCREEN_BRIGHTNESS_VALIDATOR =
2435 new InclusiveIntegerRangeValidator(0, 255);
2436
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002437 /**
Dan Murphy951764b2009-08-27 14:59:03 -05002438 * Control whether to enable automatic brightness mode.
Dan Murphy951764b2009-08-27 14:59:03 -05002439 */
2440 public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
2441
Svetoslav683914b2015-01-15 14:22:26 -08002442 private static final Validator SCREEN_BRIGHTNESS_MODE_VALIDATOR = sBooleanValidator;
2443
Dan Murphy951764b2009-08-27 14:59:03 -05002444 /**
Dianne Hackbornd9ea4682012-01-20 18:36:40 -08002445 * Adjustment to auto-brightness to make it generally more (>0.0 <1.0)
2446 * or less (<0.0 >-1.0) bright.
Dianne Hackborn518a3d82012-05-09 16:30:49 -07002447 * @hide
Dianne Hackbornd9ea4682012-01-20 18:36:40 -08002448 */
2449 public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj";
2450
Svetoslav683914b2015-01-15 14:22:26 -08002451 private static final Validator SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR =
2452 new InclusiveFloatRangeValidator(-1, 1);
2453
Dianne Hackbornd9ea4682012-01-20 18:36:40 -08002454 /**
Mike Lockwooddc3494e2009-10-14 21:17:09 -07002455 * SCREEN_BRIGHTNESS_MODE value for manual mode.
Mike Lockwooddc3494e2009-10-14 21:17:09 -07002456 */
2457 public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0;
2458
2459 /**
Scott Main52bfc242012-02-09 10:09:14 -08002460 * SCREEN_BRIGHTNESS_MODE value for automatic mode.
Mike Lockwooddc3494e2009-10-14 21:17:09 -07002461 */
2462 public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1;
2463
2464 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002465 * Control whether the process CPU usage meter should be shown.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002466 *
2467 * @deprecated Use {@link Global#SHOW_PROCESSES} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002468 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002469 @Deprecated
2470 public static final String SHOW_PROCESSES = Global.SHOW_PROCESSES;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002471
2472 /**
2473 * If 1, the activity manager will aggressively finish activities and
2474 * processes as soon as they are no longer needed. If 0, the normal
2475 * extended lifetime is used.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002476 *
2477 * @deprecated Use {@link Global#ALWAYS_FINISH_ACTIVITIES} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002478 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002479 @Deprecated
2480 public static final String ALWAYS_FINISH_ACTIVITIES = Global.ALWAYS_FINISH_ACTIVITIES;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002481
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002482 /**
2483 * Determines which streams are affected by ringer mode changes. The
2484 * stream type's bit should be set to 1 if it should be muted when going
2485 * into an inaudible ringer mode.
2486 */
2487 public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
2488
Svetoslav683914b2015-01-15 14:22:26 -08002489 private static final Validator MODE_RINGER_STREAMS_AFFECTED_VALIDATOR =
2490 sNonNegativeIntegerValidator;
2491
2492 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002493 * Determines which streams are affected by mute. The
2494 * stream type's bit should be set to 1 if it should be muted when a mute request
2495 * is received.
2496 */
Svetoslav683914b2015-01-15 14:22:26 -08002497 public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
2498
2499 private static final Validator MUTE_STREAMS_AFFECTED_VALIDATOR =
2500 sNonNegativeIntegerValidator;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002501
2502 /**
2503 * Whether vibrate is on for different events. This is used internally,
2504 * changing this value will not change the vibrate. See AudioManager.
2505 */
2506 public static final String VIBRATE_ON = "vibrate_on";
2507
Svetoslav683914b2015-01-15 14:22:26 -08002508 private static final Validator VIBRATE_ON_VALIDATOR = sBooleanValidator;
2509
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002510 /**
Jeff Brown7f6c2312012-04-13 20:38:38 -07002511 * If 1, redirects the system vibrator to all currently attached input devices
2512 * that support vibration. If there are no such input devices, then the system
2513 * vibrator is used instead.
2514 * If 0, does not register the system vibrator.
2515 *
2516 * This setting is mainly intended to provide a compatibility mechanism for
2517 * applications that only know about the system vibrator and do not use the
2518 * input device vibrator API.
2519 *
2520 * @hide
2521 */
2522 public static final String VIBRATE_INPUT_DEVICES = "vibrate_input_devices";
2523
Svetoslav683914b2015-01-15 14:22:26 -08002524 private static final Validator VIBRATE_INPUT_DEVICES_VALIDATOR = sBooleanValidator;
2525
Jeff Brown7f6c2312012-04-13 20:38:38 -07002526 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002527 * Ringer volume. This is used internally, changing this value will not
2528 * change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002529 *
2530 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002531 */
2532 public static final String VOLUME_RING = "volume_ring";
2533
2534 /**
2535 * System/notifications volume. This is used internally, changing this
2536 * value will not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002537 *
2538 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002539 */
2540 public static final String VOLUME_SYSTEM = "volume_system";
2541
2542 /**
2543 * Voice call volume. This is used internally, changing this value will
2544 * not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002545 *
2546 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002547 */
2548 public static final String VOLUME_VOICE = "volume_voice";
2549
2550 /**
2551 * Music/media/gaming volume. This is used internally, changing this
2552 * value will not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002553 *
2554 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002555 */
2556 public static final String VOLUME_MUSIC = "volume_music";
2557
2558 /**
2559 * Alarm volume. This is used internally, changing this
2560 * value will not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002561 *
2562 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002563 */
2564 public static final String VOLUME_ALARM = "volume_alarm";
2565
2566 /**
2567 * Notification volume. This is used internally, changing this
2568 * value will not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002569 *
2570 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002571 */
2572 public static final String VOLUME_NOTIFICATION = "volume_notification";
2573
2574 /**
Eric Laurent484d2882009-12-08 09:05:45 -08002575 * Bluetooth Headset volume. This is used internally, changing this value will
2576 * not change the volume. See AudioManager.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002577 *
2578 * @removed Not used by anything since API 2.
Eric Laurent484d2882009-12-08 09:05:45 -08002579 */
2580 public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
2581
2582 /**
Mike Lockwood8517e462011-10-25 14:47:19 -04002583 * Master volume (float in the range 0.0f to 1.0f).
Svetoslavdbbeeb32015-02-18 19:16:25 -08002584 *
Mike Lockwood8517e462011-10-25 14:47:19 -04002585 * @hide
2586 */
2587 public static final String VOLUME_MASTER = "volume_master";
2588
2589 /**
Justin Koh57978ed2012-04-03 17:37:58 -07002590 * Master volume mute (int 1 = mute, 0 = not muted).
2591 *
2592 * @hide
2593 */
2594 public static final String VOLUME_MASTER_MUTE = "volume_master_mute";
2595
Svetoslav683914b2015-01-15 14:22:26 -08002596 private static final Validator VOLUME_MASTER_MUTE_VALIDATOR = sBooleanValidator;
2597
Justin Koh57978ed2012-04-03 17:37:58 -07002598 /**
Julia Reynoldsb53453f2014-08-22 11:42:43 -04002599 * Microphone mute (int 1 = mute, 0 = not muted).
2600 *
2601 * @hide
2602 */
2603 public static final String MICROPHONE_MUTE = "microphone_mute";
2604
Svetoslav683914b2015-01-15 14:22:26 -08002605 private static final Validator MICROPHONE_MUTE_VALIDATOR = sBooleanValidator;
2606
Julia Reynoldsb53453f2014-08-22 11:42:43 -04002607 /**
Justin Koh57978ed2012-04-03 17:37:58 -07002608 * Whether the notifications should use the ring volume (value of 1) or
2609 * a separate notification volume (value of 0). In most cases, users
2610 * will have this enabled so the notification and ringer volumes will be
2611 * the same. However, power users can disable this and use the separate
2612 * notification volume control.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002613 * <p>
Justin Koh57978ed2012-04-03 17:37:58 -07002614 * Note: This is a one-off setting that will be removed in the future
2615 * when there is profile support. For this reason, it is kept hidden
2616 * from the public APIs.
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002617 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002618 * @hide
Amith Yamasani42722bf2011-07-22 10:34:27 -07002619 * @deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002620 */
Gilles Debunnee90bed12011-08-30 14:28:27 -07002621 @Deprecated
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002622 public static final String NOTIFICATIONS_USE_RING_VOLUME =
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002623 "notifications_use_ring_volume";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002624
Svetoslav683914b2015-01-15 14:22:26 -08002625 private static final Validator NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR = sBooleanValidator;
2626
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002627 /**
Daniel Sandler6329bf72010-02-26 15:17:44 -05002628 * Whether silent mode should allow vibration feedback. This is used
2629 * internally in AudioService and the Sound settings activity to
2630 * coordinate decoupling of vibrate and silent modes. This setting
2631 * will likely be removed in a future release with support for
2632 * audio/vibe feedback profiles.
2633 *
Eric Laurentbffc3d12012-05-07 17:43:49 -07002634 * Not used anymore. On devices with vibrator, the user explicitly selects
2635 * silent or vibrate mode.
2636 * Kept for use by legacy database upgrade code in DatabaseHelper.
Daniel Sandler6329bf72010-02-26 15:17:44 -05002637 * @hide
2638 */
2639 public static final String VIBRATE_IN_SILENT = "vibrate_in_silent";
2640
Svetoslav683914b2015-01-15 14:22:26 -08002641 private static final Validator VIBRATE_IN_SILENT_VALIDATOR = sBooleanValidator;
2642
Daniel Sandler6329bf72010-02-26 15:17:44 -05002643 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002644 * The mapping of stream type (integer) to its setting.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002645 *
2646 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002647 */
2648 public static final String[] VOLUME_SETTINGS = {
2649 VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
Eric Laurent484d2882009-12-08 09:05:45 -08002650 VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002651 };
2652
2653 /**
2654 * Appended to various volume related settings to record the previous
2655 * values before they the settings were affected by a silent/vibrate
2656 * ringer mode change.
Svetoslavdbbeeb32015-02-18 19:16:25 -08002657 *
2658 * @removed Not used by anything since API 2.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002659 */
2660 public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
2661
2662 /**
2663 * Persistent store for the system-wide default ringtone URI.
2664 * <p>
2665 * If you need to play the default ringtone at any given time, it is recommended
2666 * you give {@link #DEFAULT_RINGTONE_URI} to the media player. It will resolve
2667 * to the set default ringtone at the time of playing.
2668 *
2669 * @see #DEFAULT_RINGTONE_URI
2670 */
2671 public static final String RINGTONE = "ringtone";
2672
Svetoslav683914b2015-01-15 14:22:26 -08002673 private static final Validator RINGTONE_VALIDATOR = sUriValidator;
2674
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002675 /**
2676 * A {@link Uri} that will point to the current default ringtone at any
2677 * given time.
2678 * <p>
2679 * If the current default ringtone is in the DRM provider and the caller
2680 * does not have permission, the exception will be a
2681 * FileNotFoundException.
2682 */
2683 public static final Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE);
2684
2685 /**
2686 * Persistent store for the system-wide default notification sound.
2687 *
2688 * @see #RINGTONE
2689 * @see #DEFAULT_NOTIFICATION_URI
2690 */
2691 public static final String NOTIFICATION_SOUND = "notification_sound";
2692
Svetoslav683914b2015-01-15 14:22:26 -08002693 private static final Validator NOTIFICATION_SOUND_VALIDATOR = sUriValidator;
2694
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002695 /**
2696 * A {@link Uri} that will point to the current default notification
2697 * sound at any given time.
2698 *
2699 * @see #DEFAULT_RINGTONE_URI
2700 */
2701 public static final Uri DEFAULT_NOTIFICATION_URI = getUriFor(NOTIFICATION_SOUND);
2702
2703 /**
Patrick Scott3156bb002009-04-13 09:57:38 -07002704 * Persistent store for the system-wide default alarm alert.
2705 *
2706 * @see #RINGTONE
2707 * @see #DEFAULT_ALARM_ALERT_URI
2708 */
2709 public static final String ALARM_ALERT = "alarm_alert";
2710
Svetoslav683914b2015-01-15 14:22:26 -08002711 private static final Validator ALARM_ALERT_VALIDATOR = sUriValidator;
2712
Patrick Scott3156bb002009-04-13 09:57:38 -07002713 /**
2714 * A {@link Uri} that will point to the current default alarm alert at
2715 * any given time.
2716 *
2717 * @see #DEFAULT_ALARM_ALERT_URI
2718 */
2719 public static final Uri DEFAULT_ALARM_ALERT_URI = getUriFor(ALARM_ALERT);
2720
2721 /**
Jean-Michel Trivid589fea2011-04-15 11:28:10 -07002722 * Persistent store for the system default media button event receiver.
2723 *
2724 * @hide
2725 */
2726 public static final String MEDIA_BUTTON_RECEIVER = "media_button_receiver";
2727
Svetoslav683914b2015-01-15 14:22:26 -08002728 private static final Validator MEDIA_BUTTON_RECEIVER_VALIDATOR = new Validator() {
2729 @Override
2730 public boolean validate(String value) {
2731 try {
2732 ComponentName.unflattenFromString(value);
2733 return true;
2734 } catch (NullPointerException e) {
2735 return false;
2736 }
2737 }
2738 };
2739
Jean-Michel Trivid589fea2011-04-15 11:28:10 -07002740 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002741 * Setting to enable Auto Replace (AutoText) in text editors. 1 = On, 0 = Off
2742 */
2743 public static final String TEXT_AUTO_REPLACE = "auto_replace";
2744
Svetoslav683914b2015-01-15 14:22:26 -08002745 private static final Validator TEXT_AUTO_REPLACE_VALIDATOR = sBooleanValidator;
2746
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002747 /**
2748 * Setting to enable Auto Caps in text editors. 1 = On, 0 = Off
2749 */
2750 public static final String TEXT_AUTO_CAPS = "auto_caps";
2751
Svetoslav683914b2015-01-15 14:22:26 -08002752 private static final Validator TEXT_AUTO_CAPS_VALIDATOR = sBooleanValidator;
2753
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002754 /**
2755 * Setting to enable Auto Punctuate in text editors. 1 = On, 0 = Off. This
2756 * feature converts two spaces to a "." and space.
2757 */
2758 public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002759
Svetoslav683914b2015-01-15 14:22:26 -08002760 private static final Validator TEXT_AUTO_PUNCTUATE_VALIDATOR = sBooleanValidator;
2761
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002762 /**
2763 * Setting to showing password characters in text editors. 1 = On, 0 = Off
2764 */
2765 public static final String TEXT_SHOW_PASSWORD = "show_password";
2766
Svetoslav683914b2015-01-15 14:22:26 -08002767 private static final Validator TEXT_SHOW_PASSWORD_VALIDATOR = sBooleanValidator;
2768
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002769 public static final String SHOW_GTALK_SERVICE_STATUS =
2770 "SHOW_GTALK_SERVICE_STATUS";
2771
Svetoslav683914b2015-01-15 14:22:26 -08002772 private static final Validator SHOW_GTALK_SERVICE_STATUS_VALIDATOR = sBooleanValidator;
2773
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002774 /**
2775 * Name of activity to use for wallpaper on the home screen.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002776 *
2777 * @deprecated Use {@link WallpaperManager} instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002778 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002779 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002780 public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
2781
Svetoslav683914b2015-01-15 14:22:26 -08002782 private static final Validator WALLPAPER_ACTIVITY_VALIDATOR = new Validator() {
2783 private static final int MAX_LENGTH = 1000;
2784
2785 @Override
2786 public boolean validate(String value) {
2787 if (value != null && value.length() > MAX_LENGTH) {
2788 return false;
2789 }
2790 return ComponentName.unflattenFromString(value) != null;
2791 }
2792 };
2793
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002794 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002795 * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME}
2796 * instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002797 */
Christopher Tate06efb532012-08-24 15:29:27 -07002798 @Deprecated
2799 public static final String AUTO_TIME = Global.AUTO_TIME;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002800
2801 /**
Christopher Tate06efb532012-08-24 15:29:27 -07002802 * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME_ZONE}
2803 * instead
Amith Yamasaniad450be2010-09-16 16:47:00 -07002804 */
Christopher Tate06efb532012-08-24 15:29:27 -07002805 @Deprecated
2806 public static final String AUTO_TIME_ZONE = Global.AUTO_TIME_ZONE;
Amith Yamasaniad450be2010-09-16 16:47:00 -07002807
2808 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002809 * Display times as 12 or 24 hours
2810 * 12
2811 * 24
2812 */
2813 public static final String TIME_12_24 = "time_12_24";
2814
Svetoslav683914b2015-01-15 14:22:26 -08002815 /** @hide */
2816 public static final Validator TIME_12_24_VALIDATOR =
2817 new DiscreteValueValidator(new String[] {"12", "24"});
2818
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002819 /**
2820 * Date format string
2821 * mm/dd/yyyy
2822 * dd/mm/yyyy
2823 * yyyy/mm/dd
2824 */
2825 public static final String DATE_FORMAT = "date_format";
2826
Svetoslav683914b2015-01-15 14:22:26 -08002827 /** @hide */
2828 public static final Validator DATE_FORMAT_VALIDATOR = new Validator() {
2829 @Override
2830 public boolean validate(String value) {
2831 try {
2832 new SimpleDateFormat(value);
2833 return true;
2834 } catch (IllegalArgumentException e) {
2835 return false;
2836 }
2837 }
2838 };
2839
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002840 /**
2841 * Whether the setup wizard has been run before (on first boot), or if
2842 * it still needs to be run.
2843 *
2844 * nonzero = it has been run in the past
2845 * 0 = it has not been run in the past
2846 */
2847 public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
2848
Svetoslav683914b2015-01-15 14:22:26 -08002849 /** @hide */
2850 public static final Validator SETUP_WIZARD_HAS_RUN_VALIDATOR = sBooleanValidator;
2851
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002852 /**
2853 * Scaling factor for normal window animations. Setting to 0 will disable window
2854 * animations.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002855 *
2856 * @deprecated Use {@link Global#WINDOW_ANIMATION_SCALE} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002857 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002858 @Deprecated
2859 public static final String WINDOW_ANIMATION_SCALE = Global.WINDOW_ANIMATION_SCALE;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002860
2861 /**
2862 * Scaling factor for activity transition animations. Setting to 0 will disable window
2863 * animations.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002864 *
2865 * @deprecated Use {@link Global#TRANSITION_ANIMATION_SCALE} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002866 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002867 @Deprecated
2868 public static final String TRANSITION_ANIMATION_SCALE = Global.TRANSITION_ANIMATION_SCALE;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002869
2870 /**
Chet Haasec38fa1f2012-02-01 16:37:46 -08002871 * Scaling factor for Animator-based animations. This affects both the start delay and
2872 * duration of all such animations. Setting to 0 will cause animations to end immediately.
2873 * The default value is 1.
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002874 *
2875 * @deprecated Use {@link Global#ANIMATOR_DURATION_SCALE} instead
Chet Haasec38fa1f2012-02-01 16:37:46 -08002876 */
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002877 @Deprecated
2878 public static final String ANIMATOR_DURATION_SCALE = Global.ANIMATOR_DURATION_SCALE;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002879
2880 /**
2881 * Control whether the accelerometer will be used to change screen
2882 * orientation. If 0, it will not be used unless explicitly requested
2883 * by the application; if 1, it will be used by default unless explicitly
2884 * disabled by the application.
2885 */
2886 public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation";
2887
Svetoslav683914b2015-01-15 14:22:26 -08002888 /** @hide */
2889 public static final Validator ACCELEROMETER_ROTATION_VALIDATOR = sBooleanValidator;
2890
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002891 /**
Daniel Sandlerb73617d2010-08-17 00:41:00 -04002892 * Default screen rotation when no other policy applies.
2893 * When {@link #ACCELEROMETER_ROTATION} is zero and no on-screen Activity expresses a
2894 * preference, this rotation value will be used. Must be one of the
Brian Muramatsue1d46982010-12-06 17:34:20 -08002895 * {@link android.view.Surface#ROTATION_0 Surface rotation constants}.
Daniel Sandlerb73617d2010-08-17 00:41:00 -04002896 *
Dianne Hackborn16ec0802014-08-15 18:32:33 -07002897 * @see android.view.Display#getRotation
Daniel Sandlerb73617d2010-08-17 00:41:00 -04002898 */
2899 public static final String USER_ROTATION = "user_rotation";
2900
Svetoslav683914b2015-01-15 14:22:26 -08002901 /** @hide */
2902 public static final Validator USER_ROTATION_VALIDATOR =
2903 new InclusiveIntegerRangeValidator(0, 3);
2904
Daniel Sandlerb73617d2010-08-17 00:41:00 -04002905 /**
Jeff Brown207673cd2012-06-05 17:47:11 -07002906 * Control whether the rotation lock toggle in the System UI should be hidden.
2907 * Typically this is done for accessibility purposes to make it harder for
2908 * the user to accidentally toggle the rotation lock while the display rotation
2909 * has been locked for accessibility.
2910 *
2911 * If 0, then rotation lock toggle is not hidden for accessibility (although it may be
2912 * unavailable for other reasons). If 1, then the rotation lock toggle is hidden.
2913 *
2914 * @hide
2915 */
2916 public static final String HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY =
2917 "hide_rotation_lock_toggle_for_accessibility";
2918
Svetoslav683914b2015-01-15 14:22:26 -08002919 /** @hide */
2920 public static final Validator HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR =
2921 sBooleanValidator;
2922
Jeff Brown207673cd2012-06-05 17:47:11 -07002923 /**
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002924 * Whether the phone vibrates when it is ringing due to an incoming call. This will
2925 * be used by Phone and Setting apps; it shouldn't affect other apps.
2926 * The value is boolean (1 or 0).
2927 *
2928 * Note: this is not same as "vibrate on ring", which had been available until ICS.
2929 * It was about AudioManager's setting and thus affected all the applications which
2930 * relied on the setting, while this is purely about the vibration setting for incoming
2931 * calls.
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002932 */
2933 public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
2934
Svetoslav683914b2015-01-15 14:22:26 -08002935 /** @hide */
2936 public static final Validator VIBRATE_WHEN_RINGING_VALIDATOR = sBooleanValidator;
2937
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002938 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002939 * Whether the audible DTMF tones are played by the dialer when dialing. The value is
2940 * boolean (1 or 0).
2941 */
2942 public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone";
2943
Svetoslav683914b2015-01-15 14:22:26 -08002944 /** @hide */
2945 public static final Validator DTMF_TONE_WHEN_DIALING_VALIDATOR = sBooleanValidator;
2946
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002947 /**
David Kraused0f67152009-06-13 18:01:13 -05002948 * CDMA only settings
2949 * DTMF tone type played by the dialer when dialing.
2950 * 0 = Normal
2951 * 1 = Long
David Kraused0f67152009-06-13 18:01:13 -05002952 */
2953 public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
2954
Svetoslav683914b2015-01-15 14:22:26 -08002955 /** @hide */
2956 public static final Validator DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR = sBooleanValidator;
2957
David Kraused0f67152009-06-13 18:01:13 -05002958 /**
David Kraused0f67152009-06-13 18:01:13 -05002959 * Whether the hearing aid is enabled. The value is
2960 * boolean (1 or 0).
2961 * @hide
2962 */
2963 public static final String HEARING_AID = "hearing_aid";
2964
Svetoslav683914b2015-01-15 14:22:26 -08002965 /** @hide */
2966 public static final Validator HEARING_AID_VALIDATOR = sBooleanValidator;
2967
David Kraused0f67152009-06-13 18:01:13 -05002968 /**
2969 * CDMA only settings
2970 * TTY Mode
2971 * 0 = OFF
2972 * 1 = FULL
2973 * 2 = VCO
2974 * 3 = HCO
2975 * @hide
2976 */
2977 public static final String TTY_MODE = "tty_mode";
2978
Svetoslav683914b2015-01-15 14:22:26 -08002979 /** @hide */
2980 public static final Validator TTY_MODE_VALIDATOR = new InclusiveIntegerRangeValidator(0, 3);
2981
David Kraused0f67152009-06-13 18:01:13 -05002982 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002983 * Whether the sounds effects (key clicks, lid open ...) are enabled. The value is
2984 * boolean (1 or 0).
2985 */
2986 public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002987
Svetoslav683914b2015-01-15 14:22:26 -08002988 /** @hide */
2989 public static final Validator SOUND_EFFECTS_ENABLED_VALIDATOR = sBooleanValidator;
2990
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002991 /**
2992 * Whether the haptic feedback (long presses, ...) are enabled. The value is
2993 * boolean (1 or 0).
2994 */
2995 public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled";
Sanjay Jeyakumar21bf2412009-07-09 13:31:48 -07002996
Svetoslav683914b2015-01-15 14:22:26 -08002997 /** @hide */
2998 public static final Validator HAPTIC_FEEDBACK_ENABLED_VALIDATOR = sBooleanValidator;
2999
Mike LeBeau48603e72009-06-05 00:27:00 +01003000 /**
Bjorn Bringert24abb662010-09-21 12:21:18 +01003001 * @deprecated Each application that shows web suggestions should have its own
3002 * setting for this.
Mike LeBeau48603e72009-06-05 00:27:00 +01003003 */
Bjorn Bringert24abb662010-09-21 12:21:18 +01003004 @Deprecated
Mike LeBeau48603e72009-06-05 00:27:00 +01003005 public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003006
Svetoslav683914b2015-01-15 14:22:26 -08003007 /** @hide */
3008 public static final Validator SHOW_WEB_SUGGESTIONS_VALIDATOR = sBooleanValidator;
3009
-b master501eec92009-07-06 13:53:11 -07003010 /**
Amith Yamasaniae3ed702009-12-01 19:02:05 -08003011 * Whether the notification LED should repeatedly flash when a notification is
3012 * pending. The value is boolean (1 or 0).
3013 * @hide
3014 */
3015 public static final String NOTIFICATION_LIGHT_PULSE = "notification_light_pulse";
3016
Svetoslav683914b2015-01-15 14:22:26 -08003017 /** @hide */
3018 public static final Validator NOTIFICATION_LIGHT_PULSE_VALIDATOR = sBooleanValidator;
3019
Amith Yamasaniae3ed702009-12-01 19:02:05 -08003020 /**
Dianne Hackborn90d2db32010-02-11 22:19:06 -08003021 * Show pointer location on screen?
3022 * 0 = no
3023 * 1 = yes
3024 * @hide
3025 */
3026 public static final String POINTER_LOCATION = "pointer_location";
3027
Svetoslav683914b2015-01-15 14:22:26 -08003028 /** @hide */
3029 public static final Validator POINTER_LOCATION_VALIDATOR = sBooleanValidator;
3030
Dianne Hackborn90d2db32010-02-11 22:19:06 -08003031 /**
Jeff Browndaf4a122011-08-26 17:14:14 -07003032 * Show touch positions on screen?
3033 * 0 = no
3034 * 1 = yes
3035 * @hide
3036 */
3037 public static final String SHOW_TOUCHES = "show_touches";
3038
Svetoslav683914b2015-01-15 14:22:26 -08003039 /** @hide */
3040 public static final Validator SHOW_TOUCHES_VALIDATOR = sBooleanValidator;
3041
Jeff Browndaf4a122011-08-26 17:14:14 -07003042 /**
Dianne Hackborn16ec0802014-08-15 18:32:33 -07003043 * Log raw orientation data from
Jorim Jaggib10e33f2015-02-04 21:57:40 +01003044 * {@link com.android.server.policy.WindowOrientationListener} for use with the
Jeff Brown4519f072011-01-23 13:16:01 -08003045 * orientationplot.py tool.
3046 * 0 = no
3047 * 1 = yes
3048 * @hide
3049 */
3050 public static final String WINDOW_ORIENTATION_LISTENER_LOG =
3051 "window_orientation_listener_log";
3052
Svetoslav683914b2015-01-15 14:22:26 -08003053 /** @hide */
3054 public static final Validator WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR = sBooleanValidator;
3055
Jeff Brown4519f072011-01-23 13:16:01 -08003056 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003057 * @deprecated Use {@link android.provider.Settings.Global#POWER_SOUNDS_ENABLED}
3058 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003059 * @hide
3060 */
Christopher Tate06efb532012-08-24 15:29:27 -07003061 @Deprecated
3062 public static final String POWER_SOUNDS_ENABLED = Global.POWER_SOUNDS_ENABLED;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003063
3064 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003065 * @deprecated Use {@link android.provider.Settings.Global#DOCK_SOUNDS_ENABLED}
3066 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003067 * @hide
3068 */
Christopher Tate06efb532012-08-24 15:29:27 -07003069 @Deprecated
3070 public static final String DOCK_SOUNDS_ENABLED = Global.DOCK_SOUNDS_ENABLED;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003071
3072 /**
3073 * Whether to play sounds when the keyguard is shown and dismissed.
3074 * @hide
3075 */
3076 public static final String LOCKSCREEN_SOUNDS_ENABLED = "lockscreen_sounds_enabled";
3077
Svetoslav683914b2015-01-15 14:22:26 -08003078 /** @hide */
3079 public static final Validator LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR = sBooleanValidator;
3080
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003081 /**
Mike Lockwood7bef7392011-10-20 16:51:53 -04003082 * Whether the lockscreen should be completely disabled.
3083 * @hide
3084 */
3085 public static final String LOCKSCREEN_DISABLED = "lockscreen.disabled";
3086
Svetoslav683914b2015-01-15 14:22:26 -08003087 /** @hide */
3088 public static final Validator LOCKSCREEN_DISABLED_VALIDATOR = sBooleanValidator;
3089
Mike Lockwood7bef7392011-10-20 16:51:53 -04003090 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003091 * @deprecated Use {@link android.provider.Settings.Global#LOW_BATTERY_SOUND}
3092 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003093 * @hide
3094 */
Christopher Tate06efb532012-08-24 15:29:27 -07003095 @Deprecated
3096 public static final String LOW_BATTERY_SOUND = Global.LOW_BATTERY_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003097
3098 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003099 * @deprecated Use {@link android.provider.Settings.Global#DESK_DOCK_SOUND}
3100 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003101 * @hide
3102 */
Christopher Tate06efb532012-08-24 15:29:27 -07003103 @Deprecated
3104 public static final String DESK_DOCK_SOUND = Global.DESK_DOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003105
3106 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003107 * @deprecated Use {@link android.provider.Settings.Global#DESK_UNDOCK_SOUND}
3108 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003109 * @hide
3110 */
Christopher Tate06efb532012-08-24 15:29:27 -07003111 @Deprecated
3112 public static final String DESK_UNDOCK_SOUND = Global.DESK_UNDOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003113
3114 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003115 * @deprecated Use {@link android.provider.Settings.Global#CAR_DOCK_SOUND}
3116 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003117 * @hide
3118 */
Christopher Tate06efb532012-08-24 15:29:27 -07003119 @Deprecated
3120 public static final String CAR_DOCK_SOUND = Global.CAR_DOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003121
3122 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003123 * @deprecated Use {@link android.provider.Settings.Global#CAR_UNDOCK_SOUND}
3124 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003125 * @hide
3126 */
Christopher Tate06efb532012-08-24 15:29:27 -07003127 @Deprecated
3128 public static final String CAR_UNDOCK_SOUND = Global.CAR_UNDOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003129
3130 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003131 * @deprecated Use {@link android.provider.Settings.Global#LOCK_SOUND}
3132 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003133 * @hide
3134 */
Christopher Tate06efb532012-08-24 15:29:27 -07003135 @Deprecated
3136 public static final String LOCK_SOUND = Global.LOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003137
3138 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003139 * @deprecated Use {@link android.provider.Settings.Global#UNLOCK_SOUND}
3140 * instead
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003141 * @hide
3142 */
Christopher Tate06efb532012-08-24 15:29:27 -07003143 @Deprecated
3144 public static final String UNLOCK_SOUND = Global.UNLOCK_SOUND;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05003145
3146 /**
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003147 * Receive incoming SIP calls?
3148 * 0 = no
3149 * 1 = yes
3150 * @hide
3151 */
3152 public static final String SIP_RECEIVE_CALLS = "sip_receive_calls";
3153
Svetoslav683914b2015-01-15 14:22:26 -08003154 /** @hide */
3155 public static final Validator SIP_RECEIVE_CALLS_VALIDATOR = sBooleanValidator;
3156
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003157 /**
3158 * Call Preference String.
3159 * "SIP_ALWAYS" : Always use SIP with network access
3160 * "SIP_ADDRESS_ONLY" : Only if destination is a SIP address
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003161 * @hide
3162 */
3163 public static final String SIP_CALL_OPTIONS = "sip_call_options";
3164
Svetoslav683914b2015-01-15 14:22:26 -08003165 /** @hide */
3166 public static final Validator SIP_CALL_OPTIONS_VALIDATOR = new DiscreteValueValidator(
3167 new String[] {"SIP_ALWAYS", "SIP_ADDRESS_ONLY"});
3168
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003169 /**
3170 * One of the sip call options: Always use SIP with network access.
3171 * @hide
3172 */
3173 public static final String SIP_ALWAYS = "SIP_ALWAYS";
3174
Svetoslav683914b2015-01-15 14:22:26 -08003175 /** @hide */
3176 public static final Validator SIP_ALWAYS_VALIDATOR = sBooleanValidator;
3177
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003178 /**
3179 * One of the sip call options: Only if destination is a SIP address.
3180 * @hide
3181 */
3182 public static final String SIP_ADDRESS_ONLY = "SIP_ADDRESS_ONLY";
3183
Svetoslav683914b2015-01-15 14:22:26 -08003184 /** @hide */
3185 public static final Validator SIP_ADDRESS_ONLY_VALIDATOR = sBooleanValidator;
3186
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003187 /**
Tyler Gunn2c830a22014-09-02 08:39:35 -07003188 * @deprecated Use SIP_ALWAYS or SIP_ADDRESS_ONLY instead. Formerly used to indicate that
3189 * the user should be prompted each time a call is made whether it should be placed using
3190 * SIP. The {@link com.android.providers.settings.DatabaseHelper} replaces this with
3191 * SIP_ADDRESS_ONLY.
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003192 * @hide
3193 */
Tyler Gunn2c830a22014-09-02 08:39:35 -07003194 @Deprecated
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003195 public static final String SIP_ASK_ME_EACH_TIME = "SIP_ASK_ME_EACH_TIME";
3196
Svetoslav683914b2015-01-15 14:22:26 -08003197 /** @hide */
3198 public static final Validator SIP_ASK_ME_EACH_TIME_VALIDATOR = sBooleanValidator;
3199
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003200 /**
Jeff Brown1a84fd12011-06-02 01:26:32 -07003201 * Pointer speed setting.
3202 * This is an integer value in a range between -7 and +7, so there are 15 possible values.
3203 * -7 = slowest
3204 * 0 = default speed
3205 * +7 = fastest
3206 * @hide
3207 */
3208 public static final String POINTER_SPEED = "pointer_speed";
3209
Svetoslav683914b2015-01-15 14:22:26 -08003210 /** @hide */
3211 public static final Validator POINTER_SPEED_VALIDATOR =
3212 new InclusiveFloatRangeValidator(-7, 7);
3213
Jeff Brown1a84fd12011-06-02 01:26:32 -07003214 /**
Jason Monk56e09b42014-07-18 10:29:14 -04003215 * Whether lock-to-app will be triggered by long-press on recents.
3216 * @hide
3217 */
3218 public static final String LOCK_TO_APP_ENABLED = "lock_to_app_enabled";
3219
Svetoslav683914b2015-01-15 14:22:26 -08003220 /** @hide */
3221 public static final Validator LOCK_TO_APP_ENABLED_VALIDATOR = sBooleanValidator;
3222
Jason Monk56e09b42014-07-18 10:29:14 -04003223 /**
Daniel Sandler2fdb68b2013-10-03 00:12:11 -04003224 * I am the lolrus.
3225 * <p>
3226 * Nonzero values indicate that the user has a bukkit.
3227 * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>.
3228 * @hide
3229 */
3230 public static final String EGG_MODE = "egg_mode";
3231
Svetoslav683914b2015-01-15 14:22:26 -08003232 /** @hide */
Svet Ganovb1918a02015-05-15 09:32:55 -07003233 public static final Validator EGG_MODE_VALIDATOR = new Validator() {
3234 @Override
3235 public boolean validate(String value) {
3236 try {
3237 return Long.parseLong(value) >= 0;
3238 } catch (NumberFormatException e) {
3239 return false;
3240 }
3241 }
3242 };
Svetoslav683914b2015-01-15 14:22:26 -08003243
3244 /**
3245 * IMPORTANT: If you add a new public settings you also have to add it to
3246 * PUBLIC_SETTINGS below. If the new setting is hidden you have to add
3247 * it to PRIVATE_SETTINGS below. Also add a validator that can validate
3248 * the setting value. See an example above.
3249 */
3250
Daniel Sandler2fdb68b2013-10-03 00:12:11 -04003251 /**
-b master501eec92009-07-06 13:53:11 -07003252 * Settings to backup. This is here so that it's in the same place as the settings
3253 * keys and easy to update.
Svetoslav Ganova571a582011-09-20 18:32:20 -07003254 *
3255 * NOTE: Settings are backed up and restored in the order they appear
3256 * in this array. If you have one setting depending on another,
3257 * make sure that they are ordered appropriately.
3258 *
-b master501eec92009-07-06 13:53:11 -07003259 * @hide
3260 */
3261 public static final String[] SETTINGS_TO_BACKUP = {
Christopher Tate66488d62012-10-02 11:58:01 -07003262 STAY_ON_WHILE_PLUGGED_IN, // moved to global
-b master501eec92009-07-06 13:53:11 -07003263 WIFI_USE_STATIC_IP,
3264 WIFI_STATIC_IP,
3265 WIFI_STATIC_GATEWAY,
3266 WIFI_STATIC_NETMASK,
3267 WIFI_STATIC_DNS1,
3268 WIFI_STATIC_DNS2,
3269 BLUETOOTH_DISCOVERABILITY,
3270 BLUETOOTH_DISCOVERABILITY_TIMEOUT,
3271 DIM_SCREEN,
3272 SCREEN_OFF_TIMEOUT,
3273 SCREEN_BRIGHTNESS,
Christopher Tate362aca62009-09-25 15:58:03 -07003274 SCREEN_BRIGHTNESS_MODE,
Dianne Hackbornd9ea4682012-01-20 18:36:40 -08003275 SCREEN_AUTO_BRIGHTNESS_ADJ,
Jeff Brown7f6c2312012-04-13 20:38:38 -07003276 VIBRATE_INPUT_DEVICES,
Amith Yamasani8823c0a82009-07-07 14:30:17 -07003277 MODE_RINGER_STREAMS_AFFECTED,
-b master501eec92009-07-06 13:53:11 -07003278 TEXT_AUTO_REPLACE,
3279 TEXT_AUTO_CAPS,
3280 TEXT_AUTO_PUNCTUATE,
3281 TEXT_SHOW_PASSWORD,
Christopher Tate66488d62012-10-02 11:58:01 -07003282 AUTO_TIME, // moved to global
3283 AUTO_TIME_ZONE, // moved to global
-b master501eec92009-07-06 13:53:11 -07003284 TIME_12_24,
3285 DATE_FORMAT,
-b master501eec92009-07-06 13:53:11 -07003286 DTMF_TONE_WHEN_DIALING,
3287 DTMF_TONE_TYPE_WHEN_DIALING,
-b master501eec92009-07-06 13:53:11 -07003288 HEARING_AID,
3289 TTY_MODE,
3290 SOUND_EFFECTS_ENABLED,
3291 HAPTIC_FEEDBACK_ENABLED,
Christopher Tate66488d62012-10-02 11:58:01 -07003292 POWER_SOUNDS_ENABLED, // moved to global
3293 DOCK_SOUNDS_ENABLED, // moved to global
Christopher Tate14c2d792010-02-25 16:49:44 -08003294 LOCKSCREEN_SOUNDS_ENABLED,
Amith Yamasaniae3ed702009-12-01 19:02:05 -08003295 SHOW_WEB_SUGGESTIONS,
Chung-yih Wang042e9bd2010-08-31 17:43:39 +08003296 SIP_CALL_OPTIONS,
Nick Pelly038cabe2010-09-23 16:12:11 -07003297 SIP_RECEIVE_CALLS,
Jeff Brown1a84fd12011-06-02 01:26:32 -07003298 POINTER_SPEED,
Amith Yamasani622bf2222013-09-06 13:54:28 -07003299 VIBRATE_WHEN_RINGING,
3300 RINGTONE,
Jason Monk94cfd9d2014-10-31 13:18:21 -04003301 LOCK_TO_APP_ENABLED,
Amith Yamasani622bf2222013-09-06 13:54:28 -07003302 NOTIFICATION_SOUND
-b master501eec92009-07-06 13:53:11 -07003303 };
3304
Sailesh Nepal1bd78762014-02-11 22:32:21 -08003305 /**
Amith Yamasanib0ff3222015-03-04 09:56:14 -08003306 * These are all public system settings
Svetoslav683914b2015-01-15 14:22:26 -08003307 *
Amith Yamasani4f7e2e32014-08-14 18:49:48 -07003308 * @hide
3309 */
Svetoslav683914b2015-01-15 14:22:26 -08003310 public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>();
3311 static {
3312 PUBLIC_SETTINGS.add(END_BUTTON_BEHAVIOR);
3313 PUBLIC_SETTINGS.add(WIFI_USE_STATIC_IP);
3314 PUBLIC_SETTINGS.add(WIFI_STATIC_IP);
3315 PUBLIC_SETTINGS.add(WIFI_STATIC_GATEWAY);
3316 PUBLIC_SETTINGS.add(WIFI_STATIC_NETMASK);
3317 PUBLIC_SETTINGS.add(WIFI_STATIC_DNS1);
3318 PUBLIC_SETTINGS.add(WIFI_STATIC_DNS2);
3319 PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY);
3320 PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY_TIMEOUT);
3321 PUBLIC_SETTINGS.add(NEXT_ALARM_FORMATTED);
3322 PUBLIC_SETTINGS.add(FONT_SCALE);
3323 PUBLIC_SETTINGS.add(DIM_SCREEN);
3324 PUBLIC_SETTINGS.add(SCREEN_OFF_TIMEOUT);
3325 PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS);
3326 PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_MODE);
3327 PUBLIC_SETTINGS.add(MODE_RINGER_STREAMS_AFFECTED);
3328 PUBLIC_SETTINGS.add(MUTE_STREAMS_AFFECTED);
3329 PUBLIC_SETTINGS.add(VIBRATE_ON);
3330 PUBLIC_SETTINGS.add(VOLUME_RING);
3331 PUBLIC_SETTINGS.add(VOLUME_SYSTEM);
3332 PUBLIC_SETTINGS.add(VOLUME_VOICE);
3333 PUBLIC_SETTINGS.add(VOLUME_MUSIC);
3334 PUBLIC_SETTINGS.add(VOLUME_ALARM);
3335 PUBLIC_SETTINGS.add(VOLUME_NOTIFICATION);
3336 PUBLIC_SETTINGS.add(VOLUME_BLUETOOTH_SCO);
3337 PUBLIC_SETTINGS.add(RINGTONE);
3338 PUBLIC_SETTINGS.add(NOTIFICATION_SOUND);
3339 PUBLIC_SETTINGS.add(ALARM_ALERT);
3340 PUBLIC_SETTINGS.add(TEXT_AUTO_REPLACE);
3341 PUBLIC_SETTINGS.add(TEXT_AUTO_CAPS);
3342 PUBLIC_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
3343 PUBLIC_SETTINGS.add(TEXT_SHOW_PASSWORD);
3344 PUBLIC_SETTINGS.add(SHOW_GTALK_SERVICE_STATUS);
3345 PUBLIC_SETTINGS.add(WALLPAPER_ACTIVITY);
3346 PUBLIC_SETTINGS.add(TIME_12_24);
3347 PUBLIC_SETTINGS.add(DATE_FORMAT);
3348 PUBLIC_SETTINGS.add(SETUP_WIZARD_HAS_RUN);
3349 PUBLIC_SETTINGS.add(ACCELEROMETER_ROTATION);
3350 PUBLIC_SETTINGS.add(USER_ROTATION);
3351 PUBLIC_SETTINGS.add(DTMF_TONE_WHEN_DIALING);
3352 PUBLIC_SETTINGS.add(SOUND_EFFECTS_ENABLED);
3353 PUBLIC_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
3354 PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS);
Svetoslav Ganovd2631632015-12-09 16:29:22 -08003355 PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING);
Svetoslav683914b2015-01-15 14:22:26 -08003356 }
3357
3358 /**
3359 * These are all hidden system settings.
3360 *
3361 * @hide
3362 */
3363 public static final Set<String> PRIVATE_SETTINGS = new ArraySet<>();
3364 static {
3365 PRIVATE_SETTINGS.add(WIFI_USE_STATIC_IP);
3366 PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
3367 PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
3368 PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
3369 PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
3370 PRIVATE_SETTINGS.add(VOLUME_MASTER);
3371 PRIVATE_SETTINGS.add(VOLUME_MASTER_MUTE);
3372 PRIVATE_SETTINGS.add(MICROPHONE_MUTE);
3373 PRIVATE_SETTINGS.add(NOTIFICATIONS_USE_RING_VOLUME);
3374 PRIVATE_SETTINGS.add(VIBRATE_IN_SILENT);
3375 PRIVATE_SETTINGS.add(MEDIA_BUTTON_RECEIVER);
3376 PRIVATE_SETTINGS.add(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY);
Svetoslav683914b2015-01-15 14:22:26 -08003377 PRIVATE_SETTINGS.add(DTMF_TONE_TYPE_WHEN_DIALING);
3378 PRIVATE_SETTINGS.add(HEARING_AID);
3379 PRIVATE_SETTINGS.add(TTY_MODE);
3380 PRIVATE_SETTINGS.add(NOTIFICATION_LIGHT_PULSE);
3381 PRIVATE_SETTINGS.add(POINTER_LOCATION);
3382 PRIVATE_SETTINGS.add(SHOW_TOUCHES);
3383 PRIVATE_SETTINGS.add(WINDOW_ORIENTATION_LISTENER_LOG);
3384 PRIVATE_SETTINGS.add(POWER_SOUNDS_ENABLED);
3385 PRIVATE_SETTINGS.add(DOCK_SOUNDS_ENABLED);
3386 PRIVATE_SETTINGS.add(LOCKSCREEN_SOUNDS_ENABLED);
3387 PRIVATE_SETTINGS.add(LOCKSCREEN_DISABLED);
3388 PRIVATE_SETTINGS.add(LOW_BATTERY_SOUND);
3389 PRIVATE_SETTINGS.add(DESK_DOCK_SOUND);
3390 PRIVATE_SETTINGS.add(DESK_UNDOCK_SOUND);
3391 PRIVATE_SETTINGS.add(CAR_DOCK_SOUND);
3392 PRIVATE_SETTINGS.add(CAR_UNDOCK_SOUND);
3393 PRIVATE_SETTINGS.add(LOCK_SOUND);
3394 PRIVATE_SETTINGS.add(UNLOCK_SOUND);
3395 PRIVATE_SETTINGS.add(SIP_RECEIVE_CALLS);
3396 PRIVATE_SETTINGS.add(SIP_CALL_OPTIONS);
3397 PRIVATE_SETTINGS.add(SIP_ALWAYS);
3398 PRIVATE_SETTINGS.add(SIP_ADDRESS_ONLY);
3399 PRIVATE_SETTINGS.add(SIP_ASK_ME_EACH_TIME);
3400 PRIVATE_SETTINGS.add(POINTER_SPEED);
3401 PRIVATE_SETTINGS.add(LOCK_TO_APP_ENABLED);
3402 PRIVATE_SETTINGS.add(EGG_MODE);
3403 }
3404
3405 /**
Amith Yamasanib0ff3222015-03-04 09:56:14 -08003406 * These are all public system settings
Svetoslav683914b2015-01-15 14:22:26 -08003407 *
3408 * @hide
3409 */
3410 public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
3411 static {
3412 VALIDATORS.put(END_BUTTON_BEHAVIOR,END_BUTTON_BEHAVIOR_VALIDATOR);
3413 VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR);
3414 VALIDATORS.put(BLUETOOTH_DISCOVERABILITY, BLUETOOTH_DISCOVERABILITY_VALIDATOR);
3415 VALIDATORS.put(BLUETOOTH_DISCOVERABILITY_TIMEOUT,
3416 BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR);
3417 VALIDATORS.put(NEXT_ALARM_FORMATTED, NEXT_ALARM_FORMATTED_VALIDATOR);
3418 VALIDATORS.put(FONT_SCALE, FONT_SCALE_VALIDATOR);
3419 VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR);
3420 VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR);
3421 VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR);
3422 VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR);
3423 VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR);
3424 VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR);
3425 VALIDATORS.put(VIBRATE_ON, VIBRATE_ON_VALIDATOR);
Svetoslav683914b2015-01-15 14:22:26 -08003426 VALIDATORS.put(RINGTONE, RINGTONE_VALIDATOR);
3427 VALIDATORS.put(NOTIFICATION_SOUND, NOTIFICATION_SOUND_VALIDATOR);
3428 VALIDATORS.put(ALARM_ALERT, ALARM_ALERT_VALIDATOR);
3429 VALIDATORS.put(TEXT_AUTO_REPLACE, TEXT_AUTO_REPLACE_VALIDATOR);
3430 VALIDATORS.put(TEXT_AUTO_CAPS, TEXT_AUTO_CAPS_VALIDATOR);
3431 VALIDATORS.put(TEXT_AUTO_PUNCTUATE, TEXT_AUTO_PUNCTUATE_VALIDATOR);
3432 VALIDATORS.put(TEXT_SHOW_PASSWORD, TEXT_SHOW_PASSWORD_VALIDATOR);
3433 VALIDATORS.put(SHOW_GTALK_SERVICE_STATUS, SHOW_GTALK_SERVICE_STATUS_VALIDATOR);
3434 VALIDATORS.put(WALLPAPER_ACTIVITY, WALLPAPER_ACTIVITY_VALIDATOR);
3435 VALIDATORS.put(TIME_12_24, TIME_12_24_VALIDATOR);
3436 VALIDATORS.put(DATE_FORMAT, DATE_FORMAT_VALIDATOR);
3437 VALIDATORS.put(SETUP_WIZARD_HAS_RUN, SETUP_WIZARD_HAS_RUN_VALIDATOR);
3438 VALIDATORS.put(ACCELEROMETER_ROTATION, ACCELEROMETER_ROTATION_VALIDATOR);
3439 VALIDATORS.put(USER_ROTATION, USER_ROTATION_VALIDATOR);
3440 VALIDATORS.put(DTMF_TONE_WHEN_DIALING, DTMF_TONE_WHEN_DIALING_VALIDATOR);
3441 VALIDATORS.put(SOUND_EFFECTS_ENABLED, SOUND_EFFECTS_ENABLED_VALIDATOR);
3442 VALIDATORS.put(HAPTIC_FEEDBACK_ENABLED, HAPTIC_FEEDBACK_ENABLED_VALIDATOR);
3443 VALIDATORS.put(SHOW_WEB_SUGGESTIONS, SHOW_WEB_SUGGESTIONS_VALIDATOR);
3444 VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR);
3445 VALIDATORS.put(END_BUTTON_BEHAVIOR, END_BUTTON_BEHAVIOR_VALIDATOR);
3446 VALIDATORS.put(ADVANCED_SETTINGS, ADVANCED_SETTINGS_VALIDATOR);
3447 VALIDATORS.put(SCREEN_AUTO_BRIGHTNESS_ADJ, SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR);
3448 VALIDATORS.put(VIBRATE_INPUT_DEVICES, VIBRATE_INPUT_DEVICES_VALIDATOR);
Svetoslav683914b2015-01-15 14:22:26 -08003449 VALIDATORS.put(VOLUME_MASTER_MUTE, VOLUME_MASTER_MUTE_VALIDATOR);
3450 VALIDATORS.put(MICROPHONE_MUTE, MICROPHONE_MUTE_VALIDATOR);
3451 VALIDATORS.put(NOTIFICATIONS_USE_RING_VOLUME, NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR);
3452 VALIDATORS.put(VIBRATE_IN_SILENT, VIBRATE_IN_SILENT_VALIDATOR);
3453 VALIDATORS.put(MEDIA_BUTTON_RECEIVER, MEDIA_BUTTON_RECEIVER_VALIDATOR);
3454 VALIDATORS.put(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY,
3455 HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR);
3456 VALIDATORS.put(VIBRATE_WHEN_RINGING, VIBRATE_WHEN_RINGING_VALIDATOR);
3457 VALIDATORS.put(DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR);
3458 VALIDATORS.put(HEARING_AID, HEARING_AID_VALIDATOR);
3459 VALIDATORS.put(TTY_MODE, TTY_MODE_VALIDATOR);
3460 VALIDATORS.put(NOTIFICATION_LIGHT_PULSE, NOTIFICATION_LIGHT_PULSE_VALIDATOR);
3461 VALIDATORS.put(POINTER_LOCATION, POINTER_LOCATION_VALIDATOR);
3462 VALIDATORS.put(SHOW_TOUCHES, SHOW_TOUCHES_VALIDATOR);
3463 VALIDATORS.put(WINDOW_ORIENTATION_LISTENER_LOG,
3464 WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR);
3465 VALIDATORS.put(LOCKSCREEN_SOUNDS_ENABLED, LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR);
3466 VALIDATORS.put(LOCKSCREEN_DISABLED, LOCKSCREEN_DISABLED_VALIDATOR);
3467 VALIDATORS.put(SIP_RECEIVE_CALLS, SIP_RECEIVE_CALLS_VALIDATOR);
3468 VALIDATORS.put(SIP_CALL_OPTIONS, SIP_CALL_OPTIONS_VALIDATOR);
3469 VALIDATORS.put(SIP_ALWAYS, SIP_ALWAYS_VALIDATOR);
3470 VALIDATORS.put(SIP_ADDRESS_ONLY, SIP_ADDRESS_ONLY_VALIDATOR);
3471 VALIDATORS.put(SIP_ASK_ME_EACH_TIME, SIP_ASK_ME_EACH_TIME_VALIDATOR);
3472 VALIDATORS.put(POINTER_SPEED, POINTER_SPEED_VALIDATOR);
3473 VALIDATORS.put(LOCK_TO_APP_ENABLED, LOCK_TO_APP_ENABLED_VALIDATOR);
3474 VALIDATORS.put(EGG_MODE, EGG_MODE_VALIDATOR);
3475 VALIDATORS.put(WIFI_STATIC_IP, WIFI_STATIC_IP_VALIDATOR);
3476 VALIDATORS.put(WIFI_STATIC_GATEWAY, WIFI_STATIC_GATEWAY_VALIDATOR);
3477 VALIDATORS.put(WIFI_STATIC_NETMASK, WIFI_STATIC_NETMASK_VALIDATOR);
3478 VALIDATORS.put(WIFI_STATIC_DNS1, WIFI_STATIC_DNS1_VALIDATOR);
3479 VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR);
3480 }
3481
3482 /**
3483 * These entries are considered common between the personal and the managed profile,
3484 * since the managed profile doesn't get to change them.
3485 */
3486 private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
3487 static {
3488 CLONE_TO_MANAGED_PROFILE.add(DATE_FORMAT);
3489 CLONE_TO_MANAGED_PROFILE.add(HAPTIC_FEEDBACK_ENABLED);
3490 CLONE_TO_MANAGED_PROFILE.add(SOUND_EFFECTS_ENABLED);
3491 CLONE_TO_MANAGED_PROFILE.add(TEXT_SHOW_PASSWORD);
3492 CLONE_TO_MANAGED_PROFILE.add(TIME_12_24);
3493 }
3494
3495 /** @hide */
3496 public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
3497 outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
3498 }
Amith Yamasani4f7e2e32014-08-14 18:49:48 -07003499
3500 /**
Sailesh Nepal1bd78762014-02-11 22:32:21 -08003501 * When to use Wi-Fi calling
3502 *
3503 * @see android.telephony.TelephonyManager.WifiCallingChoices
3504 * @hide
3505 */
3506 public static final String WHEN_TO_MAKE_WIFI_CALLS = "when_to_make_wifi_calls";
3507
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003508 // Settings moved to Settings.Secure
3509
3510 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003511 * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED}
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003512 * instead
3513 */
3514 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003515 public static final String ADB_ENABLED = Global.ADB_ENABLED;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003516
3517 /**
3518 * @deprecated Use {@link android.provider.Settings.Secure#ANDROID_ID} instead
3519 */
3520 @Deprecated
3521 public static final String ANDROID_ID = Secure.ANDROID_ID;
3522
3523 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003524 * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003525 */
3526 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003527 public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003528
3529 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003530 * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003531 */
3532 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003533 public static final String DATA_ROAMING = Global.DATA_ROAMING;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003534
3535 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003536 * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003537 */
3538 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003539 public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003540
3541 /**
Jeff Sharkey625239a2012-09-26 22:03:49 -07003542 * @deprecated Use {@link android.provider.Settings.Global#HTTP_PROXY} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003543 */
3544 @Deprecated
Jeff Sharkey625239a2012-09-26 22:03:49 -07003545 public static final String HTTP_PROXY = Global.HTTP_PROXY;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003546
3547 /**
Christopher Tateaa036a22014-05-19 16:33:27 -07003548 * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003549 */
3550 @Deprecated
Christopher Tateaa036a22014-05-19 16:33:27 -07003551 public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003552
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003553 /**
3554 * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED}
3555 * instead
3556 */
3557 @Deprecated
3558 public static final String LOCATION_PROVIDERS_ALLOWED = Secure.LOCATION_PROVIDERS_ALLOWED;
3559
3560 /**
3561 * @deprecated Use {@link android.provider.Settings.Secure#LOGGING_ID} instead
3562 */
3563 @Deprecated
3564 public static final String LOGGING_ID = Secure.LOGGING_ID;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003565
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003566 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003567 * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003568 */
3569 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003570 public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003571
3572 /**
3573 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_ENABLED}
3574 * instead
3575 */
3576 @Deprecated
3577 public static final String PARENTAL_CONTROL_ENABLED = Secure.PARENTAL_CONTROL_ENABLED;
3578
3579 /**
3580 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_LAST_UPDATE}
3581 * instead
3582 */
3583 @Deprecated
3584 public static final String PARENTAL_CONTROL_LAST_UPDATE = Secure.PARENTAL_CONTROL_LAST_UPDATE;
3585
3586 /**
3587 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_REDIRECT_URL}
3588 * instead
3589 */
3590 @Deprecated
3591 public static final String PARENTAL_CONTROL_REDIRECT_URL =
3592 Secure.PARENTAL_CONTROL_REDIRECT_URL;
3593
3594 /**
3595 * @deprecated Use {@link android.provider.Settings.Secure#SETTINGS_CLASSNAME} instead
3596 */
3597 @Deprecated
3598 public static final String SETTINGS_CLASSNAME = Secure.SETTINGS_CLASSNAME;
3599
3600 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003601 * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003602 */
3603 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003604 public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003605
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003606 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003607 * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003608 */
3609 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003610 public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003611
Dianne Hackborn4a51c202009-08-21 15:14:02 -07003612 /**
3613 * @deprecated Use
Christopher Tate06efb532012-08-24 15:29:27 -07003614 * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
Dianne Hackborn4a51c202009-08-21 15:14:02 -07003615 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003616 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003617 public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003618
Dianne Hackborn4a51c202009-08-21 15:14:02 -07003619 /**
3620 * @deprecated Use
Christopher Tate06efb532012-08-24 15:29:27 -07003621 * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
Dianne Hackborn4a51c202009-08-21 15:14:02 -07003622 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003623 @Deprecated
3624 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
Christopher Tate06efb532012-08-24 15:29:27 -07003625 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003626
3627 /**
3628 * @deprecated Use
Christopher Tate06efb532012-08-24 15:29:27 -07003629 * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003630 */
3631 @Deprecated
3632 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
Christopher Tate06efb532012-08-24 15:29:27 -07003633 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003634
3635 /**
3636 * @deprecated Use
Christopher Tate06efb532012-08-24 15:29:27 -07003637 * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003638 */
3639 @Deprecated
3640 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
Christopher Tate06efb532012-08-24 15:29:27 -07003641 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003642
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003643 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003644 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003645 * instead
3646 */
3647 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003648 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003649
3650 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003651 * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003652 */
3653 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003654 public static final String WIFI_ON = Global.WIFI_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003655
3656 /**
3657 * @deprecated Use
3658 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE}
3659 * instead
3660 */
3661 @Deprecated
3662 public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
3663 Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE;
3664
3665 /**
3666 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_AP_COUNT} instead
3667 */
3668 @Deprecated
3669 public static final String WIFI_WATCHDOG_AP_COUNT = Secure.WIFI_WATCHDOG_AP_COUNT;
3670
3671 /**
3672 * @deprecated Use
3673 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS} instead
3674 */
3675 @Deprecated
3676 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
3677 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07003678
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003679 /**
3680 * @deprecated Use
3681 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead
3682 */
3683 @Deprecated
3684 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
3685 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED;
3686
3687 /**
3688 * @deprecated Use
3689 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS}
3690 * instead
3691 */
3692 @Deprecated
3693 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
3694 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS;
3695
3696 /**
3697 * @deprecated Use
3698 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT} instead
3699 */
3700 @Deprecated
3701 public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
3702 Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT;
3703
3704 /**
3705 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_MAX_AP_CHECKS}
3706 * instead
3707 */
3708 @Deprecated
3709 public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = Secure.WIFI_WATCHDOG_MAX_AP_CHECKS;
3710
3711 /**
Christopher Tate06efb532012-08-24 15:29:27 -07003712 * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003713 */
3714 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07003715 public static final String WIFI_WATCHDOG_ON = Global.WIFI_WATCHDOG_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003716
3717 /**
3718 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_COUNT} instead
3719 */
3720 @Deprecated
3721 public static final String WIFI_WATCHDOG_PING_COUNT = Secure.WIFI_WATCHDOG_PING_COUNT;
3722
3723 /**
3724 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_DELAY_MS}
3725 * instead
3726 */
3727 @Deprecated
3728 public static final String WIFI_WATCHDOG_PING_DELAY_MS = Secure.WIFI_WATCHDOG_PING_DELAY_MS;
3729
3730 /**
3731 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_TIMEOUT_MS}
3732 * instead
3733 */
3734 @Deprecated
3735 public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS =
3736 Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS;
Billy Lau6ad2d662015-07-18 00:26:58 +01003737
3738 /**
3739 * An app can use this method to check if it is currently allowed to write or modify system
3740 * settings. In order to gain write access to the system settings, an app must declare the
3741 * {@link android.Manifest.permission#WRITE_SETTINGS} permission in its manifest. If it is
3742 * currently disallowed, it can prompt the user to grant it this capability through a
3743 * management UI by sending an Intent with action
3744 * {@link android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}.
3745 *
3746 * @param context A context
3747 * @return true if the calling app can write to system settings, false otherwise
3748 */
3749 public static boolean canWrite(Context context) {
3750 int uid = Binder.getCallingUid();
3751 return isCallingPackageAllowedToWriteSettings(context, uid, getPackageNameForUid(
3752 context, uid), false);
3753 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003754 }
3755
3756 /**
3757 * Secure system settings, containing system preferences that applications
3758 * can read but are not allowed to write. These are for preferences that
3759 * the user must explicitly modify through the system UI or specialized
3760 * APIs for those values, not modified directly by applications.
3761 */
3762 public static final class Secure extends NameValueTable {
3763 public static final String SYS_PROP_SETTING_VERSION = "sys.settings_secure_version";
3764
Dianne Hackborn139748f2012-09-24 11:36:57 -07003765 /**
3766 * The content:// style URL for this table
3767 */
3768 public static final Uri CONTENT_URI =
3769 Uri.parse("content://" + AUTHORITY + "/secure");
3770
Brad Fitzpatrick1877d012010-03-04 17:48:13 -08003771 // Populated lazily, guarded by class object:
Dianne Hackborn139748f2012-09-24 11:36:57 -07003772 private static final NameValueCache sNameValueCache = new NameValueCache(
3773 SYS_PROP_SETTING_VERSION,
3774 CONTENT_URI,
3775 CALL_METHOD_GET_SECURE,
3776 CALL_METHOD_PUT_SECURE);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003777
Amith Yamasani52c489c2012-03-28 11:42:42 -07003778 private static ILockSettings sLockSettings = null;
3779
Amith Yamasani7ab8c4a2012-04-06 09:27:12 -07003780 private static boolean sIsSystemProcess;
Amith Yamasani52c489c2012-03-28 11:42:42 -07003781 private static final HashSet<String> MOVED_TO_LOCK_SETTINGS;
Christopher Tate06efb532012-08-24 15:29:27 -07003782 private static final HashSet<String> MOVED_TO_GLOBAL;
Amith Yamasani52c489c2012-03-28 11:42:42 -07003783 static {
3784 MOVED_TO_LOCK_SETTINGS = new HashSet<String>(3);
3785 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_ENABLED);
3786 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_VISIBLE);
3787 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED);
Christopher Tate06efb532012-08-24 15:29:27 -07003788
3789 MOVED_TO_GLOBAL = new HashSet<String>();
3790 MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED);
3791 MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED);
3792 MOVED_TO_GLOBAL.add(Settings.Global.BLUETOOTH_ON);
Christopher Tate58f41ec2013-01-11 15:40:36 -08003793 MOVED_TO_GLOBAL.add(Settings.Global.BUGREPORT_IN_POWER_MENU);
Christopher Tate06efb532012-08-24 15:29:27 -07003794 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_CELL_BROADCAST_SMS);
3795 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_ROAMING_MODE);
3796 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_SUBSCRIPTION_MODE);
3797 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE);
3798 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI);
3799 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ROAMING);
3800 MOVED_TO_GLOBAL.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
3801 MOVED_TO_GLOBAL.add(Settings.Global.DEVICE_PROVISIONED);
3802 MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_DENSITY_FORCED);
3803 MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED);
3804 MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
3805 MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
Christopher Tate06efb532012-08-24 15:29:27 -07003806 MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA);
3807 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
3808 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
3809 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES);
3810 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE);
3811 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED);
3812 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES);
3813 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL);
Christopher Tate06efb532012-08-24 15:29:27 -07003814 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED);
3815 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE);
3816 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION);
3817 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_DELETE_AGE);
3818 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES);
3819 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_ROTATE_AGE);
3820 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION);
3821 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE);
3822 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES);
3823 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE);
3824 MOVED_TO_GLOBAL.add(Settings.Global.NETWORK_PREFERENCE);
3825 MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_DIFF);
3826 MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_SPACING);
3827 MOVED_TO_GLOBAL.add(Settings.Global.NTP_SERVER);
3828 MOVED_TO_GLOBAL.add(Settings.Global.NTP_TIMEOUT);
3829 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT);
3830 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
3831 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
3832 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS);
3833 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
3834 MOVED_TO_GLOBAL.add(Settings.Global.SAMPLING_PROFILER_MS);
3835 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
3836 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST);
3837 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL);
3838 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_APN);
3839 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_REQUIRED);
3840 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_SUPPORTED);
Christopher Tate06efb532012-08-24 15:29:27 -07003841 MOVED_TO_GLOBAL.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
3842 MOVED_TO_GLOBAL.add(Settings.Global.USE_GOOGLE_MAIL);
Robert Greenwalt3ea0c992013-10-03 21:13:49 +00003843 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_COUNTRY_CODE);
Christopher Tate06efb532012-08-24 15:29:27 -07003844 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
3845 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FREQUENCY_BAND);
3846 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_IDLE_MS);
3847 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT);
3848 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
3849 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
3850 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
3851 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT);
3852 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON);
3853 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME);
3854 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SAVED_STATE);
3855 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
3856 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED);
vandwalle7c3606c2014-03-31 19:12:07 -07003857 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ENHANCED_AUTO_JOIN);
3858 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORK_SHOW_RSSI);
Christopher Tate06efb532012-08-24 15:29:27 -07003859 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_ON);
3860 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
Christopher Tate06efb532012-08-24 15:29:27 -07003861 MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
Christopher Tatec868b642012-09-12 17:41:04 -07003862 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_ENABLE);
3863 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
3864 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
3865 MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
3866 MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
3867 MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
Christopher Tate06efb532012-08-24 15:29:27 -07003868 MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL);
Jeff Sharkey625239a2012-09-26 22:03:49 -07003869 MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD);
3870 MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
3871 MOVED_TO_GLOBAL.add(Settings.Global.SEND_ACTION_APP_ERROR);
3872 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_AGE_SECONDS);
3873 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_MAX_FILES);
3874 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_KB);
3875 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_PERCENT);
3876 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_RESERVE_PERCENT);
3877 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_TAG_PREFIX);
3878 MOVED_TO_GLOBAL.add(Settings.Global.ERROR_LOGCAT_PREFIX);
3879 MOVED_TO_GLOBAL.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL);
3880 MOVED_TO_GLOBAL.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
3881 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE);
3882 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES);
3883 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES);
3884 MOVED_TO_GLOBAL.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
3885 MOVED_TO_GLOBAL.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY);
3886 MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);
3887 MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_SERVER);
3888 MOVED_TO_GLOBAL.add(Settings.Global.NSD_ON);
3889 MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION);
3890 MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_INSTALL_LOCATION);
3891 MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY);
3892 MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
3893 MOVED_TO_GLOBAL.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
3894 MOVED_TO_GLOBAL.add(Settings.Global.HTTP_PROXY);
3895 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST);
3896 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT);
3897 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
3898 MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
3899 MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER);
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07003900 MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE);
Hui Shu22671772014-10-01 21:41:07 +00003901 MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY);
Christopher Tate06efb532012-08-24 15:29:27 -07003902 }
3903
Christopher Tate66488d62012-10-02 11:58:01 -07003904 /** @hide */
Svetoslav683914b2015-01-15 14:22:26 -08003905 public static void getMovedToGlobalSettings(Set<String> outKeySet) {
Christopher Tate66488d62012-10-02 11:58:01 -07003906 outKeySet.addAll(MOVED_TO_GLOBAL);
3907 }
3908
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003909 /**
3910 * Look up a name in the database.
3911 * @param resolver to access the database with
3912 * @param name to look up in the table
3913 * @return the corresponding value, or null if not present
3914 */
Dianne Hackborn139748f2012-09-24 11:36:57 -07003915 public static String getString(ContentResolver resolver, String name) {
Christopher Tate06efb532012-08-24 15:29:27 -07003916 return getStringForUser(resolver, name, UserHandle.myUserId());
3917 }
3918
3919 /** @hide */
Dianne Hackborn139748f2012-09-24 11:36:57 -07003920 public static String getStringForUser(ContentResolver resolver, String name,
Christopher Tate06efb532012-08-24 15:29:27 -07003921 int userHandle) {
3922 if (MOVED_TO_GLOBAL.contains(name)) {
3923 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
3924 + " to android.provider.Settings.Global.");
3925 return Global.getStringForUser(resolver, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003926 }
Amith Yamasani52c489c2012-03-28 11:42:42 -07003927
Dianne Hackborn139748f2012-09-24 11:36:57 -07003928 if (MOVED_TO_LOCK_SETTINGS.contains(name)) {
3929 synchronized (Secure.class) {
3930 if (sLockSettings == null) {
3931 sLockSettings = ILockSettings.Stub.asInterface(
3932 (IBinder) ServiceManager.getService("lock_settings"));
3933 sIsSystemProcess = Process.myUid() == Process.SYSTEM_UID;
3934 }
3935 }
3936 if (sLockSettings != null && !sIsSystemProcess) {
Adrian Roos7811d9f2015-07-27 15:10:13 -07003937 // No context; use the ActivityThread's context as an approximation for
3938 // determining the target API level.
3939 Application application = ActivityThread.currentApplication();
3940
3941 boolean isPreMnc = application != null
3942 && application.getApplicationInfo() != null
3943 && application.getApplicationInfo().targetSdkVersion
3944 <= VERSION_CODES.LOLLIPOP_MR1;
3945 if (isPreMnc) {
3946 try {
3947 return sLockSettings.getString(name, "0", userHandle);
3948 } catch (RemoteException re) {
3949 // Fall through
3950 }
3951 } else {
3952 throw new SecurityException("Settings.Secure." + name
3953 + " is deprecated and no longer accessible."
3954 + " See API documentation for potential replacements.");
Dianne Hackborn139748f2012-09-24 11:36:57 -07003955 }
Amith Yamasani52c489c2012-03-28 11:42:42 -07003956 }
3957 }
3958
Christopher Tate06efb532012-08-24 15:29:27 -07003959 return sNameValueCache.getStringForUser(resolver, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003960 }
3961
3962 /**
3963 * Store a name/value pair into the database.
3964 * @param resolver to access the database with
3965 * @param name to store
3966 * @param value to associate with the name
3967 * @return true if the value was set, false on database errors
3968 */
Christopher Tate06efb532012-08-24 15:29:27 -07003969 public static boolean putString(ContentResolver resolver, String name, String value) {
3970 return putStringForUser(resolver, name, value, UserHandle.myUserId());
3971 }
3972
3973 /** @hide */
3974 public static boolean putStringForUser(ContentResolver resolver, String name, String value,
3975 int userHandle) {
Julia Reynolds82735bc2014-09-04 16:43:30 -04003976 if (LOCATION_MODE.equals(name)) {
3977 // HACK ALERT: temporary hack to work around b/10491283.
3978 // TODO: once b/10491283 fixed, remove this hack
3979 return setLocationModeForUser(resolver, Integer.parseInt(value), userHandle);
3980 }
Christopher Tate06efb532012-08-24 15:29:27 -07003981 if (MOVED_TO_GLOBAL.contains(name)) {
3982 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
3983 + " to android.provider.Settings.Global");
3984 return Global.putStringForUser(resolver, name, value, userHandle);
3985 }
Christopher Tate06efb532012-08-24 15:29:27 -07003986 return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003987 }
3988
3989 /**
3990 * Construct the content URI for a particular name/value pair,
3991 * useful for monitoring changes with a ContentObserver.
3992 * @param name to look up in the table
3993 * @return the corresponding content URI, or null if not present
3994 */
3995 public static Uri getUriFor(String name) {
Christopher Tate06efb532012-08-24 15:29:27 -07003996 if (MOVED_TO_GLOBAL.contains(name)) {
3997 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure"
3998 + " to android.provider.Settings.Global, returning global URI.");
3999 return Global.getUriFor(Global.CONTENT_URI, name);
4000 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004001 return getUriFor(CONTENT_URI, name);
4002 }
4003
4004 /**
4005 * Convenience function for retrieving a single secure settings value
4006 * as an integer. Note that internally setting values are always
4007 * stored as strings; this function converts the string to an integer
4008 * for you. The default value will be returned if the setting is
4009 * not defined or not an integer.
4010 *
4011 * @param cr The ContentResolver to access.
4012 * @param name The name of the setting to retrieve.
4013 * @param def Value to return if the setting is not defined.
4014 *
4015 * @return The setting's current value, or 'def' if it is not defined
4016 * or not a valid integer.
4017 */
4018 public static int getInt(ContentResolver cr, String name, int def) {
Christopher Tate06efb532012-08-24 15:29:27 -07004019 return getIntForUser(cr, name, def, UserHandle.myUserId());
4020 }
4021
4022 /** @hide */
4023 public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
Tom O'Neill7f6f4572013-08-27 10:53:15 -07004024 if (LOCATION_MODE.equals(name)) {
4025 // HACK ALERT: temporary hack to work around b/10491283.
4026 // TODO: once b/10491283 fixed, remove this hack
4027 return getLocationModeForUser(cr, userHandle);
4028 }
Christopher Tate06efb532012-08-24 15:29:27 -07004029 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004030 try {
4031 return v != null ? Integer.parseInt(v) : def;
4032 } catch (NumberFormatException e) {
4033 return def;
4034 }
4035 }
4036
4037 /**
4038 * Convenience function for retrieving a single secure settings value
4039 * as an integer. Note that internally setting values are always
4040 * stored as strings; this function converts the string to an integer
4041 * for you.
4042 * <p>
4043 * This version does not take a default value. If the setting has not
4044 * been set, or the string value is not a number,
4045 * it throws {@link SettingNotFoundException}.
4046 *
4047 * @param cr The ContentResolver to access.
4048 * @param name The name of the setting to retrieve.
4049 *
4050 * @throws SettingNotFoundException Thrown if a setting by the given
4051 * name can't be found or the setting value is not an integer.
4052 *
4053 * @return The setting's current value.
4054 */
4055 public static int getInt(ContentResolver cr, String name)
4056 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07004057 return getIntForUser(cr, name, UserHandle.myUserId());
4058 }
4059
4060 /** @hide */
4061 public static int getIntForUser(ContentResolver cr, String name, int userHandle)
4062 throws SettingNotFoundException {
Tom O'Neill7f6f4572013-08-27 10:53:15 -07004063 if (LOCATION_MODE.equals(name)) {
4064 // HACK ALERT: temporary hack to work around b/10491283.
4065 // TODO: once b/10491283 fixed, remove this hack
4066 return getLocationModeForUser(cr, userHandle);
4067 }
Christopher Tate06efb532012-08-24 15:29:27 -07004068 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004069 try {
4070 return Integer.parseInt(v);
4071 } catch (NumberFormatException e) {
4072 throw new SettingNotFoundException(name);
4073 }
4074 }
4075
4076 /**
4077 * Convenience function for updating a single settings value as an
4078 * integer. This will either create a new entry in the table if the
4079 * given name does not exist, or modify the value of the existing row
4080 * with that name. Note that internally setting values are always
4081 * stored as strings, so this function converts the given value to a
4082 * string before storing it.
4083 *
4084 * @param cr The ContentResolver to access.
4085 * @param name The name of the setting to modify.
4086 * @param value The new value for the setting.
4087 * @return true if the value was set, false on database errors
4088 */
4089 public static boolean putInt(ContentResolver cr, String name, int value) {
Christopher Tate06efb532012-08-24 15:29:27 -07004090 return putIntForUser(cr, name, value, UserHandle.myUserId());
4091 }
4092
4093 /** @hide */
4094 public static boolean putIntForUser(ContentResolver cr, String name, int value,
4095 int userHandle) {
4096 return putStringForUser(cr, name, Integer.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004097 }
4098
4099 /**
4100 * Convenience function for retrieving a single secure settings value
4101 * as a {@code long}. Note that internally setting values are always
4102 * stored as strings; this function converts the string to a {@code long}
4103 * for you. The default value will be returned if the setting is
4104 * not defined or not a {@code long}.
4105 *
4106 * @param cr The ContentResolver to access.
4107 * @param name The name of the setting to retrieve.
4108 * @param def Value to return if the setting is not defined.
4109 *
4110 * @return The setting's current value, or 'def' if it is not defined
4111 * or not a valid {@code long}.
4112 */
4113 public static long getLong(ContentResolver cr, String name, long def) {
Christopher Tate06efb532012-08-24 15:29:27 -07004114 return getLongForUser(cr, name, def, UserHandle.myUserId());
4115 }
4116
4117 /** @hide */
4118 public static long getLongForUser(ContentResolver cr, String name, long def,
4119 int userHandle) {
4120 String valString = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004121 long value;
4122 try {
4123 value = valString != null ? Long.parseLong(valString) : def;
4124 } catch (NumberFormatException e) {
4125 value = def;
4126 }
4127 return value;
4128 }
4129
4130 /**
4131 * Convenience function for retrieving a single secure settings value
4132 * as a {@code long}. Note that internally setting values are always
4133 * stored as strings; this function converts the string to a {@code long}
4134 * for you.
4135 * <p>
4136 * This version does not take a default value. If the setting has not
4137 * been set, or the string value is not a number,
4138 * it throws {@link SettingNotFoundException}.
4139 *
4140 * @param cr The ContentResolver to access.
4141 * @param name The name of the setting to retrieve.
4142 *
4143 * @return The setting's current value.
4144 * @throws SettingNotFoundException Thrown if a setting by the given
4145 * name can't be found or the setting value is not an integer.
4146 */
4147 public static long getLong(ContentResolver cr, String name)
4148 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07004149 return getLongForUser(cr, name, UserHandle.myUserId());
4150 }
4151
4152 /** @hide */
4153 public static long getLongForUser(ContentResolver cr, String name, int userHandle)
4154 throws SettingNotFoundException {
4155 String valString = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004156 try {
4157 return Long.parseLong(valString);
4158 } catch (NumberFormatException e) {
4159 throw new SettingNotFoundException(name);
4160 }
4161 }
4162
4163 /**
4164 * Convenience function for updating a secure settings value as a long
4165 * integer. This will either create a new entry in the table if the
4166 * given name does not exist, or modify the value of the existing row
4167 * with that name. Note that internally setting values are always
4168 * stored as strings, so this function converts the given value to a
4169 * string before storing it.
4170 *
4171 * @param cr The ContentResolver to access.
4172 * @param name The name of the setting to modify.
4173 * @param value The new value for the setting.
4174 * @return true if the value was set, false on database errors
4175 */
4176 public static boolean putLong(ContentResolver cr, String name, long value) {
Christopher Tate06efb532012-08-24 15:29:27 -07004177 return putLongForUser(cr, name, value, UserHandle.myUserId());
4178 }
4179
4180 /** @hide */
4181 public static boolean putLongForUser(ContentResolver cr, String name, long value,
4182 int userHandle) {
4183 return putStringForUser(cr, name, Long.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004184 }
4185
4186 /**
4187 * Convenience function for retrieving a single secure settings value
4188 * as a floating point number. Note that internally setting values are
4189 * always stored as strings; this function converts the string to an
4190 * float for you. The default value will be returned if the setting
4191 * is not defined or not a valid float.
4192 *
4193 * @param cr The ContentResolver to access.
4194 * @param name The name of the setting to retrieve.
4195 * @param def Value to return if the setting is not defined.
4196 *
4197 * @return The setting's current value, or 'def' if it is not defined
4198 * or not a valid float.
4199 */
4200 public static float getFloat(ContentResolver cr, String name, float def) {
Christopher Tate06efb532012-08-24 15:29:27 -07004201 return getFloatForUser(cr, name, def, UserHandle.myUserId());
4202 }
4203
4204 /** @hide */
4205 public static float getFloatForUser(ContentResolver cr, String name, float def,
4206 int userHandle) {
4207 String v = getStringForUser(cr, name, userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004208 try {
4209 return v != null ? Float.parseFloat(v) : def;
4210 } catch (NumberFormatException e) {
4211 return def;
4212 }
4213 }
4214
4215 /**
4216 * Convenience function for retrieving a single secure settings value
4217 * as a float. Note that internally setting values are always
4218 * stored as strings; this function converts the string to a float
4219 * for you.
4220 * <p>
4221 * This version does not take a default value. If the setting has not
4222 * been set, or the string value is not a number,
4223 * it throws {@link SettingNotFoundException}.
4224 *
4225 * @param cr The ContentResolver to access.
4226 * @param name The name of the setting to retrieve.
4227 *
4228 * @throws SettingNotFoundException Thrown if a setting by the given
4229 * name can't be found or the setting value is not a float.
4230 *
4231 * @return The setting's current value.
4232 */
4233 public static float getFloat(ContentResolver cr, String name)
4234 throws SettingNotFoundException {
Christopher Tate06efb532012-08-24 15:29:27 -07004235 return getFloatForUser(cr, name, UserHandle.myUserId());
4236 }
4237
4238 /** @hide */
4239 public static float getFloatForUser(ContentResolver cr, String name, int userHandle)
4240 throws SettingNotFoundException {
4241 String v = getStringForUser(cr, name, userHandle);
Brian Muramatsue1d46982010-12-06 17:34:20 -08004242 if (v == null) {
4243 throw new SettingNotFoundException(name);
4244 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004245 try {
4246 return Float.parseFloat(v);
4247 } catch (NumberFormatException e) {
4248 throw new SettingNotFoundException(name);
4249 }
4250 }
4251
4252 /**
4253 * Convenience function for updating a single settings value as a
4254 * floating point number. This will either create a new entry in the
4255 * table if the given name does not exist, or modify the value of the
4256 * existing row with that name. Note that internally setting values
4257 * are always stored as strings, so this function converts the given
4258 * value to a string before storing it.
4259 *
4260 * @param cr The ContentResolver to access.
4261 * @param name The name of the setting to modify.
4262 * @param value The new value for the setting.
4263 * @return true if the value was set, false on database errors
4264 */
4265 public static boolean putFloat(ContentResolver cr, String name, float value) {
Christopher Tate06efb532012-08-24 15:29:27 -07004266 return putFloatForUser(cr, name, value, UserHandle.myUserId());
4267 }
4268
4269 /** @hide */
4270 public static boolean putFloatForUser(ContentResolver cr, String name, float value,
4271 int userHandle) {
4272 return putStringForUser(cr, name, Float.toString(value), userHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004273 }
4274
4275 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004276 * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}
4277 * instead
Dianne Hackborn895f99e2012-02-02 11:49:12 -08004278 */
Christopher Tate06efb532012-08-24 15:29:27 -07004279 @Deprecated
4280 public static final String DEVELOPMENT_SETTINGS_ENABLED =
4281 Global.DEVELOPMENT_SETTINGS_ENABLED;
Dianne Hackborn895f99e2012-02-02 11:49:12 -08004282
4283 /**
Dianne Hackborn5773bfdb2012-07-13 13:24:15 -07004284 * When the user has enable the option to have a "bug report" command
4285 * in the power menu.
Christopher Tate58f41ec2013-01-11 15:40:36 -08004286 * @deprecated Use {@link android.provider.Settings.Global#BUGREPORT_IN_POWER_MENU} instead
Dianne Hackborn5773bfdb2012-07-13 13:24:15 -07004287 * @hide
4288 */
Christopher Tate58f41ec2013-01-11 15:40:36 -08004289 @Deprecated
Dianne Hackborn5773bfdb2012-07-13 13:24:15 -07004290 public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
4291
4292 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004293 * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004294 */
Christopher Tate06efb532012-08-24 15:29:27 -07004295 @Deprecated
4296 public static final String ADB_ENABLED = Global.ADB_ENABLED;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004297
4298 /**
4299 * Setting to allow mock locations and location provider status to be injected into the
4300 * LocationManager service for testing purposes during application development. These
4301 * locations and status values override actual location and status information generated
4302 * by network, gps, or other location providers.
Svet Ganovf7e9cf42015-05-13 10:40:31 -07004303 *
4304 * @deprecated This settings is not used anymore.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004305 */
Svet Ganovf7e9cf42015-05-13 10:40:31 -07004306 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004307 public static final String ALLOW_MOCK_LOCATION = "mock_location";
4308
4309 /**
Doug Zongkerd8893db2010-01-26 12:29:44 -08004310 * A 64-bit number (as a hex string) that is randomly
Scott Main44895332013-11-12 09:23:13 -08004311 * generated when the user first sets up the device and should remain
4312 * constant for the lifetime of the user's device. The value may
4313 * change if a factory reset is performed on the device.
4314 * <p class="note"><strong>Note:</strong> When a device has <a
4315 * href="{@docRoot}about/versions/android-4.2.html#MultipleUsers">multiple users</a>
4316 * (available on certain devices running Android 4.2 or higher), each user appears as a
4317 * completely separate device, so the {@code ANDROID_ID} value is unique to each
4318 * user.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004319 */
4320 public static final String ANDROID_ID = "android_id";
4321
4322 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004323 * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004324 */
Christopher Tate06efb532012-08-24 15:29:27 -07004325 @Deprecated
4326 public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004327
4328 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004329 * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004330 */
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07004331 @Deprecated
Christopher Tate06efb532012-08-24 15:29:27 -07004332 public static final String DATA_ROAMING = Global.DATA_ROAMING;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004333
4334 /**
4335 * Setting to record the input method used by default, holding the ID
4336 * of the desired method.
4337 */
4338 public static final String DEFAULT_INPUT_METHOD = "default_input_method";
4339
4340 /**
satokab751aa2010-09-14 19:17:36 +09004341 * Setting to record the input method subtype used by default, holding the ID
4342 * of the desired method.
4343 */
4344 public static final String SELECTED_INPUT_METHOD_SUBTYPE =
4345 "selected_input_method_subtype";
4346
4347 /**
satok723a27e2010-11-11 14:58:11 +09004348 * Setting to record the history of input method subtype, holding the pair of ID of IME
4349 * and its last used subtype.
4350 * @hide
4351 */
4352 public static final String INPUT_METHODS_SUBTYPE_HISTORY =
4353 "input_methods_subtype_history";
4354
4355 /**
satok5c58dfc2010-12-14 21:54:47 +09004356 * Setting to record the visibility of input method selector
4357 */
4358 public static final String INPUT_METHOD_SELECTOR_VISIBILITY =
4359 "input_method_selector_visibility";
4360
4361 /**
Dianne Hackborn91097de2014-04-04 18:02:06 -07004362 * The currently selected voice interaction service flattened ComponentName.
4363 * @hide
4364 */
4365 public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
4366
4367 /**
Zhihai Xuaf5971e2013-06-10 20:28:31 -07004368 * bluetooth HCI snoop log configuration
4369 * @hide
4370 */
4371 public static final String BLUETOOTH_HCI_LOG =
4372 "bluetooth_hci_log";
4373
4374 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004375 * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004376 */
Christopher Tate06efb532012-08-24 15:29:27 -07004377 @Deprecated
4378 public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004379
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004380 /**
Russell Brennerde6ae442012-09-26 20:53:10 -07004381 * Whether the current user has been set up via setup wizard (0 = false, 1 = true)
4382 * @hide
4383 */
4384 public static final String USER_SETUP_COMPLETE = "user_setup_complete";
4385
4386 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004387 * List of input methods that are currently enabled. This is a string
4388 * containing the IDs of all enabled input methods, each ID separated
4389 * by ':'.
4390 */
4391 public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004392
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004393 /**
Amith Yamasanie861ec12010-03-24 21:39:27 -07004394 * List of system input methods that are currently disabled. This is a string
4395 * containing the IDs of all disabled input methods, each ID separated
4396 * by ':'.
4397 * @hide
4398 */
4399 public static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods";
4400
4401 /**
Michael Wright7b5a96b2014-08-09 19:28:42 -07004402 * Whether to show the IME when a hard keyboard is connected. This is a boolean that
4403 * determines if the IME should be shown when a hard keyboard is attached.
4404 * @hide
4405 */
4406 public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
4407
4408 /**
Jeff Sharkey625239a2012-09-26 22:03:49 -07004409 * Host name and port for global http proxy. Uses ':' seperator for
4410 * between host and port.
4411 *
4412 * @deprecated Use {@link Global#HTTP_PROXY}
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004413 */
Jeff Sharkey625239a2012-09-26 22:03:49 -07004414 @Deprecated
4415 public static final String HTTP_PROXY = Global.HTTP_PROXY;
Robert Greenwalte90aa5e2010-09-01 11:34:05 -07004416
4417 /**
Christopher Tateaa036a22014-05-19 16:33:27 -07004418 * Whether applications can be installed for this user via the system's
4419 * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism.
4420 *
4421 * <p>1 = permit app installation via the system package installer intent
4422 * <p>0 = do not allow use of the package installer
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004423 */
Christopher Tateaa036a22014-05-19 16:33:27 -07004424 public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004425
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004426 /**
Tom O'Neill923c0dc2014-03-03 11:07:55 -08004427 * Comma-separated list of location providers that activities may access. Do not rely on
4428 * this value being present in settings.db or on ContentObserver notifications on the
4429 * corresponding Uri.
Tom O'Neilla324ac72013-08-26 14:40:23 -07004430 *
Tom O'Neill923c0dc2014-03-03 11:07:55 -08004431 * @deprecated use {@link #LOCATION_MODE} and
4432 * {@link LocationManager#MODE_CHANGED_ACTION} (or
4433 * {@link LocationManager#PROVIDERS_CHANGED_ACTION})
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004434 */
Tom O'Neilla324ac72013-08-26 14:40:23 -07004435 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004436 public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004437
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004438 /**
Tom O'Neill7f6f4572013-08-27 10:53:15 -07004439 * The degree of location access enabled by the user.
Tom O'Neill923c0dc2014-03-03 11:07:55 -08004440 * <p>
Tom O'Neill7f6f4572013-08-27 10:53:15 -07004441 * When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link
4442 * #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link
4443 * #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link
4444 * #getInt(ContentResolver, String)}, the caller must gracefully handle additional location
4445 * modes that might be added in the future.
Tom O'Neill923c0dc2014-03-03 11:07:55 -08004446 * <p>
4447 * Note: do not rely on this value being present in settings.db or on ContentObserver
4448 * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION}
4449 * to receive changes in this value.
Tom O'Neilla324ac72013-08-26 14:40:23 -07004450 */
4451 public static final String LOCATION_MODE = "location_mode";
Lifu Tangd1fa1d62015-11-25 21:42:44 -08004452 /**
4453 * Stores the previous location mode when {@link #LOCATION_MODE} is set to
4454 * {@link #LOCATION_MODE_OFF}
4455 * @hide
4456 */
4457 public static final String LOCATION_PREVIOUS_MODE = "location_previous_mode";
Tom O'Neilla324ac72013-08-26 14:40:23 -07004458
4459 /**
Lifu Tangd1fa1d62015-11-25 21:42:44 -08004460 * Sets all location providers to the previous states before location was turned off.
4461 * @hide
4462 */
4463 public static final int LOCATION_MODE_PREVIOUS = -1;
4464 /**
Tom O'Neill7f6f4572013-08-27 10:53:15 -07004465 * Location access disabled.
Tom O'Neill1f48b782013-08-19 18:14:56 -07004466 */
4467 public static final int LOCATION_MODE_OFF = 0;
4468 /**
4469 * Network Location Provider disabled, but GPS and other sensors enabled.
4470 */
4471 public static final int LOCATION_MODE_SENSORS_ONLY = 1;
4472 /**
Tom O'Neilld5759432013-09-11 11:03:03 -07004473 * Reduced power usage, such as limiting the number of GPS updates per hour. Requests
4474 * with {@link android.location.Criteria#POWER_HIGH} may be downgraded to
4475 * {@link android.location.Criteria#POWER_MEDIUM}.
Tom O'Neill1f48b782013-08-19 18:14:56 -07004476 */
4477 public static final int LOCATION_MODE_BATTERY_SAVING = 2;
4478 /**
4479 * Best-effort location computation allowed.
4480 */
4481 public static final int LOCATION_MODE_HIGH_ACCURACY = 3;
4482
4483 /**
Danielle Millett925a7d82012-03-19 18:02:20 -04004484 * A flag containing settings used for biometric weak
4485 * @hide
4486 */
Adrian Roos230635e2015-01-07 20:50:29 +01004487 @Deprecated
Danielle Millett925a7d82012-03-19 18:02:20 -04004488 public static final String LOCK_BIOMETRIC_WEAK_FLAGS =
4489 "lock_biometric_weak_flags";
4490
4491 /**
Jason Monk94cfd9d2014-10-31 13:18:21 -04004492 * Whether lock-to-app will lock the keyguard when exiting.
4493 * @hide
4494 */
4495 public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked";
4496
4497 /**
Amith Yamasani156c4352010-03-05 17:10:03 -08004498 * Whether autolock is enabled (0 = false, 1 = true)
Adrian Roos9dd16eb2015-01-08 16:20:49 +01004499 *
4500 * @deprecated Use {@link android.app.KeyguardManager} to determine the state and security
Adrian Roos7811d9f2015-07-27 15:10:13 -07004501 * level of the keyguard. Accessing this setting from an app that is targeting
Deepanshu Guptae836a222015-07-31 12:11:07 -07004502 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
Amith Yamasani156c4352010-03-05 17:10:03 -08004503 */
Adrian Roos9dd16eb2015-01-08 16:20:49 +01004504 @Deprecated
Amith Yamasani156c4352010-03-05 17:10:03 -08004505 public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
4506
4507 /**
4508 * Whether lock pattern is visible as user enters (0 = false, 1 = true)
Adrian Roos7811d9f2015-07-27 15:10:13 -07004509 *
4510 * @deprecated Accessing this setting from an app that is targeting
Deepanshu Guptae836a222015-07-31 12:11:07 -07004511 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
Amith Yamasani156c4352010-03-05 17:10:03 -08004512 */
Adrian Roos7811d9f2015-07-27 15:10:13 -07004513 @Deprecated
Amith Yamasani156c4352010-03-05 17:10:03 -08004514 public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
4515
4516 /**
Jeff Sharkey5ed9d682012-10-10 14:28:27 -07004517 * Whether lock pattern will vibrate as user enters (0 = false, 1 =
4518 * true)
4519 *
4520 * @deprecated Starting in {@link VERSION_CODES#JELLY_BEAN_MR1} the
4521 * lockscreen uses
4522 * {@link Settings.System#HAPTIC_FEEDBACK_ENABLED}.
Adrian Roos7811d9f2015-07-27 15:10:13 -07004523 * Accessing this setting from an app that is targeting
Deepanshu Guptae836a222015-07-31 12:11:07 -07004524 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}.
Amith Yamasani156c4352010-03-05 17:10:03 -08004525 */
Jeff Sharkey5ed9d682012-10-10 14:28:27 -07004526 @Deprecated
4527 public static final String
4528 LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
Amith Yamasani156c4352010-03-05 17:10:03 -08004529
4530 /**
Jim Millerbc4603b2010-08-30 21:21:34 -07004531 * This preference allows the device to be locked given time after screen goes off,
4532 * subject to current DeviceAdmin policy limits.
4533 * @hide
4534 */
4535 public static final String LOCK_SCREEN_LOCK_AFTER_TIMEOUT = "lock_screen_lock_after_timeout";
4536
4537
4538 /**
John Spurlock5f050e52012-10-27 10:44:19 -04004539 * This preference contains the string that shows for owner info on LockScreen.
Jim Miller253a5ef2010-10-13 20:57:29 -07004540 * @hide
Jim Miller187ec582013-04-15 18:27:54 -07004541 * @deprecated
Jim Miller253a5ef2010-10-13 20:57:29 -07004542 */
4543 public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info";
4544
4545 /**
John Spurlock5f050e52012-10-27 10:44:19 -04004546 * Ids of the user-selected appwidgets on the lockscreen (comma-delimited).
Jim Millerf229e4d2012-09-12 20:32:50 -07004547 * @hide
4548 */
Adrian Roos230635e2015-01-07 20:50:29 +01004549 @Deprecated
Michael Jurkaaa2859a2012-10-24 12:46:49 -07004550 public static final String LOCK_SCREEN_APPWIDGET_IDS =
4551 "lock_screen_appwidget_ids";
Jim Millerf229e4d2012-09-12 20:32:50 -07004552
4553 /**
Jim Miller51117262012-11-04 17:58:09 -08004554 * Id of the appwidget shown on the lock screen when appwidgets are disabled.
4555 * @hide
4556 */
Adrian Roos230635e2015-01-07 20:50:29 +01004557 @Deprecated
Jim Miller51117262012-11-04 17:58:09 -08004558 public static final String LOCK_SCREEN_FALLBACK_APPWIDGET_ID =
4559 "lock_screen_fallback_appwidget_id";
4560
4561 /**
John Spurlock5f050e52012-10-27 10:44:19 -04004562 * Index of the lockscreen appwidget to restore, -1 if none.
4563 * @hide
4564 */
Adrian Roos230635e2015-01-07 20:50:29 +01004565 @Deprecated
John Spurlock5f050e52012-10-27 10:44:19 -04004566 public static final String LOCK_SCREEN_STICKY_APPWIDGET =
4567 "lock_screen_sticky_appwidget";
4568
4569 /**
4570 * This preference enables showing the owner info on LockScreen.
Jim Miller253a5ef2010-10-13 20:57:29 -07004571 * @hide
Jim Miller187ec582013-04-15 18:27:54 -07004572 * @deprecated
Jim Miller253a5ef2010-10-13 20:57:29 -07004573 */
4574 public static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
4575 "lock_screen_owner_info_enabled";
4576
4577 /**
Dan Sandler5d7c3cc2014-02-18 17:35:15 -05004578 * When set by a user, allows notifications to be shown atop a securely locked screen
4579 * in their full "private" form (same as when the device is unlocked).
Dan Sandlerfd16d562014-02-13 18:43:31 -08004580 * @hide
4581 */
4582 public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
4583 "lock_screen_allow_private_notifications";
4584
4585 /**
Chris Wrencd8f4f72014-08-27 18:48:13 -04004586 * Set by the system to track if the user needs to see the call to action for
4587 * the lockscreen notification policy.
4588 * @hide
4589 */
4590 public static final String SHOW_NOTE_ABOUT_NOTIFICATION_HIDING =
4591 "show_note_about_notification_hiding";
4592
4593 /**
Adrian Roos3870d452014-09-05 18:22:28 +02004594 * Set to 1 by the system after trust agents have been initialized.
4595 * @hide
4596 */
4597 public static final String TRUST_AGENTS_INITIALIZED =
4598 "trust_agents_initialized";
4599
4600 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004601 * The Logging ID (a unique 64-bit value) as a hex string.
4602 * Used as a pseudonymous identifier for logging.
4603 * @deprecated This identifier is poorly initialized and has
4604 * many collisions. It should not be used.
4605 */
4606 @Deprecated
4607 public static final String LOGGING_ID = "logging_id";
4608
4609 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004610 * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004611 */
Christopher Tate06efb532012-08-24 15:29:27 -07004612 @Deprecated
4613 public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004614
4615 /**
Dan Egnor1c9131c2010-02-13 10:38:55 -08004616 * No longer supported.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004617 */
4618 public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004619
4620 /**
Dan Egnor1c9131c2010-02-13 10:38:55 -08004621 * No longer supported.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004622 */
4623 public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004624
4625 /**
Dan Egnor1c9131c2010-02-13 10:38:55 -08004626 * No longer supported.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004627 */
4628 public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004629
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004630 /**
4631 * Settings classname to launch when Settings is clicked from All
4632 * Applications. Needed because of user testing between the old
4633 * and new Settings apps.
4634 */
4635 // TODO: 881807
4636 public static final String SETTINGS_CLASSNAME = "settings_classname";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004637
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004638 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004639 * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004640 */
Christopher Tate06efb532012-08-24 15:29:27 -07004641 @Deprecated
4642 public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004643
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004644 /**
Christopher Tate06efb532012-08-24 15:29:27 -07004645 * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004646 */
Christopher Tate06efb532012-08-24 15:29:27 -07004647 @Deprecated
4648 public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07004649
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004650 /**
svetoslavganov75986cf2009-05-14 22:28:01 -07004651 * If accessibility is enabled.
4652 */
4653 public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled";
4654
4655 /**
Svetoslav Ganov00aabf72011-07-21 11:35:03 -07004656 * If touch exploration is enabled.
Svetoslav Ganov35bfede2011-07-14 17:57:06 -07004657 */
Svetoslav Ganov00aabf72011-07-21 11:35:03 -07004658 public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
Svetoslav Ganov35bfede2011-07-14 17:57:06 -07004659
4660 /**
svetoslavganov75986cf2009-05-14 22:28:01 -07004661 * List of the enabled accessibility providers.
4662 */
4663 public static final String ENABLED_ACCESSIBILITY_SERVICES =
4664 "enabled_accessibility_services";
4665
4666 /**
Svetoslav Ganov7befb7d2012-09-27 16:49:23 -07004667 * List of the accessibility services to which the user has granted
Svetoslav Ganov9a4c5cd2012-05-30 14:06:32 -07004668 * permission to put the device into touch exploration mode.
4669 *
4670 * @hide
4671 */
4672 public static final String TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES =
4673 "touch_exploration_granted_accessibility_services";
4674
4675 /**
Svetoslav Ganov55f937a2011-12-05 11:42:07 -08004676 * Whether to speak passwords while in accessibility mode.
4677 */
4678 public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
4679
4680 /**
Chris Craikcce47eb2014-07-16 15:12:15 -07004681 * Whether to draw text with high contrast while in accessibility mode.
4682 *
4683 * @hide
4684 */
4685 public static final String ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED =
4686 "high_text_contrast_enabled";
4687
4688 /**
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08004689 * If injection of accessibility enhancing JavaScript screen-reader
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07004690 * is enabled.
4691 * <p>
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08004692 * Note: The JavaScript based screen-reader is served by the
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07004693 * Google infrastructure and enable users with disabilities to
Svetoslav Ganov7befb7d2012-09-27 16:49:23 -07004694 * efficiently navigate in and explore web content.
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07004695 * </p>
4696 * <p>
4697 * This property represents a boolean value.
4698 * </p>
4699 * @hide
4700 */
4701 public static final String ACCESSIBILITY_SCRIPT_INJECTION =
4702 "accessibility_script_injection";
4703
4704 /**
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08004705 * The URL for the injected JavaScript based screen-reader used
Svetoslav Ganov7befb7d2012-09-27 16:49:23 -07004706 * for providing accessibility of content in WebView.
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08004707 * <p>
4708 * Note: The JavaScript based screen-reader is served by the
4709 * Google infrastructure and enable users with disabilities to
4710 * efficiently navigate in and explore web content.
4711 * </p>
4712 * <p>
4713 * This property represents a string value.
4714 * </p>
4715 * @hide
4716 */
4717 public static final String ACCESSIBILITY_SCREEN_READER_URL =
4718 "accessibility_script_injection_url";
4719
4720 /**
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07004721 * Key bindings for navigation in built-in accessibility support for web content.
4722 * <p>
4723 * Note: These key bindings are for the built-in accessibility navigation for
4724 * web content which is used as a fall back solution if JavaScript in a WebView
4725 * is not enabled or the user has not opted-in script injection from Google.
4726 * </p>
4727 * <p>
4728 * The bindings are separated by semi-colon. A binding is a mapping from
4729 * a key to a sequence of actions (for more details look at
4730 * android.webkit.AccessibilityInjector). A key is represented as the hexademical
4731 * string representation of an integer obtained from a meta state (optional) shifted
4732 * sixteen times left and bitwise ored with a key code. An action is represented
4733 * as a hexademical string representation of an integer where the first two digits
4734 * are navigation action index, the second, the third, and the fourth digit pairs
4735 * represent the action arguments. The separate actions in a binding are colon
4736 * separated. The key and the action sequence it maps to are separated by equals.
4737 * </p>
4738 * <p>
4739 * For example, the binding below maps the DPAD right button to traverse the
4740 * current navigation axis once without firing an accessibility event and to
4741 * perform the same traversal again but to fire an event:
4742 * <code>
4743 * 0x16=0x01000100:0x01000101;
4744 * </code>
4745 * </p>
4746 * <p>
4747 * The goal of this binding is to enable dynamic rebinding of keys to
4748 * navigation actions for web content without requiring a framework change.
4749 * </p>
4750 * <p>
4751 * This property represents a string value.
4752 * </p>
4753 * @hide
4754 */
4755 public static final String ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS =
4756 "accessibility_web_content_key_bindings";
4757
4758 /**
Svetoslav Ganov1cf70bb2012-08-06 10:53:34 -07004759 * Setting that specifies whether the display magnification is enabled.
4760 * Display magnifications allows the user to zoom in the display content
4761 * and is targeted to low vision users. The current magnification scale
4762 * is controlled by {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}.
4763 *
4764 * @hide
4765 */
4766 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED =
4767 "accessibility_display_magnification_enabled";
4768
4769 /**
4770 * Setting that specifies what the display magnification scale is.
4771 * Display magnifications allows the user to zoom in the display
4772 * content and is targeted to low vision users. Whether a display
4773 * magnification is performed is controlled by
4774 * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED}
4775 *
4776 * @hide
4777 */
4778 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE =
4779 "accessibility_display_magnification_scale";
4780
4781 /**
4782 * Setting that specifies whether the display magnification should be
4783 * automatically updated. If this fearture is enabled the system will
4784 * exit magnification mode or pan the viewport when a context change
4785 * occurs. For example, on staring a new activity or rotating the screen,
4786 * the system may zoom out so the user can see the new context he is in.
4787 * Another example is on showing a window that is not visible in the
4788 * magnified viewport the system may pan the viewport to make the window
4789 * the has popped up so the user knows that the context has changed.
4790 * Whether a screen magnification is performed is controlled by
4791 * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED}
4792 *
4793 * @hide
4794 */
4795 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE =
4796 "accessibility_display_magnification_auto_update";
4797
4798 /**
Alan Viveretteef793802013-07-23 14:15:28 -07004799 * Setting that specifies whether timed text (captions) should be
4800 * displayed in video content. Text display properties are controlled by
4801 * the following settings:
4802 * <ul>
4803 * <li>{@link #ACCESSIBILITY_CAPTIONING_LOCALE}
4804 * <li>{@link #ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR}
4805 * <li>{@link #ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR}
4806 * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_COLOR}
4807 * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_TYPE}
4808 * <li>{@link #ACCESSIBILITY_CAPTIONING_TYPEFACE}
Alan Viverette69ce69b2013-08-29 12:23:48 -07004809 * <li>{@link #ACCESSIBILITY_CAPTIONING_FONT_SCALE}
Alan Viveretteef793802013-07-23 14:15:28 -07004810 * </ul>
4811 *
4812 * @hide
4813 */
4814 public static final String ACCESSIBILITY_CAPTIONING_ENABLED =
4815 "accessibility_captioning_enabled";
4816
4817 /**
4818 * Setting that specifies the language for captions as a locale string,
4819 * e.g. en_US.
4820 *
4821 * @see java.util.Locale#toString
4822 * @hide
4823 */
4824 public static final String ACCESSIBILITY_CAPTIONING_LOCALE =
4825 "accessibility_captioning_locale";
4826
4827 /**
Alan Viverette43a1e3d2013-08-02 16:45:03 -07004828 * Integer property that specifies the preset style for captions, one
4829 * of:
4830 * <ul>
Alan Viverette69ce69b2013-08-29 12:23:48 -07004831 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESET_CUSTOM}
4832 * <li>a valid index of {@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESETS}
Alan Viverette43a1e3d2013-08-02 16:45:03 -07004833 * </ul>
4834 *
4835 * @see java.util.Locale#toString
4836 * @hide
4837 */
4838 public static final String ACCESSIBILITY_CAPTIONING_PRESET =
4839 "accessibility_captioning_preset";
4840
4841 /**
Alan Viveretteef793802013-07-23 14:15:28 -07004842 * Integer property that specifes the background color for captions as a
4843 * packed 32-bit color.
4844 *
4845 * @see android.graphics.Color#argb
4846 * @hide
4847 */
4848 public static final String ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR =
4849 "accessibility_captioning_background_color";
4850
4851 /**
4852 * Integer property that specifes the foreground color for captions as a
4853 * packed 32-bit color.
4854 *
4855 * @see android.graphics.Color#argb
4856 * @hide
4857 */
4858 public static final String ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR =
4859 "accessibility_captioning_foreground_color";
4860
4861 /**
4862 * Integer property that specifes the edge type for captions, one of:
4863 * <ul>
Alan Viverette69ce69b2013-08-29 12:23:48 -07004864 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_NONE}
4865 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_OUTLINE}
4866 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_DROP_SHADOW}
Alan Viveretteef793802013-07-23 14:15:28 -07004867 * </ul>
4868 *
4869 * @see #ACCESSIBILITY_CAPTIONING_EDGE_COLOR
4870 * @hide
4871 */
4872 public static final String ACCESSIBILITY_CAPTIONING_EDGE_TYPE =
4873 "accessibility_captioning_edge_type";
4874
4875 /**
4876 * Integer property that specifes the edge color for captions as a
4877 * packed 32-bit color.
4878 *
4879 * @see #ACCESSIBILITY_CAPTIONING_EDGE_TYPE
4880 * @see android.graphics.Color#argb
4881 * @hide
4882 */
4883 public static final String ACCESSIBILITY_CAPTIONING_EDGE_COLOR =
4884 "accessibility_captioning_edge_color";
4885
4886 /**
Alan Viverette55d70622013-12-11 15:22:14 -08004887 * Integer property that specifes the window color for captions as a
4888 * packed 32-bit color.
4889 *
4890 * @see android.graphics.Color#argb
4891 * @hide
4892 */
4893 public static final String ACCESSIBILITY_CAPTIONING_WINDOW_COLOR =
4894 "accessibility_captioning_window_color";
4895
4896 /**
Alan Viveretteef793802013-07-23 14:15:28 -07004897 * String property that specifies the typeface for captions, one of:
4898 * <ul>
4899 * <li>DEFAULT
4900 * <li>MONOSPACE
4901 * <li>SANS_SERIF
4902 * <li>SERIF
4903 * </ul>
4904 *
4905 * @see android.graphics.Typeface
4906 * @hide
4907 */
4908 public static final String ACCESSIBILITY_CAPTIONING_TYPEFACE =
4909 "accessibility_captioning_typeface";
4910
4911 /**
Alan Viverette69ce69b2013-08-29 12:23:48 -07004912 * Floating point property that specifies font scaling for captions.
Alan Viveretteef793802013-07-23 14:15:28 -07004913 *
4914 * @hide
4915 */
Alan Viverette69ce69b2013-08-29 12:23:48 -07004916 public static final String ACCESSIBILITY_CAPTIONING_FONT_SCALE =
4917 "accessibility_captioning_font_scale";
Alan Viveretteef793802013-07-23 14:15:28 -07004918
4919 /**
Alan Viverette410d4e32013-09-30 15:37:38 -07004920 * Setting that specifies whether display color inversion is enabled.
Alan Viverette410d4e32013-09-30 15:37:38 -07004921 */
4922 public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED =
4923 "accessibility_display_inversion_enabled";
4924
4925 /**
Alan Viverette410d4e32013-09-30 15:37:38 -07004926 * Setting that specifies whether display color space adjustment is
4927 * enabled.
4928 *
4929 * @hide
4930 */
4931 public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED =
4932 "accessibility_display_daltonizer_enabled";
4933
4934 /**
4935 * Integer property that specifies the type of color space adjustment to
4936 * perform. Valid values are defined in AccessibilityManager.
4937 *
4938 * @hide
4939 */
4940 public static final String ACCESSIBILITY_DISPLAY_DALTONIZER =
4941 "accessibility_display_daltonizer";
4942
4943 /**
Jason Monk08e7fa92015-12-07 20:05:08 -05004944 * Float list that specifies the color matrix to apply to
4945 * the display. Valid values are defined in AccessibilityManager.
4946 *
4947 * @hide
4948 */
4949 public static final String ACCESSIBILITY_DISPLAY_COLOR_MATRIX =
4950 "accessibility_display_color_matrix";
4951
4952 /**
Toni Barzic386f8342015-09-09 12:30:41 -07004953 * Setting that specifies whether automatic click when the mouse pointer stops moving is
4954 * enabled.
4955 *
4956 * @hide
4957 */
4958 public static final String ACCESSIBILITY_AUTOCLICK_ENABLED =
4959 "accessibility_autoclick_enabled";
4960
4961 /**
4962 * Integer setting specifying amount of time in ms the mouse pointer has to stay still
4963 * before performing click when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set.
4964 *
4965 * @see #ACCESSIBILITY_AUTOCLICK_ENABLED
4966 * @hide
4967 */
4968 public static final String ACCESSIBILITY_AUTOCLICK_DELAY =
4969 "accessibility_autoclick_delay";
4970
4971 /**
Jun Mukai19a56012015-11-24 11:25:52 -08004972 * Whether or not larger size icons are used for the pointer of mouse/trackpad for
4973 * accessibility.
4974 * (0 = false, 1 = true)
4975 * @hide
4976 */
4977 public static final String ACCESSIBILITY_LARGE_POINTER_ICON =
4978 "accessibility_large_pointer_icon";
4979
4980 /**
Toni Barzic386f8342015-09-09 12:30:41 -07004981 * The timeout for considering a press to be a long press in milliseconds.
Svetoslav Ganov54d068e2011-03-02 12:58:40 -08004982 * @hide
4983 */
4984 public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
4985
4986 /**
Svetoslav Ganov6bd20bc2013-09-02 15:24:45 -07004987 * List of the enabled print services.
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -07004988 * @hide
4989 */
4990 public static final String ENABLED_PRINT_SERVICES =
4991 "enabled_print_services";
4992
4993 /**
Svetoslav Ganov6bd20bc2013-09-02 15:24:45 -07004994 * List of the system print services we enabled on first boot. On
4995 * first boot we enable all system, i.e. bundled print services,
4996 * once, so they work out-of-the-box.
4997 * @hide
4998 */
4999 public static final String ENABLED_ON_FIRST_BOOT_SYSTEM_PRINT_SERVICES =
5000 "enabled_on_first_boot_system_print_services";
5001
5002 /**
Jean-Michel Trivif62ba452009-06-04 14:55:24 -07005003 * Setting to always use the default text-to-speech settings regardless
5004 * of the application settings.
5005 * 1 = override application settings,
5006 * 0 = use application settings (if specified).
Narayan Kamath6d632962011-08-24 11:51:37 +01005007 *
5008 * @deprecated The value of this setting is no longer respected by
5009 * the framework text to speech APIs as of the Ice Cream Sandwich release.
Jean-Michel Trivif62ba452009-06-04 14:55:24 -07005010 */
Narayan Kamath6d632962011-08-24 11:51:37 +01005011 @Deprecated
Jean-Michel Trivif62ba452009-06-04 14:55:24 -07005012 public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
5013
5014 /**
5015 * Default text-to-speech engine speech rate. 100 = 1x
5016 */
5017 public static final String TTS_DEFAULT_RATE = "tts_default_rate";
5018
5019 /**
5020 * Default text-to-speech engine pitch. 100 = 1x
5021 */
5022 public static final String TTS_DEFAULT_PITCH = "tts_default_pitch";
5023
5024 /**
5025 * Default text-to-speech engine.
5026 */
5027 public static final String TTS_DEFAULT_SYNTH = "tts_default_synth";
5028
5029 /**
Jean-Michel Trivif4782672009-06-09 16:22:48 -07005030 * Default text-to-speech language.
Narayan Kamath6d632962011-08-24 11:51:37 +01005031 *
5032 * @deprecated this setting is no longer in use, as of the Ice Cream
5033 * Sandwich release. Apps should never need to read this setting directly,
5034 * instead can query the TextToSpeech framework classes for the default
5035 * locale. {@link TextToSpeech#getLanguage()}.
Jean-Michel Trivif4782672009-06-09 16:22:48 -07005036 */
Narayan Kamath6d632962011-08-24 11:51:37 +01005037 @Deprecated
Jean-Michel Trivif4782672009-06-09 16:22:48 -07005038 public static final String TTS_DEFAULT_LANG = "tts_default_lang";
5039
5040 /**
Jean-Michel Trivia6fcc952009-06-19 14:06:01 -07005041 * Default text-to-speech country.
Narayan Kamath6d632962011-08-24 11:51:37 +01005042 *
5043 * @deprecated this setting is no longer in use, as of the Ice Cream
5044 * Sandwich release. Apps should never need to read this setting directly,
5045 * instead can query the TextToSpeech framework classes for the default
5046 * locale. {@link TextToSpeech#getLanguage()}.
Jean-Michel Trivia6fcc952009-06-19 14:06:01 -07005047 */
Narayan Kamath6d632962011-08-24 11:51:37 +01005048 @Deprecated
Jean-Michel Trivia6fcc952009-06-19 14:06:01 -07005049 public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
5050
5051 /**
5052 * Default text-to-speech locale variant.
Narayan Kamath6d632962011-08-24 11:51:37 +01005053 *
5054 * @deprecated this setting is no longer in use, as of the Ice Cream
5055 * Sandwich release. Apps should never need to read this setting directly,
5056 * instead can query the TextToSpeech framework classes for the
5057 * locale that is in use {@link TextToSpeech#getLanguage()}.
Jean-Michel Trivia6fcc952009-06-19 14:06:01 -07005058 */
Narayan Kamath6d632962011-08-24 11:51:37 +01005059 @Deprecated
Jean-Michel Trivia6fcc952009-06-19 14:06:01 -07005060 public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
5061
5062 /**
Narayan Kamathe5b8c4d2011-08-22 15:37:47 +01005063 * Stores the default tts locales on a per engine basis. Stored as
5064 * a comma seperated list of values, each value being of the form
5065 * {@code engine_name:locale} for example,
Narayan Kamath6d632962011-08-24 11:51:37 +01005066 * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}. This
5067 * supersedes {@link #TTS_DEFAULT_LANG}, {@link #TTS_DEFAULT_COUNTRY} and
5068 * {@link #TTS_DEFAULT_VARIANT}. Apps should never need to read this
5069 * setting directly, and can query the TextToSpeech framework classes
5070 * for the locale that is in use.
Narayan Kamathe5b8c4d2011-08-22 15:37:47 +01005071 *
5072 * @hide
5073 */
5074 public static final String TTS_DEFAULT_LOCALE = "tts_default_locale";
5075
5076 /**
Charles Chenceffa152010-03-16 21:18:10 -07005077 * Space delimited list of plugin packages that are enabled.
5078 */
5079 public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
5080
5081 /**
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005082 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON}
5083 * instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005084 */
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005085 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005086 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005087 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005088
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005089 /**
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005090 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY}
5091 * instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005092 */
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005093 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005094 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005095 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005096
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005097 /**
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005098 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
5099 * instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005100 */
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005101 @Deprecated
5102 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT =
5103 Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005104
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005105 /**
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005106 * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON}
5107 * instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005108 */
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005109 @Deprecated
5110 public static final String WIFI_ON = Global.WIFI_ON;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005111
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005112 /**
5113 * The acceptable packet loss percentage (range 0 - 100) before trying
5114 * another AP on the same network.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005115 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005116 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005117 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005118 public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE =
5119 "wifi_watchdog_acceptable_packet_loss_percentage";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005120
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005121 /**
5122 * The number of access points required for a network in order for the
5123 * watchdog to monitor it.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005124 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005125 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005126 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005127 public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005128
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005129 /**
5130 * The delay between background checks.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005131 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005132 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005133 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005134 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS =
5135 "wifi_watchdog_background_check_delay_ms";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005136
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005137 /**
5138 * Whether the Wi-Fi watchdog is enabled for background checking even
5139 * after it thinks the user has connected to a good access point.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005140 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005141 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005142 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005143 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED =
5144 "wifi_watchdog_background_check_enabled";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005145
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005146 /**
5147 * The timeout for a background ping
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005148 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005149 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005150 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005151 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS =
5152 "wifi_watchdog_background_check_timeout_ms";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005153
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005154 /**
5155 * The number of initial pings to perform that *may* be ignored if they
5156 * fail. Again, if these fail, they will *not* be used in packet loss
5157 * calculation. For example, one network always seemed to time out for
5158 * the first couple pings, so this is set to 3 by default.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005159 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005160 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005161 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005162 public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT =
5163 "wifi_watchdog_initial_ignored_ping_count";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005164
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005165 /**
5166 * The maximum number of access points (per network) to attempt to test.
5167 * If this number is reached, the watchdog will no longer monitor the
5168 * initial connection state for the network. This is a safeguard for
5169 * networks containing multiple APs whose DNS does not respond to pings.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005170 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005171 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005172 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005173 public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005174
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005175 /**
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07005176 * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005177 */
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07005178 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005179 public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
5180
5181 /**
5182 * A comma-separated list of SSIDs for which the Wi-Fi watchdog should be enabled.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005183 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005184 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005185 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005186 public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
5187
5188 /**
5189 * The number of pings to test if an access point is a good connection.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005190 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005191 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005192 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005193 public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005194
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005195 /**
5196 * The delay between pings.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005197 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005198 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005199 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005200 public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005201
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005202 /**
5203 * The timeout per ping.
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005204 * @deprecated This setting is not used.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005205 */
Isaac Levyd7b3e6a2011-07-20 18:15:30 -07005206 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005207 public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005208
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005209 /**
Christopher Tate06efb532012-08-24 15:29:27 -07005210 * @deprecated Use
5211 * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005212 */
Christopher Tate06efb532012-08-24 15:29:27 -07005213 @Deprecated
5214 public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07005215
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005216 /**
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005217 * @deprecated Use
5218 * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005219 */
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07005220 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005221 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005222 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005223
5224 /**
Jeremy Joslin79294842014-12-03 17:15:28 -08005225 * The number of milliseconds to hold on to a PendingIntent based request. This delay gives
5226 * the receivers of the PendingIntent an opportunity to make a new network request before
5227 * the Network satisfying the request is potentially removed.
5228 *
5229 * @hide
5230 */
5231 public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS =
5232 "connectivity_release_pending_intent_delay_ms";
5233
5234 /**
Jeff Sharkey625239a2012-09-26 22:03:49 -07005235 * Whether background data usage is allowed.
5236 *
5237 * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH},
5238 * availability of background data depends on several
5239 * combined factors. When background data is unavailable,
5240 * {@link ConnectivityManager#getActiveNetworkInfo()} will
5241 * now appear disconnected.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005242 */
Jeff Sharkey3a844fc2011-08-16 14:37:57 -07005243 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005244 public static final String BACKGROUND_DATA = "background_data";
Wink Saville04e71b32009-04-02 11:00:54 -07005245
5246 /**
Bjorn Bringert98bfa392010-03-24 10:59:48 +00005247 * Origins for which browsers should allow geolocation by default.
5248 * The value is a space-separated list of origins.
5249 */
5250 public static final String ALLOWED_GEOLOCATION_ORIGINS
5251 = "allowed_geolocation_origins";
5252
5253 /**
Wink Savillee9b06d72009-05-18 21:47:50 -07005254 * The preferred TTY mode 0 = TTy Off, CDMA default
5255 * 1 = TTY Full
5256 * 2 = TTY HCO
5257 * 3 = TTY VCO
5258 * @hide
5259 */
5260 public static final String PREFERRED_TTY_MODE =
5261 "preferred_tty_mode";
5262
Wink Saville04e71b32009-04-02 11:00:54 -07005263 /**
Wink Saville04e71b32009-04-02 11:00:54 -07005264 * Whether the enhanced voice privacy mode is enabled.
5265 * 0 = normal voice privacy
5266 * 1 = enhanced voice privacy
5267 * @hide
5268 */
5269 public static final String ENHANCED_VOICE_PRIVACY_ENABLED = "enhanced_voice_privacy_enabled";
5270
5271 /**
5272 * Whether the TTY mode mode is enabled.
5273 * 0 = disabled
5274 * 1 = enabled
5275 * @hide
5276 */
5277 public static final String TTY_MODE_ENABLED = "tty_mode_enabled";
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005278
5279 /**
Christopher Tate8031a3d2009-07-06 16:36:05 -07005280 * Controls whether settings backup is enabled.
Dianne Hackborncf098292009-07-01 19:55:20 -07005281 * Type: int ( 0 = disabled, 1 = enabled )
5282 * @hide
5283 */
5284 public static final String BACKUP_ENABLED = "backup_enabled";
5285
5286 /**
Christopher Tatecce9da52010-02-03 15:11:15 -08005287 * Controls whether application data is automatically restored from backup
5288 * at install time.
5289 * Type: int ( 0 = disabled, 1 = enabled )
5290 * @hide
5291 */
5292 public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore";
5293
5294 /**
Christopher Tate8031a3d2009-07-06 16:36:05 -07005295 * Indicates whether settings backup has been fully provisioned.
5296 * Type: int ( 0 = unprovisioned, 1 = fully provisioned )
5297 * @hide
5298 */
5299 public static final String BACKUP_PROVISIONED = "backup_provisioned";
5300
5301 /**
Dianne Hackborncf098292009-07-01 19:55:20 -07005302 * Component of the transport to use for backup/restore.
5303 * @hide
5304 */
5305 public static final String BACKUP_TRANSPORT = "backup_transport";
Sanjay Jeyakumar21bf2412009-07-09 13:31:48 -07005306
Dianne Hackbornd7cd29d2009-07-01 11:22:45 -07005307 /**
5308 * Version for which the setup wizard was last shown. Bumped for
5309 * each release when there is new setup information to show.
5310 * @hide
5311 */
5312 public static final String LAST_SETUP_SHOWN = "last_setup_shown";
Dianne Hackborncf098292009-07-01 19:55:20 -07005313
5314 /**
Doug Zongker43866e02010-01-07 12:09:54 -08005315 * The interval in milliseconds after which Wi-Fi is considered idle.
5316 * When idle, it is possible for the device to be switched from Wi-Fi to
5317 * the mobile data network.
5318 * @hide
Jeff Brownbf6f6f92012-09-25 15:03:20 -07005319 * @deprecated Use {@link android.provider.Settings.Global#WIFI_IDLE_MS}
5320 * instead.
Doug Zongker43866e02010-01-07 12:09:54 -08005321 */
Christopher Tate6f5a9a92012-09-14 17:24:28 -07005322 @Deprecated
5323 public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS;
Doug Zongker43866e02010-01-07 12:09:54 -08005324
5325 /**
Narayan Kamathee69ff42011-06-28 12:07:18 +01005326 * The global search provider chosen by the user (if multiple global
5327 * search providers are installed). This will be the provider returned
5328 * by {@link SearchManager#getGlobalSearchActivity()} if it's still
5329 * installed. This setting is stored as a flattened component name as
5330 * per {@link ComponentName#flattenToString()}.
5331 *
5332 * @hide
5333 */
5334 public static final String SEARCH_GLOBAL_SEARCH_ACTIVITY =
5335 "search_global_search_activity";
5336
5337 /**
Doug Zongkeraed8f8e2010-01-07 18:07:50 -08005338 * The number of promoted sources in GlobalSearch.
5339 * @hide
5340 */
5341 public static final String SEARCH_NUM_PROMOTED_SOURCES = "search_num_promoted_sources";
5342 /**
5343 * The maximum number of suggestions returned by GlobalSearch.
5344 * @hide
5345 */
5346 public static final String SEARCH_MAX_RESULTS_TO_DISPLAY = "search_max_results_to_display";
5347 /**
5348 * The number of suggestions GlobalSearch will ask each non-web search source for.
5349 * @hide
5350 */
5351 public static final String SEARCH_MAX_RESULTS_PER_SOURCE = "search_max_results_per_source";
5352 /**
5353 * The number of suggestions the GlobalSearch will ask the web search source for.
5354 * @hide
5355 */
5356 public static final String SEARCH_WEB_RESULTS_OVERRIDE_LIMIT =
5357 "search_web_results_override_limit";
5358 /**
5359 * The number of milliseconds that GlobalSearch will wait for suggestions from
5360 * promoted sources before continuing with all other sources.
5361 * @hide
5362 */
5363 public static final String SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS =
5364 "search_promoted_source_deadline_millis";
5365 /**
5366 * The number of milliseconds before GlobalSearch aborts search suggesiton queries.
5367 * @hide
5368 */
5369 public static final String SEARCH_SOURCE_TIMEOUT_MILLIS = "search_source_timeout_millis";
5370 /**
5371 * The maximum number of milliseconds that GlobalSearch shows the previous results
5372 * after receiving a new query.
5373 * @hide
5374 */
5375 public static final String SEARCH_PREFILL_MILLIS = "search_prefill_millis";
5376 /**
5377 * The maximum age of log data used for shortcuts in GlobalSearch.
5378 * @hide
5379 */
5380 public static final String SEARCH_MAX_STAT_AGE_MILLIS = "search_max_stat_age_millis";
5381 /**
5382 * The maximum age of log data used for source ranking in GlobalSearch.
5383 * @hide
5384 */
5385 public static final String SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS =
5386 "search_max_source_event_age_millis";
5387 /**
5388 * The minimum number of impressions needed to rank a source in GlobalSearch.
5389 * @hide
5390 */
5391 public static final String SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING =
5392 "search_min_impressions_for_source_ranking";
5393 /**
5394 * The minimum number of clicks needed to rank a source in GlobalSearch.
5395 * @hide
5396 */
5397 public static final String SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING =
5398 "search_min_clicks_for_source_ranking";
5399 /**
5400 * The maximum number of shortcuts shown by GlobalSearch.
5401 * @hide
5402 */
5403 public static final String SEARCH_MAX_SHORTCUTS_RETURNED = "search_max_shortcuts_returned";
5404 /**
5405 * The size of the core thread pool for suggestion queries in GlobalSearch.
5406 * @hide
5407 */
5408 public static final String SEARCH_QUERY_THREAD_CORE_POOL_SIZE =
5409 "search_query_thread_core_pool_size";
5410 /**
5411 * The maximum size of the thread pool for suggestion queries in GlobalSearch.
5412 * @hide
5413 */
5414 public static final String SEARCH_QUERY_THREAD_MAX_POOL_SIZE =
5415 "search_query_thread_max_pool_size";
5416 /**
5417 * The size of the core thread pool for shortcut refreshing in GlobalSearch.
5418 * @hide
5419 */
5420 public static final String SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE =
5421 "search_shortcut_refresh_core_pool_size";
5422 /**
5423 * The maximum size of the thread pool for shortcut refreshing in GlobalSearch.
5424 * @hide
5425 */
5426 public static final String SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE =
5427 "search_shortcut_refresh_max_pool_size";
5428 /**
5429 * The maximun time that excess threads in the GlobalSeach thread pools will
5430 * wait before terminating.
5431 * @hide
5432 */
5433 public static final String SEARCH_THREAD_KEEPALIVE_SECONDS =
5434 "search_thread_keepalive_seconds";
5435 /**
5436 * The maximum number of concurrent suggestion queries to each source.
5437 * @hide
5438 */
5439 public static final String SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT =
5440 "search_per_source_concurrent_query_limit";
5441
San Mehat87734d32010-01-08 12:53:06 -08005442 /**
5443 * Whether or not alert sounds are played on MountService events. (0 = false, 1 = true)
5444 * @hide
5445 */
5446 public static final String MOUNT_PLAY_NOTIFICATION_SND = "mount_play_not_snd";
5447
5448 /**
5449 * Whether or not UMS auto-starts on UMS host detection. (0 = false, 1 = true)
5450 * @hide
5451 */
5452 public static final String MOUNT_UMS_AUTOSTART = "mount_ums_autostart";
5453
5454 /**
5455 * Whether or not a notification is displayed on UMS host detection. (0 = false, 1 = true)
5456 * @hide
5457 */
5458 public static final String MOUNT_UMS_PROMPT = "mount_ums_prompt";
5459
5460 /**
5461 * Whether or not a notification is displayed while UMS is enabled. (0 = false, 1 = true)
5462 * @hide
5463 */
5464 public static final String MOUNT_UMS_NOTIFY_ENABLED = "mount_ums_notify_enabled";
Doug Zongkeraed8f8e2010-01-07 18:07:50 -08005465
Dan Egnor42471dd2010-01-07 17:25:22 -08005466 /**
5467 * If nonzero, ANRs in invisible background processes bring up a dialog.
5468 * Otherwise, the process will be silently killed.
5469 * @hide
5470 */
5471 public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
Erikeebc8e22010-02-18 13:27:19 -08005472
Mike LeBeau5d34e9b2010-02-10 19:34:56 -08005473 /**
5474 * The {@link ComponentName} string of the service to be used as the voice recognition
5475 * service.
Erikeebc8e22010-02-18 13:27:19 -08005476 *
Mike LeBeau5d34e9b2010-02-10 19:34:56 -08005477 * @hide
5478 */
5479 public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service";
Dan Egnor42471dd2010-01-07 17:25:22 -08005480
William Luh623a4282013-06-24 12:14:18 -07005481 /**
5482 * Stores whether an user has consented to have apps verified through PAM.
5483 * The value is boolean (1 or 0).
5484 *
5485 * @hide
5486 */
5487 public static final String PACKAGE_VERIFIER_USER_CONSENT =
5488 "package_verifier_user_consent";
satok988323c2011-06-22 16:38:13 +09005489
5490 /**
satokada8c4e2011-08-23 14:56:56 +09005491 * The {@link ComponentName} string of the selected spell checker service which is
5492 * one of the services managed by the text service manager.
5493 *
5494 * @hide
5495 */
5496 public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
5497
5498 /**
5499 * The {@link ComponentName} string of the selected subtype of the selected spell checker
satok988323c2011-06-22 16:38:13 +09005500 * service which is one of the services managed by the text service manager.
5501 *
5502 * @hide
5503 */
satokada8c4e2011-08-23 14:56:56 +09005504 public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
5505 "selected_spell_checker_subtype";
satok988323c2011-06-22 16:38:13 +09005506
Doug Zongkeraed8f8e2010-01-07 18:07:50 -08005507 /**
satoka33c4fc2011-08-25 16:50:11 +09005508 * The {@link ComponentName} string whether spell checker is enabled or not.
5509 *
5510 * @hide
5511 */
5512 public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
5513
5514 /**
David Brown458e8062010-03-08 21:52:11 -08005515 * What happens when the user presses the Power button while in-call
5516 * and the screen is on.<br/>
5517 * <b>Values:</b><br/>
5518 * 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/>
5519 * 2 - The Power button hangs up the current call.<br/>
5520 *
5521 * @hide
5522 */
5523 public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior";
5524
5525 /**
5526 * INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen".
5527 * @hide
5528 */
5529 public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1;
5530
5531 /**
5532 * INCALL_POWER_BUTTON_BEHAVIOR value for "hang up".
5533 * @hide
5534 */
5535 public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2;
5536
5537 /**
5538 * INCALL_POWER_BUTTON_BEHAVIOR default value.
5539 * @hide
5540 */
5541 public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT =
5542 INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
5543
5544 /**
Jeff Browna20dda42014-05-27 20:57:24 -07005545 * Whether the device should wake when the wake gesture sensor detects motion.
5546 * @hide
5547 */
5548 public static final String WAKE_GESTURE_ENABLED = "wake_gesture_enabled";
5549
5550 /**
John Spurlocka4215ce2014-08-04 14:50:38 -04005551 * Whether the device should doze if configured.
5552 * @hide
5553 */
5554 public static final String DOZE_ENABLED = "doze_enabled";
5555
5556 /**
Dianne Hackborn2ccda4d2010-03-22 21:49:15 -07005557 * The current night mode that has been selected by the user. Owned
5558 * and controlled by UiModeManagerService. Constants are as per
5559 * UiModeManager.
5560 * @hide
5561 */
5562 public static final String UI_NIGHT_MODE = "ui_night_mode";
Suchi Amalapurapu40e47252010-04-07 16:15:50 -07005563
5564 /**
John Spurlock1a868b72012-08-22 09:56:51 -04005565 * Whether screensavers are enabled.
Daniel Sandler0601eb72011-04-13 01:01:32 -04005566 * @hide
5567 */
Daniel Sandler2d545362011-11-17 10:38:37 -08005568 public static final String SCREENSAVER_ENABLED = "screensaver_enabled";
Daniel Sandler0601eb72011-04-13 01:01:32 -04005569
5570 /**
John Spurlock1a868b72012-08-22 09:56:51 -04005571 * The user's chosen screensaver components.
Daniel Sandler2d545362011-11-17 10:38:37 -08005572 *
John Spurlock1a868b72012-08-22 09:56:51 -04005573 * These will be launched by the PhoneWindowManager after a timeout when not on
Daniel Sandler2d545362011-11-17 10:38:37 -08005574 * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1).
Daniel Sandler0601eb72011-04-13 01:01:32 -04005575 * @hide
5576 */
John Spurlock1a868b72012-08-22 09:56:51 -04005577 public static final String SCREENSAVER_COMPONENTS = "screensaver_components";
Daniel Sandler2d545362011-11-17 10:38:37 -08005578
5579 /**
John Spurlock1a868b72012-08-22 09:56:51 -04005580 * If screensavers are enabled, whether the screensaver should be automatically launched
5581 * when the device is inserted into a (desk) dock.
Daniel Sandler2d545362011-11-17 10:38:37 -08005582 * @hide
5583 */
5584 public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
Daniel Sandler0601eb72011-04-13 01:01:32 -04005585
John Spurlock1a868b72012-08-22 09:56:51 -04005586 /**
5587 * If screensavers are enabled, whether the screensaver should be automatically launched
5588 * when the screen times out when not on battery.
5589 * @hide
5590 */
5591 public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
5592
5593 /**
5594 * If screensavers are enabled, the default screensaver component.
5595 * @hide
5596 */
5597 public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component";
5598
Daniel Sandler0601eb72011-04-13 01:01:32 -04005599 /**
Martijn Coenena7397882013-07-30 20:07:47 -07005600 * The default NFC payment component
5601 * @hide
5602 */
5603 public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
5604
5605 /**
Martijn Coenen2f6f3a012014-04-25 17:00:21 -07005606 * Whether NFC payment is handled by the foreground application or a default.
5607 * @hide
5608 */
5609 public static final String NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground";
5610
5611 /**
David Braunf5d83192013-09-16 13:43:51 -07005612 * Specifies the package name currently configured to be the primary sms application
5613 * @hide
5614 */
5615 public static final String SMS_DEFAULT_APPLICATION = "sms_default_application";
5616
5617 /**
Yorke Lee014de022015-04-21 17:15:47 -07005618 * Specifies the package name currently configured to be the default dialer application
5619 * @hide
5620 */
5621 public static final String DIALER_DEFAULT_APPLICATION = "dialer_default_application";
5622
5623 /**
Adrian Roos943eb862015-03-26 12:31:16 -07005624 * Specifies the package name currently configured to be the emergency assistance application
5625 *
5626 * @see android.telephony.TelephonyManager#ACTION_EMERGENCY_ASSISTANCE
5627 *
5628 * @hide
5629 */
5630 public static final String EMERGENCY_ASSISTANCE_APPLICATION = "emergency_assistance_application";
5631
5632 /**
Jorim Jaggi9d910832015-05-18 17:35:26 -07005633 * Specifies whether the current app context on scren (assist data) will be sent to the
5634 * assist application (active voice interaction service).
5635 *
5636 * @hide
5637 */
5638 public static final String ASSIST_STRUCTURE_ENABLED = "assist_structure_enabled";
5639
5640 /**
Jorim Jaggia133f0b2015-06-26 16:40:00 -07005641 * Specifies whether a screenshot of the screen contents will be sent to the assist
5642 * application (active voice interaction service).
5643 *
5644 * @hide
5645 */
5646 public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled";
5647
5648 /**
Julia Reynolds7eba5932015-12-11 16:40:39 -05005649 * Names of the service component that the current user has explicitly allowed to
5650 * see and change the importance of all of the user's notifications.
5651 *
5652 * @hide
5653 */
5654 public static final String ENABLED_NOTIFICATION_ASSISTANT
5655 = "enabled_notification_assistant";
5656
5657 /**
John Spurlock7c74f782015-06-04 13:01:42 -04005658 * Names of the service components that the current user has explicitly allowed to
Chris Wren8326a8a2014-10-22 14:13:32 -04005659 * see all of the user's notifications, separated by ':'.
Daniel Sandler4b749ef2013-03-18 21:53:04 -04005660 *
5661 * @hide
5662 */
5663 public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
5664
John Spurlock7340fc82014-04-24 18:50:12 -04005665 /**
John Spurlock7c74f782015-06-04 13:01:42 -04005666 * Names of the packages that the current user has explicitly allowed to
5667 * manage notification policy configuration, separated by ':'.
John Spurlock7c74f782015-06-04 13:01:42 -04005668 */
5669 public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES =
5670 "enabled_notification_policy_access_packages";
5671
John Spurlock5c454122013-06-17 07:35:46 -04005672 /** @hide */
5673 public static final String BAR_SERVICE_COMPONENT = "bar_service_component";
5674
John Spurlockd67ec252013-09-05 11:31:54 -04005675 /** @hide */
John Spurlockcdb57ae2015-02-11 19:04:11 -05005676 public static final String VOLUME_CONTROLLER_SERVICE_COMPONENT
5677 = "volume_controller_service_component";
5678
5679 /** @hide */
John Spurlockf1a36642013-10-12 17:50:42 -04005680 public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
John Spurlockd67ec252013-09-05 11:31:54 -04005681
Yorke Lee647f8f32013-05-07 10:49:44 -07005682 /**
Svetoslavf43e8512013-09-30 17:33:05 -07005683 * This is the query URI for finding a print service to install.
5684 *
5685 * @hide
5686 */
5687 public static final String PRINT_SERVICE_SEARCH_URI = "print_service_search_uri";
5688
5689 /**
5690 * This is the query URI for finding a NFC payment service to install.
5691 *
5692 * @hide
5693 */
5694 public static final String PAYMENT_SERVICE_SEARCH_URI = "payment_service_search_uri";
5695
5696 /**
Amith Yamasani1e9c2182014-06-11 17:25:51 -07005697 * If enabled, apps should try to skip any introductory hints on first launch. This might
Amith Yamasani0c416392014-06-13 15:54:39 -07005698 * apply to users that are already familiar with the environment or temporary users.
Amith Yamasani1e9c2182014-06-11 17:25:51 -07005699 * <p>
5700 * Type : int (0 to show hints, 1 to skip showing hints)
Amith Yamasani1e9c2182014-06-11 17:25:51 -07005701 */
5702 public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
5703
5704 /**
John Spurlockaa5ee4d2014-07-25 13:05:12 -04005705 * Persisted playback time after a user confirmation of an unsafe volume level.
5706 *
5707 * @hide
5708 */
5709 public static final String UNSAFE_VOLUME_MUSIC_ACTIVE_MS = "unsafe_volume_music_active_ms";
5710
5711 /**
Dan Sandler52e5701e2014-07-22 23:14:54 -04005712 * This preference enables notification display on the lockscreen.
5713 * @hide
5714 */
5715 public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
5716 "lock_screen_show_notifications";
5717
5718 /**
Dongwon Kang4d933a02014-08-07 22:51:47 -07005719 * List of TV inputs that are currently hidden. This is a string
Jaewan Kimf0e530e2014-08-22 00:43:31 +09005720 * containing the IDs of all hidden TV inputs. Each ID is encoded by
5721 * {@link android.net.Uri#encode(String)} and separated by ':'.
Dongwon Kang4d933a02014-08-07 22:51:47 -07005722 * @hide
5723 */
5724 public static final String TV_INPUT_HIDDEN_INPUTS = "tv_input_hidden_inputs";
5725
5726 /**
5727 * List of custom TV input labels. This is a string containing <TV input id, custom name>
Jaewan Kimf0e530e2014-08-22 00:43:31 +09005728 * pairs. TV input id and custom name are encoded by {@link android.net.Uri#encode(String)}
5729 * and separated by ','. Each pair is separated by ':'.
Dongwon Kang4d933a02014-08-07 22:51:47 -07005730 * @hide
5731 */
5732 public static final String TV_INPUT_CUSTOM_LABELS = "tv_input_custom_labels";
5733
5734 /**
Glenn Kasten34cc4db2014-08-13 10:56:38 -07005735 * Whether automatic routing of system audio to USB audio peripheral is disabled.
5736 * The value is boolean (1 or 0), where 1 means automatic routing is disabled,
5737 * and 0 means automatic routing is enabled.
5738 *
5739 * @hide
5740 */
5741 public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
5742 "usb_audio_automatic_routing_disabled";
5743
5744 /**
Jeff Brown05af6ad2014-09-30 20:54:30 -07005745 * The timeout in milliseconds before the device fully goes to sleep after
5746 * a period of inactivity. This value sets an upper bound on how long the device
5747 * will stay awake or dreaming without user activity. It should generally
Dianne Hackbornad6a99b2014-11-18 10:11:10 -08005748 * be longer than {@link Settings.System#SCREEN_OFF_TIMEOUT} as otherwise the device
Jeff Brown05af6ad2014-09-30 20:54:30 -07005749 * will sleep before it ever has a chance to dream.
5750 * <p>
5751 * Use -1 to disable this timeout.
5752 * </p>
5753 *
5754 * @hide
5755 */
5756 public static final String SLEEP_TIMEOUT = "sleep_timeout";
5757
5758 /**
Jason Monk27bbb2d2015-03-31 16:46:39 -04005759 * Controls whether double tap to wake is enabled.
5760 * @hide
5761 */
5762 public static final String DOUBLE_TAP_TO_WAKE = "double_tap_to_wake";
5763
5764 /**
Xiyuan Xiae6de8b92015-06-06 22:18:05 -07005765 * The current assistant component. It could be a voice interaction service,
5766 * or an activity that handles ACTION_ASSIST, or empty which means using the default
5767 * handling.
5768 *
5769 * @hide
5770 */
5771 public static final String ASSISTANT = "assistant";
5772
5773 /**
Jason Monk5a5e7d62015-08-04 11:20:25 -04005774 * Whether the camera launch gesture should be disabled.
5775 *
5776 * @hide
5777 */
5778 public static final String CAMERA_GESTURE_DISABLED = "camera_gesture_disabled";
5779
5780 /**
Adrian Roos5941c982015-09-03 15:59:49 -07005781 * Whether the camera launch gesture to double tap the power button when the screen is off
5782 * should be disabled.
5783 *
5784 * @hide
5785 */
5786 public static final String CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED =
5787 "camera_double_tap_power_gesture_disabled";
5788
5789 /**
Gustav Sennton6258dcd2015-10-30 19:25:37 +00005790 * Name of the package used as WebView provider (if unset the provider is instead determined
5791 * by the system).
5792 * @hide
5793 */
5794 public static final String WEBVIEW_PROVIDER = "webview_provider";
5795
5796 /**
Svetoslav Ganova571a582011-09-20 18:32:20 -07005797 * This are the settings to be backed up.
5798 *
5799 * NOTE: Settings are backed up and restored in the order they appear
5800 * in this array. If you have one setting depending on another,
5801 * make sure that they are ordered appropriately.
5802 *
-b master501eec92009-07-06 13:53:11 -07005803 * @hide
5804 */
5805 public static final String[] SETTINGS_TO_BACKUP = {
Christopher Tate58f41ec2013-01-11 15:40:36 -08005806 BUGREPORT_IN_POWER_MENU, // moved to global
Amith Yamasani8823c0a82009-07-07 14:30:17 -07005807 ALLOW_MOCK_LOCATION,
-b master501eec92009-07-06 13:53:11 -07005808 PARENTAL_CONTROL_ENABLED,
5809 PARENTAL_CONTROL_REDIRECT_URL,
Christopher Tate66488d62012-10-02 11:58:01 -07005810 USB_MASS_STORAGE_ENABLED, // moved to global
Svetoslav Ganov1cf70bb2012-08-06 10:53:34 -07005811 ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
5812 ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
5813 ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07005814 ACCESSIBILITY_SCRIPT_INJECTION,
Christopher Tate14c2d792010-02-25 16:49:44 -08005815 BACKUP_AUTO_RESTORE,
-b master501eec92009-07-06 13:53:11 -07005816 ENABLED_ACCESSIBILITY_SERVICES,
Christopher Tate6597e342015-02-17 12:15:25 -08005817 ENABLED_NOTIFICATION_LISTENERS,
Christopher Tate7b9a28c2015-03-18 13:06:16 -07005818 ENABLED_INPUT_METHODS,
Svetoslav Ganov9a4c5cd2012-05-30 14:06:32 -07005819 TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
Svetoslav Ganova28a16d2011-07-28 11:24:21 -07005820 TOUCH_EXPLORATION_ENABLED,
Svetoslav Ganova571a582011-09-20 18:32:20 -07005821 ACCESSIBILITY_ENABLED,
Svetoslav Ganov55f937a2011-12-05 11:42:07 -08005822 ACCESSIBILITY_SPEAK_PASSWORD,
Chris Craikcce47eb2014-07-16 15:12:15 -07005823 ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED,
Alan Viveretteef793802013-07-23 14:15:28 -07005824 ACCESSIBILITY_CAPTIONING_ENABLED,
5825 ACCESSIBILITY_CAPTIONING_LOCALE,
5826 ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
5827 ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
5828 ACCESSIBILITY_CAPTIONING_EDGE_TYPE,
5829 ACCESSIBILITY_CAPTIONING_EDGE_COLOR,
5830 ACCESSIBILITY_CAPTIONING_TYPEFACE,
Alan Viverette69ce69b2013-08-29 12:23:48 -07005831 ACCESSIBILITY_CAPTIONING_FONT_SCALE,
-b master501eec92009-07-06 13:53:11 -07005832 TTS_USE_DEFAULTS,
5833 TTS_DEFAULT_RATE,
5834 TTS_DEFAULT_PITCH,
5835 TTS_DEFAULT_SYNTH,
5836 TTS_DEFAULT_LANG,
5837 TTS_DEFAULT_COUNTRY,
Charles Chenceffa152010-03-16 21:18:10 -07005838 TTS_ENABLED_PLUGINS,
Narayan Kamath6d632962011-08-24 11:51:37 +01005839 TTS_DEFAULT_LOCALE,
Christopher Tate66488d62012-10-02 11:58:01 -07005840 WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, // moved to global
5841 WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, // moved to global
5842 WIFI_NUM_OPEN_NETWORKS_KEPT, // moved to global
Christopher Tate06cbadd2015-03-16 18:29:42 -07005843 SELECTED_SPELL_CHECKER,
5844 SELECTED_SPELL_CHECKER_SUBTYPE,
5845 SPELL_CHECKER_ENABLED,
San Mehat87734d32010-01-08 12:53:06 -08005846 MOUNT_PLAY_NOTIFICATION_SND,
5847 MOUNT_UMS_AUTOSTART,
5848 MOUNT_UMS_PROMPT,
Dianne Hackborn2ccda4d2010-03-22 21:49:15 -07005849 MOUNT_UMS_NOTIFY_ENABLED,
Jeff Brown05af6ad2014-09-30 20:54:30 -07005850 UI_NIGHT_MODE,
Jason Monk27bbb2d2015-03-31 16:46:39 -04005851 SLEEP_TIMEOUT,
5852 DOUBLE_TAP_TO_WAKE,
Jason Monk5a5e7d62015-08-04 11:20:25 -04005853 CAMERA_GESTURE_DISABLED,
Toni Barzic386f8342015-09-09 12:30:41 -07005854 ACCESSIBILITY_AUTOCLICK_ENABLED,
5855 ACCESSIBILITY_AUTOCLICK_DELAY
-b master501eec92009-07-06 13:53:11 -07005856 };
5857
5858 /**
Amith Yamasani4f7e2e32014-08-14 18:49:48 -07005859 * These entries are considered common between the personal and the managed profile,
5860 * since the managed profile doesn't get to change them.
Amith Yamasani4f7e2e32014-08-14 18:49:48 -07005861 */
Svetoslav683914b2015-01-15 14:22:26 -08005862 private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>();
Amith Yamasanib0ff3222015-03-04 09:56:14 -08005863
Svetoslav683914b2015-01-15 14:22:26 -08005864 static {
5865 CLONE_TO_MANAGED_PROFILE.add(ACCESSIBILITY_ENABLED);
5866 CLONE_TO_MANAGED_PROFILE.add(ALLOW_MOCK_LOCATION);
5867 CLONE_TO_MANAGED_PROFILE.add(ALLOWED_GEOLOCATION_ORIGINS);
5868 CLONE_TO_MANAGED_PROFILE.add(DEFAULT_INPUT_METHOD);
5869 CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES);
5870 CLONE_TO_MANAGED_PROFILE.add(ENABLED_INPUT_METHODS);
5871 CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE);
Lifu Tangd1fa1d62015-11-25 21:42:44 -08005872 CLONE_TO_MANAGED_PROFILE.add(LOCATION_PREVIOUS_MODE);
Svetoslav683914b2015-01-15 14:22:26 -08005873 CLONE_TO_MANAGED_PROFILE.add(LOCATION_PROVIDERS_ALLOWED);
5874 CLONE_TO_MANAGED_PROFILE.add(LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS);
5875 CLONE_TO_MANAGED_PROFILE.add(SELECTED_INPUT_METHOD_SUBTYPE);
5876 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER);
5877 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER_SUBTYPE);
5878 }
5879
5880 /** @hide */
5881 public static void getCloneToManagedProfileSettings(Set<String> outKeySet) {
5882 outKeySet.addAll(CLONE_TO_MANAGED_PROFILE);
5883 }
Amith Yamasani4f7e2e32014-08-14 18:49:48 -07005884
5885 /**
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005886 * Helper method for determining if a location provider is enabled.
Tom O'Neilld5759432013-09-11 11:03:03 -07005887 *
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005888 * @param cr the content resolver to use
5889 * @param provider the location provider to query
5890 * @return true if the provider is enabled
Tom O'Neilld5759432013-09-11 11:03:03 -07005891 *
5892 * @deprecated use {@link #LOCATION_MODE} or
5893 * {@link LocationManager#isProviderEnabled(String)}
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005894 */
Tom O'Neill1f48b782013-08-19 18:14:56 -07005895 @Deprecated
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005896 public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) {
Victoria Leaseb711d572012-10-02 13:14:11 -07005897 return isLocationProviderEnabledForUser(cr, provider, UserHandle.myUserId());
5898 }
5899
5900 /**
5901 * Helper method for determining if a location provider is enabled.
5902 * @param cr the content resolver to use
5903 * @param provider the location provider to query
5904 * @param userId the userId to query
5905 * @return true if the provider is enabled
Tom O'Neilld5759432013-09-11 11:03:03 -07005906 * @deprecated use {@link #LOCATION_MODE} or
5907 * {@link LocationManager#isProviderEnabled(String)}
Victoria Leaseb711d572012-10-02 13:14:11 -07005908 * @hide
5909 */
Tom O'Neill1f48b782013-08-19 18:14:56 -07005910 @Deprecated
Victoria Leaseb711d572012-10-02 13:14:11 -07005911 public static final boolean isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId) {
5912 String allowedProviders = Settings.Secure.getStringForUser(cr,
5913 LOCATION_PROVIDERS_ALLOWED, userId);
Brad Fitzpatrick11fe1812010-09-10 16:07:52 -07005914 return TextUtils.delimitedStringContains(allowedProviders, ',', provider);
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005915 }
5916
5917 /**
5918 * Thread-safe method for enabling or disabling a single location provider.
5919 * @param cr the content resolver to use
5920 * @param provider the location provider to enable or disable
5921 * @param enabled true if the provider should be enabled
Tom O'Neilla324ac72013-08-26 14:40:23 -07005922 * @deprecated use {@link #putInt(ContentResolver, String, int)} and {@link #LOCATION_MODE}
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005923 */
Tom O'Neill1f48b782013-08-19 18:14:56 -07005924 @Deprecated
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005925 public static final void setLocationProviderEnabled(ContentResolver cr,
5926 String provider, boolean enabled) {
Victoria Leaseb711d572012-10-02 13:14:11 -07005927 setLocationProviderEnabledForUser(cr, provider, enabled, UserHandle.myUserId());
5928 }
5929
5930 /**
5931 * Thread-safe method for enabling or disabling a single location provider.
Tom O'Neilla324ac72013-08-26 14:40:23 -07005932 *
Victoria Leaseb711d572012-10-02 13:14:11 -07005933 * @param cr the content resolver to use
5934 * @param provider the location provider to enable or disable
5935 * @param enabled true if the provider should be enabled
5936 * @param userId the userId for which to enable/disable providers
Tom O'Neilla324ac72013-08-26 14:40:23 -07005937 * @return true if the value was set, false on database errors
5938 * @deprecated use {@link #putIntForUser(ContentResolver, String, int, int)} and
5939 * {@link #LOCATION_MODE}
Victoria Leaseb711d572012-10-02 13:14:11 -07005940 * @hide
5941 */
Tom O'Neill1f48b782013-08-19 18:14:56 -07005942 @Deprecated
Tom O'Neilla324ac72013-08-26 14:40:23 -07005943 public static final boolean setLocationProviderEnabledForUser(ContentResolver cr,
Victoria Leaseb711d572012-10-02 13:14:11 -07005944 String provider, boolean enabled, int userId) {
David Christie3f7b6522013-08-06 19:19:08 -07005945 synchronized (mLocationSettingsLock) {
5946 // to ensure thread safety, we write the provider name with a '+' or '-'
5947 // and let the SettingsProvider handle it rather than reading and modifying
5948 // the list of enabled providers.
5949 if (enabled) {
5950 provider = "+" + provider;
5951 } else {
5952 provider = "-" + provider;
5953 }
Tom O'Neilla324ac72013-08-26 14:40:23 -07005954 return putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider,
David Christie3f7b6522013-08-06 19:19:08 -07005955 userId);
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005956 }
Mike Lockwoodbd2a7122009-04-02 23:41:33 -07005957 }
Tom O'Neill1f48b782013-08-19 18:14:56 -07005958
5959 /**
Lifu Tangd1fa1d62015-11-25 21:42:44 -08005960 * Saves the current location mode into {@link #LOCATION_PREVIOUS_MODE}.
5961 */
5962 private static final boolean saveLocationModeForUser(ContentResolver cr, int userId) {
5963 final int mode = getLocationModeForUser(cr, userId);
5964 return putIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE, mode, userId);
5965 }
5966
5967 /**
5968 * Restores the current location mode from {@link #LOCATION_PREVIOUS_MODE}.
5969 */
5970 private static final boolean restoreLocationModeForUser(ContentResolver cr, int userId) {
5971 int mode = getIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE,
5972 LOCATION_MODE_HIGH_ACCURACY, userId);
5973 // Make sure that the previous mode is never "off". Otherwise the user won't be able to
5974 // turn on location any longer.
5975 if (mode == LOCATION_MODE_OFF) {
5976 mode = LOCATION_MODE_HIGH_ACCURACY;
5977 }
5978 return setLocationModeForUser(cr, mode, userId);
5979 }
5980
5981 /**
Tom O'Neill1f48b782013-08-19 18:14:56 -07005982 * Thread-safe method for setting the location mode to one of
5983 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
5984 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
5985 *
Tom O'Neill1f48b782013-08-19 18:14:56 -07005986 * @param cr the content resolver to use
5987 * @param mode such as {@link #LOCATION_MODE_HIGH_ACCURACY}
5988 * @param userId the userId for which to change mode
Tom O'Neilla324ac72013-08-26 14:40:23 -07005989 * @return true if the value was set, false on database errors
Tom O'Neill1f48b782013-08-19 18:14:56 -07005990 *
5991 * @throws IllegalArgumentException if mode is not one of the supported values
5992 */
Tom O'Neill7f6f4572013-08-27 10:53:15 -07005993 private static final boolean setLocationModeForUser(ContentResolver cr, int mode,
5994 int userId) {
Tom O'Neill1f48b782013-08-19 18:14:56 -07005995 synchronized (mLocationSettingsLock) {
5996 boolean gps = false;
5997 boolean network = false;
5998 switch (mode) {
Lifu Tangd1fa1d62015-11-25 21:42:44 -08005999 case LOCATION_MODE_PREVIOUS:
6000 // Retrieve the actual mode and set to that mode.
6001 return restoreLocationModeForUser(cr, userId);
Tom O'Neill1f48b782013-08-19 18:14:56 -07006002 case LOCATION_MODE_OFF:
Lifu Tangd1fa1d62015-11-25 21:42:44 -08006003 saveLocationModeForUser(cr, userId);
Tom O'Neill1f48b782013-08-19 18:14:56 -07006004 break;
6005 case LOCATION_MODE_SENSORS_ONLY:
6006 gps = true;
6007 break;
6008 case LOCATION_MODE_BATTERY_SAVING:
6009 network = true;
6010 break;
6011 case LOCATION_MODE_HIGH_ACCURACY:
6012 gps = true;
6013 network = true;
6014 break;
6015 default:
6016 throw new IllegalArgumentException("Invalid location mode: " + mode);
6017 }
Tom O'Neill7731a992014-10-09 11:30:49 -07006018 // Note it's important that we set the NLP mode first. The Google implementation
6019 // of NLP clears its NLP consent setting any time it receives a
6020 // LocationManager.PROVIDERS_CHANGED_ACTION broadcast and NLP is disabled. Also,
6021 // it shows an NLP consent dialog any time it receives the broadcast, NLP is
6022 // enabled, and the NLP consent is not set. If 1) we were to enable GPS first,
6023 // 2) a setup wizard has its own NLP consent UI that sets the NLP consent setting,
6024 // and 3) the receiver happened to complete before we enabled NLP, then the Google
6025 // NLP would detect the attempt to enable NLP and show a redundant NLP consent
6026 // dialog. Then the people who wrote the setup wizard would be sad.
Tom O'Neilla324ac72013-08-26 14:40:23 -07006027 boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser(
Tom O'Neill1f48b782013-08-19 18:14:56 -07006028 cr, LocationManager.NETWORK_PROVIDER, network, userId);
Tom O'Neill7731a992014-10-09 11:30:49 -07006029 boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser(
6030 cr, LocationManager.GPS_PROVIDER, gps, userId);
Tom O'Neilla324ac72013-08-26 14:40:23 -07006031 return gpsSuccess && nlpSuccess;
Tom O'Neill1f48b782013-08-19 18:14:56 -07006032 }
6033 }
6034
6035 /**
Tom O'Neill1f48b782013-08-19 18:14:56 -07006036 * Thread-safe method for reading the location mode, returns one of
6037 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY},
6038 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}.
6039 *
6040 * @param cr the content resolver to use
6041 * @param userId the userId for which to read the mode
6042 * @return the location mode
6043 */
Tom O'Neill7f6f4572013-08-27 10:53:15 -07006044 private static final int getLocationModeForUser(ContentResolver cr, int userId) {
Tom O'Neill1f48b782013-08-19 18:14:56 -07006045 synchronized (mLocationSettingsLock) {
6046 boolean gpsEnabled = Settings.Secure.isLocationProviderEnabledForUser(
6047 cr, LocationManager.GPS_PROVIDER, userId);
6048 boolean networkEnabled = Settings.Secure.isLocationProviderEnabledForUser(
6049 cr, LocationManager.NETWORK_PROVIDER, userId);
6050 if (gpsEnabled && networkEnabled) {
6051 return LOCATION_MODE_HIGH_ACCURACY;
6052 } else if (gpsEnabled) {
6053 return LOCATION_MODE_SENSORS_ONLY;
6054 } else if (networkEnabled) {
6055 return LOCATION_MODE_BATTERY_SAVING;
6056 } else {
6057 return LOCATION_MODE_OFF;
6058 }
6059 }
6060 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08006061 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07006062
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08006063 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006064 * Global system settings, containing preferences that always apply identically
6065 * to all defined users. Applications can read these but are not allowed to write;
6066 * like the "Secure" settings, these are for preferences that the user must
6067 * explicitly modify through the system UI or specialized APIs for those values.
6068 */
6069 public static final class Global extends NameValueTable {
6070 public static final String SYS_PROP_SETTING_VERSION = "sys.settings_global_version";
6071
6072 /**
6073 * The content:// style URL for global secure settings items. Not public.
6074 */
6075 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global");
6076
6077 /**
Amith Yamasani23a0f052014-07-25 12:26:53 -07006078 * Whether users are allowed to add more users or guest from lockscreen.
6079 * <p>
6080 * Type: int
6081 * @hide
6082 */
6083 public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked";
6084
6085 /**
Svetoslav Ganov7befb7d2012-09-27 16:49:23 -07006086 * Setting whether the global gesture for enabling accessibility is enabled.
6087 * If this gesture is enabled the user will be able to perfrom it to enable
6088 * the accessibility state without visiting the settings app.
6089 * @hide
6090 */
6091 public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED =
6092 "enable_accessibility_global_gesture_enabled";
6093
6094 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006095 * Whether Airplane Mode is on.
6096 */
6097 public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
6098
6099 /**
Bryce Lee584a4452014-10-21 15:55:55 -07006100 * Whether Theater Mode is on.
6101 * {@hide}
6102 */
Bryce Leecdfebd62015-02-02 08:19:11 -08006103 @SystemApi
Bryce Lee584a4452014-10-21 15:55:55 -07006104 public static final String THEATER_MODE_ON = "theater_mode_on";
6105
6106 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006107 * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio.
6108 */
6109 public static final String RADIO_BLUETOOTH = "bluetooth";
6110
6111 /**
6112 * Constant for use in AIRPLANE_MODE_RADIOS to specify Wi-Fi radio.
6113 */
6114 public static final String RADIO_WIFI = "wifi";
6115
6116 /**
6117 * {@hide}
6118 */
6119 public static final String RADIO_WIMAX = "wimax";
6120 /**
6121 * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio.
6122 */
6123 public static final String RADIO_CELL = "cell";
6124
6125 /**
6126 * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio.
6127 */
6128 public static final String RADIO_NFC = "nfc";
6129
6130 /**
6131 * A comma separated list of radios that need to be disabled when airplane mode
6132 * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are
6133 * included in the comma separated list.
6134 */
6135 public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
6136
6137 /**
6138 * A comma separated list of radios that should to be disabled when airplane mode
6139 * is on, but can be manually reenabled by the user. For example, if RADIO_WIFI is
6140 * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi
6141 * will be turned off when entering airplane mode, but the user will be able to reenable
6142 * Wifi in the Settings app.
6143 *
6144 * {@hide}
6145 */
6146 public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
6147
6148 /**
Bryce Leeec85f342015-12-16 13:32:28 -08006149 * A Long representing a bitmap of profiles that should be disabled when bluetooth starts.
6150 * See {@link android.bluetooth.BluetoothProfile}.
6151 * {@hide}
6152 */
6153 public static final String BLUETOOTH_DISABLED_PROFILES = "bluetooth_disabled_profiles";
6154
6155 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006156 * The policy for deciding when Wi-Fi should go to sleep (which will in
6157 * turn switch to using the mobile data as an Internet connection).
6158 * <p>
6159 * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
6160 * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
6161 * {@link #WIFI_SLEEP_POLICY_NEVER}.
6162 */
6163 public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
6164
6165 /**
6166 * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
6167 * policy, which is to sleep shortly after the turning off
6168 * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
6169 */
6170 public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
6171
6172 /**
6173 * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
6174 * the device is on battery, and never go to sleep when the device is
6175 * plugged in.
6176 */
6177 public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
6178
6179 /**
6180 * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
6181 */
6182 public static final int WIFI_SLEEP_POLICY_NEVER = 2;
6183
6184 /**
6185 * Value to specify if the user prefers the date, time and time zone
6186 * to be automatically fetched from the network (NITZ). 1=yes, 0=no
6187 */
6188 public static final String AUTO_TIME = "auto_time";
6189
6190 /**
6191 * Value to specify if the user prefers the time zone
6192 * to be automatically fetched from the network (NITZ). 1=yes, 0=no
6193 */
6194 public static final String AUTO_TIME_ZONE = "auto_time_zone";
6195
6196 /**
6197 * URI for the car dock "in" event sound.
6198 * @hide
6199 */
6200 public static final String CAR_DOCK_SOUND = "car_dock_sound";
6201
6202 /**
6203 * URI for the car dock "out" event sound.
6204 * @hide
6205 */
6206 public static final String CAR_UNDOCK_SOUND = "car_undock_sound";
6207
6208 /**
6209 * URI for the desk dock "in" event sound.
6210 * @hide
6211 */
6212 public static final String DESK_DOCK_SOUND = "desk_dock_sound";
6213
6214 /**
6215 * URI for the desk dock "out" event sound.
6216 * @hide
6217 */
6218 public static final String DESK_UNDOCK_SOUND = "desk_undock_sound";
6219
6220 /**
6221 * Whether to play a sound for dock events.
6222 * @hide
6223 */
6224 public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled";
6225
6226 /**
6227 * URI for the "device locked" (keyguard shown) sound.
6228 * @hide
6229 */
6230 public static final String LOCK_SOUND = "lock_sound";
6231
6232 /**
6233 * URI for the "device unlocked" sound.
6234 * @hide
6235 */
6236 public static final String UNLOCK_SOUND = "unlock_sound";
6237
6238 /**
Adrian Roos49e057d2014-08-13 17:14:51 +02006239 * URI for the "device is trusted" sound, which is played when the device enters the trusted
6240 * state without unlocking.
6241 * @hide
6242 */
6243 public static final String TRUSTED_SOUND = "trusted_sound";
6244
6245 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006246 * URI for the low battery sound file.
6247 * @hide
6248 */
6249 public static final String LOW_BATTERY_SOUND = "low_battery_sound";
6250
6251 /**
6252 * Whether to play a sound for low-battery alerts.
6253 * @hide
6254 */
6255 public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled";
6256
6257 /**
Jeff Brown84e27562012-12-07 13:56:34 -08006258 * URI for the "wireless charging started" sound.
6259 * @hide
6260 */
6261 public static final String WIRELESS_CHARGING_STARTED_SOUND =
6262 "wireless_charging_started_sound";
6263
6264 /**
John Spurlock51a871d2015-05-06 17:41:30 -04006265 * Whether to play a sound for charging events.
6266 * @hide
6267 */
6268 public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled";
6269
6270 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006271 * Whether we keep the device on while the device is plugged in.
6272 * Supported values are:
6273 * <ul>
6274 * <li>{@code 0} to never stay on while plugged in</li>
6275 * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li>
6276 * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li>
6277 * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li>
6278 * </ul>
6279 * These values can be OR-ed together.
6280 */
6281 public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
6282
6283 /**
Christopher Tate58f41ec2013-01-11 15:40:36 -08006284 * When the user has enable the option to have a "bug report" command
6285 * in the power menu.
6286 * @hide
6287 */
6288 public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu";
6289
6290 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006291 * Whether ADB is enabled.
6292 */
6293 public static final String ADB_ENABLED = "adb_enabled";
6294
6295 /**
Jon Miranda836c0a82014-08-11 12:32:26 -07006296 * Whether Views are allowed to save their attribute data.
6297 * @hide
6298 */
6299 public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
6300
6301 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006302 * Whether assisted GPS should be enabled or not.
6303 * @hide
6304 */
6305 public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled";
6306
6307 /**
6308 * Whether bluetooth is enabled/disabled
6309 * 0=disabled. 1=enabled.
6310 */
6311 public static final String BLUETOOTH_ON = "bluetooth_on";
6312
6313 /**
6314 * CDMA Cell Broadcast SMS
6315 * 0 = CDMA Cell Broadcast SMS disabled
6316 * 1 = CDMA Cell Broadcast SMS enabled
6317 * @hide
6318 */
6319 public static final String CDMA_CELL_BROADCAST_SMS =
6320 "cdma_cell_broadcast_sms";
6321
6322 /**
6323 * The CDMA roaming mode 0 = Home Networks, CDMA default
6324 * 1 = Roaming on Affiliated networks
6325 * 2 = Roaming on any networks
6326 * @hide
6327 */
6328 public static final String CDMA_ROAMING_MODE = "roaming_settings";
6329
6330 /**
6331 * The CDMA subscription mode 0 = RUIM/SIM (default)
6332 * 1 = NV
6333 * @hide
6334 */
6335 public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
6336
6337 /** Inactivity timeout to track mobile data activity.
6338 *
6339 * If set to a positive integer, it indicates the inactivity timeout value in seconds to
6340 * infer the data activity of mobile network. After a period of no activity on mobile
6341 * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE}
6342 * intent is fired to indicate a transition of network status from "active" to "idle". Any
6343 * subsequent activity on mobile networks triggers the firing of {@code
6344 * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active".
6345 *
6346 * Network activity refers to transmitting or receiving data on the network interfaces.
6347 *
6348 * Tracking is disabled if set to zero or negative value.
6349 *
6350 * @hide
6351 */
6352 public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile";
6353
6354 /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE}
6355 * but for Wifi network.
6356 * @hide
6357 */
6358 public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi";
6359
6360 /**
6361 * Whether or not data roaming is enabled. (0 = false, 1 = true)
6362 */
6363 public static final String DATA_ROAMING = "data_roaming";
6364
6365 /**
Wink Saville75c1e692013-03-20 17:06:50 -07006366 * The value passed to a Mobile DataConnection via bringUp which defines the
6367 * number of retries to preform when setting up the initial connection. The default
6368 * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1.
6369 * @hide
6370 */
6371 public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry";
6372
6373 /**
Todd Kennedyf39ca8f2015-08-07 14:15:07 -07006374 * Whether any package can be on external storage. When this is true, any
6375 * package, regardless of manifest values, is a candidate for installing
6376 * or moving onto external storage. (0 = false, 1 = true)
6377 * @hide
6378 */
6379 public static final String FORCE_ALLOW_ON_EXTERNAL = "force_allow_on_external";
6380
Jorim Jaggi8ccdf3a2015-10-22 12:50:31 +02006381 /**
6382 * Whether any activity can be resized. When this is true, any
6383 * activity, regardless of manifest values, can be resized for multi-window.
6384 * (0 = false, 1 = true)
6385 * @hide
6386 */
6387 public static final String DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES
6388 = "force_resizable_activities";
6389
Todd Kennedyf39ca8f2015-08-07 14:15:07 -07006390 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006391 * Whether user has enabled development settings.
6392 */
6393 public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
6394
6395 /**
Amith Yamasanicb15d662015-11-10 11:11:15 -08006396 * Whether the device has been provisioned (0 = false, 1 = true).
6397 * <p>On a multiuser device with a separate system user, the screen may be locked
6398 * as soon as this is set to true and further activities cannot be launched on the
6399 * system user unless they are marked to show over keyguard.
Christopher Tate06efb532012-08-24 15:29:27 -07006400 */
6401 public static final String DEVICE_PROVISIONED = "device_provisioned";
6402
6403 /**
6404 * The saved value for WindowManagerService.setForcedDisplayDensity().
6405 * One integer in dpi. If unset, then use the real display density.
6406 * @hide
6407 */
6408 public static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
6409
6410 /**
6411 * The saved value for WindowManagerService.setForcedDisplaySize().
6412 * Two integers separated by a comma. If unset, then use the real display size.
6413 * @hide
6414 */
6415 public static final String DISPLAY_SIZE_FORCED = "display_size_forced";
6416
6417 /**
Jeff Brownd46747a2015-04-15 19:02:36 -07006418 * The saved value for WindowManagerService.setForcedDisplayScalingMode().
6419 * 0 or unset if scaling is automatic, 1 if scaling is disabled.
6420 * @hide
6421 */
6422 public static final String DISPLAY_SCALING_FORCE = "display_scaling_force";
6423
6424 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006425 * The maximum size, in bytes, of a download that the download manager will transfer over
6426 * a non-wifi connection.
6427 * @hide
6428 */
6429 public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE =
6430 "download_manager_max_bytes_over_mobile";
6431
6432 /**
6433 * The recommended maximum size, in bytes, of a download that the download manager should
6434 * transfer over a non-wifi connection. Over this size, the use will be warned, but will
6435 * have the option to start the download over the mobile connection anyway.
6436 * @hide
6437 */
6438 public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE =
6439 "download_manager_recommended_max_bytes_over_mobile";
6440
6441 /**
Christopher Tateaa036a22014-05-19 16:33:27 -07006442 * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
Christopher Tate06efb532012-08-24 15:29:27 -07006443 */
Christopher Tateaa036a22014-05-19 16:33:27 -07006444 @Deprecated
6445 public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
Christopher Tate06efb532012-08-24 15:29:27 -07006446
6447 /**
Jinsuk Kimb3d91772014-07-10 12:48:54 +09006448 * Whether HDMI control shall be enabled. If disabled, no CEC/MHL command will be
6449 * sent or processed. (0 = false, 1 = true)
6450 * @hide
6451 */
6452 public static final String HDMI_CONTROL_ENABLED = "hdmi_control_enabled";
6453
6454 /**
6455 * Whether HDMI system audio is enabled. If enabled, TV internal speaker is muted,
6456 * and the output is redirected to AV Receiver connected via
6457 * {@Global#HDMI_SYSTEM_AUDIO_OUTPUT}.
6458 * @hide
6459 */
6460 public static final String HDMI_SYSTEM_AUDIO_ENABLED = "hdmi_system_audio_enabled";
6461
6462 /**
Jinsuk Kimb3d91772014-07-10 12:48:54 +09006463 * Whether TV will automatically turn on upon reception of the CEC command
6464 * &lt;Text View On&gt; or &lt;Image View On&gt;. (0 = false, 1 = true)
6465 * @hide
6466 */
6467 public static final String HDMI_CONTROL_AUTO_WAKEUP_ENABLED =
6468 "hdmi_control_auto_wakeup_enabled";
6469
6470 /**
6471 * Whether TV will also turn off other CEC devices when it goes to standby mode.
6472 * (0 = false, 1 = true)
6473 * @hide
6474 */
6475 public static final String HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED =
6476 "hdmi_control_auto_device_off_enabled";
6477
6478 /**
Lorenzo Colitti06d7e532015-03-16 23:46:24 +09006479 * Whether to use the DHCP client from Lollipop and earlier instead of the newer Android DHCP
6480 * client.
6481 * (0 = false, 1 = true)
6482 * @hide
6483 */
6484 public static final String LEGACY_DHCP_CLIENT = "legacy_dhcp_client";
6485
6486 /**
Jinsuk Kimb3d91772014-07-10 12:48:54 +09006487 * Whether TV will switch to MHL port when a mobile device is plugged in.
6488 * (0 = false, 1 = true)
6489 * @hide
6490 */
6491 public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled";
6492
6493 /**
6494 * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true)
6495 * @hide
6496 */
6497 public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled";
6498
6499 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006500 * Whether mobile data connections are allowed by the user. See
6501 * ConnectivityManager for more info.
6502 * @hide
6503 */
6504 public static final String MOBILE_DATA = "mobile_data";
6505
Erik Klineda4bfa82015-04-30 12:58:40 +09006506 /**
6507 * Whether the mobile data connection should remain active even when higher
6508 * priority networks like WiFi are active, to help make network switching faster.
6509 *
6510 * See ConnectivityService for more info.
6511 *
6512 * (0 = disabled, 1 = enabled)
6513 * @hide
6514 */
6515 public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
6516
Christopher Tate06efb532012-08-24 15:29:27 -07006517 /** {@hide} */
6518 public static final String NETSTATS_ENABLED = "netstats_enabled";
6519 /** {@hide} */
6520 public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval";
6521 /** {@hide} */
6522 public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age";
6523 /** {@hide} */
6524 public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes";
6525 /** {@hide} */
6526 public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled";
Christopher Tate06efb532012-08-24 15:29:27 -07006527
6528 /** {@hide} */
6529 public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration";
6530 /** {@hide} */
6531 public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes";
6532 /** {@hide} */
6533 public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age";
6534 /** {@hide} */
6535 public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age";
6536
6537 /** {@hide} */
6538 public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration";
6539 /** {@hide} */
6540 public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes";
6541 /** {@hide} */
6542 public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age";
6543 /** {@hide} */
6544 public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age";
6545
6546 /** {@hide} */
6547 public static final String NETSTATS_UID_TAG_BUCKET_DURATION = "netstats_uid_tag_bucket_duration";
6548 /** {@hide} */
6549 public static final String NETSTATS_UID_TAG_PERSIST_BYTES = "netstats_uid_tag_persist_bytes";
6550 /** {@hide} */
6551 public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age";
6552 /** {@hide} */
6553 public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age";
6554
6555 /**
6556 * User preference for which network(s) should be used. Only the
6557 * connectivity service should touch this.
6558 */
6559 public static final String NETWORK_PREFERENCE = "network_preference";
6560
6561 /**
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -07006562 * Which package name to use for network scoring. If null, or if the package is not a valid
6563 * scorer app, external network scores will neither be requested nor accepted.
6564 * @hide
6565 */
6566 public static final String NETWORK_SCORER_APP = "network_scorer_app";
6567
6568 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006569 * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment
6570 * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
6571 * exceeded.
6572 * @hide
6573 */
6574 public static final String NITZ_UPDATE_DIFF = "nitz_update_diff";
6575
6576 /**
6577 * The length of time in milli-seconds that automatic small adjustments to
6578 * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded.
6579 * @hide
6580 */
6581 public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing";
6582
6583 /** Preferred NTP server. {@hide} */
6584 public static final String NTP_SERVER = "ntp_server";
6585 /** Timeout in milliseconds to wait for NTP server. {@hide} */
6586 public static final String NTP_TIMEOUT = "ntp_timeout";
6587
Jeff Sharkeye8a4b662015-06-27 15:43:45 -07006588 /** {@hide} */
6589 public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval";
6590
Christopher Tate06efb532012-08-24 15:29:27 -07006591 /**
rich cannings4d8fc792012-09-07 14:43:43 -07006592 * Whether the package manager should send package verification broadcasts for verifiers to
6593 * review apps prior to installation.
6594 * 1 = request apps to be verified prior to installation, if a verifier exists.
6595 * 0 = do not verify apps before installation
rich cannings4e5753f2012-09-19 16:03:56 -07006596 * @hide
rich cannings4d8fc792012-09-07 14:43:43 -07006597 */
6598 public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable";
6599
6600 /** Timeout for package verification.
rich cannings4e5753f2012-09-19 16:03:56 -07006601 * @hide */
rich cannings4d8fc792012-09-07 14:43:43 -07006602 public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
6603
6604 /** Default response code for package verification.
rich cannings4e5753f2012-09-19 16:03:56 -07006605 * @hide */
rich cannings4d8fc792012-09-07 14:43:43 -07006606 public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response";
6607
rich cannings4e5753f2012-09-19 16:03:56 -07006608 /**
6609 * Show package verification setting in the Settings app.
rich canningse6686b32012-09-16 14:02:20 -07006610 * 1 = show (default)
6611 * 0 = hide
rich cannings4e5753f2012-09-19 16:03:56 -07006612 * @hide
rich canningse6686b32012-09-16 14:02:20 -07006613 */
6614 public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible";
6615
rich cannings4d8fc792012-09-07 14:43:43 -07006616 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08006617 * Run package verification on apps installed through ADB/ADT/USB
rich cannings4e5753f2012-09-19 16:03:56 -07006618 * 1 = perform package verification on ADB installs (default)
6619 * 0 = bypass package verification on ADB installs
6620 * @hide
6621 */
6622 public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs";
6623
6624 /**
Christopher Tate7265abe2014-11-21 13:54:45 -08006625 * Time since last fstrim (milliseconds) after which we force one to happen
6626 * during device startup. If unset, the default is 3 days.
6627 * @hide
6628 */
6629 public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval";
6630
6631 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006632 * The interval in milliseconds at which to check packet counts on the
6633 * mobile data interface when screen is on, to detect possible data
6634 * connection problems.
6635 * @hide
6636 */
6637 public static final String PDP_WATCHDOG_POLL_INTERVAL_MS =
6638 "pdp_watchdog_poll_interval_ms";
6639
6640 /**
6641 * The interval in milliseconds at which to check packet counts on the
6642 * mobile data interface when screen is off, to detect possible data
6643 * connection problems.
6644 * @hide
6645 */
6646 public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS =
6647 "pdp_watchdog_long_poll_interval_ms";
6648
6649 /**
6650 * The interval in milliseconds at which to check packet counts on the
6651 * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT}
6652 * outgoing packets has been reached without incoming packets.
6653 * @hide
6654 */
6655 public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS =
6656 "pdp_watchdog_error_poll_interval_ms";
6657
6658 /**
6659 * The number of outgoing packets sent without seeing an incoming packet
6660 * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT}
6661 * device is logged to the event log
6662 * @hide
6663 */
6664 public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT =
6665 "pdp_watchdog_trigger_packet_count";
6666
6667 /**
6668 * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS})
6669 * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before
6670 * attempting data connection recovery.
6671 * @hide
6672 */
6673 public static final String PDP_WATCHDOG_ERROR_POLL_COUNT =
6674 "pdp_watchdog_error_poll_count";
6675
6676 /**
6677 * The number of failed PDP reset attempts before moving to something more
6678 * drastic: re-registering to the network.
6679 * @hide
6680 */
6681 public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT =
6682 "pdp_watchdog_max_pdp_reset_fail_count";
6683
6684 /**
6685 * A positive value indicates how often the SamplingProfiler
6686 * should take snapshots. Zero value means SamplingProfiler
6687 * is disabled.
6688 *
6689 * @hide
6690 */
6691 public static final String SAMPLING_PROFILER_MS = "sampling_profiler_ms";
6692
6693 /**
6694 * URL to open browser on to allow user to manage a prepay account
6695 * @hide
6696 */
6697 public static final String SETUP_PREPAID_DATA_SERVICE_URL =
6698 "setup_prepaid_data_service_url";
6699
6700 /**
6701 * URL to attempt a GET on to see if this is a prepay device
6702 * @hide
6703 */
6704 public static final String SETUP_PREPAID_DETECTION_TARGET_URL =
6705 "setup_prepaid_detection_target_url";
6706
6707 /**
6708 * Host to check for a redirect to after an attempt to GET
6709 * SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there,
6710 * this is a prepaid device with zero balance.)
6711 * @hide
6712 */
6713 public static final String SETUP_PREPAID_DETECTION_REDIR_HOST =
6714 "setup_prepaid_detection_redir_host";
6715
6716 /**
Jake Hamby76a61422012-09-06 17:40:21 -07006717 * The interval in milliseconds at which to check the number of SMS sent out without asking
6718 * for use permit, to limit the un-authorized SMS usage.
6719 *
6720 * @hide
6721 */
6722 public static final String SMS_OUTGOING_CHECK_INTERVAL_MS =
6723 "sms_outgoing_check_interval_ms";
6724
6725 /**
6726 * The number of outgoing SMS sent without asking for user permit (of {@link
6727 * #SMS_OUTGOING_CHECK_INTERVAL_MS}
6728 *
6729 * @hide
6730 */
6731 public static final String SMS_OUTGOING_CHECK_MAX_COUNT =
6732 "sms_outgoing_check_max_count";
6733
6734 /**
6735 * Used to disable SMS short code confirmation - defaults to true.
Robert Greenwalt026efcc2012-09-24 10:03:21 -07006736 * True indcates we will do the check, etc. Set to false to disable.
Jake Hamby76a61422012-09-06 17:40:21 -07006737 * @see com.android.internal.telephony.SmsUsageMonitor
6738 * @hide
6739 */
6740 public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation";
6741
Robert Greenwalt026efcc2012-09-24 10:03:21 -07006742 /**
6743 * Used to select which country we use to determine premium sms codes.
6744 * One of com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_SIM,
6745 * com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_NETWORK,
6746 * or com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_BOTH.
6747 * @hide
6748 */
6749 public static final String SMS_SHORT_CODE_RULE = "sms_short_code_rule";
6750
Jake Hamby76a61422012-09-06 17:40:21 -07006751 /**
JP Abgrall32d1ac4d2014-02-21 12:05:20 -08006752 * Used to select TCP's default initial receiver window size in segments - defaults to a build config value
6753 * @hide
6754 */
6755 public static final String TCP_DEFAULT_INIT_RWND = "tcp_default_init_rwnd";
6756
6757 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006758 * Used to disable Tethering on a device - defaults to true
6759 * @hide
6760 */
6761 public static final String TETHER_SUPPORTED = "tether_supported";
6762
6763 /**
6764 * Used to require DUN APN on the device or not - defaults to a build config value
6765 * which defaults to false
6766 * @hide
6767 */
6768 public static final String TETHER_DUN_REQUIRED = "tether_dun_required";
6769
6770 /**
6771 * Used to hold a gservices-provisioned apn value for DUN. If set, or the
6772 * corresponding build config values are set it will override the APN DB
6773 * values.
6774 * Consists of a comma seperated list of strings:
6775 * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
6776 * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN"
6777 * @hide
6778 */
6779 public static final String TETHER_DUN_APN = "tether_dun_apn";
6780
6781 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006782 * USB Mass Storage Enabled
6783 */
6784 public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
6785
6786 /**
6787 * If this setting is set (to anything), then all references
6788 * to Gmail on the device must change to Google Mail.
6789 */
6790 public static final String USE_GOOGLE_MAIL = "use_google_mail";
6791
Hui Shu22671772014-10-01 21:41:07 +00006792 /**
6793 * Webview Data reduction proxy key.
6794 * @hide
6795 */
6796 public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY =
6797 "webview_data_reduction_proxy_key";
6798
Christopher Tate06efb532012-08-24 15:29:27 -07006799 /**
Jeff Brown89d55462012-09-19 11:33:42 -07006800 * Whether Wifi display is enabled/disabled
6801 * 0=disabled. 1=enabled.
6802 * @hide
6803 */
6804 public static final String WIFI_DISPLAY_ON = "wifi_display_on";
6805
6806 /**
Chong Zhang1f3ecaa2013-05-03 15:55:36 -07006807 * Whether Wifi display certification mode is enabled/disabled
6808 * 0=disabled. 1=enabled.
6809 * @hide
6810 */
6811 public static final String WIFI_DISPLAY_CERTIFICATION_ON =
6812 "wifi_display_certification_on";
6813
6814 /**
Chong Zhange38af812013-08-29 17:25:17 -07006815 * WPS Configuration method used by Wifi display, this setting only
6816 * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled).
6817 *
6818 * Possible values are:
6819 *
6820 * WpsInfo.INVALID: use default WPS method chosen by framework
6821 * WpsInfo.PBC : use Push button
6822 * WpsInfo.KEYPAD : use Keypad
6823 * WpsInfo.DISPLAY: use Display
6824 * @hide
6825 */
6826 public static final String WIFI_DISPLAY_WPS_CONFIG =
6827 "wifi_display_wps_config";
6828
6829 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006830 * Whether to notify the user of open networks.
6831 * <p>
6832 * If not connected and the scan results have an open network, we will
6833 * put this notification up. If we attempt to connect to a network or
6834 * the open network(s) disappear, we remove the notification. When we
6835 * show the notification, we will not show it again for
6836 * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time.
6837 */
6838 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
6839 "wifi_networks_available_notification_on";
6840 /**
6841 * {@hide}
6842 */
6843 public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON =
6844 "wimax_networks_available_notification_on";
6845
6846 /**
6847 * Delay (in seconds) before repeating the Wi-Fi networks available notification.
6848 * Connecting to a network will reset the timer.
6849 */
6850 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
6851 "wifi_networks_available_repeat_delay";
6852
6853 /**
Robert Greenwalt3ea0c992013-10-03 21:13:49 +00006854 * 802.11 country code in ISO 3166 format
6855 * @hide
6856 */
6857 public static final String WIFI_COUNTRY_CODE = "wifi_country_code";
6858
6859 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006860 * The interval in milliseconds to issue wake up scans when wifi needs
6861 * to connect. This is necessary to connect to an access point when
6862 * device is on the move and the screen is off.
6863 * @hide
6864 */
6865 public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS =
6866 "wifi_framework_scan_interval_ms";
6867
6868 /**
6869 * The interval in milliseconds after which Wi-Fi is considered idle.
6870 * When idle, it is possible for the device to be switched from Wi-Fi to
6871 * the mobile data network.
6872 * @hide
6873 */
6874 public static final String WIFI_IDLE_MS = "wifi_idle_ms";
6875
6876 /**
6877 * When the number of open networks exceeds this number, the
6878 * least-recently-used excess networks will be removed.
6879 */
6880 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
6881
6882 /**
6883 * Whether the Wi-Fi should be on. Only the Wi-Fi service should touch this.
6884 */
6885 public static final String WIFI_ON = "wifi_on";
6886
6887 /**
Irfan Sheriff11aefad2013-03-06 07:57:41 -08006888 * Setting to allow scans to be enabled even wifi is turned off for connectivity.
6889 * @hide
6890 */
6891 public static final String WIFI_SCAN_ALWAYS_AVAILABLE =
6892 "wifi_scan_always_enabled";
6893
6894 /**
Wei Wangd91f1932015-03-19 15:09:56 -07006895 * Settings to allow BLE scans to be enabled even when Bluetooth is turned off for
6896 * connectivity.
6897 * @hide
6898 */
6899 public static final String BLE_SCAN_ALWAYS_AVAILABLE =
6900 "ble_scan_always_enabled";
6901
6902 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006903 * Used to save the Wifi_ON state prior to tethering.
6904 * This state will be checked to restore Wifi after
6905 * the user turns off tethering.
6906 *
6907 * @hide
6908 */
6909 public static final String WIFI_SAVED_STATE = "wifi_saved_state";
6910
6911 /**
6912 * The interval in milliseconds to scan as used by the wifi supplicant
6913 * @hide
6914 */
6915 public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS =
6916 "wifi_supplicant_scan_interval_ms";
6917
vandwalle7c3606c2014-03-31 19:12:07 -07006918 /**
6919 * whether frameworks handles wifi auto-join
6920 * @hide
6921 */
6922 public static final String WIFI_ENHANCED_AUTO_JOIN =
6923 "wifi_enhanced_auto_join";
6924
6925 /**
6926 * whether settings show RSSI
6927 * @hide
6928 */
6929 public static final String WIFI_NETWORK_SHOW_RSSI =
6930 "wifi_network_show_rssi";
6931
6932 /**
Irfan Sheriff3809f502012-09-17 16:04:57 -07006933 * The interval in milliseconds to scan at supplicant when p2p is connected
6934 * @hide
6935 */
6936 public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS =
6937 "wifi_scan_interval_p2p_connected_ms";
6938
6939 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006940 * Whether the Wi-Fi watchdog is enabled.
6941 */
6942 public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
6943
6944 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006945 * Setting to turn off poor network avoidance on Wi-Fi. Feature is enabled by default and
6946 * the setting needs to be set to 0 to disable it.
6947 * @hide
6948 */
6949 public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED =
6950 "wifi_watchdog_poor_network_test_enabled";
6951
6952 /**
6953 * Setting to turn on suspend optimizations at screen off on Wi-Fi. Enabled by default and
6954 * needs to be set to 0 to disable it.
6955 * @hide
6956 */
6957 public static final String WIFI_SUSPEND_OPTIMIZATIONS_ENABLED =
6958 "wifi_suspend_optimizations_enabled";
6959
6960 /**
6961 * The maximum number of times we will retry a connection to an access
6962 * point for which we have failed in acquiring an IP address from DHCP.
6963 * A value of N means that we will make N+1 connection attempts in all.
6964 */
6965 public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
6966
6967 /**
6968 * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile
6969 * data connectivity to be established after a disconnect from Wi-Fi.
6970 */
6971 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
6972 "wifi_mobile_data_transition_wakelock_timeout_ms";
6973
6974 /**
Zoltan Szatmary-Ban4045d242015-05-27 12:42:39 +01006975 * This setting controls whether WiFi configurations created by a Device Owner app
6976 * should be locked down (that is, be editable or removable only by the Device Owner App,
6977 * not even by Settings app).
6978 * This setting takes integer values. Non-zero values mean DO created configurations
6979 * are locked down. Value of zero means they are not. Default value in the absence of
6980 * actual value to this setting is 0.
6981 */
6982 public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN =
6983 "wifi_device_owner_configs_lockdown";
6984
6985 /**
Christopher Tate06efb532012-08-24 15:29:27 -07006986 * The operational wifi frequency band
6987 * Set to one of {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO},
6988 * {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ} or
6989 * {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ}
6990 *
6991 * @hide
6992 */
6993 public static final String WIFI_FREQUENCY_BAND = "wifi_frequency_band";
6994
6995 /**
6996 * The Wi-Fi peer-to-peer device name
6997 * @hide
6998 */
6999 public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
7000
7001 /**
Robert Greenwaltc12783a2013-05-16 12:48:20 -07007002 * The min time between wifi disable and wifi enable
7003 * @hide
7004 */
7005 public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay";
7006
7007 /**
Jeff Davidsona20ca67d2014-12-16 11:48:54 -08007008 * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect
7009 * from an ephemeral network if there is no BSSID for that network with a non-null score that
7010 * has been seen in this time period.
7011 *
7012 * If this is less than or equal to zero, we use a more conservative behavior and only check
7013 * for a non-null score from the currently connected or target BSSID.
7014 * @hide
7015 */
7016 public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS =
7017 "wifi_ephemeral_out_of_range_timeout_ms";
7018
7019 /**
Christopher Tatec868b642012-09-12 17:41:04 -07007020 * The number of milliseconds to delay when checking for data stalls during
7021 * non-aggressive detection. (screen is turned off.)
7022 * @hide
7023 */
7024 public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
7025 "data_stall_alarm_non_aggressive_delay_in_ms";
7026
7027 /**
7028 * The number of milliseconds to delay when checking for data stalls during
7029 * aggressive detection. (screen on or suspected data stall)
7030 * @hide
7031 */
7032 public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
7033 "data_stall_alarm_aggressive_delay_in_ms";
7034
7035 /**
Wink Savillece1e3792013-09-03 16:41:44 -07007036 * The number of milliseconds to allow the provisioning apn to remain active
7037 * @hide
7038 */
7039 public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS =
7040 "provisioning_apn_alarm_delay_in_ms";
7041
7042 /**
Christopher Tatec868b642012-09-12 17:41:04 -07007043 * The interval in milliseconds at which to check gprs registration
7044 * after the first registration mismatch of gprs and voice service,
7045 * to detect possible data network registration problems.
7046 *
7047 * @hide
7048 */
7049 public static final String GPRS_REGISTER_CHECK_PERIOD_MS =
7050 "gprs_register_check_period_ms";
7051
7052 /**
Christopher Tate06efb532012-08-24 15:29:27 -07007053 * Nonzero causes Log.wtf() to crash.
7054 * @hide
7055 */
7056 public static final String WTF_IS_FATAL = "wtf_is_fatal";
7057
Eric Laurentbc0fab1f2012-09-19 11:24:41 -07007058 /**
7059 * Ringer mode. This is used internally, changing this value will not
7060 * change the ringer mode. See AudioManager.
7061 */
7062 public static final String MODE_RINGER = "mode_ringer";
Christopher Tate06efb532012-08-24 15:29:27 -07007063
Jeff Brownd4935962012-09-25 13:27:20 -07007064 /**
7065 * Overlay display devices setting.
7066 * The associated value is a specially formatted string that describes the
7067 * size and density of simulated secondary display devices.
7068 * <p>
7069 * Format: {width}x{height}/{dpi};...
7070 * </p><p>
7071 * Example:
7072 * <ul>
7073 * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li>
7074 * <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first
7075 * at 1080p and the second at 720p.</li>
7076 * <li>If the value is empty, then no overlay display devices are created.</li>
7077 * </ul></p>
7078 *
7079 * @hide
7080 */
7081 public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
Christopher Tate06efb532012-08-24 15:29:27 -07007082
Jeff Sharkey625239a2012-09-26 22:03:49 -07007083 /**
7084 * Threshold values for the duration and level of a discharge cycle,
7085 * under which we log discharge cycle info.
7086 *
7087 * @hide
7088 */
7089 public static final String
7090 BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold";
7091
7092 /** @hide */
7093 public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold";
7094
7095 /**
7096 * Flag for allowing ActivityManagerService to send ACTION_APP_ERROR
7097 * intents on application crashes and ANRs. If this is disabled, the
7098 * crash/ANR dialog will never display the "Report" button.
7099 * <p>
7100 * Type: int (0 = disallow, 1 = allow)
7101 *
7102 * @hide
7103 */
7104 public static final String SEND_ACTION_APP_ERROR = "send_action_app_error";
7105
7106 /**
7107 * Maximum age of entries kept by {@link DropBoxManager}.
7108 *
7109 * @hide
7110 */
7111 public static final String DROPBOX_AGE_SECONDS = "dropbox_age_seconds";
7112
7113 /**
7114 * Maximum number of entry files which {@link DropBoxManager} will keep
7115 * around.
7116 *
7117 * @hide
7118 */
7119 public static final String DROPBOX_MAX_FILES = "dropbox_max_files";
7120
7121 /**
7122 * Maximum amount of disk space used by {@link DropBoxManager} no matter
7123 * what.
7124 *
7125 * @hide
7126 */
7127 public static final String DROPBOX_QUOTA_KB = "dropbox_quota_kb";
7128
7129 /**
7130 * Percent of free disk (excluding reserve) which {@link DropBoxManager}
7131 * will use.
7132 *
7133 * @hide
7134 */
7135 public static final String DROPBOX_QUOTA_PERCENT = "dropbox_quota_percent";
7136
7137 /**
7138 * Percent of total disk which {@link DropBoxManager} will never dip
7139 * into.
7140 *
7141 * @hide
7142 */
7143 public static final String DROPBOX_RESERVE_PERCENT = "dropbox_reserve_percent";
7144
7145 /**
7146 * Prefix for per-tag dropbox disable/enable settings.
7147 *
7148 * @hide
7149 */
7150 public static final String DROPBOX_TAG_PREFIX = "dropbox:";
7151
7152 /**
7153 * Lines of logcat to include with system crash/ANR/etc. reports, as a
7154 * prefix of the dropbox tag of the report type. For example,
7155 * "logcat_for_system_server_anr" controls the lines of logcat captured
7156 * with system server ANR reports. 0 to disable.
7157 *
7158 * @hide
7159 */
7160 public static final String ERROR_LOGCAT_PREFIX = "logcat_for_";
7161
7162 /**
7163 * The interval in minutes after which the amount of free storage left
7164 * on the device is logged to the event log
7165 *
7166 * @hide
7167 */
7168 public static final String SYS_FREE_STORAGE_LOG_INTERVAL = "sys_free_storage_log_interval";
7169
7170 /**
7171 * Threshold for the amount of change in disk free space required to
7172 * report the amount of free space. Used to prevent spamming the logs
7173 * when the disk free space isn't changing frequently.
7174 *
7175 * @hide
7176 */
7177 public static final String
7178 DISK_FREE_CHANGE_REPORTING_THRESHOLD = "disk_free_change_reporting_threshold";
7179
7180 /**
7181 * Minimum percentage of free storage on the device that is used to
7182 * determine if the device is running low on storage. The default is 10.
7183 * <p>
7184 * Say this value is set to 10, the device is considered running low on
7185 * storage if 90% or more of the device storage is filled up.
7186 *
7187 * @hide
7188 */
7189 public static final String
7190 SYS_STORAGE_THRESHOLD_PERCENTAGE = "sys_storage_threshold_percentage";
7191
7192 /**
7193 * Maximum byte size of the low storage threshold. This is to ensure
7194 * that {@link #SYS_STORAGE_THRESHOLD_PERCENTAGE} does not result in an
7195 * overly large threshold for large storage devices. Currently this must
7196 * be less than 2GB. This default is 500MB.
7197 *
7198 * @hide
7199 */
7200 public static final String
7201 SYS_STORAGE_THRESHOLD_MAX_BYTES = "sys_storage_threshold_max_bytes";
7202
7203 /**
7204 * Minimum bytes of free storage on the device before the data partition
7205 * is considered full. By default, 1 MB is reserved to avoid system-wide
7206 * SQLite disk full exceptions.
7207 *
7208 * @hide
7209 */
7210 public static final String
7211 SYS_STORAGE_FULL_THRESHOLD_BYTES = "sys_storage_full_threshold_bytes";
7212
7213 /**
7214 * The maximum reconnect delay for short network outages or when the
7215 * network is suspended due to phone use.
7216 *
7217 * @hide
7218 */
7219 public static final String
7220 SYNC_MAX_RETRY_DELAY_IN_SECONDS = "sync_max_retry_delay_in_seconds";
7221
7222 /**
7223 * The number of milliseconds to delay before sending out
Erik Kline8f29dcf2014-12-08 16:25:20 +09007224 * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. Ignored.
Jeff Sharkey625239a2012-09-26 22:03:49 -07007225 *
7226 * @hide
7227 */
7228 public static final String CONNECTIVITY_CHANGE_DELAY = "connectivity_change_delay";
7229
Vinit Deshapnde1f12cb52013-08-21 13:09:01 -07007230
7231 /**
7232 * Network sampling interval, in seconds. We'll generate link information
7233 * about bytes/packets sent and error rates based on data sampled in this interval
7234 *
7235 * @hide
7236 */
7237
7238 public static final String CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS =
7239 "connectivity_sampling_interval_in_seconds";
7240
Jeff Sharkey625239a2012-09-26 22:03:49 -07007241 /**
Jason Monk602b2322013-07-03 17:04:33 -04007242 * The series of successively longer delays used in retrying to download PAC file.
7243 * Last delay is used between successful PAC downloads.
7244 *
7245 * @hide
7246 */
7247 public static final String PAC_CHANGE_DELAY = "pac_change_delay";
7248
7249 /**
Jeff Sharkey625239a2012-09-26 22:03:49 -07007250 * Setting to turn off captive portal detection. Feature is enabled by
7251 * default and the setting needs to be set to 0 to disable it.
7252 *
7253 * @hide
7254 */
7255 public static final String
7256 CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled";
7257
7258 /**
7259 * The server used for captive portal detection upon a new conection. A
7260 * 204 response code from the server is used for validation.
7261 *
7262 * @hide
7263 */
7264 public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server";
7265
7266 /**
7267 * Whether network service discovery is enabled.
7268 *
7269 * @hide
7270 */
7271 public static final String NSD_ON = "nsd_on";
7272
7273 /**
7274 * Let user pick default install location.
7275 *
7276 * @hide
7277 */
7278 public static final String SET_INSTALL_LOCATION = "set_install_location";
7279
7280 /**
7281 * Default install location value.
7282 * 0 = auto, let system decide
7283 * 1 = internal
7284 * 2 = sdcard
7285 * @hide
7286 */
7287 public static final String DEFAULT_INSTALL_LOCATION = "default_install_location";
7288
7289 /**
7290 * ms during which to consume extra events related to Inet connection
7291 * condition after a transtion to fully-connected
7292 *
7293 * @hide
7294 */
7295 public static final String
7296 INET_CONDITION_DEBOUNCE_UP_DELAY = "inet_condition_debounce_up_delay";
7297
7298 /**
7299 * ms during which to consume extra events related to Inet connection
7300 * condtion after a transtion to partly-connected
7301 *
7302 * @hide
7303 */
7304 public static final String
7305 INET_CONDITION_DEBOUNCE_DOWN_DELAY = "inet_condition_debounce_down_delay";
7306
7307 /** {@hide} */
7308 public static final String
7309 READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default";
7310
7311 /**
7312 * Host name and port for global http proxy. Uses ':' seperator for
7313 * between host and port.
7314 */
7315 public static final String HTTP_PROXY = "http_proxy";
7316
7317 /**
7318 * Host name for global http proxy. Set via ConnectivityManager.
7319 *
7320 * @hide
7321 */
7322 public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host";
7323
7324 /**
7325 * Integer host port for global http proxy. Set via ConnectivityManager.
7326 *
7327 * @hide
7328 */
7329 public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port";
7330
7331 /**
7332 * Exclusion list for global proxy. This string contains a list of
7333 * comma-separated domains where the global proxy does not apply.
7334 * Domains should be listed in a comma- separated list. Example of
7335 * acceptable formats: ".domain1.com,my.domain2.com" Use
7336 * ConnectivityManager to set/get.
7337 *
7338 * @hide
7339 */
7340 public static final String
7341 GLOBAL_HTTP_PROXY_EXCLUSION_LIST = "global_http_proxy_exclusion_list";
7342
7343 /**
Jason Monk602b2322013-07-03 17:04:33 -04007344 * The location PAC File for the proxy.
7345 * @hide
7346 */
7347 public static final String
7348 GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url";
7349
7350 /**
Jeff Sharkey625239a2012-09-26 22:03:49 -07007351 * Enables the UI setting to allow the user to specify the global HTTP
7352 * proxy and associated exclusion list.
7353 *
7354 * @hide
7355 */
7356 public static final String SET_GLOBAL_HTTP_PROXY = "set_global_http_proxy";
7357
7358 /**
7359 * Setting for default DNS in case nobody suggests one
7360 *
7361 * @hide
7362 */
7363 public static final String DEFAULT_DNS_SERVER = "default_dns_server";
7364
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007365 /** {@hide} */
7366 public static final String
7367 BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_";
7368 /** {@hide} */
7369 public static final String
7370 BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_";
7371 /** {@hide} */
7372 public static final String
7373 BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_";
Kim Schulz0d376052013-08-22 11:18:02 +02007374 /** {@hide} */
7375 public static final String
7376 BLUETOOTH_MAP_PRIORITY_PREFIX = "bluetooth_map_priority_";
Casper Bonde2a5f6082015-03-19 10:36:45 +01007377 /** {@hide} */
7378 public static final String
7379 BLUETOOTH_SAP_PRIORITY_PREFIX = "bluetooth_sap_priority_";
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007380
7381 /**
Adam Lesinski31c05d12015-06-09 17:34:04 -07007382 * Device Idle (Doze) specific settings.
7383 * This is encoded as a key=value list, separated by commas. Ex:
7384 *
7385 * "inactive_timeout=60000,sensing_timeout=400000"
7386 *
7387 * The following keys are supported:
7388 *
7389 * <pre>
7390 * inactive_to (long)
7391 * sensing_to (long)
7392 * motion_inactive_to (long)
7393 * idle_after_inactive_to (long)
7394 * idle_pending_to (long)
7395 * max_idle_pending_to (long)
7396 * idle_pending_factor (float)
7397 * idle_to (long)
7398 * max_idle_to (long)
7399 * idle_factor (float)
7400 * min_time_to_alarm (long)
7401 * max_temp_app_whitelist_duration (long)
7402 * </pre>
7403 *
7404 * <p>
7405 * Type: string
7406 * @hide
7407 * @see com.android.server.DeviceIdleController.Constants
7408 */
7409 public static final String DEVICE_IDLE_CONSTANTS = "device_idle_constants";
7410
7411 /**
Adam Lesinskia6232df2015-06-11 18:16:41 -07007412 * App standby (app idle) specific settings.
7413 * This is encoded as a key=value list, separated by commas. Ex:
7414 *
7415 * "idle_duration=5000,parole_interval=4500"
7416 *
7417 * The following keys are supported:
7418 *
7419 * <pre>
7420 * idle_duration (long)
7421 * wallclock_threshold (long)
7422 * parole_interval (long)
7423 * parole_duration (long)
7424 * </pre>
7425 *
7426 * <p>
7427 * Type: string
7428 * @hide
7429 * @see com.android.server.usage.UsageStatsService.SettingsObserver
7430 */
7431 public static final String APP_IDLE_CONSTANTS = "app_idle_constants";
7432
7433 /**
Dianne Hackborna750a632015-06-16 17:18:23 -07007434 * Alarm manager specific settings.
7435 * This is encoded as a key=value list, separated by commas. Ex:
7436 *
7437 * "min_futurity=5000,allow_while_idle_short_time=4500"
7438 *
7439 * The following keys are supported:
7440 *
7441 * <pre>
7442 * min_futurity (long)
7443 * min_interval (long)
7444 * allow_while_idle_short_time (long)
7445 * allow_while_idle_long_time (long)
7446 * allow_while_idle_whitelist_duration (long)
7447 * </pre>
7448 *
7449 * <p>
7450 * Type: string
7451 * @hide
7452 * @see com.android.server.AlarmManagerService.Constants
7453 */
7454 public static final String ALARM_MANAGER_CONSTANTS = "alarm_manager_constants";
7455
7456 /**
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007457 * Get the key that retrieves a bluetooth headset's priority.
7458 * @hide
7459 */
7460 public static final String getBluetoothHeadsetPriorityKey(String address) {
Elliott Hughescb64d432013-08-02 10:00:44 -07007461 return BLUETOOTH_HEADSET_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007462 }
7463
7464 /**
7465 * Get the key that retrieves a bluetooth a2dp sink's priority.
7466 * @hide
7467 */
7468 public static final String getBluetoothA2dpSinkPriorityKey(String address) {
Elliott Hughescb64d432013-08-02 10:00:44 -07007469 return BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007470 }
7471
7472 /**
7473 * Get the key that retrieves a bluetooth Input Device's priority.
7474 * @hide
7475 */
7476 public static final String getBluetoothInputDevicePriorityKey(String address) {
Elliott Hughescb64d432013-08-02 10:00:44 -07007477 return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
Jeff Sharkey0ac10282012-10-01 12:50:22 -07007478 }
7479
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007480 /**
Kim Schulz0d376052013-08-22 11:18:02 +02007481 * Get the key that retrieves a bluetooth map priority.
7482 * @hide
7483 */
7484 public static final String getBluetoothMapPriorityKey(String address) {
7485 return BLUETOOTH_MAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
7486 }
Casper Bonde2a5f6082015-03-19 10:36:45 +01007487
7488 /**
7489 * Get the key that retrieves a bluetooth map priority.
7490 * @hide
7491 */
7492 public static final String getBluetoothSapPriorityKey(String address) {
7493 return BLUETOOTH_SAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT);
7494 }
7495
Kim Schulz0d376052013-08-22 11:18:02 +02007496 /**
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007497 * Scaling factor for normal window animations. Setting to 0 will
7498 * disable window animations.
7499 */
7500 public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
7501
7502 /**
7503 * Scaling factor for activity transition animations. Setting to 0 will
7504 * disable window animations.
7505 */
7506 public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
7507
7508 /**
7509 * Scaling factor for Animator-based animations. This affects both the
7510 * start delay and duration of all such animations. Setting to 0 will
7511 * cause animations to end immediately. The default value is 1.
7512 */
7513 public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
7514
7515 /**
7516 * Scaling factor for normal window animations. Setting to 0 will
7517 * disable window animations.
7518 *
7519 * @hide
7520 */
7521 public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations";
7522
7523 /**
7524 * If 0, the compatibility mode is off for all applications.
7525 * If 1, older applications run under compatibility mode.
7526 * TODO: remove this settings before code freeze (bug/1907571)
7527 * @hide
7528 */
7529 public static final String COMPATIBILITY_MODE = "compatibility_mode";
7530
7531 /**
7532 * CDMA only settings
7533 * Emergency Tone 0 = Off
7534 * 1 = Alert
7535 * 2 = Vibrate
7536 * @hide
7537 */
7538 public static final String EMERGENCY_TONE = "emergency_tone";
7539
7540 /**
7541 * CDMA only settings
7542 * Whether the auto retry is enabled. The value is
7543 * boolean (1 or 0).
7544 * @hide
7545 */
7546 public static final String CALL_AUTO_RETRY = "call_auto_retry";
7547
7548 /**
Sungmin Choie099ab12014-06-09 14:45:51 +09007549 * See RIL_PreferredNetworkType in ril.h
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007550 * @hide
7551 */
7552 public static final String PREFERRED_NETWORK_MODE =
7553 "preferred_network_mode";
7554
7555 /**
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007556 * Name of an application package to be debugged.
7557 */
7558 public static final String DEBUG_APP = "debug_app";
7559
7560 /**
7561 * If 1, when launching DEBUG_APP it will wait for the debugger before
7562 * starting user code. If 0, it will run normally.
7563 */
7564 public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
7565
7566 /**
7567 * Control whether the process CPU usage meter should be shown.
7568 */
7569 public static final String SHOW_PROCESSES = "show_processes";
7570
7571 /**
Ruchi Kandoi62b8a492014-04-17 18:01:40 -07007572 * If 1 low power mode is enabled.
7573 * @hide
7574 */
7575 public static final String LOW_POWER_MODE = "low_power";
7576
John Spurlockf8f524c2014-06-10 14:47:29 -04007577 /**
7578 * Battery level [1-99] at which low power mode automatically turns on.
Dianne Hackborn14272302014-06-10 23:13:02 -07007579 * If 0, it will not automatically turn on.
John Spurlockf8f524c2014-06-10 14:47:29 -04007580 * @hide
7581 */
7582 public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level";
7583
Ruchi Kandoi62b8a492014-04-17 18:01:40 -07007584 /**
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007585 * If 1, the activity manager will aggressively finish activities and
7586 * processes as soon as they are no longer needed. If 0, the normal
7587 * extended lifetime is used.
7588 */
Dianne Hackborn89ad4562014-08-24 16:45:38 -07007589 public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07007590
Christopher Tate66488d62012-10-02 11:58:01 -07007591 /**
Eric Laurent7ee1e4f2012-10-26 18:11:21 -07007592 * Use Dock audio output for media:
7593 * 0 = disabled
7594 * 1 = enabled
7595 * @hide
7596 */
7597 public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled";
7598
7599 /**
Eric Laurent05274f32012-11-29 12:48:18 -08007600 * Persisted safe headphone volume management state by AudioService
7601 * @hide
7602 */
7603 public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state";
7604
7605 /**
Geremy Condraa0735112013-03-26 21:49:26 -07007606 * URL for tzinfo (time zone) updates
7607 * @hide
7608 */
7609 public static final String TZINFO_UPDATE_CONTENT_URL = "tzinfo_content_url";
7610
7611 /**
7612 * URL for tzinfo (time zone) update metadata
7613 * @hide
7614 */
7615 public static final String TZINFO_UPDATE_METADATA_URL = "tzinfo_metadata_url";
7616
7617 /**
7618 * URL for selinux (mandatory access control) updates
7619 * @hide
7620 */
7621 public static final String SELINUX_UPDATE_CONTENT_URL = "selinux_content_url";
7622
7623 /**
7624 * URL for selinux (mandatory access control) update metadata
7625 * @hide
7626 */
7627 public static final String SELINUX_UPDATE_METADATA_URL = "selinux_metadata_url";
7628
7629 /**
7630 * URL for sms short code updates
7631 * @hide
7632 */
7633 public static final String SMS_SHORT_CODES_UPDATE_CONTENT_URL =
7634 "sms_short_codes_content_url";
7635
7636 /**
7637 * URL for sms short code update metadata
7638 * @hide
7639 */
7640 public static final String SMS_SHORT_CODES_UPDATE_METADATA_URL =
7641 "sms_short_codes_metadata_url";
7642
7643 /**
Amit Mahajan9069fab2015-05-01 11:05:47 -07007644 * URL for apn_db updates
7645 * @hide
7646 */
7647 public static final String APN_DB_UPDATE_CONTENT_URL = "apn_db_content_url";
7648
7649 /**
7650 * URL for apn_db update metadata
7651 * @hide
7652 */
7653 public static final String APN_DB_UPDATE_METADATA_URL = "apn_db_metadata_url";
7654
7655 /**
Geremy Condraa0735112013-03-26 21:49:26 -07007656 * URL for cert pinlist updates
7657 * @hide
7658 */
7659 public static final String CERT_PIN_UPDATE_CONTENT_URL = "cert_pin_content_url";
7660
7661 /**
7662 * URL for cert pinlist updates
7663 * @hide
7664 */
7665 public static final String CERT_PIN_UPDATE_METADATA_URL = "cert_pin_metadata_url";
7666
Geremy Condra757ee522013-03-29 16:39:45 -07007667 /**
Ben Gruver633dc9b2013-04-04 12:05:49 -07007668 * URL for intent firewall updates
7669 * @hide
7670 */
7671 public static final String INTENT_FIREWALL_UPDATE_CONTENT_URL =
7672 "intent_firewall_content_url";
7673
7674 /**
7675 * URL for intent firewall update metadata
7676 * @hide
7677 */
7678 public static final String INTENT_FIREWALL_UPDATE_METADATA_URL =
7679 "intent_firewall_metadata_url";
7680
7681 /**
Geremy Condra4e7f7e82013-03-26 21:09:01 -07007682 * SELinux enforcement status. If 0, permissive; if 1, enforcing.
7683 * @hide
7684 */
7685 public static final String SELINUX_STATUS = "selinux_status";
7686
Geremy Condraa0735112013-03-26 21:49:26 -07007687 /**
Amith Yamasanid8415f42013-08-07 20:15:10 -07007688 * Developer setting to force RTL layout.
7689 * @hide
7690 */
7691 public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl";
7692
7693 /**
Daniel Sandlerdea64622013-09-23 16:05:57 -04007694 * Milliseconds after screen-off after which low battery sounds will be silenced.
7695 *
7696 * If zero, battery sounds will always play.
7697 * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider.
7698 *
7699 * @hide
7700 */
7701 public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout";
7702
7703 /**
Evan Charltoncc7b0432014-01-14 14:47:11 -08007704 * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after
Dianne Hackborna3fb40d2014-08-12 15:06:50 -07007705 * the caller is done with this, they should call {@link ContentResolver#delete} to
Evan Charltoncc7b0432014-01-14 14:47:11 -08007706 * clean up any value that they may have written.
7707 *
7708 * @hide
7709 */
7710 public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms";
7711
John Spurlockc6d1c602014-01-17 15:22:06 -05007712 /**
7713 * Defines global runtime overrides to window policy.
7714 *
Jorim Jaggib10e33f2015-02-04 21:57:40 +01007715 * See {@link com.android.server.policy.PolicyControl} for value format.
John Spurlockc6d1c602014-01-17 15:22:06 -05007716 *
7717 * @hide
7718 */
7719 public static final String POLICY_CONTROL = "policy_control";
Evan Charltoncc7b0432014-01-14 14:47:11 -08007720
7721 /**
John Spurlockae641c92014-06-30 18:11:40 -04007722 * Defines global zen mode. ZEN_MODE_OFF, ZEN_MODE_IMPORTANT_INTERRUPTIONS,
7723 * or ZEN_MODE_NO_INTERRUPTIONS.
John Spurlocke677d712014-02-13 12:52:19 -05007724 *
7725 * @hide
7726 */
7727 public static final String ZEN_MODE = "zen_mode";
7728
7729 /** @hide */ public static final int ZEN_MODE_OFF = 0;
John Spurlockae641c92014-06-30 18:11:40 -04007730 /** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1;
7731 /** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2;
John Spurlock4f1163c2015-04-02 17:41:21 -04007732 /** @hide */ public static final int ZEN_MODE_ALARMS = 3;
John Spurlocke677d712014-02-13 12:52:19 -05007733
7734 /** @hide */ public static String zenModeToString(int mode) {
John Spurlockae641c92014-06-30 18:11:40 -04007735 if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS";
John Spurlock4f1163c2015-04-02 17:41:21 -04007736 if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS";
John Spurlockae641c92014-06-30 18:11:40 -04007737 if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS";
7738 return "ZEN_MODE_OFF";
John Spurlocke677d712014-02-13 12:52:19 -05007739 }
7740
John Spurlockb2278d62015-04-07 12:47:12 -04007741 /** @hide */ public static boolean isValidZenMode(int value) {
7742 switch (value) {
7743 case Global.ZEN_MODE_OFF:
7744 case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
7745 case Global.ZEN_MODE_ALARMS:
7746 case Global.ZEN_MODE_NO_INTERRUPTIONS:
7747 return true;
7748 default:
7749 return false;
7750 }
7751 }
7752
John Spurlocke677d712014-02-13 12:52:19 -05007753 /**
Julia Reynolds9b11fdb2015-07-31 09:49:55 -04007754 * Value of the ringer before entering zen mode.
7755 *
7756 * @hide
7757 */
7758 public static final String ZEN_MODE_RINGER_LEVEL = "zen_mode_ringer_level";
7759
7760 /**
John Spurlock056c5192014-04-20 21:52:01 -04007761 * Opaque value, changes when persisted zen mode configuration changes.
7762 *
7763 * @hide
7764 */
7765 public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag";
7766
7767 /**
Chris Wren7bd241232014-02-28 16:25:05 -05007768 * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON.
7769 *
7770 * @hide
7771 */
Chris Wren10d82df2014-03-01 10:34:51 -05007772 public static final String HEADS_UP_NOTIFICATIONS_ENABLED =
7773 "heads_up_notifications_enabled";
Chris Wren7bd241232014-02-28 16:25:05 -05007774
7775 /** @hide */ public static final int HEADS_UP_OFF = 0;
7776 /** @hide */ public static final int HEADS_UP_ON = 1;
7777
7778 /**
Jerome Poichet147b4d72014-05-12 18:13:27 -07007779 * The name of the device
7780 *
7781 * @hide
7782 */
7783 public static final String DEVICE_NAME = "device_name";
7784
7785 /**
Jeff Davidson56f9f732014-08-14 16:47:23 -07007786 * Whether the NetworkScoringService has been first initialized.
7787 * <p>
7788 * Type: int (0 for false, 1 for true)
7789 * @hide
7790 */
7791 public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned";
7792
7793 /**
Jim Miller6848dc82014-10-13 18:51:53 -07007794 * Whether the user wants to be prompted for password to decrypt the device on boot.
7795 * This only matters if the storage is encrypted.
7796 * <p>
7797 * Type: int (0 for false, 1 for true)
7798 * @hide
7799 */
7800 public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
7801
7802 /**
Etan Cohen93bbf272015-05-04 18:01:47 -07007803 * Whether the Volte is enabled
Libin.Tang@motorola.com0499bb52014-10-10 14:55:57 -05007804 * <p>
7805 * Type: int (0 for false, 1 for true)
7806 * @hide
7807 */
Etan Cohene41a9cf2014-10-22 10:50:46 -07007808 public static final String ENHANCED_4G_MODE_ENABLED = "volte_vt_enabled";
Libin.Tang@motorola.com0499bb52014-10-10 14:55:57 -05007809
7810 /**
Etan Cohen93bbf272015-05-04 18:01:47 -07007811 * Whether VT (Video Telephony over IMS) is enabled
7812 * <p>
7813 * Type: int (0 for false, 1 for true)
7814 *
7815 * @hide
7816 */
7817 public static final String VT_IMS_ENABLED = "vt_ims_enabled";
7818
7819 /**
Etan Cohen9c8f21b2014-12-23 15:02:19 -08007820 * Whether WFC is enabled
7821 * <p>
7822 * Type: int (0 for false, 1 for true)
7823 *
7824 * @hide
7825 */
7826 public static final String WFC_IMS_ENABLED = "wfc_ims_enabled";
7827
7828 /**
7829 * WFC Mode.
7830 * <p>
7831 * Type: int - 2=Wi-Fi preferred, 1=Cellular preferred, 0=Wi-Fi only
7832 *
7833 * @hide
7834 */
7835 public static final String WFC_IMS_MODE = "wfc_ims_mode";
7836
7837 /**
7838 * Whether WFC roaming is enabled
7839 * <p>
7840 * Type: int (0 for false, 1 for true)
7841 *
7842 * @hide
7843 */
7844 public static final String WFC_IMS_ROAMING_ENABLED = "wfc_ims_roaming_enabled";
7845
7846 /**
Amit Mahajan4fea0922014-11-18 12:56:28 -08007847 * Whether user can enable/disable LTE as a preferred network. A carrier might control
7848 * this via gservices, OMA-DM, carrier app, etc.
7849 * <p>
7850 * Type: int (0 for false, 1 for true)
7851 * @hide
7852 */
7853 public static final String LTE_SERVICE_FORCED = "lte_service_forced";
7854
7855 /**
Svet Ganov2acf0632015-11-24 19:10:59 -08007856 * Ephemeral app cookie max size in bytes.
7857 * <p>
7858 * Type: int
7859 * @hide
7860 */
7861 public static final String EPHEMERAL_COOKIE_MAX_SIZE_BYTES =
7862 "ephemeral_cookie_max_size_bytes";
7863
7864 /**
7865 * The duration for caching uninstalled ephemeral apps.
7866 * <p>
7867 * Type: long
7868 * @hide
7869 */
7870 public static final String UNINSTALLED_EPHEMERAL_APP_CACHE_DURATION_MILLIS =
7871 "uninstalled_ephemeral_app_cache_duration_millis";
7872
7873 /**
Christopher Tate66488d62012-10-02 11:58:01 -07007874 * Settings to backup. This is here so that it's in the same place as the settings
7875 * keys and easy to update.
7876 *
7877 * These keys may be mentioned in the SETTINGS_TO_BACKUP arrays in System
7878 * and Secure as well. This is because those tables drive both backup and
7879 * restore, and restore needs to properly whitelist keys that used to live
7880 * in those namespaces. The keys will only actually be backed up / restored
7881 * if they are also mentioned in this table (Global.SETTINGS_TO_BACKUP).
7882 *
7883 * NOTE: Settings are backed up and restored in the order they appear
7884 * in this array. If you have one setting depending on another,
7885 * make sure that they are ordered appropriately.
7886 *
7887 * @hide
7888 */
7889 public static final String[] SETTINGS_TO_BACKUP = {
Christopher Tate58f41ec2013-01-11 15:40:36 -08007890 BUGREPORT_IN_POWER_MENU,
Christopher Tate66488d62012-10-02 11:58:01 -07007891 STAY_ON_WHILE_PLUGGED_IN,
Christopher Tate66488d62012-10-02 11:58:01 -07007892 AUTO_TIME,
7893 AUTO_TIME_ZONE,
7894 POWER_SOUNDS_ENABLED,
7895 DOCK_SOUNDS_ENABLED,
Ritesh Reddyf8f12132015-11-20 16:43:28 +00007896 CHARGING_SOUNDS_ENABLED,
Christopher Tate66488d62012-10-02 11:58:01 -07007897 USB_MASS_STORAGE_ENABLED,
7898 ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
7899 WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
7900 WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
Christopher Tate16eb7cd2012-10-09 15:26:30 -07007901 WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED,
Christopher Tate66488d62012-10-02 11:58:01 -07007902 WIFI_NUM_OPEN_NETWORKS_KEPT,
7903 EMERGENCY_TONE,
7904 CALL_AUTO_RETRY,
Amith Yamasani94005242014-10-31 11:35:13 -07007905 DOCK_AUDIO_MEDIA_ENABLED,
7906 LOW_POWER_MODE_TRIGGER_LEVEL
Christopher Tate66488d62012-10-02 11:58:01 -07007907 };
7908
Christopher Tate06efb532012-08-24 15:29:27 -07007909 // Populated lazily, guarded by class object:
Dianne Hackborn139748f2012-09-24 11:36:57 -07007910 private static NameValueCache sNameValueCache = new NameValueCache(
7911 SYS_PROP_SETTING_VERSION,
7912 CONTENT_URI,
7913 CALL_METHOD_GET_GLOBAL,
7914 CALL_METHOD_PUT_GLOBAL);
Christopher Tate06efb532012-08-24 15:29:27 -07007915
Christopher Tateaa036a22014-05-19 16:33:27 -07007916 // Certain settings have been moved from global to the per-user secure namespace
7917 private static final HashSet<String> MOVED_TO_SECURE;
7918 static {
7919 MOVED_TO_SECURE = new HashSet<String>(1);
7920 MOVED_TO_SECURE.add(Settings.Global.INSTALL_NON_MARKET_APPS);
7921 }
7922
Svetoslav683914b2015-01-15 14:22:26 -08007923 /** @hide */
7924 public static void getMovedToSecureSettings(Set<String> outKeySet) {
7925 outKeySet.addAll(MOVED_TO_SECURE);
7926 }
7927
Christopher Tate06efb532012-08-24 15:29:27 -07007928 /**
7929 * Look up a name in the database.
7930 * @param resolver to access the database with
7931 * @param name to look up in the table
7932 * @return the corresponding value, or null if not present
7933 */
Dianne Hackborn139748f2012-09-24 11:36:57 -07007934 public static String getString(ContentResolver resolver, String name) {
Christopher Tate06efb532012-08-24 15:29:27 -07007935 return getStringForUser(resolver, name, UserHandle.myUserId());
7936 }
7937
7938 /** @hide */
Dianne Hackborn139748f2012-09-24 11:36:57 -07007939 public static String getStringForUser(ContentResolver resolver, String name,
Christopher Tate06efb532012-08-24 15:29:27 -07007940 int userHandle) {
Christopher Tateaa036a22014-05-19 16:33:27 -07007941 if (MOVED_TO_SECURE.contains(name)) {
7942 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
7943 + " to android.provider.Settings.Secure, returning read-only value.");
7944 return Secure.getStringForUser(resolver, name, userHandle);
7945 }
Christopher Tate06efb532012-08-24 15:29:27 -07007946 return sNameValueCache.getStringForUser(resolver, name, userHandle);
7947 }
7948
7949 /**
7950 * Store a name/value pair into the database.
7951 * @param resolver to access the database with
7952 * @param name to store
7953 * @param value to associate with the name
7954 * @return true if the value was set, false on database errors
7955 */
7956 public static boolean putString(ContentResolver resolver,
7957 String name, String value) {
7958 return putStringForUser(resolver, name, value, UserHandle.myUserId());
7959 }
7960
7961 /** @hide */
7962 public static boolean putStringForUser(ContentResolver resolver,
7963 String name, String value, int userHandle) {
Christopher Tate06efb532012-08-24 15:29:27 -07007964 if (LOCAL_LOGV) {
7965 Log.v(TAG, "Global.putString(name=" + name + ", value=" + value
7966 + " for " + userHandle);
7967 }
Christopher Tateaa036a22014-05-19 16:33:27 -07007968 // Global and Secure have the same access policy so we can forward writes
7969 if (MOVED_TO_SECURE.contains(name)) {
7970 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
7971 + " to android.provider.Settings.Secure, value is unchanged.");
7972 return Secure.putStringForUser(resolver, name, value, userHandle);
7973 }
Christopher Tate06efb532012-08-24 15:29:27 -07007974 return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
7975 }
7976
7977 /**
7978 * Construct the content URI for a particular name/value pair,
7979 * useful for monitoring changes with a ContentObserver.
7980 * @param name to look up in the table
7981 * @return the corresponding content URI, or null if not present
7982 */
7983 public static Uri getUriFor(String name) {
7984 return getUriFor(CONTENT_URI, name);
7985 }
7986
7987 /**
7988 * Convenience function for retrieving a single secure settings value
7989 * as an integer. Note that internally setting values are always
7990 * stored as strings; this function converts the string to an integer
7991 * for you. The default value will be returned if the setting is
7992 * not defined or not an integer.
7993 *
7994 * @param cr The ContentResolver to access.
7995 * @param name The name of the setting to retrieve.
7996 * @param def Value to return if the setting is not defined.
7997 *
7998 * @return The setting's current value, or 'def' if it is not defined
7999 * or not a valid integer.
8000 */
8001 public static int getInt(ContentResolver cr, String name, int def) {
8002 String v = getString(cr, name);
8003 try {
8004 return v != null ? Integer.parseInt(v) : def;
8005 } catch (NumberFormatException e) {
8006 return def;
8007 }
8008 }
8009
8010 /**
8011 * Convenience function for retrieving a single secure settings value
8012 * as an integer. Note that internally setting values are always
8013 * stored as strings; this function converts the string to an integer
8014 * for you.
8015 * <p>
8016 * This version does not take a default value. If the setting has not
8017 * been set, or the string value is not a number,
8018 * it throws {@link SettingNotFoundException}.
8019 *
8020 * @param cr The ContentResolver to access.
8021 * @param name The name of the setting to retrieve.
8022 *
8023 * @throws SettingNotFoundException Thrown if a setting by the given
8024 * name can't be found or the setting value is not an integer.
8025 *
8026 * @return The setting's current value.
8027 */
8028 public static int getInt(ContentResolver cr, String name)
8029 throws SettingNotFoundException {
8030 String v = getString(cr, name);
8031 try {
8032 return Integer.parseInt(v);
8033 } catch (NumberFormatException e) {
8034 throw new SettingNotFoundException(name);
8035 }
8036 }
8037
8038 /**
8039 * Convenience function for updating a single settings value as an
8040 * integer. This will either create a new entry in the table if the
8041 * given name does not exist, or modify the value of the existing row
8042 * with that name. Note that internally setting values are always
8043 * stored as strings, so this function converts the given value to a
8044 * string before storing it.
8045 *
8046 * @param cr The ContentResolver to access.
8047 * @param name The name of the setting to modify.
8048 * @param value The new value for the setting.
8049 * @return true if the value was set, false on database errors
8050 */
8051 public static boolean putInt(ContentResolver cr, String name, int value) {
8052 return putString(cr, name, Integer.toString(value));
8053 }
8054
8055 /**
8056 * Convenience function for retrieving a single secure settings value
8057 * as a {@code long}. Note that internally setting values are always
8058 * stored as strings; this function converts the string to a {@code long}
8059 * for you. The default value will be returned if the setting is
8060 * not defined or not a {@code long}.
8061 *
8062 * @param cr The ContentResolver to access.
8063 * @param name The name of the setting to retrieve.
8064 * @param def Value to return if the setting is not defined.
8065 *
8066 * @return The setting's current value, or 'def' if it is not defined
8067 * or not a valid {@code long}.
8068 */
8069 public static long getLong(ContentResolver cr, String name, long def) {
8070 String valString = getString(cr, name);
8071 long value;
8072 try {
8073 value = valString != null ? Long.parseLong(valString) : def;
8074 } catch (NumberFormatException e) {
8075 value = def;
8076 }
8077 return value;
8078 }
8079
8080 /**
8081 * Convenience function for retrieving a single secure settings value
8082 * as a {@code long}. Note that internally setting values are always
8083 * stored as strings; this function converts the string to a {@code long}
8084 * for you.
8085 * <p>
8086 * This version does not take a default value. If the setting has not
8087 * been set, or the string value is not a number,
8088 * it throws {@link SettingNotFoundException}.
8089 *
8090 * @param cr The ContentResolver to access.
8091 * @param name The name of the setting to retrieve.
8092 *
8093 * @return The setting's current value.
8094 * @throws SettingNotFoundException Thrown if a setting by the given
8095 * name can't be found or the setting value is not an integer.
8096 */
8097 public static long getLong(ContentResolver cr, String name)
8098 throws SettingNotFoundException {
8099 String valString = getString(cr, name);
8100 try {
8101 return Long.parseLong(valString);
8102 } catch (NumberFormatException e) {
8103 throw new SettingNotFoundException(name);
8104 }
8105 }
8106
8107 /**
8108 * Convenience function for updating a secure settings value as a long
8109 * integer. This will either create a new entry in the table if the
8110 * given name does not exist, or modify the value of the existing row
8111 * with that name. Note that internally setting values are always
8112 * stored as strings, so this function converts the given value to a
8113 * string before storing it.
8114 *
8115 * @param cr The ContentResolver to access.
8116 * @param name The name of the setting to modify.
8117 * @param value The new value for the setting.
8118 * @return true if the value was set, false on database errors
8119 */
8120 public static boolean putLong(ContentResolver cr, String name, long value) {
8121 return putString(cr, name, Long.toString(value));
8122 }
8123
8124 /**
8125 * Convenience function for retrieving a single secure settings value
8126 * as a floating point number. Note that internally setting values are
8127 * always stored as strings; this function converts the string to an
8128 * float for you. The default value will be returned if the setting
8129 * is not defined or not a valid float.
8130 *
8131 * @param cr The ContentResolver to access.
8132 * @param name The name of the setting to retrieve.
8133 * @param def Value to return if the setting is not defined.
8134 *
8135 * @return The setting's current value, or 'def' if it is not defined
8136 * or not a valid float.
8137 */
8138 public static float getFloat(ContentResolver cr, String name, float def) {
8139 String v = getString(cr, name);
8140 try {
8141 return v != null ? Float.parseFloat(v) : def;
8142 } catch (NumberFormatException e) {
8143 return def;
8144 }
8145 }
8146
8147 /**
8148 * Convenience function for retrieving a single secure settings value
8149 * as a float. Note that internally setting values are always
8150 * stored as strings; this function converts the string to a float
8151 * for you.
8152 * <p>
8153 * This version does not take a default value. If the setting has not
8154 * been set, or the string value is not a number,
8155 * it throws {@link SettingNotFoundException}.
8156 *
8157 * @param cr The ContentResolver to access.
8158 * @param name The name of the setting to retrieve.
8159 *
8160 * @throws SettingNotFoundException Thrown if a setting by the given
8161 * name can't be found or the setting value is not a float.
8162 *
8163 * @return The setting's current value.
8164 */
8165 public static float getFloat(ContentResolver cr, String name)
8166 throws SettingNotFoundException {
8167 String v = getString(cr, name);
8168 if (v == null) {
8169 throw new SettingNotFoundException(name);
8170 }
8171 try {
8172 return Float.parseFloat(v);
8173 } catch (NumberFormatException e) {
8174 throw new SettingNotFoundException(name);
8175 }
8176 }
8177
8178 /**
8179 * Convenience function for updating a single settings value as a
8180 * floating point number. This will either create a new entry in the
8181 * table if the given name does not exist, or modify the value of the
8182 * existing row with that name. Note that internally setting values
8183 * are always stored as strings, so this function converts the given
8184 * value to a string before storing it.
8185 *
8186 * @param cr The ContentResolver to access.
8187 * @param name The name of the setting to modify.
8188 * @param value The new value for the setting.
8189 * @return true if the value was set, false on database errors
8190 */
8191 public static boolean putFloat(ContentResolver cr, String name, float value) {
8192 return putString(cr, name, Float.toString(value));
8193 }
Wink Savillefb40dd42014-06-12 17:02:31 -07008194
8195
8196 /**
8197 * Subscription to be used for voice call on a multi sim device. The supported values
8198 * are 0 = SUB1, 1 = SUB2 and etc.
8199 * @hide
8200 */
8201 public static final String MULTI_SIM_VOICE_CALL_SUBSCRIPTION = "multi_sim_voice_call";
8202
8203 /**
8204 * Used to provide option to user to select subscription during dial.
8205 * The supported values are 0 = disable or 1 = enable prompt.
8206 * @hide
8207 */
8208 public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt";
8209
8210 /**
8211 * Subscription to be used for data call on a multi sim device. The supported values
8212 * are 0 = SUB1, 1 = SUB2 and etc.
8213 * @hide
8214 */
8215 public static final String MULTI_SIM_DATA_CALL_SUBSCRIPTION = "multi_sim_data_call";
8216
8217 /**
8218 * Subscription to be used for SMS on a multi sim device. The supported values
8219 * are 0 = SUB1, 1 = SUB2 and etc.
8220 * @hide
8221 */
8222 public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms";
8223
8224 /**
8225 * Used to provide option to user to select subscription during send SMS.
8226 * The value 1 - enable, 0 - disable
8227 * @hide
8228 */
8229 public static final String MULTI_SIM_SMS_PROMPT = "multi_sim_sms_prompt";
8230
8231
8232
8233 /** User preferred subscriptions setting.
8234 * This holds the details of the user selected subscription from the card and
8235 * the activation status. Each settings string have the coma separated values
8236 * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index
8237 * @hide
8238 */
8239 public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1",
8240 "user_preferred_sub2","user_preferred_sub3"};
Zheng Fub218ff42015-04-13 16:31:16 -07008241
8242 /**
8243 * Whether to enable new contacts aggregator or not.
8244 * The value 1 - enable, 0 - disable
8245 * @hide
8246 */
8247 public static final String NEW_CONTACT_AGGREGATOR = "new_contact_aggregator";
Zheng Fu31ce78c2015-04-15 16:57:53 -07008248
8249 /**
8250 * Whether to enable contacts metadata syncing or not
8251 * The value 1 - enable, 0 - disable
8252 * @hide
8253 */
8254 public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
Wei Liua1817702015-08-11 21:21:12 -07008255
8256 /**
8257 * Whether to enable cellular on boot.
8258 * The value 1 - enable, 0 - disable
8259 * @hide
8260 */
8261 public static final String ENABLE_CELLULAR_ON_BOOT = "enable_cellular_on_boot";
Christopher Tate06efb532012-08-24 15:29:27 -07008262 }
8263
8264 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008265 * User-defined bookmarks and shortcuts. The target of each bookmark is an
8266 * Intent URL, allowing it to be either a web page or a particular
8267 * application activity.
8268 *
8269 * @hide
8270 */
8271 public static final class Bookmarks implements BaseColumns
8272 {
8273 private static final String TAG = "Bookmarks";
8274
8275 /**
8276 * The content:// style URL for this table
8277 */
8278 public static final Uri CONTENT_URI =
8279 Uri.parse("content://" + AUTHORITY + "/bookmarks");
8280
8281 /**
8282 * The row ID.
8283 * <p>Type: INTEGER</p>
8284 */
8285 public static final String ID = "_id";
8286
8287 /**
8288 * Descriptive name of the bookmark that can be displayed to the user.
8289 * If this is empty, the title should be resolved at display time (use
8290 * {@link #getTitle(Context, Cursor)} any time you want to display the
8291 * title of a bookmark.)
8292 * <P>
8293 * Type: TEXT
8294 * </P>
8295 */
8296 public static final String TITLE = "title";
8297
8298 /**
8299 * Arbitrary string (displayed to the user) that allows bookmarks to be
8300 * organized into categories. There are some special names for
8301 * standard folders, which all start with '@'. The label displayed for
8302 * the folder changes with the locale (via {@link #getLabelForFolder}) but
8303 * the folder name does not change so you can consistently query for
8304 * the folder regardless of the current locale.
8305 *
8306 * <P>Type: TEXT</P>
8307 *
8308 */
8309 public static final String FOLDER = "folder";
8310
8311 /**
8312 * The Intent URL of the bookmark, describing what it points to. This
8313 * value is given to {@link android.content.Intent#getIntent} to create
8314 * an Intent that can be launched.
8315 * <P>Type: TEXT</P>
8316 */
8317 public static final String INTENT = "intent";
8318
8319 /**
8320 * Optional shortcut character associated with this bookmark.
8321 * <P>Type: INTEGER</P>
8322 */
8323 public static final String SHORTCUT = "shortcut";
8324
8325 /**
8326 * The order in which the bookmark should be displayed
8327 * <P>Type: INTEGER</P>
8328 */
8329 public static final String ORDERING = "ordering";
8330
8331 private static final String[] sIntentProjection = { INTENT };
8332 private static final String[] sShortcutProjection = { ID, SHORTCUT };
8333 private static final String sShortcutSelection = SHORTCUT + "=?";
8334
8335 /**
8336 * Convenience function to retrieve the bookmarked Intent for a
8337 * particular shortcut key.
8338 *
8339 * @param cr The ContentResolver to query.
8340 * @param shortcut The shortcut key.
8341 *
8342 * @return Intent The bookmarked URL, or null if there is no bookmark
8343 * matching the given shortcut.
8344 */
8345 public static Intent getIntentForShortcut(ContentResolver cr, char shortcut)
8346 {
8347 Intent intent = null;
8348
8349 Cursor c = cr.query(CONTENT_URI,
8350 sIntentProjection, sShortcutSelection,
8351 new String[] { String.valueOf((int) shortcut) }, ORDERING);
8352 // Keep trying until we find a valid shortcut
8353 try {
8354 while (intent == null && c.moveToNext()) {
8355 try {
8356 String intentURI = c.getString(c.getColumnIndexOrThrow(INTENT));
Christian Mehlmauera34d2c92010-05-25 19:04:20 +02008357 intent = Intent.parseUri(intentURI, 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008358 } catch (java.net.URISyntaxException e) {
8359 // The stored URL is bad... ignore it.
8360 } catch (IllegalArgumentException e) {
8361 // Column not found
Dianne Hackborna33e3f72009-09-29 17:28:24 -07008362 Log.w(TAG, "Intent column not found", e);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008363 }
8364 }
8365 } finally {
8366 if (c != null) c.close();
8367 }
8368
8369 return intent;
8370 }
8371
8372 /**
8373 * Add a new bookmark to the system.
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008374 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008375 * @param cr The ContentResolver to query.
8376 * @param intent The desired target of the bookmark.
8377 * @param title Bookmark title that is shown to the user; null if none
8378 * or it should be resolved to the intent's title.
8379 * @param folder Folder in which to place the bookmark; null if none.
8380 * @param shortcut Shortcut that will invoke the bookmark; 0 if none. If
8381 * this is non-zero and there is an existing bookmark entry
8382 * with this same shortcut, then that existing shortcut is
8383 * cleared (the bookmark is not removed).
8384 * @return The unique content URL for the new bookmark entry.
8385 */
8386 public static Uri add(ContentResolver cr,
8387 Intent intent,
8388 String title,
8389 String folder,
8390 char shortcut,
8391 int ordering)
8392 {
8393 // If a shortcut is supplied, and it is already defined for
8394 // another bookmark, then remove the old definition.
8395 if (shortcut != 0) {
Jeff Hamilton7cd51ef2010-05-12 17:30:27 -05008396 cr.delete(CONTENT_URI, sShortcutSelection,
8397 new String[] { String.valueOf((int) shortcut) });
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008398 }
8399
8400 ContentValues values = new ContentValues();
8401 if (title != null) values.put(TITLE, title);
8402 if (folder != null) values.put(FOLDER, folder);
Jean-Baptiste Queru3b9f0a32010-06-21 13:46:59 -07008403 values.put(INTENT, intent.toUri(0));
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008404 if (shortcut != 0) values.put(SHORTCUT, (int) shortcut);
8405 values.put(ORDERING, ordering);
8406 return cr.insert(CONTENT_URI, values);
8407 }
8408
8409 /**
8410 * Return the folder name as it should be displayed to the user. This
8411 * takes care of localizing special folders.
8412 *
8413 * @param r Resources object for current locale; only need access to
8414 * system resources.
8415 * @param folder The value found in the {@link #FOLDER} column.
8416 *
8417 * @return CharSequence The label for this folder that should be shown
8418 * to the user.
8419 */
8420 public static CharSequence getLabelForFolder(Resources r, String folder) {
8421 return folder;
8422 }
8423
8424 /**
8425 * Return the title as it should be displayed to the user. This takes
8426 * care of localizing bookmarks that point to activities.
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008427 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008428 * @param context A context.
8429 * @param cursor A cursor pointing to the row whose title should be
8430 * returned. The cursor must contain at least the {@link #TITLE}
8431 * and {@link #INTENT} columns.
8432 * @return A title that is localized and can be displayed to the user,
8433 * or the empty string if one could not be found.
8434 */
8435 public static CharSequence getTitle(Context context, Cursor cursor) {
8436 int titleColumn = cursor.getColumnIndex(TITLE);
8437 int intentColumn = cursor.getColumnIndex(INTENT);
8438 if (titleColumn == -1 || intentColumn == -1) {
8439 throw new IllegalArgumentException(
8440 "The cursor must contain the TITLE and INTENT columns.");
8441 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008442
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008443 String title = cursor.getString(titleColumn);
8444 if (!TextUtils.isEmpty(title)) {
8445 return title;
8446 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008447
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008448 String intentUri = cursor.getString(intentColumn);
8449 if (TextUtils.isEmpty(intentUri)) {
8450 return "";
8451 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008452
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008453 Intent intent;
8454 try {
Christian Mehlmauera34d2c92010-05-25 19:04:20 +02008455 intent = Intent.parseUri(intentUri, 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008456 } catch (URISyntaxException e) {
8457 return "";
8458 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07008459
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008460 PackageManager packageManager = context.getPackageManager();
8461 ResolveInfo info = packageManager.resolveActivity(intent, 0);
8462 return info != null ? info.loadLabel(packageManager) : "";
8463 }
8464 }
8465
8466 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008467 * Returns the device ID that we should use when connecting to the mobile gtalk server.
8468 * This is a string like "android-0x1242", where the hex string is the Android ID obtained
8469 * from the GoogleLoginService.
8470 *
8471 * @param androidId The Android ID for this device.
8472 * @return The device ID that should be used when connecting to the mobile gtalk server.
8473 * @hide
8474 */
8475 public static String getGTalkDeviceId(long androidId) {
8476 return "android-" + Long.toHexString(androidId);
8477 }
Billy Lau6ad2d662015-07-18 00:26:58 +01008478
Billy Laua7238a32015-08-01 12:45:02 +01008479 private static final String[] PM_WRITE_SETTINGS = {
8480 android.Manifest.permission.WRITE_SETTINGS
8481 };
8482 private static final String[] PM_CHANGE_NETWORK_STATE = {
8483 android.Manifest.permission.CHANGE_NETWORK_STATE,
8484 android.Manifest.permission.WRITE_SETTINGS
8485 };
8486 private static final String[] PM_SYSTEM_ALERT_WINDOW = {
8487 android.Manifest.permission.SYSTEM_ALERT_WINDOW
8488 };
8489
Billy Lau6ad2d662015-07-18 00:26:58 +01008490 /**
8491 * Performs a strict and comprehensive check of whether a calling package is allowed to
8492 * write/modify system settings, as the condition differs for pre-M, M+, and
8493 * privileged/preinstalled apps. If the provided uid does not match the
8494 * callingPackage, a negative result will be returned.
8495 * @hide
8496 */
8497 public static boolean isCallingPackageAllowedToWriteSettings(Context context, int uid,
8498 String callingPackage, boolean throwException) {
8499 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
8500 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS,
Billy Laua7238a32015-08-01 12:45:02 +01008501 PM_WRITE_SETTINGS, false);
Billy Lau6ad2d662015-07-18 00:26:58 +01008502 }
8503
8504 /**
8505 * Performs a strict and comprehensive check of whether a calling package is allowed to
8506 * write/modify system settings, as the condition differs for pre-M, M+, and
8507 * privileged/preinstalled apps. If the provided uid does not match the
Billy Laua7238a32015-08-01 12:45:02 +01008508 * callingPackage, a negative result will be returned. The caller is expected to have
Lorenzo Colittid5427052015-10-15 16:29:00 +09008509 * the WRITE_SETTINGS permission declared.
Billy Lau6ad2d662015-07-18 00:26:58 +01008510 *
8511 * Note: if the check is successful, the operation of this app will be updated to the
8512 * current time.
8513 * @hide
8514 */
8515 public static boolean checkAndNoteWriteSettingsOperation(Context context, int uid,
8516 String callingPackage, boolean throwException) {
8517 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
8518 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS,
Billy Laua7238a32015-08-01 12:45:02 +01008519 PM_WRITE_SETTINGS, true);
8520 }
8521
8522 /**
8523 * Performs a strict and comprehensive check of whether a calling package is allowed to
8524 * change the state of network, as the condition differs for pre-M, M+, and
Lorenzo Colittid5427052015-10-15 16:29:00 +09008525 * privileged/preinstalled apps. The caller is expected to have either the
8526 * CHANGE_NETWORK_STATE or the WRITE_SETTINGS permission declared. Either of these
8527 * permissions allow changing network state; WRITE_SETTINGS is a runtime permission and
8528 * can be revoked, but (except in M, excluding M MRs), CHANGE_NETWORK_STATE is a normal
8529 * permission and cannot be revoked. See http://b/23597341
Billy Laua7238a32015-08-01 12:45:02 +01008530 *
Lorenzo Colittid5427052015-10-15 16:29:00 +09008531 * Note: if the check succeeds because the application holds WRITE_SETTINGS, the operation
8532 * of this app will be updated to the current time.
Billy Laua7238a32015-08-01 12:45:02 +01008533 * @hide
8534 */
8535 public static boolean checkAndNoteChangeNetworkStateOperation(Context context, int uid,
8536 String callingPackage, boolean throwException) {
Lorenzo Colittid5427052015-10-15 16:29:00 +09008537 if (context.checkCallingOrSelfPermission(android.Manifest.permission.CHANGE_NETWORK_STATE)
8538 == PackageManager.PERMISSION_GRANTED) {
8539 return true;
8540 }
Billy Laua7238a32015-08-01 12:45:02 +01008541 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
8542 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS,
8543 PM_CHANGE_NETWORK_STATE, true);
Billy Lau6ad2d662015-07-18 00:26:58 +01008544 }
8545
8546 /**
8547 * Performs a strict and comprehensive check of whether a calling package is allowed to
8548 * draw on top of other apps, as the conditions differs for pre-M, M+, and
8549 * privileged/preinstalled apps. If the provided uid does not match the callingPackage,
8550 * a negative result will be returned.
8551 * @hide
8552 */
8553 public static boolean isCallingPackageAllowedToDrawOverlays(Context context, int uid,
8554 String callingPackage, boolean throwException) {
8555 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
8556 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
Billy Laua7238a32015-08-01 12:45:02 +01008557 PM_SYSTEM_ALERT_WINDOW, false);
Billy Lau6ad2d662015-07-18 00:26:58 +01008558 }
8559
8560 /**
8561 * Performs a strict and comprehensive check of whether a calling package is allowed to
8562 * draw on top of other apps, as the conditions differs for pre-M, M+, and
8563 * privileged/preinstalled apps. If the provided uid does not match the callingPackage,
8564 * a negative result will be returned.
8565 *
8566 * Note: if the check is successful, the operation of this app will be updated to the
8567 * current time.
8568 * @hide
8569 */
8570 public static boolean checkAndNoteDrawOverlaysOperation(Context context, int uid, String
8571 callingPackage, boolean throwException) {
8572 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid,
8573 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
Billy Laua7238a32015-08-01 12:45:02 +01008574 PM_SYSTEM_ALERT_WINDOW, true);
Billy Lau6ad2d662015-07-18 00:26:58 +01008575 }
8576
8577 /**
8578 * Helper method to perform a general and comprehensive check of whether an operation that is
8579 * protected by appops can be performed by a caller or not. e.g. OP_SYSTEM_ALERT_WINDOW and
8580 * OP_WRITE_SETTINGS
8581 * @hide
8582 */
8583 public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context,
Billy Laua7238a32015-08-01 12:45:02 +01008584 int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[]
8585 permissions, boolean makeNote) {
Billy Lau6ad2d662015-07-18 00:26:58 +01008586 if (callingPackage == null) {
8587 return false;
8588 }
8589
8590 AppOpsManager appOpsMgr = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
8591 int mode = AppOpsManager.MODE_DEFAULT;
8592 if (makeNote) {
8593 mode = appOpsMgr.noteOpNoThrow(appOpsOpCode, uid, callingPackage);
8594 } else {
8595 mode = appOpsMgr.checkOpNoThrow(appOpsOpCode, uid, callingPackage);
8596 }
8597
8598 switch (mode) {
8599 case AppOpsManager.MODE_ALLOWED:
8600 return true;
Billy Laua7238a32015-08-01 12:45:02 +01008601
Billy Lau6ad2d662015-07-18 00:26:58 +01008602 case AppOpsManager.MODE_DEFAULT:
8603 // this is the default operating mode after an app's installation
Billy Laua7238a32015-08-01 12:45:02 +01008604 // In this case we will check all associated static permission to see
8605 // if it is granted during install time.
8606 for (String permission : permissions) {
8607 if (context.checkCallingOrSelfPermission(permission) == PackageManager
8608 .PERMISSION_GRANTED) {
8609 // if either of the permissions are granted, we will allow it
8610 return true;
8611 }
Billy Lau6ad2d662015-07-18 00:26:58 +01008612 }
Billy Laua7238a32015-08-01 12:45:02 +01008613
Billy Lau6ad2d662015-07-18 00:26:58 +01008614 default:
8615 // this is for all other cases trickled down here...
8616 if (!throwException) {
8617 return false;
8618 }
8619 }
Billy Laua7238a32015-08-01 12:45:02 +01008620
8621 // prepare string to throw SecurityException
8622 StringBuilder exceptionMessage = new StringBuilder();
8623 exceptionMessage.append(callingPackage);
8624 exceptionMessage.append(" was not granted ");
8625 if (permissions.length > 1) {
8626 exceptionMessage.append(" either of these permissions: ");
8627 } else {
8628 exceptionMessage.append(" this permission: ");
8629 }
8630 for (int i = 0; i < permissions.length; i++) {
8631 exceptionMessage.append(permissions[i]);
8632 exceptionMessage.append((i == permissions.length - 1) ? "." : ", ");
8633 }
8634
8635 throw new SecurityException(exceptionMessage.toString());
Billy Lau6ad2d662015-07-18 00:26:58 +01008636 }
8637
8638 /**
8639 * Retrieves a correponding package name for a given uid. It will query all
8640 * packages that are associated with the given uid, but it will return only
8641 * the zeroth result.
8642 * Note: If package could not be found, a null is returned.
8643 * @hide
8644 */
8645 public static String getPackageNameForUid(Context context, int uid) {
8646 String[] packages = context.getPackageManager().getPackagesForUid(uid);
8647 if (packages == null) {
8648 return null;
8649 }
8650 return packages[0];
8651 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008652}