1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.provider; 18 19 import android.Manifest; 20 import android.annotation.IntDef; 21 import android.annotation.IntRange; 22 import android.annotation.NonNull; 23 import android.annotation.Nullable; 24 import android.annotation.RequiresPermission; 25 import android.annotation.SdkConstant; 26 import android.annotation.SdkConstant.SdkConstantType; 27 import android.annotation.SystemApi; 28 import android.annotation.TestApi; 29 import android.annotation.UserIdInt; 30 import android.app.ActivityThread; 31 import android.app.AppOpsManager; 32 import android.app.Application; 33 import android.app.NotificationChannel; 34 import android.app.NotificationManager; 35 import android.app.SearchManager; 36 import android.app.WallpaperManager; 37 import android.content.ComponentName; 38 import android.content.ContentResolver; 39 import android.content.ContentValues; 40 import android.content.Context; 41 import android.content.IContentProvider; 42 import android.content.Intent; 43 import android.content.pm.ActivityInfo; 44 import android.content.pm.PackageManager; 45 import android.content.pm.ResolveInfo; 46 import android.content.res.Configuration; 47 import android.content.res.Resources; 48 import android.database.Cursor; 49 import android.database.SQLException; 50 import android.location.LocationManager; 51 import android.net.ConnectivityManager; 52 import android.net.NetworkScoreManager; 53 import android.net.Uri; 54 import android.net.wifi.WifiManager; 55 import android.os.BatteryManager; 56 import android.os.Binder; 57 import android.os.Build.VERSION_CODES; 58 import android.os.Bundle; 59 import android.os.DropBoxManager; 60 import android.os.IBinder; 61 import android.os.LocaleList; 62 import android.os.Process; 63 import android.os.RemoteException; 64 import android.os.ResultReceiver; 65 import android.os.ServiceManager; 66 import android.os.UserHandle; 67 import android.speech.tts.TextToSpeech; 68 import android.text.TextUtils; 69 import android.util.AndroidException; 70 import android.util.ArrayMap; 71 import android.util.ArraySet; 72 import android.util.Log; 73 import android.util.MemoryIntArray; 74 75 import com.android.internal.annotations.GuardedBy; 76 import com.android.internal.util.ArrayUtils; 77 import com.android.internal.widget.ILockSettings; 78 79 import java.io.IOException; 80 import java.lang.annotation.Retention; 81 import java.lang.annotation.RetentionPolicy; 82 import java.net.URISyntaxException; 83 import java.text.SimpleDateFormat; 84 import java.util.HashMap; 85 import java.util.HashSet; 86 import java.util.Locale; 87 import java.util.Map; 88 import java.util.Set; 89 90 /** 91 * The Settings provider contains global system-level device preferences. 92 */ 93 public final class Settings { 94 95 // Intent actions for Settings 96 97 /** 98 * Activity Action: Show system settings. 99 * <p> 100 * Input: Nothing. 101 * <p> 102 * Output: Nothing. 103 */ 104 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 105 public static final String ACTION_SETTINGS = "android.settings.SETTINGS"; 106 107 /** 108 * Activity Action: Show settings to allow configuration of APNs. 109 * <p> 110 * Input: Nothing. 111 * <p> 112 * Output: Nothing. 113 */ 114 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 115 public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS"; 116 117 /** 118 * Activity Action: Show settings to allow configuration of current location 119 * sources. 120 * <p> 121 * In some cases, a matching Activity may not exist, so ensure you 122 * safeguard against this. 123 * <p> 124 * Input: Nothing. 125 * <p> 126 * Output: Nothing. 127 */ 128 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 129 public static final String ACTION_LOCATION_SOURCE_SETTINGS = 130 "android.settings.LOCATION_SOURCE_SETTINGS"; 131 132 /** 133 * Activity Action: Show settings to allow configuration of users. 134 * <p> 135 * In some cases, a matching Activity may not exist, so ensure you 136 * safeguard against this. 137 * <p> 138 * Input: Nothing. 139 * <p> 140 * Output: Nothing. 141 * @hide 142 */ 143 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 144 public static final String ACTION_USER_SETTINGS = 145 "android.settings.USER_SETTINGS"; 146 147 /** 148 * Activity Action: Show settings to allow configuration of wireless controls 149 * such as Wi-Fi, Bluetooth and Mobile networks. 150 * <p> 151 * In some cases, a matching Activity may not exist, so ensure you 152 * safeguard against this. 153 * <p> 154 * Input: Nothing. 155 * <p> 156 * Output: Nothing. 157 */ 158 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 159 public static final String ACTION_WIRELESS_SETTINGS = 160 "android.settings.WIRELESS_SETTINGS"; 161 162 /** 163 * Activity Action: Show tether provisioning activity. 164 * 165 * <p> 166 * In some cases, a matching Activity may not exist, so ensure you 167 * safeguard against this. 168 * <p> 169 * Input: {@link ConnectivityManager#EXTRA_TETHER_TYPE} should be included to specify which type 170 * of tethering should be checked. {@link ConnectivityManager#EXTRA_PROVISION_CALLBACK} should 171 * contain a {@link ResultReceiver} which will be called back with a tether result code. 172 * <p> 173 * Output: The result of the provisioning check. 174 * {@link ConnectivityManager#TETHER_ERROR_NO_ERROR} if successful, 175 * {@link ConnectivityManager#TETHER_ERROR_PROVISION_FAILED} for failure. 176 * 177 * @hide 178 */ 179 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 180 public static final String ACTION_TETHER_PROVISIONING = 181 "android.settings.TETHER_PROVISIONING_UI"; 182 183 /** 184 * Activity Action: Show settings to allow entering/exiting airplane mode. 185 * <p> 186 * In some cases, a matching Activity may not exist, so ensure you 187 * safeguard against this. 188 * <p> 189 * Input: Nothing. 190 * <p> 191 * Output: Nothing. 192 */ 193 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 194 public static final String ACTION_AIRPLANE_MODE_SETTINGS = 195 "android.settings.AIRPLANE_MODE_SETTINGS"; 196 197 /** 198 * Activity Action: Show mobile data usage list. 199 * <p> 200 * Input: {@link EXTRA_NETWORK_TEMPLATE} and {@link EXTRA_SUB_ID} should be included to specify 201 * how and what mobile data statistics should be collected. 202 * <p> 203 * Output: Nothing 204 * @hide 205 */ 206 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 207 public static final String ACTION_MOBILE_DATA_USAGE = 208 "android.settings.MOBILE_DATA_USAGE"; 209 210 /** @hide */ 211 public static final String EXTRA_NETWORK_TEMPLATE = "network_template"; 212 /** @hide */ 213 public static final String EXTRA_SUB_ID = "sub_id"; 214 215 /** 216 * Activity Action: Modify Airplane mode settings using a voice command. 217 * <p> 218 * In some cases, a matching Activity may not exist, so ensure you safeguard against this. 219 * <p> 220 * This intent MUST be started using 221 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity 222 * startVoiceActivity}. 223 * <p> 224 * Note: The activity implementing this intent MUST verify that 225 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before 226 * modifying the setting. 227 * <p> 228 * Input: To tell which state airplane mode should be set to, add the 229 * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified. 230 * If the extra is not included, no changes will be made. 231 * <p> 232 * Output: Nothing. 233 */ 234 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 235 public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE = 236 "android.settings.VOICE_CONTROL_AIRPLANE_MODE"; 237 238 /** 239 * Activity Action: Show settings for accessibility modules. 240 * <p> 241 * In some cases, a matching Activity may not exist, so ensure you 242 * safeguard against this. 243 * <p> 244 * Input: Nothing. 245 * <p> 246 * Output: Nothing. 247 */ 248 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 249 public static final String ACTION_ACCESSIBILITY_SETTINGS = 250 "android.settings.ACCESSIBILITY_SETTINGS"; 251 252 /** 253 * Activity Action: Show settings to control access to usage information. 254 * <p> 255 * In some cases, a matching Activity may not exist, so ensure you 256 * safeguard against this. 257 * <p> 258 * Input: Nothing. 259 * <p> 260 * Output: Nothing. 261 */ 262 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 263 public static final String ACTION_USAGE_ACCESS_SETTINGS = 264 "android.settings.USAGE_ACCESS_SETTINGS"; 265 266 /** 267 * Activity Category: Show application settings related to usage access. 268 * <p> 269 * An activity that provides a user interface for adjusting usage access related 270 * preferences for its containing application. Optional but recommended for apps that 271 * use {@link android.Manifest.permission#PACKAGE_USAGE_STATS}. 272 * <p> 273 * The activity may define meta-data to describe what usage access is 274 * used for within their app with {@link #METADATA_USAGE_ACCESS_REASON}, which 275 * will be displayed in Settings. 276 * <p> 277 * Input: Nothing. 278 * <p> 279 * Output: Nothing. 280 */ 281 @SdkConstant(SdkConstantType.INTENT_CATEGORY) 282 public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG = 283 "android.intent.category.USAGE_ACCESS_CONFIG"; 284 285 /** 286 * Metadata key: Reason for needing usage access. 287 * <p> 288 * A key for metadata attached to an activity that receives action 289 * {@link #INTENT_CATEGORY_USAGE_ACCESS_CONFIG}, shown to the 290 * user as description of how the app uses usage access. 291 * <p> 292 */ 293 public static final String METADATA_USAGE_ACCESS_REASON = 294 "android.settings.metadata.USAGE_ACCESS_REASON"; 295 296 /** 297 * Activity Action: Show settings to allow configuration of security and 298 * location privacy. 299 * <p> 300 * In some cases, a matching Activity may not exist, so ensure you 301 * safeguard against this. 302 * <p> 303 * Input: Nothing. 304 * <p> 305 * Output: Nothing. 306 */ 307 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 308 public static final String ACTION_SECURITY_SETTINGS = 309 "android.settings.SECURITY_SETTINGS"; 310 311 /** 312 * Activity Action: Show settings to allow configuration of trusted external sources 313 * 314 * Input: Optionally, the Intent's data URI can specify the application package name to 315 * directly invoke the management GUI specific to the package name. For example 316 * "package:com.my.app". 317 * <p> 318 * Output: Nothing. 319 */ 320 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 321 public static final String ACTION_MANAGE_UNKNOWN_APP_SOURCES = 322 "android.settings.MANAGE_UNKNOWN_APP_SOURCES"; 323 324 /** 325 * Activity Action: Show trusted credentials settings, opening to the user tab, 326 * to allow management of installed credentials. 327 * <p> 328 * In some cases, a matching Activity may not exist, so ensure you 329 * safeguard against this. 330 * <p> 331 * Input: Nothing. 332 * <p> 333 * Output: Nothing. 334 * @hide 335 */ 336 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 337 public static final String ACTION_TRUSTED_CREDENTIALS_USER = 338 "com.android.settings.TRUSTED_CREDENTIALS_USER"; 339 340 /** 341 * Activity Action: Show dialog explaining that an installed CA cert may enable 342 * monitoring of encrypted network traffic. 343 * <p> 344 * In some cases, a matching Activity may not exist, so ensure you 345 * safeguard against this. Add {@link #EXTRA_NUMBER_OF_CERTIFICATES} extra to indicate the 346 * number of certificates. 347 * <p> 348 * Input: Nothing. 349 * <p> 350 * Output: Nothing. 351 * @hide 352 */ 353 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 354 public static final String ACTION_MONITORING_CERT_INFO = 355 "com.android.settings.MONITORING_CERT_INFO"; 356 357 /** 358 * Activity Action: Show settings to allow configuration of privacy options. 359 * <p> 360 * In some cases, a matching Activity may not exist, so ensure you 361 * safeguard against this. 362 * <p> 363 * Input: Nothing. 364 * <p> 365 * Output: Nothing. 366 */ 367 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 368 public static final String ACTION_PRIVACY_SETTINGS = 369 "android.settings.PRIVACY_SETTINGS"; 370 371 /** 372 * Activity Action: Show settings to allow configuration of VPN. 373 * <p> 374 * In some cases, a matching Activity may not exist, so ensure you 375 * safeguard against this. 376 * <p> 377 * Input: Nothing. 378 * <p> 379 * Output: Nothing. 380 */ 381 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 382 public static final String ACTION_VPN_SETTINGS = 383 "android.settings.VPN_SETTINGS"; 384 385 /** 386 * Activity Action: Show settings to allow configuration of Wi-Fi. 387 * <p> 388 * In some cases, a matching Activity may not exist, so ensure you 389 * safeguard against this. 390 * <p> 391 * Input: Nothing. 392 * <p> 393 * Output: Nothing. 394 */ 395 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 396 public static final String ACTION_WIFI_SETTINGS = 397 "android.settings.WIFI_SETTINGS"; 398 399 /** 400 * Activity Action: Show settings to allow configuration of a static IP 401 * address for Wi-Fi. 402 * <p> 403 * In some cases, a matching Activity may not exist, so ensure you safeguard 404 * against this. 405 * <p> 406 * Input: Nothing. 407 * <p> 408 * Output: Nothing. 409 */ 410 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 411 public static final String ACTION_WIFI_IP_SETTINGS = 412 "android.settings.WIFI_IP_SETTINGS"; 413 414 /** 415 * Activity Action: Show settings to allow configuration of Bluetooth. 416 * <p> 417 * In some cases, a matching Activity may not exist, so ensure you 418 * safeguard against this. 419 * <p> 420 * Input: Nothing. 421 * <p> 422 * Output: Nothing. 423 */ 424 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 425 public static final String ACTION_BLUETOOTH_SETTINGS = 426 "android.settings.BLUETOOTH_SETTINGS"; 427 428 /** 429 * Activity Action: Show settings to allow configuration of Assist Gesture. 430 * <p> 431 * In some cases, a matching Activity may not exist, so ensure you 432 * safeguard against this. 433 * <p> 434 * Input: Nothing. 435 * <p> 436 * Output: Nothing. 437 * @hide 438 */ 439 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 440 public static final String ACTION_ASSIST_GESTURE_SETTINGS = 441 "android.settings.ASSIST_GESTURE_SETTINGS"; 442 443 /** 444 * Activity Action: Show settings to allow configuration of cast endpoints. 445 * <p> 446 * In some cases, a matching Activity may not exist, so ensure you 447 * safeguard against this. 448 * <p> 449 * Input: Nothing. 450 * <p> 451 * Output: Nothing. 452 */ 453 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 454 public static final String ACTION_CAST_SETTINGS = 455 "android.settings.CAST_SETTINGS"; 456 457 /** 458 * Activity Action: Show settings to allow configuration of date and time. 459 * <p> 460 * In some cases, a matching Activity may not exist, so ensure you 461 * safeguard against this. 462 * <p> 463 * Input: Nothing. 464 * <p> 465 * Output: Nothing. 466 */ 467 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 468 public static final String ACTION_DATE_SETTINGS = 469 "android.settings.DATE_SETTINGS"; 470 471 /** 472 * Activity Action: Show settings to allow configuration of sound and volume. 473 * <p> 474 * In some cases, a matching Activity may not exist, so ensure you 475 * safeguard against this. 476 * <p> 477 * Input: Nothing. 478 * <p> 479 * Output: Nothing. 480 */ 481 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 482 public static final String ACTION_SOUND_SETTINGS = 483 "android.settings.SOUND_SETTINGS"; 484 485 /** 486 * Activity Action: Show settings to allow configuration of display. 487 * <p> 488 * In some cases, a matching Activity may not exist, so ensure you 489 * safeguard against this. 490 * <p> 491 * Input: Nothing. 492 * <p> 493 * Output: Nothing. 494 */ 495 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 496 public static final String ACTION_DISPLAY_SETTINGS = 497 "android.settings.DISPLAY_SETTINGS"; 498 499 /** 500 * Activity Action: Show settings to allow configuration of Night display. 501 * <p> 502 * In some cases, a matching Activity may not exist, so ensure you 503 * safeguard against this. 504 * <p> 505 * Input: Nothing. 506 * <p> 507 * Output: Nothing. 508 */ 509 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 510 public static final String ACTION_NIGHT_DISPLAY_SETTINGS = 511 "android.settings.NIGHT_DISPLAY_SETTINGS"; 512 513 /** 514 * Activity Action: Show settings to allow configuration of locale. 515 * <p> 516 * In some cases, a matching Activity may not exist, so ensure you 517 * safeguard against this. 518 * <p> 519 * Input: Nothing. 520 * <p> 521 * Output: Nothing. 522 */ 523 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 524 public static final String ACTION_LOCALE_SETTINGS = 525 "android.settings.LOCALE_SETTINGS"; 526 527 /** 528 * Activity Action: Show settings to configure input methods, in particular 529 * allowing the user to enable input methods. 530 * <p> 531 * In some cases, a matching Activity may not exist, so ensure you 532 * safeguard against this. 533 * <p> 534 * Input: Nothing. 535 * <p> 536 * Output: Nothing. 537 */ 538 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 539 public static final String ACTION_VOICE_INPUT_SETTINGS = 540 "android.settings.VOICE_INPUT_SETTINGS"; 541 542 /** 543 * Activity Action: Show settings to configure input methods, in particular 544 * allowing the user to enable input methods. 545 * <p> 546 * In some cases, a matching Activity may not exist, so ensure you 547 * safeguard against this. 548 * <p> 549 * Input: Nothing. 550 * <p> 551 * Output: Nothing. 552 */ 553 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 554 public static final String ACTION_INPUT_METHOD_SETTINGS = 555 "android.settings.INPUT_METHOD_SETTINGS"; 556 557 /** 558 * Activity Action: Show settings to enable/disable input method subtypes. 559 * <p> 560 * In some cases, a matching Activity may not exist, so ensure you 561 * safeguard against this. 562 * <p> 563 * To tell which input method's subtypes are displayed in the settings, add 564 * {@link #EXTRA_INPUT_METHOD_ID} extra to this Intent with the input method id. 565 * If there is no extra in this Intent, subtypes from all installed input methods 566 * will be displayed in the settings. 567 * 568 * @see android.view.inputmethod.InputMethodInfo#getId 569 * <p> 570 * Input: Nothing. 571 * <p> 572 * Output: Nothing. 573 */ 574 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 575 public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS = 576 "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS"; 577 578 /** 579 * Activity Action: Show settings to manage the user input dictionary. 580 * <p> 581 * Starting with {@link android.os.Build.VERSION_CODES#KITKAT}, 582 * it is guaranteed there will always be an appropriate implementation for this Intent action. 583 * In prior releases of the platform this was optional, so ensure you safeguard against it. 584 * <p> 585 * Input: Nothing. 586 * <p> 587 * Output: Nothing. 588 */ 589 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 590 public static final String ACTION_USER_DICTIONARY_SETTINGS = 591 "android.settings.USER_DICTIONARY_SETTINGS"; 592 593 /** 594 * Activity Action: Show settings to configure the hardware keyboard. 595 * <p> 596 * In some cases, a matching Activity may not exist, so ensure you 597 * safeguard against this. 598 * <p> 599 * Input: Nothing. 600 * <p> 601 * Output: Nothing. 602 */ 603 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 604 public static final String ACTION_HARD_KEYBOARD_SETTINGS = 605 "android.settings.HARD_KEYBOARD_SETTINGS"; 606 607 /** 608 * Activity Action: Adds a word to the user dictionary. 609 * <p> 610 * In some cases, a matching Activity may not exist, so ensure you 611 * safeguard against this. 612 * <p> 613 * Input: An extra with key <code>word</code> that contains the word 614 * that should be added to the dictionary. 615 * <p> 616 * Output: Nothing. 617 * 618 * @hide 619 */ 620 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 621 public static final String ACTION_USER_DICTIONARY_INSERT = 622 "com.android.settings.USER_DICTIONARY_INSERT"; 623 624 /** 625 * Activity Action: Show settings to allow configuration of application-related settings. 626 * <p> 627 * In some cases, a matching Activity may not exist, so ensure you 628 * safeguard against this. 629 * <p> 630 * Input: Nothing. 631 * <p> 632 * Output: Nothing. 633 */ 634 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 635 public static final String ACTION_APPLICATION_SETTINGS = 636 "android.settings.APPLICATION_SETTINGS"; 637 638 /** 639 * Activity Action: Show settings to allow configuration of application 640 * development-related settings. As of 641 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} this action is 642 * a required part of the platform. 643 * <p> 644 * Input: Nothing. 645 * <p> 646 * Output: Nothing. 647 */ 648 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 649 public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS = 650 "android.settings.APPLICATION_DEVELOPMENT_SETTINGS"; 651 652 /** 653 * Activity Action: Show settings to allow configuration of quick launch shortcuts. 654 * <p> 655 * In some cases, a matching Activity may not exist, so ensure you 656 * safeguard against this. 657 * <p> 658 * Input: Nothing. 659 * <p> 660 * Output: Nothing. 661 */ 662 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 663 public static final String ACTION_QUICK_LAUNCH_SETTINGS = 664 "android.settings.QUICK_LAUNCH_SETTINGS"; 665 666 /** 667 * Activity Action: Show settings to manage installed applications. 668 * <p> 669 * In some cases, a matching Activity may not exist, so ensure you 670 * safeguard against this. 671 * <p> 672 * Input: Nothing. 673 * <p> 674 * Output: Nothing. 675 */ 676 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 677 public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = 678 "android.settings.MANAGE_APPLICATIONS_SETTINGS"; 679 680 /** 681 * Activity Action: Show settings to manage all applications. 682 * <p> 683 * In some cases, a matching Activity may not exist, so ensure you 684 * safeguard against this. 685 * <p> 686 * Input: Nothing. 687 * <p> 688 * Output: Nothing. 689 */ 690 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 691 public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = 692 "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS"; 693 694 /** 695 * Activity Action: Show screen for controlling which apps can draw on top of other apps. 696 * <p> 697 * In some cases, a matching Activity may not exist, so ensure you 698 * safeguard against this. 699 * <p> 700 * Input: Optionally, the Intent's data URI can specify the application package name to 701 * directly invoke the management GUI specific to the package name. For example 702 * "package:com.my.app". 703 * <p> 704 * Output: Nothing. 705 */ 706 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 707 public static final String ACTION_MANAGE_OVERLAY_PERMISSION = 708 "android.settings.action.MANAGE_OVERLAY_PERMISSION"; 709 710 /** 711 * Activity Action: Show screen for controlling which apps are allowed to write/modify 712 * system settings. 713 * <p> 714 * In some cases, a matching Activity may not exist, so ensure you 715 * safeguard against this. 716 * <p> 717 * Input: Optionally, the Intent's data URI can specify the application package name to 718 * directly invoke the management GUI specific to the package name. For example 719 * "package:com.my.app". 720 * <p> 721 * Output: Nothing. 722 */ 723 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 724 public static final String ACTION_MANAGE_WRITE_SETTINGS = 725 "android.settings.action.MANAGE_WRITE_SETTINGS"; 726 727 /** 728 * Activity Action: Show screen of details about a particular application. 729 * <p> 730 * In some cases, a matching Activity may not exist, so ensure you 731 * safeguard against this. 732 * <p> 733 * Input: The Intent's data URI specifies the application package name 734 * to be shown, with the "package" scheme. That is "package:com.my.app". 735 * <p> 736 * Output: Nothing. 737 */ 738 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 739 public static final String ACTION_APPLICATION_DETAILS_SETTINGS = 740 "android.settings.APPLICATION_DETAILS_SETTINGS"; 741 742 /** 743 * Activity Action: Show list of applications that have been running 744 * foreground services (to the user "running in the background"). 745 * <p> 746 * Input: Extras "packages" is a string array of package names. 747 * <p> 748 * Output: Nothing. 749 * @hide 750 */ 751 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 752 public static final String ACTION_FOREGROUND_SERVICES_SETTINGS = 753 "android.settings.FOREGROUND_SERVICES_SETTINGS"; 754 755 /** 756 * Activity Action: Show screen for controlling which apps can ignore battery optimizations. 757 * <p> 758 * Input: Nothing. 759 * <p> 760 * Output: Nothing. 761 * <p> 762 * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations 763 * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is 764 * already ignoring optimizations. You can use 765 * {@link #ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS} to ask the user to put you 766 * on this list. 767 */ 768 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 769 public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS = 770 "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS"; 771 772 /** 773 * Activity Action: Ask the user to allow an app to ignore battery optimizations (that is, 774 * put them on the whitelist of apps shown by 775 * {@link #ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}). For an app to use this, it also 776 * must hold the {@link android.Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS} 777 * permission. 778 * <p><b>Note:</b> most applications should <em>not</em> use this; there are many facilities 779 * provided by the platform for applications to operate correctly in the various power 780 * saving modes. This is only for unusual applications that need to deeply control their own 781 * execution, at the potential expense of the user's battery life. Note that these applications 782 * greatly run the risk of showing to the user as high power consumers on their device.</p> 783 * <p> 784 * Input: The Intent's data URI must specify the application package name 785 * to be shown, with the "package" scheme. That is "package:com.my.app". 786 * <p> 787 * Output: Nothing. 788 * <p> 789 * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations 790 * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is 791 * already ignoring optimizations. 792 */ 793 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 794 public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = 795 "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"; 796 797 /** 798 * Activity Action: Show screen for controlling background data 799 * restrictions for a particular application. 800 * <p> 801 * Input: Intent's data URI set with an application name, using the 802 * "package" schema (like "package:com.my.app"). 803 * 804 * <p> 805 * Output: Nothing. 806 * <p> 807 * Applications can also use {@link android.net.ConnectivityManager#getRestrictBackgroundStatus 808 * ConnectivityManager#getRestrictBackgroundStatus()} to determine the 809 * status of the background data restrictions for them. 810 */ 811 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 812 public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS = 813 "android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS"; 814 815 /** 816 * @hide 817 * Activity Action: Show the "app ops" settings screen. 818 * <p> 819 * Input: Nothing. 820 * <p> 821 * Output: Nothing. 822 */ 823 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 824 public static final String ACTION_APP_OPS_SETTINGS = 825 "android.settings.APP_OPS_SETTINGS"; 826 827 /** 828 * Activity Action: Show settings for system update functionality. 829 * <p> 830 * In some cases, a matching Activity may not exist, so ensure you 831 * safeguard against this. 832 * <p> 833 * Input: Nothing. 834 * <p> 835 * Output: Nothing. 836 * 837 * @hide 838 */ 839 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 840 public static final String ACTION_SYSTEM_UPDATE_SETTINGS = 841 "android.settings.SYSTEM_UPDATE_SETTINGS"; 842 843 /** 844 * Activity Action: Show settings for managed profile settings. 845 * <p> 846 * In some cases, a matching Activity may not exist, so ensure you 847 * safeguard against this. 848 * <p> 849 * Input: Nothing. 850 * <p> 851 * Output: Nothing. 852 * 853 * @hide 854 */ 855 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 856 public static final String ACTION_MANAGED_PROFILE_SETTINGS = 857 "android.settings.MANAGED_PROFILE_SETTINGS"; 858 859 /** 860 * Activity Action: Show settings to allow configuration of sync settings. 861 * <p> 862 * In some cases, a matching Activity may not exist, so ensure you 863 * safeguard against this. 864 * <p> 865 * The account types available to add via the add account button may be restricted by adding an 866 * {@link #EXTRA_AUTHORITIES} extra to this Intent with one or more syncable content provider's 867 * authorities. Only account types which can sync with that content provider will be offered to 868 * the user. 869 * <p> 870 * Input: Nothing. 871 * <p> 872 * Output: Nothing. 873 */ 874 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 875 public static final String ACTION_SYNC_SETTINGS = 876 "android.settings.SYNC_SETTINGS"; 877 878 /** 879 * Activity Action: Show add account screen for creating a new account. 880 * <p> 881 * In some cases, a matching Activity may not exist, so ensure you 882 * safeguard against this. 883 * <p> 884 * The account types available to add may be restricted by adding an {@link #EXTRA_AUTHORITIES} 885 * extra to the Intent with one or more syncable content provider's authorities. Only account 886 * types which can sync with that content provider will be offered to the user. 887 * <p> 888 * Account types can also be filtered by adding an {@link #EXTRA_ACCOUNT_TYPES} extra to the 889 * Intent with one or more account types. 890 * <p> 891 * Input: Nothing. 892 * <p> 893 * Output: Nothing. 894 */ 895 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 896 public static final String ACTION_ADD_ACCOUNT = 897 "android.settings.ADD_ACCOUNT_SETTINGS"; 898 899 /** 900 * Activity Action: Show settings for selecting the network operator. 901 * <p> 902 * In some cases, a matching Activity may not exist, so ensure you 903 * safeguard against this. 904 * <p> 905 * Input: Nothing. 906 * <p> 907 * Output: Nothing. 908 */ 909 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 910 public static final String ACTION_NETWORK_OPERATOR_SETTINGS = 911 "android.settings.NETWORK_OPERATOR_SETTINGS"; 912 913 /** 914 * Activity Action: Show settings for selection of 2G/3G. 915 * <p> 916 * In some cases, a matching Activity may not exist, so ensure you 917 * safeguard against this. 918 * <p> 919 * Input: Nothing. 920 * <p> 921 * Output: Nothing. 922 */ 923 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 924 public static final String ACTION_DATA_ROAMING_SETTINGS = 925 "android.settings.DATA_ROAMING_SETTINGS"; 926 927 /** 928 * Activity Action: Show settings for internal storage. 929 * <p> 930 * In some cases, a matching Activity may not exist, so ensure you 931 * safeguard against this. 932 * <p> 933 * Input: Nothing. 934 * <p> 935 * Output: Nothing. 936 */ 937 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 938 public static final String ACTION_INTERNAL_STORAGE_SETTINGS = 939 "android.settings.INTERNAL_STORAGE_SETTINGS"; 940 /** 941 * Activity Action: Show settings for memory card storage. 942 * <p> 943 * In some cases, a matching Activity may not exist, so ensure you 944 * safeguard against this. 945 * <p> 946 * Input: Nothing. 947 * <p> 948 * Output: Nothing. 949 */ 950 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 951 public static final String ACTION_MEMORY_CARD_SETTINGS = 952 "android.settings.MEMORY_CARD_SETTINGS"; 953 954 /** 955 * Activity Action: Show settings for global search. 956 * <p> 957 * In some cases, a matching Activity may not exist, so ensure you 958 * safeguard against this. 959 * <p> 960 * Input: Nothing. 961 * <p> 962 * Output: Nothing 963 */ 964 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 965 public static final String ACTION_SEARCH_SETTINGS = 966 "android.search.action.SEARCH_SETTINGS"; 967 968 /** 969 * Activity Action: Show general device information settings (serial 970 * number, software version, phone number, etc.). 971 * <p> 972 * In some cases, a matching Activity may not exist, so ensure you 973 * safeguard against this. 974 * <p> 975 * Input: Nothing. 976 * <p> 977 * Output: Nothing 978 */ 979 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 980 public static final String ACTION_DEVICE_INFO_SETTINGS = 981 "android.settings.DEVICE_INFO_SETTINGS"; 982 983 /** 984 * Activity Action: Show NFC settings. 985 * <p> 986 * This shows UI that allows NFC to be turned on or off. 987 * <p> 988 * In some cases, a matching Activity may not exist, so ensure you 989 * safeguard against this. 990 * <p> 991 * Input: Nothing. 992 * <p> 993 * Output: Nothing 994 * @see android.nfc.NfcAdapter#isEnabled() 995 */ 996 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 997 public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS"; 998 999 /** 1000 * Activity Action: Show NFC Sharing settings. 1001 * <p> 1002 * This shows UI that allows NDEF Push (Android Beam) to be turned on or 1003 * off. 1004 * <p> 1005 * In some cases, a matching Activity may not exist, so ensure you 1006 * safeguard against this. 1007 * <p> 1008 * Input: Nothing. 1009 * <p> 1010 * Output: Nothing 1011 * @see android.nfc.NfcAdapter#isNdefPushEnabled() 1012 */ 1013 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1014 public static final String ACTION_NFCSHARING_SETTINGS = 1015 "android.settings.NFCSHARING_SETTINGS"; 1016 1017 /** 1018 * Activity Action: Show NFC Tap & Pay settings 1019 * <p> 1020 * This shows UI that allows the user to configure Tap&Pay 1021 * settings. 1022 * <p> 1023 * In some cases, a matching Activity may not exist, so ensure you 1024 * safeguard against this. 1025 * <p> 1026 * Input: Nothing. 1027 * <p> 1028 * Output: Nothing 1029 */ 1030 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1031 public static final String ACTION_NFC_PAYMENT_SETTINGS = 1032 "android.settings.NFC_PAYMENT_SETTINGS"; 1033 1034 /** 1035 * Activity Action: Show Daydream settings. 1036 * <p> 1037 * In some cases, a matching Activity may not exist, so ensure you 1038 * safeguard against this. 1039 * <p> 1040 * Input: Nothing. 1041 * <p> 1042 * Output: Nothing. 1043 * @see android.service.dreams.DreamService 1044 */ 1045 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1046 public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS"; 1047 1048 /** 1049 * Activity Action: Show Notification listener settings. 1050 * <p> 1051 * In some cases, a matching Activity may not exist, so ensure you 1052 * safeguard against this. 1053 * <p> 1054 * Input: Nothing. 1055 * <p> 1056 * Output: Nothing. 1057 * @see android.service.notification.NotificationListenerService 1058 */ 1059 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1060 public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS 1061 = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"; 1062 1063 /** 1064 * Activity Action: Show Do Not Disturb access settings. 1065 * <p> 1066 * Users can grant and deny access to Do Not Disturb configuration from here. 1067 * See {@link android.app.NotificationManager#isNotificationPolicyAccessGranted()} for more 1068 * details. 1069 * <p> 1070 * Input: Nothing. 1071 * <p> 1072 * Output: Nothing. 1073 */ 1074 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1075 public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS 1076 = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS"; 1077 1078 /** 1079 * @hide 1080 */ 1081 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1082 public static final String ACTION_CONDITION_PROVIDER_SETTINGS 1083 = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS"; 1084 1085 /** 1086 * Activity Action: Show settings for video captioning. 1087 * <p> 1088 * In some cases, a matching Activity may not exist, so ensure you safeguard 1089 * against this. 1090 * <p> 1091 * Input: Nothing. 1092 * <p> 1093 * Output: Nothing. 1094 */ 1095 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1096 public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS"; 1097 1098 /** 1099 * Activity Action: Show the top level print settings. 1100 * <p> 1101 * In some cases, a matching Activity may not exist, so ensure you 1102 * safeguard against this. 1103 * <p> 1104 * Input: Nothing. 1105 * <p> 1106 * Output: Nothing. 1107 */ 1108 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1109 public static final String ACTION_PRINT_SETTINGS = 1110 "android.settings.ACTION_PRINT_SETTINGS"; 1111 1112 /** 1113 * Activity Action: Show Zen Mode configuration settings. 1114 * 1115 * @hide 1116 */ 1117 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1118 public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS"; 1119 1120 /** 1121 * Activity Action: Show Zen Mode (aka Do Not Disturb) priority configuration settings. 1122 */ 1123 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1124 public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS 1125 = "android.settings.ZEN_MODE_PRIORITY_SETTINGS"; 1126 1127 /** 1128 * Activity Action: Show Zen Mode automation configuration settings. 1129 * 1130 * @hide 1131 */ 1132 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1133 public static final String ACTION_ZEN_MODE_AUTOMATION_SETTINGS 1134 = "android.settings.ZEN_MODE_AUTOMATION_SETTINGS"; 1135 1136 /** 1137 * Activity Action: Modify do not disturb mode settings. 1138 * <p> 1139 * In some cases, a matching Activity may not exist, so ensure you safeguard against this. 1140 * <p> 1141 * This intent MUST be started using 1142 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity 1143 * startVoiceActivity}. 1144 * <p> 1145 * Note: The Activity implementing this intent MUST verify that 1146 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}. 1147 * returns true before modifying the setting. 1148 * <p> 1149 * Input: The optional {@link #EXTRA_DO_NOT_DISTURB_MODE_MINUTES} extra can be used to indicate 1150 * how long the user wishes to avoid interruptions for. The optional 1151 * {@link #EXTRA_DO_NOT_DISTURB_MODE_ENABLED} extra can be to indicate if the user is 1152 * enabling or disabling do not disturb mode. If either extra is not included, the 1153 * user maybe asked to provide the value. 1154 * <p> 1155 * Output: Nothing. 1156 */ 1157 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1158 public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE = 1159 "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE"; 1160 1161 /** 1162 * Activity Action: Show Zen Mode schedule rule configuration settings. 1163 * 1164 * @hide 1165 */ 1166 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1167 public static final String ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS 1168 = "android.settings.ZEN_MODE_SCHEDULE_RULE_SETTINGS"; 1169 1170 /** 1171 * Activity Action: Show Zen Mode event rule configuration settings. 1172 * 1173 * @hide 1174 */ 1175 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1176 public static final String ACTION_ZEN_MODE_EVENT_RULE_SETTINGS 1177 = "android.settings.ZEN_MODE_EVENT_RULE_SETTINGS"; 1178 1179 /** 1180 * Activity Action: Show Zen Mode external rule configuration settings. 1181 * 1182 * @hide 1183 */ 1184 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1185 public static final String ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS 1186 = "android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS"; 1187 1188 /** 1189 * Activity Action: Show the regulatory information screen for the device. 1190 * <p> 1191 * In some cases, a matching Activity may not exist, so ensure you safeguard 1192 * against this. 1193 * <p> 1194 * Input: Nothing. 1195 * <p> 1196 * Output: Nothing. 1197 */ 1198 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1199 public static final String 1200 ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO"; 1201 1202 /** 1203 * Activity Action: Show Device Name Settings. 1204 * <p> 1205 * In some cases, a matching Activity may not exist, so ensure you safeguard 1206 * against this. 1207 * 1208 * @hide 1209 */ 1210 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1211 public static final String DEVICE_NAME_SETTINGS = "android.settings.DEVICE_NAME"; 1212 1213 /** 1214 * Activity Action: Show pairing settings. 1215 * <p> 1216 * In some cases, a matching Activity may not exist, so ensure you safeguard 1217 * against this. 1218 * 1219 * @hide 1220 */ 1221 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1222 public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS"; 1223 1224 /** 1225 * Activity Action: Show battery saver settings. 1226 * <p> 1227 * In some cases, a matching Activity may not exist, so ensure you safeguard 1228 * against this. 1229 */ 1230 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1231 public static final String ACTION_BATTERY_SAVER_SETTINGS 1232 = "android.settings.BATTERY_SAVER_SETTINGS"; 1233 1234 /** 1235 * Activity Action: Modify Battery Saver mode setting using a voice command. 1236 * <p> 1237 * In some cases, a matching Activity may not exist, so ensure you safeguard against this. 1238 * <p> 1239 * This intent MUST be started using 1240 * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity 1241 * startVoiceActivity}. 1242 * <p> 1243 * Note: The activity implementing this intent MUST verify that 1244 * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before 1245 * modifying the setting. 1246 * <p> 1247 * Input: To tell which state batter saver mode should be set to, add the 1248 * {@link #EXTRA_BATTERY_SAVER_MODE_ENABLED} extra to this Intent with the state specified. 1249 * If the extra is not included, no changes will be made. 1250 * <p> 1251 * Output: Nothing. 1252 */ 1253 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1254 public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE = 1255 "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE"; 1256 1257 /** 1258 * Activity Action: Show Home selection settings. If there are multiple activities 1259 * that can satisfy the {@link Intent#CATEGORY_HOME} intent, this screen allows you 1260 * to pick your preferred activity. 1261 */ 1262 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1263 public static final String ACTION_HOME_SETTINGS 1264 = "android.settings.HOME_SETTINGS"; 1265 1266 /** 1267 * Activity Action: Show Default apps settings. 1268 * <p> 1269 * In some cases, a matching Activity may not exist, so ensure you 1270 * safeguard against this. 1271 * <p> 1272 * Input: Nothing. 1273 * <p> 1274 * Output: Nothing. 1275 */ 1276 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1277 public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS 1278 = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS"; 1279 1280 /** 1281 * Activity Action: Show notification settings. 1282 * 1283 * @hide 1284 */ 1285 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1286 public static final String ACTION_NOTIFICATION_SETTINGS 1287 = "android.settings.NOTIFICATION_SETTINGS"; 1288 1289 /** 1290 * Activity Action: Show notification settings for a single app. 1291 * <p> 1292 * Input: {@link #EXTRA_APP_PACKAGE}, the package containing the channel to display. 1293 * Input: Optionally, {@link #EXTRA_CHANNEL_ID}, to highlight that channel. 1294 * <p> 1295 * Output: Nothing. 1296 */ 1297 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1298 public static final String ACTION_APP_NOTIFICATION_SETTINGS 1299 = "android.settings.APP_NOTIFICATION_SETTINGS"; 1300 1301 /** 1302 * Activity Action: Show notification settings for a single {@link NotificationChannel}. 1303 * <p> 1304 * Input: {@link #EXTRA_APP_PACKAGE}, the package containing the channel to display. 1305 * Input: {@link #EXTRA_CHANNEL_ID}, the id of the channel to display. 1306 * <p> 1307 * Output: Nothing. 1308 */ 1309 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1310 public static final String ACTION_CHANNEL_NOTIFICATION_SETTINGS 1311 = "android.settings.CHANNEL_NOTIFICATION_SETTINGS"; 1312 1313 /** 1314 * Activity Extra: The package owner of the notification channel settings to display. 1315 * <p> 1316 * This must be passed as an extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}. 1317 */ 1318 public static final String EXTRA_APP_PACKAGE = "android.provider.extra.APP_PACKAGE"; 1319 1320 /** 1321 * Activity Extra: The {@link NotificationChannel#getId()} of the notification channel settings 1322 * to display. 1323 * <p> 1324 * This must be passed as an extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}. 1325 */ 1326 public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID"; 1327 1328 /** 1329 * Activity Action: Show notification redaction settings. 1330 * 1331 * @hide 1332 */ 1333 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1334 public static final String ACTION_APP_NOTIFICATION_REDACTION 1335 = "android.settings.ACTION_APP_NOTIFICATION_REDACTION"; 1336 1337 /** @hide */ public static final String EXTRA_APP_UID = "app_uid"; 1338 1339 /** 1340 * Activity Action: Show a dialog with disabled by policy message. 1341 * <p> If an user action is disabled by policy, this dialog can be triggered to let 1342 * the user know about this. 1343 * <p> 1344 * Input: Nothing. 1345 * <p> 1346 * Output: Nothing. 1347 * 1348 * @hide 1349 */ 1350 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1351 public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS 1352 = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS"; 1353 1354 /** 1355 * Activity Action: Show a dialog for remote bugreport flow. 1356 * <p> 1357 * Input: Nothing. 1358 * <p> 1359 * Output: Nothing. 1360 * 1361 * @hide 1362 */ 1363 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1364 public static final String ACTION_SHOW_REMOTE_BUGREPORT_DIALOG 1365 = "android.settings.SHOW_REMOTE_BUGREPORT_DIALOG"; 1366 1367 /** 1368 * Activity Action: Show VR listener settings. 1369 * <p> 1370 * Input: Nothing. 1371 * <p> 1372 * Output: Nothing. 1373 * 1374 * @see android.service.vr.VrListenerService 1375 */ 1376 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1377 public static final String ACTION_VR_LISTENER_SETTINGS 1378 = "android.settings.VR_LISTENER_SETTINGS"; 1379 1380 /** 1381 * Activity Action: Show Picture-in-picture settings. 1382 * <p> 1383 * Input: Nothing. 1384 * <p> 1385 * Output: Nothing. 1386 * 1387 * @hide 1388 */ 1389 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1390 public static final String ACTION_PICTURE_IN_PICTURE_SETTINGS 1391 = "android.settings.PICTURE_IN_PICTURE_SETTINGS"; 1392 1393 /** 1394 * Activity Action: Show Storage Manager settings. 1395 * <p> 1396 * Input: Nothing. 1397 * <p> 1398 * Output: Nothing. 1399 * 1400 * @hide 1401 */ 1402 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1403 public static final String ACTION_STORAGE_MANAGER_SETTINGS 1404 = "android.settings.STORAGE_MANAGER_SETTINGS"; 1405 1406 /** 1407 * Activity Action: Allows user to select current webview implementation. 1408 * <p> 1409 * Input: Nothing. 1410 * <p> 1411 * Output: Nothing. 1412 */ 1413 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1414 public static final String ACTION_WEBVIEW_SETTINGS = "android.settings.WEBVIEW_SETTINGS"; 1415 1416 /** 1417 * Activity Action: Show enterprise privacy section. 1418 * <p> 1419 * Input: Nothing. 1420 * <p> 1421 * Output: Nothing. 1422 * @hide 1423 */ 1424 @SystemApi 1425 @TestApi 1426 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1427 public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS 1428 = "android.settings.ENTERPRISE_PRIVACY_SETTINGS"; 1429 1430 /** 1431 * Activity Action: Show screen that let user select its Autofill Service. 1432 * <p> 1433 * Input: Intent's data URI set with an application name, using the 1434 * "package" schema (like "package:com.my.app"). 1435 * 1436 * <p> 1437 * Output: {@link android.app.Activity#RESULT_OK} if user selected an Autofill Service belonging 1438 * to the caller package. 1439 * 1440 * <p> 1441 * <b>NOTE: </b> Applications should call 1442 * {@link android.view.autofill.AutofillManager#hasEnabledAutofillServices()} and 1443 * {@link android.view.autofill.AutofillManager#isAutofillSupported()}, and only use this action 1444 * to start an activity if they return {@code false} and {@code true} respectively. 1445 */ 1446 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1447 public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE = 1448 "android.settings.REQUEST_SET_AUTOFILL_SERVICE"; 1449 1450 // End of Intent actions for Settings 1451 1452 /** 1453 * @hide - Private call() method on SettingsProvider to read from 'system' table. 1454 */ 1455 public static final String CALL_METHOD_GET_SYSTEM = "GET_system"; 1456 1457 /** 1458 * @hide - Private call() method on SettingsProvider to read from 'secure' table. 1459 */ 1460 public static final String CALL_METHOD_GET_SECURE = "GET_secure"; 1461 1462 /** 1463 * @hide - Private call() method on SettingsProvider to read from 'global' table. 1464 */ 1465 public static final String CALL_METHOD_GET_GLOBAL = "GET_global"; 1466 1467 /** 1468 * @hide - Specifies that the caller of the fast-path call()-based flow tracks 1469 * the settings generation in order to cache values locally. If this key is 1470 * mapped to a <code>null</code> string extra in the request bundle, the response 1471 * bundle will contain the same key mapped to a parcelable extra which would be 1472 * an {@link android.util.MemoryIntArray}. The response will also contain an 1473 * integer mapped to the {@link #CALL_METHOD_GENERATION_INDEX_KEY} which is the 1474 * index in the array clients should use to lookup the generation. For efficiency 1475 * the caller should request the generation tracking memory array only if it 1476 * doesn't already have it. 1477 * 1478 * @see #CALL_METHOD_GENERATION_INDEX_KEY 1479 */ 1480 public static final String CALL_METHOD_TRACK_GENERATION_KEY = "_track_generation"; 1481 1482 /** 1483 * @hide Key with the location in the {@link android.util.MemoryIntArray} where 1484 * to look up the generation id of the backing table. The value is an integer. 1485 * 1486 * @see #CALL_METHOD_TRACK_GENERATION_KEY 1487 */ 1488 public static final String CALL_METHOD_GENERATION_INDEX_KEY = "_generation_index"; 1489 1490 /** 1491 * @hide Key with the settings table generation. The value is an integer. 1492 * 1493 * @see #CALL_METHOD_TRACK_GENERATION_KEY 1494 */ 1495 public static final String CALL_METHOD_GENERATION_KEY = "_generation"; 1496 1497 /** 1498 * @hide - User handle argument extra to the fast-path call()-based requests 1499 */ 1500 public static final String CALL_METHOD_USER_KEY = "_user"; 1501 1502 /** 1503 * @hide - Boolean argument extra to the fast-path call()-based requests 1504 */ 1505 public static final String CALL_METHOD_MAKE_DEFAULT_KEY = "_make_default"; 1506 1507 /** 1508 * @hide - User handle argument extra to the fast-path call()-based requests 1509 */ 1510 public static final String CALL_METHOD_RESET_MODE_KEY = "_reset_mode"; 1511 1512 /** 1513 * @hide - String argument extra to the fast-path call()-based requests 1514 */ 1515 public static final String CALL_METHOD_TAG_KEY = "_tag"; 1516 1517 /** @hide - Private call() method to write to 'system' table */ 1518 public static final String CALL_METHOD_PUT_SYSTEM = "PUT_system"; 1519 1520 /** @hide - Private call() method to write to 'secure' table */ 1521 public static final String CALL_METHOD_PUT_SECURE = "PUT_secure"; 1522 1523 /** @hide - Private call() method to write to 'global' table */ 1524 public static final String CALL_METHOD_PUT_GLOBAL= "PUT_global"; 1525 1526 /** @hide - Private call() method to reset to defaults the 'global' table */ 1527 public static final String CALL_METHOD_RESET_GLOBAL = "RESET_global"; 1528 1529 /** @hide - Private call() method to reset to defaults the 'secure' table */ 1530 public static final String CALL_METHOD_RESET_SECURE = "RESET_secure"; 1531 1532 /** 1533 * Activity Extra: Limit available options in launched activity based on the given authority. 1534 * <p> 1535 * This can be passed as an extra field in an Activity Intent with one or more syncable content 1536 * provider's authorities as a String[]. This field is used by some intents to alter the 1537 * behavior of the called activity. 1538 * <p> 1539 * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types available based 1540 * on the authority given. 1541 */ 1542 public static final String EXTRA_AUTHORITIES = "authorities"; 1543 1544 /** 1545 * Activity Extra: Limit available options in launched activity based on the given account 1546 * types. 1547 * <p> 1548 * This can be passed as an extra field in an Activity Intent with one or more account types 1549 * as a String[]. This field is used by some intents to alter the behavior of the called 1550 * activity. 1551 * <p> 1552 * Example: The {@link #ACTION_ADD_ACCOUNT} intent restricts the account types to the specified 1553 * list. 1554 */ 1555 public static final String EXTRA_ACCOUNT_TYPES = "account_types"; 1556 1557 public static final String EXTRA_INPUT_METHOD_ID = "input_method_id"; 1558 1559 /** 1560 * Activity Extra: The device identifier to act upon. 1561 * <p> 1562 * This can be passed as an extra field in an Activity Intent with a single 1563 * InputDeviceIdentifier. This field is used by some activities to jump straight into the 1564 * settings for the given device. 1565 * <p> 1566 * Example: The {@link #ACTION_INPUT_METHOD_SETTINGS} intent opens the keyboard layout 1567 * dialog for the given device. 1568 * @hide 1569 */ 1570 public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier"; 1571 1572 /** 1573 * Activity Extra: Enable or disable Airplane Mode. 1574 * <p> 1575 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE} 1576 * intent as a boolean to indicate if it should be enabled. 1577 */ 1578 public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled"; 1579 1580 /** 1581 * Activity Extra: Enable or disable Battery saver mode. 1582 * <p> 1583 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE} 1584 * intent as a boolean to indicate if it should be enabled. 1585 */ 1586 public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED = 1587 "android.settings.extra.battery_saver_mode_enabled"; 1588 1589 /** 1590 * Activity Extra: Enable or disable Do Not Disturb mode. 1591 * <p> 1592 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE} 1593 * intent as a boolean to indicate if it should be enabled. 1594 */ 1595 public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED = 1596 "android.settings.extra.do_not_disturb_mode_enabled"; 1597 1598 /** 1599 * Activity Extra: How many minutes to enable do not disturb mode for. 1600 * <p> 1601 * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE} 1602 * intent to indicate how long do not disturb mode should be enabled for. 1603 */ 1604 public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES = 1605 "android.settings.extra.do_not_disturb_mode_minutes"; 1606 1607 /** 1608 * Reset mode: reset to defaults only settings changed by the 1609 * calling package. If there is a default set the setting 1610 * will be set to it, otherwise the setting will be deleted. 1611 * This is the only type of reset available to non-system clients. 1612 * @hide 1613 */ 1614 public static final int RESET_MODE_PACKAGE_DEFAULTS = 1; 1615 1616 /** 1617 * Reset mode: reset all settings set by untrusted packages, which is 1618 * packages that aren't a part of the system, to the current defaults. 1619 * If there is a default set the setting will be set to it, otherwise 1620 * the setting will be deleted. This mode is only available to the system. 1621 * @hide 1622 */ 1623 public static final int RESET_MODE_UNTRUSTED_DEFAULTS = 2; 1624 1625 /** 1626 * Reset mode: delete all settings set by untrusted packages, which is 1627 * packages that aren't a part of the system. If a setting is set by an 1628 * untrusted package it will be deleted if its default is not provided 1629 * by the system, otherwise the setting will be set to its default. 1630 * This mode is only available to the system. 1631 * @hide 1632 */ 1633 public static final int RESET_MODE_UNTRUSTED_CHANGES = 3; 1634 1635 /** 1636 * Reset mode: reset all settings to defaults specified by trusted 1637 * packages, which is packages that are a part of the system, and 1638 * delete all settings set by untrusted packages. If a setting has 1639 * a default set by a system package it will be set to the default, 1640 * otherwise the setting will be deleted. This mode is only available 1641 * to the system. 1642 * @hide 1643 */ 1644 public static final int RESET_MODE_TRUSTED_DEFAULTS = 4; 1645 1646 /** @hide */ 1647 @Retention(RetentionPolicy.SOURCE) 1648 @IntDef({ 1649 RESET_MODE_PACKAGE_DEFAULTS, 1650 RESET_MODE_UNTRUSTED_DEFAULTS, 1651 RESET_MODE_UNTRUSTED_CHANGES, 1652 RESET_MODE_TRUSTED_DEFAULTS 1653 }) 1654 public @interface ResetMode{} 1655 1656 /** 1657 * Activity Extra: Number of certificates 1658 * <p> 1659 * This can be passed as an extra field to the {@link #ACTION_MONITORING_CERT_INFO} 1660 * intent to indicate the number of certificates 1661 * @hide 1662 */ 1663 public static final String EXTRA_NUMBER_OF_CERTIFICATES = 1664 "android.settings.extra.number_of_certificates"; 1665 1666 private static final String JID_RESOURCE_PREFIX = "android"; 1667 1668 public static final String AUTHORITY = "settings"; 1669 1670 private static final String TAG = "Settings"; 1671 private static final boolean LOCAL_LOGV = false; 1672 1673 // Lock ensures that when enabling/disabling the master location switch, we don't end up 1674 // with a partial enable/disable state in multi-threaded situations. 1675 private static final Object mLocationSettingsLock = new Object(); 1676 1677 // Used in system server calling uid workaround in call() 1678 private static boolean sInSystemServer = false; 1679 private static final Object sInSystemServerLock = new Object(); 1680 1681 /** @hide */ setInSystemServer()1682 public static void setInSystemServer() { 1683 synchronized (sInSystemServerLock) { 1684 sInSystemServer = true; 1685 } 1686 } 1687 1688 /** @hide */ isInSystemServer()1689 public static boolean isInSystemServer() { 1690 synchronized (sInSystemServerLock) { 1691 return sInSystemServer; 1692 } 1693 } 1694 1695 public static class SettingNotFoundException extends AndroidException { SettingNotFoundException(String msg)1696 public SettingNotFoundException(String msg) { 1697 super(msg); 1698 } 1699 } 1700 1701 /** 1702 * Common base for tables of name/value settings. 1703 */ 1704 public static class NameValueTable implements BaseColumns { 1705 public static final String NAME = "name"; 1706 public static final String VALUE = "value"; 1707 putString(ContentResolver resolver, Uri uri, String name, String value)1708 protected static boolean putString(ContentResolver resolver, Uri uri, 1709 String name, String value) { 1710 // The database will take care of replacing duplicates. 1711 try { 1712 ContentValues values = new ContentValues(); 1713 values.put(NAME, name); 1714 values.put(VALUE, value); 1715 resolver.insert(uri, values); 1716 return true; 1717 } catch (SQLException e) { 1718 Log.w(TAG, "Can't set key " + name + " in " + uri, e); 1719 return false; 1720 } 1721 } 1722 getUriFor(Uri uri, String name)1723 public static Uri getUriFor(Uri uri, String name) { 1724 return Uri.withAppendedPath(uri, name); 1725 } 1726 } 1727 1728 private static final class GenerationTracker { 1729 private final MemoryIntArray mArray; 1730 private final Runnable mErrorHandler; 1731 private final int mIndex; 1732 private int mCurrentGeneration; 1733 GenerationTracker(@onNull MemoryIntArray array, int index, int generation, Runnable errorHandler)1734 public GenerationTracker(@NonNull MemoryIntArray array, int index, 1735 int generation, Runnable errorHandler) { 1736 mArray = array; 1737 mIndex = index; 1738 mErrorHandler = errorHandler; 1739 mCurrentGeneration = generation; 1740 } 1741 isGenerationChanged()1742 public boolean isGenerationChanged() { 1743 final int currentGeneration = readCurrentGeneration(); 1744 if (currentGeneration >= 0) { 1745 if (currentGeneration == mCurrentGeneration) { 1746 return false; 1747 } 1748 mCurrentGeneration = currentGeneration; 1749 } 1750 return true; 1751 } 1752 readCurrentGeneration()1753 private int readCurrentGeneration() { 1754 try { 1755 return mArray.get(mIndex); 1756 } catch (IOException e) { 1757 Log.e(TAG, "Error getting current generation", e); 1758 if (mErrorHandler != null) { 1759 mErrorHandler.run(); 1760 } 1761 } 1762 return -1; 1763 } 1764 destroy()1765 public void destroy() { 1766 try { 1767 mArray.close(); 1768 } catch (IOException e) { 1769 Log.e(TAG, "Error closing backing array", e); 1770 if (mErrorHandler != null) { 1771 mErrorHandler.run(); 1772 } 1773 } 1774 } 1775 } 1776 1777 private static final class ContentProviderHolder { 1778 private final Object mLock = new Object(); 1779 1780 @GuardedBy("mLock") 1781 private final Uri mUri; 1782 @GuardedBy("mLock") 1783 private IContentProvider mContentProvider; 1784 ContentProviderHolder(Uri uri)1785 public ContentProviderHolder(Uri uri) { 1786 mUri = uri; 1787 } 1788 getProvider(ContentResolver contentResolver)1789 public IContentProvider getProvider(ContentResolver contentResolver) { 1790 synchronized (mLock) { 1791 if (mContentProvider == null) { 1792 mContentProvider = contentResolver 1793 .acquireProvider(mUri.getAuthority()); 1794 } 1795 return mContentProvider; 1796 } 1797 } 1798 clearProviderForTest()1799 public void clearProviderForTest() { 1800 synchronized (mLock) { 1801 mContentProvider = null; 1802 } 1803 } 1804 } 1805 1806 // Thread-safe. 1807 private static class NameValueCache { 1808 private static final boolean DEBUG = false; 1809 1810 private static final String[] SELECT_VALUE_PROJECTION = new String[] { 1811 Settings.NameValueTable.VALUE 1812 }; 1813 1814 private static final String NAME_EQ_PLACEHOLDER = "name=?"; 1815 1816 // Must synchronize on 'this' to access mValues and mValuesVersion. 1817 private final HashMap<String, String> mValues = new HashMap<>(); 1818 1819 private final Uri mUri; 1820 private final ContentProviderHolder mProviderHolder; 1821 1822 // The method we'll call (or null, to not use) on the provider 1823 // for the fast path of retrieving settings. 1824 private final String mCallGetCommand; 1825 private final String mCallSetCommand; 1826 1827 @GuardedBy("this") 1828 private GenerationTracker mGenerationTracker; 1829 NameValueCache(Uri uri, String getCommand, String setCommand, ContentProviderHolder providerHolder)1830 public NameValueCache(Uri uri, String getCommand, String setCommand, 1831 ContentProviderHolder providerHolder) { 1832 mUri = uri; 1833 mCallGetCommand = getCommand; 1834 mCallSetCommand = setCommand; 1835 mProviderHolder = providerHolder; 1836 } 1837 putStringForUser(ContentResolver cr, String name, String value, String tag, boolean makeDefault, final int userHandle)1838 public boolean putStringForUser(ContentResolver cr, String name, String value, 1839 String tag, boolean makeDefault, final int userHandle) { 1840 try { 1841 Bundle arg = new Bundle(); 1842 arg.putString(Settings.NameValueTable.VALUE, value); 1843 arg.putInt(CALL_METHOD_USER_KEY, userHandle); 1844 if (tag != null) { 1845 arg.putString(CALL_METHOD_TAG_KEY, tag); 1846 } 1847 if (makeDefault) { 1848 arg.putBoolean(CALL_METHOD_MAKE_DEFAULT_KEY, true); 1849 } 1850 IContentProvider cp = mProviderHolder.getProvider(cr); 1851 cp.call(cr.getPackageName(), mCallSetCommand, name, arg); 1852 } catch (RemoteException e) { 1853 Log.w(TAG, "Can't set key " + name + " in " + mUri, e); 1854 return false; 1855 } 1856 return true; 1857 } 1858 getStringForUser(ContentResolver cr, String name, final int userHandle)1859 public String getStringForUser(ContentResolver cr, String name, final int userHandle) { 1860 final boolean isSelf = (userHandle == UserHandle.myUserId()); 1861 if (isSelf) { 1862 synchronized (NameValueCache.this) { 1863 if (mGenerationTracker != null) { 1864 if (mGenerationTracker.isGenerationChanged()) { 1865 if (DEBUG) { 1866 Log.i(TAG, "Generation changed for type:" 1867 + mUri.getPath() + " in package:" 1868 + cr.getPackageName() +" and user:" + userHandle); 1869 } 1870 mValues.clear(); 1871 } else if (mValues.containsKey(name)) { 1872 return mValues.get(name); 1873 } 1874 } 1875 } 1876 } else { 1877 if (LOCAL_LOGV) Log.v(TAG, "get setting for user " + userHandle 1878 + " by user " + UserHandle.myUserId() + " so skipping cache"); 1879 } 1880 1881 IContentProvider cp = mProviderHolder.getProvider(cr); 1882 1883 // Try the fast path first, not using query(). If this 1884 // fails (alternate Settings provider that doesn't support 1885 // this interface?) then we fall back to the query/table 1886 // interface. 1887 if (mCallGetCommand != null) { 1888 try { 1889 Bundle args = null; 1890 if (!isSelf) { 1891 args = new Bundle(); 1892 args.putInt(CALL_METHOD_USER_KEY, userHandle); 1893 } 1894 boolean needsGenerationTracker = false; 1895 synchronized (NameValueCache.this) { 1896 if (isSelf && mGenerationTracker == null) { 1897 needsGenerationTracker = true; 1898 if (args == null) { 1899 args = new Bundle(); 1900 } 1901 args.putString(CALL_METHOD_TRACK_GENERATION_KEY, null); 1902 if (DEBUG) { 1903 Log.i(TAG, "Requested generation tracker for type: "+ mUri.getPath() 1904 + " in package:" + cr.getPackageName() +" and user:" 1905 + userHandle); 1906 } 1907 } 1908 } 1909 Bundle b; 1910 // If we're in system server and in a binder transaction we need to clear the 1911 // calling uid. This works around code in system server that did not call 1912 // clearCallingIdentity, previously this wasn't needed because reading settings 1913 // did not do permission checking but thats no longer the case. 1914 // Long term this should be removed and callers should properly call 1915 // clearCallingIdentity or use a ContentResolver from the caller as needed. 1916 if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) { 1917 final long token = Binder.clearCallingIdentity(); 1918 try { 1919 b = cp.call(cr.getPackageName(), mCallGetCommand, name, args); 1920 } finally { 1921 Binder.restoreCallingIdentity(token); 1922 } 1923 } else { 1924 b = cp.call(cr.getPackageName(), mCallGetCommand, name, args); 1925 } 1926 if (b != null) { 1927 String value = b.getString(Settings.NameValueTable.VALUE); 1928 // Don't update our cache for reads of other users' data 1929 if (isSelf) { 1930 synchronized (NameValueCache.this) { 1931 if (needsGenerationTracker) { 1932 MemoryIntArray array = b.getParcelable( 1933 CALL_METHOD_TRACK_GENERATION_KEY); 1934 final int index = b.getInt( 1935 CALL_METHOD_GENERATION_INDEX_KEY, -1); 1936 if (array != null && index >= 0) { 1937 final int generation = b.getInt( 1938 CALL_METHOD_GENERATION_KEY, 0); 1939 if (DEBUG) { 1940 Log.i(TAG, "Received generation tracker for type:" 1941 + mUri.getPath() + " in package:" 1942 + cr.getPackageName() + " and user:" 1943 + userHandle + " with index:" + index); 1944 } 1945 if (mGenerationTracker != null) { 1946 mGenerationTracker.destroy(); 1947 } 1948 mGenerationTracker = new GenerationTracker(array, index, 1949 generation, () -> { 1950 synchronized (NameValueCache.this) { 1951 Log.e(TAG, "Error accessing generation" 1952 + " tracker - removing"); 1953 if (mGenerationTracker != null) { 1954 GenerationTracker generationTracker = 1955 mGenerationTracker; 1956 mGenerationTracker = null; 1957 generationTracker.destroy(); 1958 mValues.clear(); 1959 } 1960 } 1961 }); 1962 } 1963 } 1964 mValues.put(name, value); 1965 } 1966 } else { 1967 if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle 1968 + " by " + UserHandle.myUserId() 1969 + " so not updating cache"); 1970 } 1971 return value; 1972 } 1973 // If the response Bundle is null, we fall through 1974 // to the query interface below. 1975 } catch (RemoteException e) { 1976 // Not supported by the remote side? Fall through 1977 // to query(). 1978 } 1979 } 1980 1981 Cursor c = null; 1982 try { 1983 Bundle queryArgs = ContentResolver.createSqlQueryBundle( 1984 NAME_EQ_PLACEHOLDER, new String[]{name}, null); 1985 // Same workaround as above. 1986 if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) { 1987 final long token = Binder.clearCallingIdentity(); 1988 try { 1989 c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE_PROJECTION, queryArgs, 1990 null); 1991 } finally { 1992 Binder.restoreCallingIdentity(token); 1993 } 1994 } else { 1995 c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE_PROJECTION, queryArgs, 1996 null); 1997 } 1998 if (c == null) { 1999 Log.w(TAG, "Can't get key " + name + " from " + mUri); 2000 return null; 2001 } 2002 2003 String value = c.moveToNext() ? c.getString(0) : null; 2004 synchronized (NameValueCache.this) { 2005 mValues.put(name, value); 2006 } 2007 if (LOCAL_LOGV) { 2008 Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " + 2009 name + " = " + (value == null ? "(null)" : value)); 2010 } 2011 return value; 2012 } catch (RemoteException e) { 2013 Log.w(TAG, "Can't get key " + name + " from " + mUri, e); 2014 return null; // Return null, but don't cache it. 2015 } finally { 2016 if (c != null) c.close(); 2017 } 2018 } 2019 clearGenerationTrackerForTest()2020 public void clearGenerationTrackerForTest() { 2021 synchronized (NameValueCache.this) { 2022 if (mGenerationTracker != null) { 2023 mGenerationTracker.destroy(); 2024 } 2025 mValues.clear(); 2026 mGenerationTracker = null; 2027 } 2028 } 2029 } 2030 2031 /** 2032 * Checks if the specified context can draw on top of other apps. As of API 2033 * level 23, an app cannot draw on top of other apps unless it declares the 2034 * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its 2035 * manifest, <em>and</em> the user specifically grants the app this 2036 * capability. To prompt the user to grant this approval, the app must send an 2037 * intent with the action 2038 * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}, which 2039 * causes the system to display a permission management screen. 2040 * 2041 * @param context App context. 2042 * @return true if the specified context can draw on top of other apps, false otherwise 2043 */ canDrawOverlays(Context context)2044 public static boolean canDrawOverlays(Context context) { 2045 return Settings.isCallingPackageAllowedToDrawOverlays(context, Process.myUid(), 2046 context.getOpPackageName(), false); 2047 } 2048 2049 /** 2050 * System settings, containing miscellaneous system preferences. This 2051 * table holds simple name/value pairs. There are convenience 2052 * functions for accessing individual settings entries. 2053 */ 2054 public static final class System extends NameValueTable { 2055 private static final float DEFAULT_FONT_SCALE = 1.0f; 2056 2057 /** @hide */ 2058 public static interface Validator { validate(String value)2059 public boolean validate(String value); 2060 } 2061 2062 /** 2063 * The content:// style URL for this table 2064 */ 2065 public static final Uri CONTENT_URI = 2066 Uri.parse("content://" + AUTHORITY + "/system"); 2067 2068 private static final ContentProviderHolder sProviderHolder = 2069 new ContentProviderHolder(CONTENT_URI); 2070 2071 private static final NameValueCache sNameValueCache = new NameValueCache( 2072 CONTENT_URI, 2073 CALL_METHOD_GET_SYSTEM, 2074 CALL_METHOD_PUT_SYSTEM, 2075 sProviderHolder); 2076 2077 private static final HashSet<String> MOVED_TO_SECURE; 2078 static { 2079 MOVED_TO_SECURE = new HashSet<>(30); 2080 MOVED_TO_SECURE.add(Secure.ANDROID_ID); 2081 MOVED_TO_SECURE.add(Secure.HTTP_PROXY); 2082 MOVED_TO_SECURE.add(Secure.LOCATION_PROVIDERS_ALLOWED); 2083 MOVED_TO_SECURE.add(Secure.LOCK_BIOMETRIC_WEAK_FLAGS); 2084 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_ENABLED); 2085 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_VISIBLE); 2086 MOVED_TO_SECURE.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED); 2087 MOVED_TO_SECURE.add(Secure.LOGGING_ID); 2088 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_ENABLED); 2089 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_LAST_UPDATE); 2090 MOVED_TO_SECURE.add(Secure.PARENTAL_CONTROL_REDIRECT_URL); 2091 MOVED_TO_SECURE.add(Secure.SETTINGS_CLASSNAME); 2092 MOVED_TO_SECURE.add(Secure.USE_GOOGLE_MAIL); 2093 MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON); 2094 MOVED_TO_SECURE.add(Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY); 2095 MOVED_TO_SECURE.add(Secure.WIFI_NUM_OPEN_NETWORKS_KEPT); 2096 MOVED_TO_SECURE.add(Secure.WIFI_ON); 2097 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE); 2098 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_AP_COUNT); 2099 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS); 2100 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED); 2101 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS); 2102 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT); 2103 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_MAX_AP_CHECKS); 2104 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_ON); 2105 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT); 2106 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS); 2107 MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS); 2108 2109 // At one time in System, then Global, but now back in Secure 2110 MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS); 2111 } 2112 2113 private static final HashSet<String> MOVED_TO_GLOBAL; 2114 private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL; 2115 static { 2116 MOVED_TO_GLOBAL = new HashSet<>(); 2117 MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<>(); 2118 2119 // these were originally in system but migrated to secure in the past, 2120 // so are duplicated in the Secure.* namespace 2121 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED); 2122 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON); 2123 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING); 2124 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED); 2125 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED); 2126 MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY); 2127 2128 // these are moving directly from system to global 2129 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_ON); 2130 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_RADIOS); 2131 MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS); 2132 MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME); 2133 MOVED_TO_GLOBAL.add(Settings.Global.AUTO_TIME_ZONE); 2134 MOVED_TO_GLOBAL.add(Settings.Global.CAR_DOCK_SOUND); 2135 MOVED_TO_GLOBAL.add(Settings.Global.CAR_UNDOCK_SOUND); 2136 MOVED_TO_GLOBAL.add(Settings.Global.DESK_DOCK_SOUND); 2137 MOVED_TO_GLOBAL.add(Settings.Global.DESK_UNDOCK_SOUND); 2138 MOVED_TO_GLOBAL.add(Settings.Global.DOCK_SOUNDS_ENABLED); 2139 MOVED_TO_GLOBAL.add(Settings.Global.LOCK_SOUND); 2140 MOVED_TO_GLOBAL.add(Settings.Global.UNLOCK_SOUND); 2141 MOVED_TO_GLOBAL.add(Settings.Global.LOW_BATTERY_SOUND); 2142 MOVED_TO_GLOBAL.add(Settings.Global.POWER_SOUNDS_ENABLED); 2143 MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN); 2144 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY); 2145 MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER); 2146 MOVED_TO_GLOBAL.add(Settings.Global.WINDOW_ANIMATION_SCALE); 2147 MOVED_TO_GLOBAL.add(Settings.Global.TRANSITION_ANIMATION_SCALE); 2148 MOVED_TO_GLOBAL.add(Settings.Global.ANIMATOR_DURATION_SCALE); 2149 MOVED_TO_GLOBAL.add(Settings.Global.FANCY_IME_ANIMATIONS); 2150 MOVED_TO_GLOBAL.add(Settings.Global.COMPATIBILITY_MODE); 2151 MOVED_TO_GLOBAL.add(Settings.Global.EMERGENCY_TONE); 2152 MOVED_TO_GLOBAL.add(Settings.Global.CALL_AUTO_RETRY); 2153 MOVED_TO_GLOBAL.add(Settings.Global.DEBUG_APP); 2154 MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER); 2155 MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES); 2156 MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_CONTENT_URL); 2157 MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_METADATA_URL); 2158 MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_CONTENT_URL); 2159 MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_METADATA_URL); 2160 MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL); 2161 MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL); 2162 MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL); 2163 MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL); 2164 } 2165 2166 private static final Validator sBooleanValidator = 2167 new DiscreteValueValidator(new String[] {"0", "1"}); 2168 2169 private static final Validator sNonNegativeIntegerValidator = new Validator() { 2170 @Override 2171 public boolean validate(String value) { 2172 try { 2173 return Integer.parseInt(value) >= 0; 2174 } catch (NumberFormatException e) { 2175 return false; 2176 } 2177 } 2178 }; 2179 2180 private static final Validator sUriValidator = new Validator() { 2181 @Override 2182 public boolean validate(String value) { 2183 try { 2184 Uri.decode(value); 2185 return true; 2186 } catch (IllegalArgumentException e) { 2187 return false; 2188 } 2189 } 2190 }; 2191 2192 private static final Validator sLenientIpAddressValidator = new Validator() { 2193 private static final int MAX_IPV6_LENGTH = 45; 2194 2195 @Override 2196 public boolean validate(String value) { 2197 return value.length() <= MAX_IPV6_LENGTH; 2198 } 2199 }; 2200 2201 /** @hide */ getMovedToGlobalSettings(Set<String> outKeySet)2202 public static void getMovedToGlobalSettings(Set<String> outKeySet) { 2203 outKeySet.addAll(MOVED_TO_GLOBAL); 2204 outKeySet.addAll(MOVED_TO_SECURE_THEN_GLOBAL); 2205 } 2206 2207 /** @hide */ getMovedToSecureSettings(Set<String> outKeySet)2208 public static void getMovedToSecureSettings(Set<String> outKeySet) { 2209 outKeySet.addAll(MOVED_TO_SECURE); 2210 } 2211 2212 /** @hide */ getNonLegacyMovedKeys(HashSet<String> outKeySet)2213 public static void getNonLegacyMovedKeys(HashSet<String> outKeySet) { 2214 outKeySet.addAll(MOVED_TO_GLOBAL); 2215 } 2216 2217 /** @hide */ clearProviderForTest()2218 public static void clearProviderForTest() { 2219 sProviderHolder.clearProviderForTest(); 2220 sNameValueCache.clearGenerationTrackerForTest(); 2221 } 2222 2223 /** 2224 * Look up a name in the database. 2225 * @param resolver to access the database with 2226 * @param name to look up in the table 2227 * @return the corresponding value, or null if not present 2228 */ getString(ContentResolver resolver, String name)2229 public static String getString(ContentResolver resolver, String name) { 2230 return getStringForUser(resolver, name, UserHandle.myUserId()); 2231 } 2232 2233 /** @hide */ getStringForUser(ContentResolver resolver, String name, int userHandle)2234 public static String getStringForUser(ContentResolver resolver, String name, 2235 int userHandle) { 2236 if (MOVED_TO_SECURE.contains(name)) { 2237 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2238 + " to android.provider.Settings.Secure, returning read-only value."); 2239 return Secure.getStringForUser(resolver, name, userHandle); 2240 } 2241 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) { 2242 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2243 + " to android.provider.Settings.Global, returning read-only value."); 2244 return Global.getStringForUser(resolver, name, userHandle); 2245 } 2246 return sNameValueCache.getStringForUser(resolver, name, userHandle); 2247 } 2248 2249 /** 2250 * Store a name/value pair into the database. 2251 * @param resolver to access the database with 2252 * @param name to store 2253 * @param value to associate with the name 2254 * @return true if the value was set, false on database errors 2255 */ putString(ContentResolver resolver, String name, String value)2256 public static boolean putString(ContentResolver resolver, String name, String value) { 2257 return putStringForUser(resolver, name, value, UserHandle.myUserId()); 2258 } 2259 2260 /** @hide */ putStringForUser(ContentResolver resolver, String name, String value, int userHandle)2261 public static boolean putStringForUser(ContentResolver resolver, String name, String value, 2262 int userHandle) { 2263 if (MOVED_TO_SECURE.contains(name)) { 2264 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2265 + " to android.provider.Settings.Secure, value is unchanged."); 2266 return false; 2267 } 2268 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) { 2269 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2270 + " to android.provider.Settings.Global, value is unchanged."); 2271 return false; 2272 } 2273 return sNameValueCache.putStringForUser(resolver, name, value, null, false, userHandle); 2274 } 2275 2276 /** 2277 * Construct the content URI for a particular name/value pair, 2278 * useful for monitoring changes with a ContentObserver. 2279 * @param name to look up in the table 2280 * @return the corresponding content URI, or null if not present 2281 */ getUriFor(String name)2282 public static Uri getUriFor(String name) { 2283 if (MOVED_TO_SECURE.contains(name)) { 2284 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2285 + " to android.provider.Settings.Secure, returning Secure URI."); 2286 return Secure.getUriFor(Secure.CONTENT_URI, name); 2287 } 2288 if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) { 2289 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" 2290 + " to android.provider.Settings.Global, returning read-only global URI."); 2291 return Global.getUriFor(Global.CONTENT_URI, name); 2292 } 2293 return getUriFor(CONTENT_URI, name); 2294 } 2295 2296 /** 2297 * Convenience function for retrieving a single system settings value 2298 * as an integer. Note that internally setting values are always 2299 * stored as strings; this function converts the string to an integer 2300 * for you. The default value will be returned if the setting is 2301 * not defined or not an integer. 2302 * 2303 * @param cr The ContentResolver to access. 2304 * @param name The name of the setting to retrieve. 2305 * @param def Value to return if the setting is not defined. 2306 * 2307 * @return The setting's current value, or 'def' if it is not defined 2308 * or not a valid integer. 2309 */ getInt(ContentResolver cr, String name, int def)2310 public static int getInt(ContentResolver cr, String name, int def) { 2311 return getIntForUser(cr, name, def, UserHandle.myUserId()); 2312 } 2313 2314 /** @hide */ getIntForUser(ContentResolver cr, String name, int def, int userHandle)2315 public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) { 2316 String v = getStringForUser(cr, name, userHandle); 2317 try { 2318 return v != null ? Integer.parseInt(v) : def; 2319 } catch (NumberFormatException e) { 2320 return def; 2321 } 2322 } 2323 2324 /** 2325 * Convenience function for retrieving a single system settings value 2326 * as an integer. Note that internally setting values are always 2327 * stored as strings; this function converts the string to an integer 2328 * for you. 2329 * <p> 2330 * This version does not take a default value. If the setting has not 2331 * been set, or the string value is not a number, 2332 * it throws {@link SettingNotFoundException}. 2333 * 2334 * @param cr The ContentResolver to access. 2335 * @param name The name of the setting to retrieve. 2336 * 2337 * @throws SettingNotFoundException Thrown if a setting by the given 2338 * name can't be found or the setting value is not an integer. 2339 * 2340 * @return The setting's current value. 2341 */ getInt(ContentResolver cr, String name)2342 public static int getInt(ContentResolver cr, String name) 2343 throws SettingNotFoundException { 2344 return getIntForUser(cr, name, UserHandle.myUserId()); 2345 } 2346 2347 /** @hide */ getIntForUser(ContentResolver cr, String name, int userHandle)2348 public static int getIntForUser(ContentResolver cr, String name, int userHandle) 2349 throws SettingNotFoundException { 2350 String v = getStringForUser(cr, name, userHandle); 2351 try { 2352 return Integer.parseInt(v); 2353 } catch (NumberFormatException e) { 2354 throw new SettingNotFoundException(name); 2355 } 2356 } 2357 2358 /** 2359 * Convenience function for updating a single settings value as an 2360 * integer. This will either create a new entry in the table if the 2361 * given name does not exist, or modify the value of the existing row 2362 * with that name. Note that internally setting values are always 2363 * stored as strings, so this function converts the given value to a 2364 * string before storing it. 2365 * 2366 * @param cr The ContentResolver to access. 2367 * @param name The name of the setting to modify. 2368 * @param value The new value for the setting. 2369 * @return true if the value was set, false on database errors 2370 */ putInt(ContentResolver cr, String name, int value)2371 public static boolean putInt(ContentResolver cr, String name, int value) { 2372 return putIntForUser(cr, name, value, UserHandle.myUserId()); 2373 } 2374 2375 /** @hide */ putIntForUser(ContentResolver cr, String name, int value, int userHandle)2376 public static boolean putIntForUser(ContentResolver cr, String name, int value, 2377 int userHandle) { 2378 return putStringForUser(cr, name, Integer.toString(value), userHandle); 2379 } 2380 2381 /** 2382 * Convenience function for retrieving a single system settings value 2383 * as a {@code long}. Note that internally setting values are always 2384 * stored as strings; this function converts the string to a {@code long} 2385 * for you. The default value will be returned if the setting is 2386 * not defined or not a {@code long}. 2387 * 2388 * @param cr The ContentResolver to access. 2389 * @param name The name of the setting to retrieve. 2390 * @param def Value to return if the setting is not defined. 2391 * 2392 * @return The setting's current value, or 'def' if it is not defined 2393 * or not a valid {@code long}. 2394 */ getLong(ContentResolver cr, String name, long def)2395 public static long getLong(ContentResolver cr, String name, long def) { 2396 return getLongForUser(cr, name, def, UserHandle.myUserId()); 2397 } 2398 2399 /** @hide */ getLongForUser(ContentResolver cr, String name, long def, int userHandle)2400 public static long getLongForUser(ContentResolver cr, String name, long def, 2401 int userHandle) { 2402 String valString = getStringForUser(cr, name, userHandle); 2403 long value; 2404 try { 2405 value = valString != null ? Long.parseLong(valString) : def; 2406 } catch (NumberFormatException e) { 2407 value = def; 2408 } 2409 return value; 2410 } 2411 2412 /** 2413 * Convenience function for retrieving a single system settings value 2414 * as a {@code long}. Note that internally setting values are always 2415 * stored as strings; this function converts the string to a {@code long} 2416 * for you. 2417 * <p> 2418 * This version does not take a default value. If the setting has not 2419 * been set, or the string value is not a number, 2420 * it throws {@link SettingNotFoundException}. 2421 * 2422 * @param cr The ContentResolver to access. 2423 * @param name The name of the setting to retrieve. 2424 * 2425 * @return The setting's current value. 2426 * @throws SettingNotFoundException Thrown if a setting by the given 2427 * name can't be found or the setting value is not an integer. 2428 */ getLong(ContentResolver cr, String name)2429 public static long getLong(ContentResolver cr, String name) 2430 throws SettingNotFoundException { 2431 return getLongForUser(cr, name, UserHandle.myUserId()); 2432 } 2433 2434 /** @hide */ getLongForUser(ContentResolver cr, String name, int userHandle)2435 public static long getLongForUser(ContentResolver cr, String name, int userHandle) 2436 throws SettingNotFoundException { 2437 String valString = getStringForUser(cr, name, userHandle); 2438 try { 2439 return Long.parseLong(valString); 2440 } catch (NumberFormatException e) { 2441 throw new SettingNotFoundException(name); 2442 } 2443 } 2444 2445 /** 2446 * Convenience function for updating a single settings value as a long 2447 * integer. This will either create a new entry in the table if the 2448 * given name does not exist, or modify the value of the existing row 2449 * with that name. Note that internally setting values are always 2450 * stored as strings, so this function converts the given value to a 2451 * string before storing it. 2452 * 2453 * @param cr The ContentResolver to access. 2454 * @param name The name of the setting to modify. 2455 * @param value The new value for the setting. 2456 * @return true if the value was set, false on database errors 2457 */ putLong(ContentResolver cr, String name, long value)2458 public static boolean putLong(ContentResolver cr, String name, long value) { 2459 return putLongForUser(cr, name, value, UserHandle.myUserId()); 2460 } 2461 2462 /** @hide */ putLongForUser(ContentResolver cr, String name, long value, int userHandle)2463 public static boolean putLongForUser(ContentResolver cr, String name, long value, 2464 int userHandle) { 2465 return putStringForUser(cr, name, Long.toString(value), userHandle); 2466 } 2467 2468 /** 2469 * Convenience function for retrieving a single system settings value 2470 * as a floating point number. Note that internally setting values are 2471 * always stored as strings; this function converts the string to an 2472 * float for you. The default value will be returned if the setting 2473 * is not defined or not a valid float. 2474 * 2475 * @param cr The ContentResolver to access. 2476 * @param name The name of the setting to retrieve. 2477 * @param def Value to return if the setting is not defined. 2478 * 2479 * @return The setting's current value, or 'def' if it is not defined 2480 * or not a valid float. 2481 */ getFloat(ContentResolver cr, String name, float def)2482 public static float getFloat(ContentResolver cr, String name, float def) { 2483 return getFloatForUser(cr, name, def, UserHandle.myUserId()); 2484 } 2485 2486 /** @hide */ getFloatForUser(ContentResolver cr, String name, float def, int userHandle)2487 public static float getFloatForUser(ContentResolver cr, String name, float def, 2488 int userHandle) { 2489 String v = getStringForUser(cr, name, userHandle); 2490 try { 2491 return v != null ? Float.parseFloat(v) : def; 2492 } catch (NumberFormatException e) { 2493 return def; 2494 } 2495 } 2496 2497 /** 2498 * Convenience function for retrieving a single system settings value 2499 * as a float. Note that internally setting values are always 2500 * stored as strings; this function converts the string to a float 2501 * for you. 2502 * <p> 2503 * This version does not take a default value. If the setting has not 2504 * been set, or the string value is not a number, 2505 * it throws {@link SettingNotFoundException}. 2506 * 2507 * @param cr The ContentResolver to access. 2508 * @param name The name of the setting to retrieve. 2509 * 2510 * @throws SettingNotFoundException Thrown if a setting by the given 2511 * name can't be found or the setting value is not a float. 2512 * 2513 * @return The setting's current value. 2514 */ getFloat(ContentResolver cr, String name)2515 public static float getFloat(ContentResolver cr, String name) 2516 throws SettingNotFoundException { 2517 return getFloatForUser(cr, name, UserHandle.myUserId()); 2518 } 2519 2520 /** @hide */ getFloatForUser(ContentResolver cr, String name, int userHandle)2521 public static float getFloatForUser(ContentResolver cr, String name, int userHandle) 2522 throws SettingNotFoundException { 2523 String v = getStringForUser(cr, name, userHandle); 2524 if (v == null) { 2525 throw new SettingNotFoundException(name); 2526 } 2527 try { 2528 return Float.parseFloat(v); 2529 } catch (NumberFormatException e) { 2530 throw new SettingNotFoundException(name); 2531 } 2532 } 2533 2534 /** 2535 * Convenience function for updating a single settings value as a 2536 * floating point number. This will either create a new entry in the 2537 * table if the given name does not exist, or modify the value of the 2538 * existing row with that name. Note that internally setting values 2539 * are always stored as strings, so this function converts the given 2540 * value to a string before storing it. 2541 * 2542 * @param cr The ContentResolver to access. 2543 * @param name The name of the setting to modify. 2544 * @param value The new value for the setting. 2545 * @return true if the value was set, false on database errors 2546 */ putFloat(ContentResolver cr, String name, float value)2547 public static boolean putFloat(ContentResolver cr, String name, float value) { 2548 return putFloatForUser(cr, name, value, UserHandle.myUserId()); 2549 } 2550 2551 /** @hide */ putFloatForUser(ContentResolver cr, String name, float value, int userHandle)2552 public static boolean putFloatForUser(ContentResolver cr, String name, float value, 2553 int userHandle) { 2554 return putStringForUser(cr, name, Float.toString(value), userHandle); 2555 } 2556 2557 /** 2558 * Convenience function to read all of the current 2559 * configuration-related settings into a 2560 * {@link Configuration} object. 2561 * 2562 * @param cr The ContentResolver to access. 2563 * @param outConfig Where to place the configuration settings. 2564 */ getConfiguration(ContentResolver cr, Configuration outConfig)2565 public static void getConfiguration(ContentResolver cr, Configuration outConfig) { 2566 adjustConfigurationForUser(cr, outConfig, UserHandle.myUserId(), 2567 false /* updateSettingsIfEmpty */); 2568 } 2569 2570 /** @hide */ adjustConfigurationForUser(ContentResolver cr, Configuration outConfig, int userHandle, boolean updateSettingsIfEmpty)2571 public static void adjustConfigurationForUser(ContentResolver cr, Configuration outConfig, 2572 int userHandle, boolean updateSettingsIfEmpty) { 2573 outConfig.fontScale = Settings.System.getFloatForUser( 2574 cr, FONT_SCALE, DEFAULT_FONT_SCALE, userHandle); 2575 if (outConfig.fontScale < 0) { 2576 outConfig.fontScale = DEFAULT_FONT_SCALE; 2577 } 2578 2579 final String localeValue = 2580 Settings.System.getStringForUser(cr, SYSTEM_LOCALES, userHandle); 2581 if (localeValue != null) { 2582 outConfig.setLocales(LocaleList.forLanguageTags(localeValue)); 2583 } else { 2584 // Do not update configuration with emtpy settings since we need to take over the 2585 // locale list of previous user if the settings value is empty. This happens when a 2586 // new user is created. 2587 2588 if (updateSettingsIfEmpty) { 2589 // Make current configuration persistent. This is necessary the first time a 2590 // user log in. At the first login, the configuration settings are empty, so we 2591 // need to store the adjusted configuration as the initial settings. 2592 Settings.System.putStringForUser( 2593 cr, SYSTEM_LOCALES, outConfig.getLocales().toLanguageTags(), 2594 userHandle); 2595 } 2596 } 2597 } 2598 2599 /** 2600 * @hide Erase the fields in the Configuration that should be applied 2601 * by the settings. 2602 */ clearConfiguration(Configuration inoutConfig)2603 public static void clearConfiguration(Configuration inoutConfig) { 2604 inoutConfig.fontScale = 0; 2605 if (!inoutConfig.userSetLocale && !inoutConfig.getLocales().isEmpty()) { 2606 inoutConfig.clearLocales(); 2607 } 2608 } 2609 2610 /** 2611 * Convenience function to write a batch of configuration-related 2612 * settings from a {@link Configuration} object. 2613 * 2614 * @param cr The ContentResolver to access. 2615 * @param config The settings to write. 2616 * @return true if the values were set, false on database errors 2617 */ putConfiguration(ContentResolver cr, Configuration config)2618 public static boolean putConfiguration(ContentResolver cr, Configuration config) { 2619 return putConfigurationForUser(cr, config, UserHandle.myUserId()); 2620 } 2621 2622 /** @hide */ putConfigurationForUser(ContentResolver cr, Configuration config, int userHandle)2623 public static boolean putConfigurationForUser(ContentResolver cr, Configuration config, 2624 int userHandle) { 2625 return Settings.System.putFloatForUser(cr, FONT_SCALE, config.fontScale, userHandle) && 2626 Settings.System.putStringForUser( 2627 cr, SYSTEM_LOCALES, config.getLocales().toLanguageTags(), userHandle); 2628 } 2629 2630 /** @hide */ hasInterestingConfigurationChanges(int changes)2631 public static boolean hasInterestingConfigurationChanges(int changes) { 2632 return (changes & ActivityInfo.CONFIG_FONT_SCALE) != 0 || 2633 (changes & ActivityInfo.CONFIG_LOCALE) != 0; 2634 } 2635 2636 /** @deprecated - Do not use */ 2637 @Deprecated getShowGTalkServiceStatus(ContentResolver cr)2638 public static boolean getShowGTalkServiceStatus(ContentResolver cr) { 2639 return getShowGTalkServiceStatusForUser(cr, UserHandle.myUserId()); 2640 } 2641 2642 /** 2643 * @hide 2644 * @deprecated - Do not use 2645 */ 2646 @Deprecated getShowGTalkServiceStatusForUser(ContentResolver cr, int userHandle)2647 public static boolean getShowGTalkServiceStatusForUser(ContentResolver cr, 2648 int userHandle) { 2649 return getIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, 0, userHandle) != 0; 2650 } 2651 2652 /** @deprecated - Do not use */ 2653 @Deprecated setShowGTalkServiceStatus(ContentResolver cr, boolean flag)2654 public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) { 2655 setShowGTalkServiceStatusForUser(cr, flag, UserHandle.myUserId()); 2656 } 2657 2658 /** 2659 * @hide 2660 * @deprecated - Do not use 2661 */ 2662 @Deprecated setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag, int userHandle)2663 public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean flag, 2664 int userHandle) { 2665 putIntForUser(cr, SHOW_GTALK_SERVICE_STATUS, flag ? 1 : 0, userHandle); 2666 } 2667 2668 private static final class DiscreteValueValidator implements Validator { 2669 private final String[] mValues; 2670 DiscreteValueValidator(String[] values)2671 public DiscreteValueValidator(String[] values) { 2672 mValues = values; 2673 } 2674 2675 @Override validate(String value)2676 public boolean validate(String value) { 2677 return ArrayUtils.contains(mValues, value); 2678 } 2679 } 2680 2681 private static final class InclusiveIntegerRangeValidator implements Validator { 2682 private final int mMin; 2683 private final int mMax; 2684 InclusiveIntegerRangeValidator(int min, int max)2685 public InclusiveIntegerRangeValidator(int min, int max) { 2686 mMin = min; 2687 mMax = max; 2688 } 2689 2690 @Override validate(String value)2691 public boolean validate(String value) { 2692 try { 2693 final int intValue = Integer.parseInt(value); 2694 return intValue >= mMin && intValue <= mMax; 2695 } catch (NumberFormatException e) { 2696 return false; 2697 } 2698 } 2699 } 2700 2701 private static final class InclusiveFloatRangeValidator implements Validator { 2702 private final float mMin; 2703 private final float mMax; 2704 InclusiveFloatRangeValidator(float min, float max)2705 public InclusiveFloatRangeValidator(float min, float max) { 2706 mMin = min; 2707 mMax = max; 2708 } 2709 2710 @Override validate(String value)2711 public boolean validate(String value) { 2712 try { 2713 final float floatValue = Float.parseFloat(value); 2714 return floatValue >= mMin && floatValue <= mMax; 2715 } catch (NumberFormatException e) { 2716 return false; 2717 } 2718 } 2719 } 2720 2721 /** 2722 * @deprecated Use {@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} instead 2723 */ 2724 @Deprecated 2725 public static final String STAY_ON_WHILE_PLUGGED_IN = Global.STAY_ON_WHILE_PLUGGED_IN; 2726 2727 /** 2728 * What happens when the user presses the end call button if they're not 2729 * on a call.<br/> 2730 * <b>Values:</b><br/> 2731 * 0 - The end button does nothing.<br/> 2732 * 1 - The end button goes to the home screen.<br/> 2733 * 2 - The end button puts the device to sleep and locks the keyguard.<br/> 2734 * 3 - The end button goes to the home screen. If the user is already on the 2735 * home screen, it puts the device to sleep. 2736 */ 2737 public static final String END_BUTTON_BEHAVIOR = "end_button_behavior"; 2738 2739 private static final Validator END_BUTTON_BEHAVIOR_VALIDATOR = 2740 new InclusiveIntegerRangeValidator(0, 3); 2741 2742 /** 2743 * END_BUTTON_BEHAVIOR value for "go home". 2744 * @hide 2745 */ 2746 public static final int END_BUTTON_BEHAVIOR_HOME = 0x1; 2747 2748 /** 2749 * END_BUTTON_BEHAVIOR value for "go to sleep". 2750 * @hide 2751 */ 2752 public static final int END_BUTTON_BEHAVIOR_SLEEP = 0x2; 2753 2754 /** 2755 * END_BUTTON_BEHAVIOR default value. 2756 * @hide 2757 */ 2758 public static final int END_BUTTON_BEHAVIOR_DEFAULT = END_BUTTON_BEHAVIOR_SLEEP; 2759 2760 /** 2761 * Is advanced settings mode turned on. 0 == no, 1 == yes 2762 * @hide 2763 */ 2764 public static final String ADVANCED_SETTINGS = "advanced_settings"; 2765 2766 private static final Validator ADVANCED_SETTINGS_VALIDATOR = sBooleanValidator; 2767 2768 /** 2769 * ADVANCED_SETTINGS default value. 2770 * @hide 2771 */ 2772 public static final int ADVANCED_SETTINGS_DEFAULT = 0; 2773 2774 /** 2775 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead 2776 */ 2777 @Deprecated 2778 public static final String AIRPLANE_MODE_ON = Global.AIRPLANE_MODE_ON; 2779 2780 /** 2781 * @deprecated Use {@link android.provider.Settings.Global#RADIO_BLUETOOTH} instead 2782 */ 2783 @Deprecated 2784 public static final String RADIO_BLUETOOTH = Global.RADIO_BLUETOOTH; 2785 2786 /** 2787 * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIFI} instead 2788 */ 2789 @Deprecated 2790 public static final String RADIO_WIFI = Global.RADIO_WIFI; 2791 2792 /** 2793 * @deprecated Use {@link android.provider.Settings.Global#RADIO_WIMAX} instead 2794 * {@hide} 2795 */ 2796 @Deprecated 2797 public static final String RADIO_WIMAX = Global.RADIO_WIMAX; 2798 2799 /** 2800 * @deprecated Use {@link android.provider.Settings.Global#RADIO_CELL} instead 2801 */ 2802 @Deprecated 2803 public static final String RADIO_CELL = Global.RADIO_CELL; 2804 2805 /** 2806 * @deprecated Use {@link android.provider.Settings.Global#RADIO_NFC} instead 2807 */ 2808 @Deprecated 2809 public static final String RADIO_NFC = Global.RADIO_NFC; 2810 2811 /** 2812 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_RADIOS} instead 2813 */ 2814 @Deprecated 2815 public static final String AIRPLANE_MODE_RADIOS = Global.AIRPLANE_MODE_RADIOS; 2816 2817 /** 2818 * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_TOGGLEABLE_RADIOS} instead 2819 * 2820 * {@hide} 2821 */ 2822 @Deprecated 2823 public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = 2824 Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS; 2825 2826 /** 2827 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY} instead 2828 */ 2829 @Deprecated 2830 public static final String WIFI_SLEEP_POLICY = Global.WIFI_SLEEP_POLICY; 2831 2832 /** 2833 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_DEFAULT} instead 2834 */ 2835 @Deprecated 2836 public static final int WIFI_SLEEP_POLICY_DEFAULT = Global.WIFI_SLEEP_POLICY_DEFAULT; 2837 2838 /** 2839 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED} instead 2840 */ 2841 @Deprecated 2842 public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 2843 Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED; 2844 2845 /** 2846 * @deprecated Use {@link android.provider.Settings.Global#WIFI_SLEEP_POLICY_NEVER} instead 2847 */ 2848 @Deprecated 2849 public static final int WIFI_SLEEP_POLICY_NEVER = Global.WIFI_SLEEP_POLICY_NEVER; 2850 2851 /** 2852 * @deprecated Use {@link android.provider.Settings.Global#MODE_RINGER} instead 2853 */ 2854 @Deprecated 2855 public static final String MODE_RINGER = Global.MODE_RINGER; 2856 2857 /** 2858 * Whether to use static IP and other static network attributes. 2859 * <p> 2860 * Set to 1 for true and 0 for false. 2861 * 2862 * @deprecated Use {@link WifiManager} instead 2863 */ 2864 @Deprecated 2865 public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip"; 2866 2867 private static final Validator WIFI_USE_STATIC_IP_VALIDATOR = sBooleanValidator; 2868 2869 /** 2870 * The static IP address. 2871 * <p> 2872 * Example: "192.168.1.51" 2873 * 2874 * @deprecated Use {@link WifiManager} instead 2875 */ 2876 @Deprecated 2877 public static final String WIFI_STATIC_IP = "wifi_static_ip"; 2878 2879 private static final Validator WIFI_STATIC_IP_VALIDATOR = sLenientIpAddressValidator; 2880 2881 /** 2882 * If using static IP, the gateway's IP address. 2883 * <p> 2884 * Example: "192.168.1.1" 2885 * 2886 * @deprecated Use {@link WifiManager} instead 2887 */ 2888 @Deprecated 2889 public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway"; 2890 2891 private static final Validator WIFI_STATIC_GATEWAY_VALIDATOR = sLenientIpAddressValidator; 2892 2893 /** 2894 * If using static IP, the net mask. 2895 * <p> 2896 * Example: "255.255.255.0" 2897 * 2898 * @deprecated Use {@link WifiManager} instead 2899 */ 2900 @Deprecated 2901 public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask"; 2902 2903 private static final Validator WIFI_STATIC_NETMASK_VALIDATOR = sLenientIpAddressValidator; 2904 2905 /** 2906 * If using static IP, the primary DNS's IP address. 2907 * <p> 2908 * Example: "192.168.1.1" 2909 * 2910 * @deprecated Use {@link WifiManager} instead 2911 */ 2912 @Deprecated 2913 public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1"; 2914 2915 private static final Validator WIFI_STATIC_DNS1_VALIDATOR = sLenientIpAddressValidator; 2916 2917 /** 2918 * If using static IP, the secondary DNS's IP address. 2919 * <p> 2920 * Example: "192.168.1.2" 2921 * 2922 * @deprecated Use {@link WifiManager} instead 2923 */ 2924 @Deprecated 2925 public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2"; 2926 2927 private static final Validator WIFI_STATIC_DNS2_VALIDATOR = sLenientIpAddressValidator; 2928 2929 /** 2930 * Determines whether remote devices may discover and/or connect to 2931 * this device. 2932 * <P>Type: INT</P> 2933 * 2 -- discoverable and connectable 2934 * 1 -- connectable but not discoverable 2935 * 0 -- neither connectable nor discoverable 2936 */ 2937 public static final String BLUETOOTH_DISCOVERABILITY = 2938 "bluetooth_discoverability"; 2939 2940 private static final Validator BLUETOOTH_DISCOVERABILITY_VALIDATOR = 2941 new InclusiveIntegerRangeValidator(0, 2); 2942 2943 /** 2944 * Bluetooth discoverability timeout. If this value is nonzero, then 2945 * Bluetooth becomes discoverable for a certain number of seconds, 2946 * after which is becomes simply connectable. The value is in seconds. 2947 */ 2948 public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT = 2949 "bluetooth_discoverability_timeout"; 2950 2951 private static final Validator BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR = 2952 sNonNegativeIntegerValidator; 2953 2954 /** 2955 * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_ENABLED} 2956 * instead 2957 */ 2958 @Deprecated 2959 public static final String LOCK_PATTERN_ENABLED = Secure.LOCK_PATTERN_ENABLED; 2960 2961 /** 2962 * @deprecated Use {@link android.provider.Settings.Secure#LOCK_PATTERN_VISIBLE} 2963 * instead 2964 */ 2965 @Deprecated 2966 public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; 2967 2968 /** 2969 * @deprecated Use 2970 * {@link android.provider.Settings.Secure#LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED} 2971 * instead 2972 */ 2973 @Deprecated 2974 public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = 2975 "lock_pattern_tactile_feedback_enabled"; 2976 2977 /** 2978 * A formatted string of the next alarm that is set, or the empty string 2979 * if there is no alarm set. 2980 * 2981 * @deprecated Use {@link android.app.AlarmManager#getNextAlarmClock()}. 2982 */ 2983 @Deprecated 2984 public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted"; 2985 2986 private static final Validator NEXT_ALARM_FORMATTED_VALIDATOR = new Validator() { 2987 private static final int MAX_LENGTH = 1000; 2988 2989 @Override 2990 public boolean validate(String value) { 2991 // TODO: No idea what the correct format is. 2992 return value == null || value.length() < MAX_LENGTH; 2993 } 2994 }; 2995 2996 /** 2997 * Scaling factor for fonts, float. 2998 */ 2999 public static final String FONT_SCALE = "font_scale"; 3000 3001 private static final Validator FONT_SCALE_VALIDATOR = new Validator() { 3002 @Override 3003 public boolean validate(String value) { 3004 try { 3005 return Float.parseFloat(value) >= 0; 3006 } catch (NumberFormatException e) { 3007 return false; 3008 } 3009 } 3010 }; 3011 3012 /** 3013 * The serialized system locale value. 3014 * 3015 * Do not use this value directory. 3016 * To get system locale, use {@link LocaleList#getDefault} instead. 3017 * To update system locale, use {@link com.android.internal.app.LocalePicker#updateLocales} 3018 * instead. 3019 * @hide 3020 */ 3021 public static final String SYSTEM_LOCALES = "system_locales"; 3022 3023 3024 /** 3025 * Name of an application package to be debugged. 3026 * 3027 * @deprecated Use {@link Global#DEBUG_APP} instead 3028 */ 3029 @Deprecated 3030 public static final String DEBUG_APP = Global.DEBUG_APP; 3031 3032 /** 3033 * If 1, when launching DEBUG_APP it will wait for the debugger before 3034 * starting user code. If 0, it will run normally. 3035 * 3036 * @deprecated Use {@link Global#WAIT_FOR_DEBUGGER} instead 3037 */ 3038 @Deprecated 3039 public static final String WAIT_FOR_DEBUGGER = Global.WAIT_FOR_DEBUGGER; 3040 3041 /** 3042 * Whether or not to dim the screen. 0=no 1=yes 3043 * @deprecated This setting is no longer used. 3044 */ 3045 @Deprecated 3046 public static final String DIM_SCREEN = "dim_screen"; 3047 3048 private static final Validator DIM_SCREEN_VALIDATOR = sBooleanValidator; 3049 3050 /** 3051 * The display color mode. 3052 * @hide 3053 */ 3054 public static final String DISPLAY_COLOR_MODE = "display_color_mode"; 3055 3056 /** 3057 * The amount of time in milliseconds before the device goes to sleep or begins 3058 * to dream after a period of inactivity. This value is also known as the 3059 * user activity timeout period since the screen isn't necessarily turned off 3060 * when it expires. 3061 */ 3062 public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout"; 3063 3064 private static final Validator SCREEN_OFF_TIMEOUT_VALIDATOR = sNonNegativeIntegerValidator; 3065 3066 /** 3067 * The screen backlight brightness between 0 and 255. 3068 */ 3069 public static final String SCREEN_BRIGHTNESS = "screen_brightness"; 3070 3071 private static final Validator SCREEN_BRIGHTNESS_VALIDATOR = 3072 new InclusiveIntegerRangeValidator(0, 255); 3073 3074 /** 3075 * The screen backlight brightness between 0 and 255. 3076 * @hide 3077 */ 3078 public static final String SCREEN_BRIGHTNESS_FOR_VR = "screen_brightness_for_vr"; 3079 3080 private static final Validator SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR = 3081 new InclusiveIntegerRangeValidator(0, 255); 3082 3083 /** 3084 * Control whether to enable automatic brightness mode. 3085 */ 3086 public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; 3087 3088 private static final Validator SCREEN_BRIGHTNESS_MODE_VALIDATOR = sBooleanValidator; 3089 3090 /** 3091 * Adjustment to auto-brightness to make it generally more (>0.0 <1.0) 3092 * or less (<0.0 >-1.0) bright. 3093 * @hide 3094 */ 3095 public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj"; 3096 3097 private static final Validator SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR = 3098 new InclusiveFloatRangeValidator(-1, 1); 3099 3100 /** 3101 * SCREEN_BRIGHTNESS_MODE value for manual mode. 3102 */ 3103 public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0; 3104 3105 /** 3106 * SCREEN_BRIGHTNESS_MODE value for automatic mode. 3107 */ 3108 public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; 3109 3110 /** 3111 * Control whether the process CPU usage meter should be shown. 3112 * 3113 * @deprecated This functionality is no longer available as of 3114 * {@link android.os.Build.VERSION_CODES#N_MR1}. 3115 */ 3116 @Deprecated 3117 public static final String SHOW_PROCESSES = Global.SHOW_PROCESSES; 3118 3119 /** 3120 * If 1, the activity manager will aggressively finish activities and 3121 * processes as soon as they are no longer needed. If 0, the normal 3122 * extended lifetime is used. 3123 * 3124 * @deprecated Use {@link Global#ALWAYS_FINISH_ACTIVITIES} instead 3125 */ 3126 @Deprecated 3127 public static final String ALWAYS_FINISH_ACTIVITIES = Global.ALWAYS_FINISH_ACTIVITIES; 3128 3129 /** 3130 * Determines which streams are affected by ringer mode changes. The 3131 * stream type's bit should be set to 1 if it should be muted when going 3132 * into an inaudible ringer mode. 3133 */ 3134 public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected"; 3135 3136 private static final Validator MODE_RINGER_STREAMS_AFFECTED_VALIDATOR = 3137 sNonNegativeIntegerValidator; 3138 3139 /** 3140 * Determines which streams are affected by mute. The 3141 * stream type's bit should be set to 1 if it should be muted when a mute request 3142 * is received. 3143 */ 3144 public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected"; 3145 3146 private static final Validator MUTE_STREAMS_AFFECTED_VALIDATOR = 3147 sNonNegativeIntegerValidator; 3148 3149 /** 3150 * Whether vibrate is on for different events. This is used internally, 3151 * changing this value will not change the vibrate. See AudioManager. 3152 */ 3153 public static final String VIBRATE_ON = "vibrate_on"; 3154 3155 private static final Validator VIBRATE_ON_VALIDATOR = sBooleanValidator; 3156 3157 /** 3158 * If 1, redirects the system vibrator to all currently attached input devices 3159 * that support vibration. If there are no such input devices, then the system 3160 * vibrator is used instead. 3161 * If 0, does not register the system vibrator. 3162 * 3163 * This setting is mainly intended to provide a compatibility mechanism for 3164 * applications that only know about the system vibrator and do not use the 3165 * input device vibrator API. 3166 * 3167 * @hide 3168 */ 3169 public static final String VIBRATE_INPUT_DEVICES = "vibrate_input_devices"; 3170 3171 private static final Validator VIBRATE_INPUT_DEVICES_VALIDATOR = sBooleanValidator; 3172 3173 /** 3174 * Ringer volume. This is used internally, changing this value will not 3175 * change the volume. See AudioManager. 3176 * 3177 * @removed Not used by anything since API 2. 3178 */ 3179 public static final String VOLUME_RING = "volume_ring"; 3180 3181 /** 3182 * System/notifications volume. This is used internally, changing this 3183 * value will not change the volume. See AudioManager. 3184 * 3185 * @removed Not used by anything since API 2. 3186 */ 3187 public static final String VOLUME_SYSTEM = "volume_system"; 3188 3189 /** 3190 * Voice call volume. This is used internally, changing this value will 3191 * not change the volume. See AudioManager. 3192 * 3193 * @removed Not used by anything since API 2. 3194 */ 3195 public static final String VOLUME_VOICE = "volume_voice"; 3196 3197 /** 3198 * Music/media/gaming volume. This is used internally, changing this 3199 * value will not change the volume. See AudioManager. 3200 * 3201 * @removed Not used by anything since API 2. 3202 */ 3203 public static final String VOLUME_MUSIC = "volume_music"; 3204 3205 /** 3206 * Alarm volume. This is used internally, changing this 3207 * value will not change the volume. See AudioManager. 3208 * 3209 * @removed Not used by anything since API 2. 3210 */ 3211 public static final String VOLUME_ALARM = "volume_alarm"; 3212 3213 /** 3214 * Notification volume. This is used internally, changing this 3215 * value will not change the volume. See AudioManager. 3216 * 3217 * @removed Not used by anything since API 2. 3218 */ 3219 public static final String VOLUME_NOTIFICATION = "volume_notification"; 3220 3221 /** 3222 * Bluetooth Headset volume. This is used internally, changing this value will 3223 * not change the volume. See AudioManager. 3224 * 3225 * @removed Not used by anything since API 2. 3226 */ 3227 public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco"; 3228 3229 /** 3230 * @hide 3231 * Acessibility volume. This is used internally, changing this 3232 * value will not change the volume. 3233 */ 3234 public static final String VOLUME_ACCESSIBILITY = "volume_a11y"; 3235 3236 /** 3237 * Master volume (float in the range 0.0f to 1.0f). 3238 * 3239 * @hide 3240 */ 3241 public static final String VOLUME_MASTER = "volume_master"; 3242 3243 /** 3244 * Master mono (int 1 = mono, 0 = normal). 3245 * 3246 * @hide 3247 */ 3248 public static final String MASTER_MONO = "master_mono"; 3249 3250 private static final Validator MASTER_MONO_VALIDATOR = sBooleanValidator; 3251 3252 /** 3253 * Whether the notifications should use the ring volume (value of 1) or 3254 * a separate notification volume (value of 0). In most cases, users 3255 * will have this enabled so the notification and ringer volumes will be 3256 * the same. However, power users can disable this and use the separate 3257 * notification volume control. 3258 * <p> 3259 * Note: This is a one-off setting that will be removed in the future 3260 * when there is profile support. For this reason, it is kept hidden 3261 * from the public APIs. 3262 * 3263 * @hide 3264 * @deprecated 3265 */ 3266 @Deprecated 3267 public static final String NOTIFICATIONS_USE_RING_VOLUME = 3268 "notifications_use_ring_volume"; 3269 3270 private static final Validator NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR = sBooleanValidator; 3271 3272 /** 3273 * Whether silent mode should allow vibration feedback. This is used 3274 * internally in AudioService and the Sound settings activity to 3275 * coordinate decoupling of vibrate and silent modes. This setting 3276 * will likely be removed in a future release with support for 3277 * audio/vibe feedback profiles. 3278 * 3279 * Not used anymore. On devices with vibrator, the user explicitly selects 3280 * silent or vibrate mode. 3281 * Kept for use by legacy database upgrade code in DatabaseHelper. 3282 * @hide 3283 */ 3284 public static final String VIBRATE_IN_SILENT = "vibrate_in_silent"; 3285 3286 private static final Validator VIBRATE_IN_SILENT_VALIDATOR = sBooleanValidator; 3287 3288 /** 3289 * The mapping of stream type (integer) to its setting. 3290 * 3291 * @removed Not used by anything since API 2. 3292 */ 3293 public static final String[] VOLUME_SETTINGS = { 3294 VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC, 3295 VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO 3296 }; 3297 3298 /** 3299 * @hide 3300 * The mapping of stream type (integer) to its setting. 3301 * Unlike the VOLUME_SETTINGS array, this one contains as many entries as 3302 * AudioSystem.NUM_STREAM_TYPES, and has empty strings for stream types whose volumes 3303 * are never persisted. 3304 */ 3305 public static final String[] VOLUME_SETTINGS_INT = { 3306 VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC, 3307 VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO, 3308 "" /*STREAM_SYSTEM_ENFORCED, no setting for this stream*/, 3309 "" /*STREAM_DTMF, no setting for this stream*/, 3310 "" /*STREAM_TTS, no setting for this stream*/, 3311 VOLUME_ACCESSIBILITY 3312 }; 3313 3314 /** 3315 * Appended to various volume related settings to record the previous 3316 * values before they the settings were affected by a silent/vibrate 3317 * ringer mode change. 3318 * 3319 * @removed Not used by anything since API 2. 3320 */ 3321 public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible"; 3322 3323 /** 3324 * Persistent store for the system-wide default ringtone URI. 3325 * <p> 3326 * If you need to play the default ringtone at any given time, it is recommended 3327 * you give {@link #DEFAULT_RINGTONE_URI} to the media player. It will resolve 3328 * to the set default ringtone at the time of playing. 3329 * 3330 * @see #DEFAULT_RINGTONE_URI 3331 */ 3332 public static final String RINGTONE = "ringtone"; 3333 3334 private static final Validator RINGTONE_VALIDATOR = sUriValidator; 3335 3336 /** 3337 * A {@link Uri} that will point to the current default ringtone at any 3338 * given time. 3339 * <p> 3340 * If the current default ringtone is in the DRM provider and the caller 3341 * does not have permission, the exception will be a 3342 * FileNotFoundException. 3343 */ 3344 public static final Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE); 3345 3346 /** {@hide} */ 3347 public static final String RINGTONE_CACHE = "ringtone_cache"; 3348 /** {@hide} */ 3349 public static final Uri RINGTONE_CACHE_URI = getUriFor(RINGTONE_CACHE); 3350 3351 /** 3352 * Persistent store for the system-wide default notification sound. 3353 * 3354 * @see #RINGTONE 3355 * @see #DEFAULT_NOTIFICATION_URI 3356 */ 3357 public static final String NOTIFICATION_SOUND = "notification_sound"; 3358 3359 private static final Validator NOTIFICATION_SOUND_VALIDATOR = sUriValidator; 3360 3361 /** 3362 * A {@link Uri} that will point to the current default notification 3363 * sound at any given time. 3364 * 3365 * @see #DEFAULT_RINGTONE_URI 3366 */ 3367 public static final Uri DEFAULT_NOTIFICATION_URI = getUriFor(NOTIFICATION_SOUND); 3368 3369 /** {@hide} */ 3370 public static final String NOTIFICATION_SOUND_CACHE = "notification_sound_cache"; 3371 /** {@hide} */ 3372 public static final Uri NOTIFICATION_SOUND_CACHE_URI = getUriFor(NOTIFICATION_SOUND_CACHE); 3373 3374 /** 3375 * Persistent store for the system-wide default alarm alert. 3376 * 3377 * @see #RINGTONE 3378 * @see #DEFAULT_ALARM_ALERT_URI 3379 */ 3380 public static final String ALARM_ALERT = "alarm_alert"; 3381 3382 private static final Validator ALARM_ALERT_VALIDATOR = sUriValidator; 3383 3384 /** 3385 * A {@link Uri} that will point to the current default alarm alert at 3386 * any given time. 3387 * 3388 * @see #DEFAULT_ALARM_ALERT_URI 3389 */ 3390 public static final Uri DEFAULT_ALARM_ALERT_URI = getUriFor(ALARM_ALERT); 3391 3392 /** {@hide} */ 3393 public static final String ALARM_ALERT_CACHE = "alarm_alert_cache"; 3394 /** {@hide} */ 3395 public static final Uri ALARM_ALERT_CACHE_URI = getUriFor(ALARM_ALERT_CACHE); 3396 3397 /** 3398 * Persistent store for the system default media button event receiver. 3399 * 3400 * @hide 3401 */ 3402 public static final String MEDIA_BUTTON_RECEIVER = "media_button_receiver"; 3403 3404 private static final Validator MEDIA_BUTTON_RECEIVER_VALIDATOR = new Validator() { 3405 @Override 3406 public boolean validate(String value) { 3407 try { 3408 ComponentName.unflattenFromString(value); 3409 return true; 3410 } catch (NullPointerException e) { 3411 return false; 3412 } 3413 } 3414 }; 3415 3416 /** 3417 * Setting to enable Auto Replace (AutoText) in text editors. 1 = On, 0 = Off 3418 */ 3419 public static final String TEXT_AUTO_REPLACE = "auto_replace"; 3420 3421 private static final Validator TEXT_AUTO_REPLACE_VALIDATOR = sBooleanValidator; 3422 3423 /** 3424 * Setting to enable Auto Caps in text editors. 1 = On, 0 = Off 3425 */ 3426 public static final String TEXT_AUTO_CAPS = "auto_caps"; 3427 3428 private static final Validator TEXT_AUTO_CAPS_VALIDATOR = sBooleanValidator; 3429 3430 /** 3431 * Setting to enable Auto Punctuate in text editors. 1 = On, 0 = Off. This 3432 * feature converts two spaces to a "." and space. 3433 */ 3434 public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate"; 3435 3436 private static final Validator TEXT_AUTO_PUNCTUATE_VALIDATOR = sBooleanValidator; 3437 3438 /** 3439 * Setting to showing password characters in text editors. 1 = On, 0 = Off 3440 */ 3441 public static final String TEXT_SHOW_PASSWORD = "show_password"; 3442 3443 private static final Validator TEXT_SHOW_PASSWORD_VALIDATOR = sBooleanValidator; 3444 3445 public static final String SHOW_GTALK_SERVICE_STATUS = 3446 "SHOW_GTALK_SERVICE_STATUS"; 3447 3448 private static final Validator SHOW_GTALK_SERVICE_STATUS_VALIDATOR = sBooleanValidator; 3449 3450 /** 3451 * Name of activity to use for wallpaper on the home screen. 3452 * 3453 * @deprecated Use {@link WallpaperManager} instead. 3454 */ 3455 @Deprecated 3456 public static final String WALLPAPER_ACTIVITY = "wallpaper_activity"; 3457 3458 private static final Validator WALLPAPER_ACTIVITY_VALIDATOR = new Validator() { 3459 private static final int MAX_LENGTH = 1000; 3460 3461 @Override 3462 public boolean validate(String value) { 3463 if (value != null && value.length() > MAX_LENGTH) { 3464 return false; 3465 } 3466 return ComponentName.unflattenFromString(value) != null; 3467 } 3468 }; 3469 3470 /** 3471 * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME} 3472 * instead 3473 */ 3474 @Deprecated 3475 public static final String AUTO_TIME = Global.AUTO_TIME; 3476 3477 /** 3478 * @deprecated Use {@link android.provider.Settings.Global#AUTO_TIME_ZONE} 3479 * instead 3480 */ 3481 @Deprecated 3482 public static final String AUTO_TIME_ZONE = Global.AUTO_TIME_ZONE; 3483 3484 /** 3485 * Display times as 12 or 24 hours 3486 * 12 3487 * 24 3488 */ 3489 public static final String TIME_12_24 = "time_12_24"; 3490 3491 /** @hide */ 3492 public static final Validator TIME_12_24_VALIDATOR = 3493 new DiscreteValueValidator(new String[] {"12", "24"}); 3494 3495 /** 3496 * Date format string 3497 * mm/dd/yyyy 3498 * dd/mm/yyyy 3499 * yyyy/mm/dd 3500 */ 3501 public static final String DATE_FORMAT = "date_format"; 3502 3503 /** @hide */ 3504 public static final Validator DATE_FORMAT_VALIDATOR = new Validator() { 3505 @Override 3506 public boolean validate(String value) { 3507 try { 3508 new SimpleDateFormat(value); 3509 return true; 3510 } catch (IllegalArgumentException e) { 3511 return false; 3512 } 3513 } 3514 }; 3515 3516 /** 3517 * Whether the setup wizard has been run before (on first boot), or if 3518 * it still needs to be run. 3519 * 3520 * nonzero = it has been run in the past 3521 * 0 = it has not been run in the past 3522 */ 3523 public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run"; 3524 3525 /** @hide */ 3526 public static final Validator SETUP_WIZARD_HAS_RUN_VALIDATOR = sBooleanValidator; 3527 3528 /** 3529 * Scaling factor for normal window animations. Setting to 0 will disable window 3530 * animations. 3531 * 3532 * @deprecated Use {@link Global#WINDOW_ANIMATION_SCALE} instead 3533 */ 3534 @Deprecated 3535 public static final String WINDOW_ANIMATION_SCALE = Global.WINDOW_ANIMATION_SCALE; 3536 3537 /** 3538 * Scaling factor for activity transition animations. Setting to 0 will disable window 3539 * animations. 3540 * 3541 * @deprecated Use {@link Global#TRANSITION_ANIMATION_SCALE} instead 3542 */ 3543 @Deprecated 3544 public static final String TRANSITION_ANIMATION_SCALE = Global.TRANSITION_ANIMATION_SCALE; 3545 3546 /** 3547 * Scaling factor for Animator-based animations. This affects both the start delay and 3548 * duration of all such animations. Setting to 0 will cause animations to end immediately. 3549 * The default value is 1. 3550 * 3551 * @deprecated Use {@link Global#ANIMATOR_DURATION_SCALE} instead 3552 */ 3553 @Deprecated 3554 public static final String ANIMATOR_DURATION_SCALE = Global.ANIMATOR_DURATION_SCALE; 3555 3556 /** 3557 * Control whether the accelerometer will be used to change screen 3558 * orientation. If 0, it will not be used unless explicitly requested 3559 * by the application; if 1, it will be used by default unless explicitly 3560 * disabled by the application. 3561 */ 3562 public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation"; 3563 3564 /** @hide */ 3565 public static final Validator ACCELEROMETER_ROTATION_VALIDATOR = sBooleanValidator; 3566 3567 /** 3568 * Default screen rotation when no other policy applies. 3569 * When {@link #ACCELEROMETER_ROTATION} is zero and no on-screen Activity expresses a 3570 * preference, this rotation value will be used. Must be one of the 3571 * {@link android.view.Surface#ROTATION_0 Surface rotation constants}. 3572 * 3573 * @see android.view.Display#getRotation 3574 */ 3575 public static final String USER_ROTATION = "user_rotation"; 3576 3577 /** @hide */ 3578 public static final Validator USER_ROTATION_VALIDATOR = 3579 new InclusiveIntegerRangeValidator(0, 3); 3580 3581 /** 3582 * Control whether the rotation lock toggle in the System UI should be hidden. 3583 * Typically this is done for accessibility purposes to make it harder for 3584 * the user to accidentally toggle the rotation lock while the display rotation 3585 * has been locked for accessibility. 3586 * 3587 * If 0, then rotation lock toggle is not hidden for accessibility (although it may be 3588 * unavailable for other reasons). If 1, then the rotation lock toggle is hidden. 3589 * 3590 * @hide 3591 */ 3592 public static final String HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY = 3593 "hide_rotation_lock_toggle_for_accessibility"; 3594 3595 /** @hide */ 3596 public static final Validator HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR = 3597 sBooleanValidator; 3598 3599 /** 3600 * Whether the phone vibrates when it is ringing due to an incoming call. This will 3601 * be used by Phone and Setting apps; it shouldn't affect other apps. 3602 * The value is boolean (1 or 0). 3603 * 3604 * Note: this is not same as "vibrate on ring", which had been available until ICS. 3605 * It was about AudioManager's setting and thus affected all the applications which 3606 * relied on the setting, while this is purely about the vibration setting for incoming 3607 * calls. 3608 */ 3609 public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing"; 3610 3611 /** @hide */ 3612 public static final Validator VIBRATE_WHEN_RINGING_VALIDATOR = sBooleanValidator; 3613 3614 /** 3615 * Whether the audible DTMF tones are played by the dialer when dialing. The value is 3616 * boolean (1 or 0). 3617 */ 3618 public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone"; 3619 3620 /** @hide */ 3621 public static final Validator DTMF_TONE_WHEN_DIALING_VALIDATOR = sBooleanValidator; 3622 3623 /** 3624 * CDMA only settings 3625 * DTMF tone type played by the dialer when dialing. 3626 * 0 = Normal 3627 * 1 = Long 3628 */ 3629 public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type"; 3630 3631 /** @hide */ 3632 public static final Validator DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR = sBooleanValidator; 3633 3634 /** 3635 * Whether the hearing aid is enabled. The value is 3636 * boolean (1 or 0). 3637 * @hide 3638 */ 3639 public static final String HEARING_AID = "hearing_aid"; 3640 3641 /** @hide */ 3642 public static final Validator HEARING_AID_VALIDATOR = sBooleanValidator; 3643 3644 /** 3645 * CDMA only settings 3646 * TTY Mode 3647 * 0 = OFF 3648 * 1 = FULL 3649 * 2 = VCO 3650 * 3 = HCO 3651 * @hide 3652 */ 3653 public static final String TTY_MODE = "tty_mode"; 3654 3655 /** @hide */ 3656 public static final Validator TTY_MODE_VALIDATOR = new InclusiveIntegerRangeValidator(0, 3); 3657 3658 /** 3659 * Whether the sounds effects (key clicks, lid open ...) are enabled. The value is 3660 * boolean (1 or 0). 3661 */ 3662 public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled"; 3663 3664 /** @hide */ 3665 public static final Validator SOUND_EFFECTS_ENABLED_VALIDATOR = sBooleanValidator; 3666 3667 /** 3668 * Whether the haptic feedback (long presses, ...) are enabled. The value is 3669 * boolean (1 or 0). 3670 */ 3671 public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled"; 3672 3673 /** @hide */ 3674 public static final Validator HAPTIC_FEEDBACK_ENABLED_VALIDATOR = sBooleanValidator; 3675 3676 /** 3677 * @deprecated Each application that shows web suggestions should have its own 3678 * setting for this. 3679 */ 3680 @Deprecated 3681 public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions"; 3682 3683 /** @hide */ 3684 public static final Validator SHOW_WEB_SUGGESTIONS_VALIDATOR = sBooleanValidator; 3685 3686 /** 3687 * Whether the notification LED should repeatedly flash when a notification is 3688 * pending. The value is boolean (1 or 0). 3689 * @hide 3690 */ 3691 public static final String NOTIFICATION_LIGHT_PULSE = "notification_light_pulse"; 3692 3693 /** @hide */ 3694 public static final Validator NOTIFICATION_LIGHT_PULSE_VALIDATOR = sBooleanValidator; 3695 3696 /** 3697 * Show pointer location on screen? 3698 * 0 = no 3699 * 1 = yes 3700 * @hide 3701 */ 3702 public static final String POINTER_LOCATION = "pointer_location"; 3703 3704 /** @hide */ 3705 public static final Validator POINTER_LOCATION_VALIDATOR = sBooleanValidator; 3706 3707 /** 3708 * Show touch positions on screen? 3709 * 0 = no 3710 * 1 = yes 3711 * @hide 3712 */ 3713 public static final String SHOW_TOUCHES = "show_touches"; 3714 3715 /** @hide */ 3716 public static final Validator SHOW_TOUCHES_VALIDATOR = sBooleanValidator; 3717 3718 /** 3719 * Log raw orientation data from 3720 * {@link com.android.server.policy.WindowOrientationListener} for use with the 3721 * orientationplot.py tool. 3722 * 0 = no 3723 * 1 = yes 3724 * @hide 3725 */ 3726 public static final String WINDOW_ORIENTATION_LISTENER_LOG = 3727 "window_orientation_listener_log"; 3728 3729 /** @hide */ 3730 public static final Validator WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR = sBooleanValidator; 3731 3732 /** 3733 * @deprecated Use {@link android.provider.Settings.Global#POWER_SOUNDS_ENABLED} 3734 * instead 3735 * @hide 3736 */ 3737 @Deprecated 3738 public static final String POWER_SOUNDS_ENABLED = Global.POWER_SOUNDS_ENABLED; 3739 3740 /** 3741 * @deprecated Use {@link android.provider.Settings.Global#DOCK_SOUNDS_ENABLED} 3742 * instead 3743 * @hide 3744 */ 3745 @Deprecated 3746 public static final String DOCK_SOUNDS_ENABLED = Global.DOCK_SOUNDS_ENABLED; 3747 3748 /** 3749 * Whether to play sounds when the keyguard is shown and dismissed. 3750 * @hide 3751 */ 3752 public static final String LOCKSCREEN_SOUNDS_ENABLED = "lockscreen_sounds_enabled"; 3753 3754 /** @hide */ 3755 public static final Validator LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR = sBooleanValidator; 3756 3757 /** 3758 * Whether the lockscreen should be completely disabled. 3759 * @hide 3760 */ 3761 public static final String LOCKSCREEN_DISABLED = "lockscreen.disabled"; 3762 3763 /** @hide */ 3764 public static final Validator LOCKSCREEN_DISABLED_VALIDATOR = sBooleanValidator; 3765 3766 /** 3767 * @deprecated Use {@link android.provider.Settings.Global#LOW_BATTERY_SOUND} 3768 * instead 3769 * @hide 3770 */ 3771 @Deprecated 3772 public static final String LOW_BATTERY_SOUND = Global.LOW_BATTERY_SOUND; 3773 3774 /** 3775 * @deprecated Use {@link android.provider.Settings.Global#DESK_DOCK_SOUND} 3776 * instead 3777 * @hide 3778 */ 3779 @Deprecated 3780 public static final String DESK_DOCK_SOUND = Global.DESK_DOCK_SOUND; 3781 3782 /** 3783 * @deprecated Use {@link android.provider.Settings.Global#DESK_UNDOCK_SOUND} 3784 * instead 3785 * @hide 3786 */ 3787 @Deprecated 3788 public static final String DESK_UNDOCK_SOUND = Global.DESK_UNDOCK_SOUND; 3789 3790 /** 3791 * @deprecated Use {@link android.provider.Settings.Global#CAR_DOCK_SOUND} 3792 * instead 3793 * @hide 3794 */ 3795 @Deprecated 3796 public static final String CAR_DOCK_SOUND = Global.CAR_DOCK_SOUND; 3797 3798 /** 3799 * @deprecated Use {@link android.provider.Settings.Global#CAR_UNDOCK_SOUND} 3800 * instead 3801 * @hide 3802 */ 3803 @Deprecated 3804 public static final String CAR_UNDOCK_SOUND = Global.CAR_UNDOCK_SOUND; 3805 3806 /** 3807 * @deprecated Use {@link android.provider.Settings.Global#LOCK_SOUND} 3808 * instead 3809 * @hide 3810 */ 3811 @Deprecated 3812 public static final String LOCK_SOUND = Global.LOCK_SOUND; 3813 3814 /** 3815 * @deprecated Use {@link android.provider.Settings.Global#UNLOCK_SOUND} 3816 * instead 3817 * @hide 3818 */ 3819 @Deprecated 3820 public static final String UNLOCK_SOUND = Global.UNLOCK_SOUND; 3821 3822 /** 3823 * Receive incoming SIP calls? 3824 * 0 = no 3825 * 1 = yes 3826 * @hide 3827 */ 3828 public static final String SIP_RECEIVE_CALLS = "sip_receive_calls"; 3829 3830 /** @hide */ 3831 public static final Validator SIP_RECEIVE_CALLS_VALIDATOR = sBooleanValidator; 3832 3833 /** 3834 * Call Preference String. 3835 * "SIP_ALWAYS" : Always use SIP with network access 3836 * "SIP_ADDRESS_ONLY" : Only if destination is a SIP address 3837 * @hide 3838 */ 3839 public static final String SIP_CALL_OPTIONS = "sip_call_options"; 3840 3841 /** @hide */ 3842 public static final Validator SIP_CALL_OPTIONS_VALIDATOR = new DiscreteValueValidator( 3843 new String[] {"SIP_ALWAYS", "SIP_ADDRESS_ONLY"}); 3844 3845 /** 3846 * One of the sip call options: Always use SIP with network access. 3847 * @hide 3848 */ 3849 public static final String SIP_ALWAYS = "SIP_ALWAYS"; 3850 3851 /** @hide */ 3852 public static final Validator SIP_ALWAYS_VALIDATOR = sBooleanValidator; 3853 3854 /** 3855 * One of the sip call options: Only if destination is a SIP address. 3856 * @hide 3857 */ 3858 public static final String SIP_ADDRESS_ONLY = "SIP_ADDRESS_ONLY"; 3859 3860 /** @hide */ 3861 public static final Validator SIP_ADDRESS_ONLY_VALIDATOR = sBooleanValidator; 3862 3863 /** 3864 * @deprecated Use SIP_ALWAYS or SIP_ADDRESS_ONLY instead. Formerly used to indicate that 3865 * the user should be prompted each time a call is made whether it should be placed using 3866 * SIP. The {@link com.android.providers.settings.DatabaseHelper} replaces this with 3867 * SIP_ADDRESS_ONLY. 3868 * @hide 3869 */ 3870 @Deprecated 3871 public static final String SIP_ASK_ME_EACH_TIME = "SIP_ASK_ME_EACH_TIME"; 3872 3873 /** @hide */ 3874 public static final Validator SIP_ASK_ME_EACH_TIME_VALIDATOR = sBooleanValidator; 3875 3876 /** 3877 * Pointer speed setting. 3878 * This is an integer value in a range between -7 and +7, so there are 15 possible values. 3879 * -7 = slowest 3880 * 0 = default speed 3881 * +7 = fastest 3882 * @hide 3883 */ 3884 public static final String POINTER_SPEED = "pointer_speed"; 3885 3886 /** @hide */ 3887 public static final Validator POINTER_SPEED_VALIDATOR = 3888 new InclusiveFloatRangeValidator(-7, 7); 3889 3890 /** 3891 * Whether lock-to-app will be triggered by long-press on recents. 3892 * @hide 3893 */ 3894 public static final String LOCK_TO_APP_ENABLED = "lock_to_app_enabled"; 3895 3896 /** @hide */ 3897 public static final Validator LOCK_TO_APP_ENABLED_VALIDATOR = sBooleanValidator; 3898 3899 /** 3900 * I am the lolrus. 3901 * <p> 3902 * Nonzero values indicate that the user has a bukkit. 3903 * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>. 3904 * @hide 3905 */ 3906 public static final String EGG_MODE = "egg_mode"; 3907 3908 /** @hide */ 3909 public static final Validator EGG_MODE_VALIDATOR = new Validator() { 3910 @Override 3911 public boolean validate(String value) { 3912 try { 3913 return Long.parseLong(value) >= 0; 3914 } catch (NumberFormatException e) { 3915 return false; 3916 } 3917 } 3918 }; 3919 3920 /** 3921 * Setting to determine whether or not to show the battery percentage in the status bar. 3922 * 0 - Don't show percentage 3923 * 1 - Show percentage 3924 * @hide 3925 */ 3926 public static final String SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent"; 3927 3928 /** @hide */ 3929 private static final Validator SHOW_BATTERY_PERCENT_VALIDATOR = sBooleanValidator; 3930 3931 /** 3932 * IMPORTANT: If you add a new public settings you also have to add it to 3933 * PUBLIC_SETTINGS below. If the new setting is hidden you have to add 3934 * it to PRIVATE_SETTINGS below. Also add a validator that can validate 3935 * the setting value. See an example above. 3936 */ 3937 3938 /** 3939 * Settings to backup. This is here so that it's in the same place as the settings 3940 * keys and easy to update. 3941 * 3942 * NOTE: Settings are backed up and restored in the order they appear 3943 * in this array. If you have one setting depending on another, 3944 * make sure that they are ordered appropriately. 3945 * 3946 * @hide 3947 */ 3948 public static final String[] SETTINGS_TO_BACKUP = { 3949 STAY_ON_WHILE_PLUGGED_IN, // moved to global 3950 WIFI_USE_STATIC_IP, 3951 WIFI_STATIC_IP, 3952 WIFI_STATIC_GATEWAY, 3953 WIFI_STATIC_NETMASK, 3954 WIFI_STATIC_DNS1, 3955 WIFI_STATIC_DNS2, 3956 BLUETOOTH_DISCOVERABILITY, 3957 BLUETOOTH_DISCOVERABILITY_TIMEOUT, 3958 FONT_SCALE, 3959 DIM_SCREEN, 3960 SCREEN_OFF_TIMEOUT, 3961 SCREEN_BRIGHTNESS, 3962 SCREEN_BRIGHTNESS_MODE, 3963 SCREEN_AUTO_BRIGHTNESS_ADJ, 3964 SCREEN_BRIGHTNESS_FOR_VR, 3965 VIBRATE_INPUT_DEVICES, 3966 MODE_RINGER_STREAMS_AFFECTED, 3967 TEXT_AUTO_REPLACE, 3968 TEXT_AUTO_CAPS, 3969 TEXT_AUTO_PUNCTUATE, 3970 TEXT_SHOW_PASSWORD, 3971 AUTO_TIME, // moved to global 3972 AUTO_TIME_ZONE, // moved to global 3973 TIME_12_24, 3974 DATE_FORMAT, 3975 DTMF_TONE_WHEN_DIALING, 3976 DTMF_TONE_TYPE_WHEN_DIALING, 3977 HEARING_AID, 3978 TTY_MODE, 3979 MASTER_MONO, 3980 SOUND_EFFECTS_ENABLED, 3981 HAPTIC_FEEDBACK_ENABLED, 3982 POWER_SOUNDS_ENABLED, // moved to global 3983 DOCK_SOUNDS_ENABLED, // moved to global 3984 LOCKSCREEN_SOUNDS_ENABLED, 3985 SHOW_WEB_SUGGESTIONS, 3986 SIP_CALL_OPTIONS, 3987 SIP_RECEIVE_CALLS, 3988 POINTER_SPEED, 3989 VIBRATE_WHEN_RINGING, 3990 RINGTONE, 3991 LOCK_TO_APP_ENABLED, 3992 NOTIFICATION_SOUND, 3993 ACCELEROMETER_ROTATION, 3994 SHOW_BATTERY_PERCENT 3995 }; 3996 3997 /** 3998 * Keys we no longer back up under the current schema, but want to continue to 3999 * process when restoring historical backup datasets. 4000 * 4001 * @hide 4002 */ 4003 public static final String[] LEGACY_RESTORE_SETTINGS = { 4004 }; 4005 4006 /** 4007 * These are all public system settings 4008 * 4009 * @hide 4010 */ 4011 public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>(); 4012 static { 4013 PUBLIC_SETTINGS.add(END_BUTTON_BEHAVIOR); 4014 PUBLIC_SETTINGS.add(WIFI_USE_STATIC_IP); 4015 PUBLIC_SETTINGS.add(WIFI_STATIC_IP); 4016 PUBLIC_SETTINGS.add(WIFI_STATIC_GATEWAY); 4017 PUBLIC_SETTINGS.add(WIFI_STATIC_NETMASK); 4018 PUBLIC_SETTINGS.add(WIFI_STATIC_DNS1); 4019 PUBLIC_SETTINGS.add(WIFI_STATIC_DNS2); 4020 PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY); 4021 PUBLIC_SETTINGS.add(BLUETOOTH_DISCOVERABILITY_TIMEOUT); 4022 PUBLIC_SETTINGS.add(NEXT_ALARM_FORMATTED); 4023 PUBLIC_SETTINGS.add(FONT_SCALE); 4024 PUBLIC_SETTINGS.add(DIM_SCREEN); 4025 PUBLIC_SETTINGS.add(SCREEN_OFF_TIMEOUT); 4026 PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS); 4027 PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_MODE); 4028 PUBLIC_SETTINGS.add(MODE_RINGER_STREAMS_AFFECTED); 4029 PUBLIC_SETTINGS.add(MUTE_STREAMS_AFFECTED); 4030 PUBLIC_SETTINGS.add(VIBRATE_ON); 4031 PUBLIC_SETTINGS.add(VOLUME_RING); 4032 PUBLIC_SETTINGS.add(VOLUME_SYSTEM); 4033 PUBLIC_SETTINGS.add(VOLUME_VOICE); 4034 PUBLIC_SETTINGS.add(VOLUME_MUSIC); 4035 PUBLIC_SETTINGS.add(VOLUME_ALARM); 4036 PUBLIC_SETTINGS.add(VOLUME_NOTIFICATION); 4037 PUBLIC_SETTINGS.add(VOLUME_BLUETOOTH_SCO); 4038 PUBLIC_SETTINGS.add(RINGTONE); 4039 PUBLIC_SETTINGS.add(NOTIFICATION_SOUND); 4040 PUBLIC_SETTINGS.add(ALARM_ALERT); 4041 PUBLIC_SETTINGS.add(TEXT_AUTO_REPLACE); 4042 PUBLIC_SETTINGS.add(TEXT_AUTO_CAPS); 4043 PUBLIC_SETTINGS.add(TEXT_AUTO_PUNCTUATE); 4044 PUBLIC_SETTINGS.add(TEXT_SHOW_PASSWORD); 4045 PUBLIC_SETTINGS.add(SHOW_GTALK_SERVICE_STATUS); 4046 PUBLIC_SETTINGS.add(WALLPAPER_ACTIVITY); 4047 PUBLIC_SETTINGS.add(TIME_12_24); 4048 PUBLIC_SETTINGS.add(DATE_FORMAT); 4049 PUBLIC_SETTINGS.add(SETUP_WIZARD_HAS_RUN); 4050 PUBLIC_SETTINGS.add(ACCELEROMETER_ROTATION); 4051 PUBLIC_SETTINGS.add(USER_ROTATION); 4052 PUBLIC_SETTINGS.add(DTMF_TONE_WHEN_DIALING); 4053 PUBLIC_SETTINGS.add(SOUND_EFFECTS_ENABLED); 4054 PUBLIC_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED); 4055 PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS); 4056 PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING); 4057 } 4058 4059 /** 4060 * These are all hidden system settings. 4061 * 4062 * @hide 4063 */ 4064 public static final Set<String> PRIVATE_SETTINGS = new ArraySet<>(); 4065 static { 4066 PRIVATE_SETTINGS.add(WIFI_USE_STATIC_IP); 4067 PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR); 4068 PRIVATE_SETTINGS.add(ADVANCED_SETTINGS); 4069 PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ); 4070 PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES); 4071 PRIVATE_SETTINGS.add(VOLUME_MASTER); 4072 PRIVATE_SETTINGS.add(MASTER_MONO); 4073 PRIVATE_SETTINGS.add(NOTIFICATIONS_USE_RING_VOLUME); 4074 PRIVATE_SETTINGS.add(VIBRATE_IN_SILENT); 4075 PRIVATE_SETTINGS.add(MEDIA_BUTTON_RECEIVER); 4076 PRIVATE_SETTINGS.add(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY); 4077 PRIVATE_SETTINGS.add(DTMF_TONE_TYPE_WHEN_DIALING); 4078 PRIVATE_SETTINGS.add(HEARING_AID); 4079 PRIVATE_SETTINGS.add(TTY_MODE); 4080 PRIVATE_SETTINGS.add(NOTIFICATION_LIGHT_PULSE); 4081 PRIVATE_SETTINGS.add(POINTER_LOCATION); 4082 PRIVATE_SETTINGS.add(SHOW_TOUCHES); 4083 PRIVATE_SETTINGS.add(WINDOW_ORIENTATION_LISTENER_LOG); 4084 PRIVATE_SETTINGS.add(POWER_SOUNDS_ENABLED); 4085 PRIVATE_SETTINGS.add(DOCK_SOUNDS_ENABLED); 4086 PRIVATE_SETTINGS.add(LOCKSCREEN_SOUNDS_ENABLED); 4087 PRIVATE_SETTINGS.add(LOCKSCREEN_DISABLED); 4088 PRIVATE_SETTINGS.add(LOW_BATTERY_SOUND); 4089 PRIVATE_SETTINGS.add(DESK_DOCK_SOUND); 4090 PRIVATE_SETTINGS.add(DESK_UNDOCK_SOUND); 4091 PRIVATE_SETTINGS.add(CAR_DOCK_SOUND); 4092 PRIVATE_SETTINGS.add(CAR_UNDOCK_SOUND); 4093 PRIVATE_SETTINGS.add(LOCK_SOUND); 4094 PRIVATE_SETTINGS.add(UNLOCK_SOUND); 4095 PRIVATE_SETTINGS.add(SIP_RECEIVE_CALLS); 4096 PRIVATE_SETTINGS.add(SIP_CALL_OPTIONS); 4097 PRIVATE_SETTINGS.add(SIP_ALWAYS); 4098 PRIVATE_SETTINGS.add(SIP_ADDRESS_ONLY); 4099 PRIVATE_SETTINGS.add(SIP_ASK_ME_EACH_TIME); 4100 PRIVATE_SETTINGS.add(POINTER_SPEED); 4101 PRIVATE_SETTINGS.add(LOCK_TO_APP_ENABLED); 4102 PRIVATE_SETTINGS.add(EGG_MODE); 4103 PRIVATE_SETTINGS.add(SHOW_BATTERY_PERCENT); 4104 } 4105 4106 /** 4107 * These are all public system settings 4108 * 4109 * @hide 4110 */ 4111 public static final Map<String, Validator> VALIDATORS = new ArrayMap<>(); 4112 static { VALIDATORS.put(END_BUTTON_BEHAVIOR,END_BUTTON_BEHAVIOR_VALIDATOR)4113 VALIDATORS.put(END_BUTTON_BEHAVIOR,END_BUTTON_BEHAVIOR_VALIDATOR); VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR)4114 VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR); VALIDATORS.put(BLUETOOTH_DISCOVERABILITY, BLUETOOTH_DISCOVERABILITY_VALIDATOR)4115 VALIDATORS.put(BLUETOOTH_DISCOVERABILITY, BLUETOOTH_DISCOVERABILITY_VALIDATOR); VALIDATORS.put(BLUETOOTH_DISCOVERABILITY_TIMEOUT, BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR)4116 VALIDATORS.put(BLUETOOTH_DISCOVERABILITY_TIMEOUT, 4117 BLUETOOTH_DISCOVERABILITY_TIMEOUT_VALIDATOR); VALIDATORS.put(NEXT_ALARM_FORMATTED, NEXT_ALARM_FORMATTED_VALIDATOR)4118 VALIDATORS.put(NEXT_ALARM_FORMATTED, NEXT_ALARM_FORMATTED_VALIDATOR); VALIDATORS.put(FONT_SCALE, FONT_SCALE_VALIDATOR)4119 VALIDATORS.put(FONT_SCALE, FONT_SCALE_VALIDATOR); VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR)4120 VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR); VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR)4121 VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR); VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR)4122 VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR); VALIDATORS.put(SCREEN_BRIGHTNESS_FOR_VR, SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR)4123 VALIDATORS.put(SCREEN_BRIGHTNESS_FOR_VR, SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR); VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR)4124 VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR); VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR)4125 VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR); VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR)4126 VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR); VALIDATORS.put(VIBRATE_ON, VIBRATE_ON_VALIDATOR)4127 VALIDATORS.put(VIBRATE_ON, VIBRATE_ON_VALIDATOR); VALIDATORS.put(RINGTONE, RINGTONE_VALIDATOR)4128 VALIDATORS.put(RINGTONE, RINGTONE_VALIDATOR); VALIDATORS.put(NOTIFICATION_SOUND, NOTIFICATION_SOUND_VALIDATOR)4129 VALIDATORS.put(NOTIFICATION_SOUND, NOTIFICATION_SOUND_VALIDATOR); VALIDATORS.put(ALARM_ALERT, ALARM_ALERT_VALIDATOR)4130 VALIDATORS.put(ALARM_ALERT, ALARM_ALERT_VALIDATOR); VALIDATORS.put(TEXT_AUTO_REPLACE, TEXT_AUTO_REPLACE_VALIDATOR)4131 VALIDATORS.put(TEXT_AUTO_REPLACE, TEXT_AUTO_REPLACE_VALIDATOR); VALIDATORS.put(TEXT_AUTO_CAPS, TEXT_AUTO_CAPS_VALIDATOR)4132 VALIDATORS.put(TEXT_AUTO_CAPS, TEXT_AUTO_CAPS_VALIDATOR); VALIDATORS.put(TEXT_AUTO_PUNCTUATE, TEXT_AUTO_PUNCTUATE_VALIDATOR)4133 VALIDATORS.put(TEXT_AUTO_PUNCTUATE, TEXT_AUTO_PUNCTUATE_VALIDATOR); VALIDATORS.put(TEXT_SHOW_PASSWORD, TEXT_SHOW_PASSWORD_VALIDATOR)4134 VALIDATORS.put(TEXT_SHOW_PASSWORD, TEXT_SHOW_PASSWORD_VALIDATOR); VALIDATORS.put(SHOW_GTALK_SERVICE_STATUS, SHOW_GTALK_SERVICE_STATUS_VALIDATOR)4135 VALIDATORS.put(SHOW_GTALK_SERVICE_STATUS, SHOW_GTALK_SERVICE_STATUS_VALIDATOR); VALIDATORS.put(WALLPAPER_ACTIVITY, WALLPAPER_ACTIVITY_VALIDATOR)4136 VALIDATORS.put(WALLPAPER_ACTIVITY, WALLPAPER_ACTIVITY_VALIDATOR); VALIDATORS.put(TIME_12_24, TIME_12_24_VALIDATOR)4137 VALIDATORS.put(TIME_12_24, TIME_12_24_VALIDATOR); VALIDATORS.put(DATE_FORMAT, DATE_FORMAT_VALIDATOR)4138 VALIDATORS.put(DATE_FORMAT, DATE_FORMAT_VALIDATOR); VALIDATORS.put(SETUP_WIZARD_HAS_RUN, SETUP_WIZARD_HAS_RUN_VALIDATOR)4139 VALIDATORS.put(SETUP_WIZARD_HAS_RUN, SETUP_WIZARD_HAS_RUN_VALIDATOR); VALIDATORS.put(ACCELEROMETER_ROTATION, ACCELEROMETER_ROTATION_VALIDATOR)4140 VALIDATORS.put(ACCELEROMETER_ROTATION, ACCELEROMETER_ROTATION_VALIDATOR); VALIDATORS.put(USER_ROTATION, USER_ROTATION_VALIDATOR)4141 VALIDATORS.put(USER_ROTATION, USER_ROTATION_VALIDATOR); VALIDATORS.put(DTMF_TONE_WHEN_DIALING, DTMF_TONE_WHEN_DIALING_VALIDATOR)4142 VALIDATORS.put(DTMF_TONE_WHEN_DIALING, DTMF_TONE_WHEN_DIALING_VALIDATOR); VALIDATORS.put(SOUND_EFFECTS_ENABLED, SOUND_EFFECTS_ENABLED_VALIDATOR)4143 VALIDATORS.put(SOUND_EFFECTS_ENABLED, SOUND_EFFECTS_ENABLED_VALIDATOR); VALIDATORS.put(HAPTIC_FEEDBACK_ENABLED, HAPTIC_FEEDBACK_ENABLED_VALIDATOR)4144 VALIDATORS.put(HAPTIC_FEEDBACK_ENABLED, HAPTIC_FEEDBACK_ENABLED_VALIDATOR); VALIDATORS.put(SHOW_WEB_SUGGESTIONS, SHOW_WEB_SUGGESTIONS_VALIDATOR)4145 VALIDATORS.put(SHOW_WEB_SUGGESTIONS, SHOW_WEB_SUGGESTIONS_VALIDATOR); VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR)4146 VALIDATORS.put(WIFI_USE_STATIC_IP, WIFI_USE_STATIC_IP_VALIDATOR); VALIDATORS.put(END_BUTTON_BEHAVIOR, END_BUTTON_BEHAVIOR_VALIDATOR)4147 VALIDATORS.put(END_BUTTON_BEHAVIOR, END_BUTTON_BEHAVIOR_VALIDATOR); VALIDATORS.put(ADVANCED_SETTINGS, ADVANCED_SETTINGS_VALIDATOR)4148 VALIDATORS.put(ADVANCED_SETTINGS, ADVANCED_SETTINGS_VALIDATOR); VALIDATORS.put(SCREEN_AUTO_BRIGHTNESS_ADJ, SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR)4149 VALIDATORS.put(SCREEN_AUTO_BRIGHTNESS_ADJ, SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR); VALIDATORS.put(VIBRATE_INPUT_DEVICES, VIBRATE_INPUT_DEVICES_VALIDATOR)4150 VALIDATORS.put(VIBRATE_INPUT_DEVICES, VIBRATE_INPUT_DEVICES_VALIDATOR); VALIDATORS.put(MASTER_MONO, MASTER_MONO_VALIDATOR)4151 VALIDATORS.put(MASTER_MONO, MASTER_MONO_VALIDATOR); VALIDATORS.put(NOTIFICATIONS_USE_RING_VOLUME, NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR)4152 VALIDATORS.put(NOTIFICATIONS_USE_RING_VOLUME, NOTIFICATIONS_USE_RING_VOLUME_VALIDATOR); VALIDATORS.put(VIBRATE_IN_SILENT, VIBRATE_IN_SILENT_VALIDATOR)4153 VALIDATORS.put(VIBRATE_IN_SILENT, VIBRATE_IN_SILENT_VALIDATOR); VALIDATORS.put(MEDIA_BUTTON_RECEIVER, MEDIA_BUTTON_RECEIVER_VALIDATOR)4154 VALIDATORS.put(MEDIA_BUTTON_RECEIVER, MEDIA_BUTTON_RECEIVER_VALIDATOR); VALIDATORS.put(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR)4155 VALIDATORS.put(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 4156 HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY_VALIDATOR); VALIDATORS.put(VIBRATE_WHEN_RINGING, VIBRATE_WHEN_RINGING_VALIDATOR)4157 VALIDATORS.put(VIBRATE_WHEN_RINGING, VIBRATE_WHEN_RINGING_VALIDATOR); VALIDATORS.put(DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR)4158 VALIDATORS.put(DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_WHEN_DIALING_VALIDATOR); VALIDATORS.put(HEARING_AID, HEARING_AID_VALIDATOR)4159 VALIDATORS.put(HEARING_AID, HEARING_AID_VALIDATOR); VALIDATORS.put(TTY_MODE, TTY_MODE_VALIDATOR)4160 VALIDATORS.put(TTY_MODE, TTY_MODE_VALIDATOR); VALIDATORS.put(NOTIFICATION_LIGHT_PULSE, NOTIFICATION_LIGHT_PULSE_VALIDATOR)4161 VALIDATORS.put(NOTIFICATION_LIGHT_PULSE, NOTIFICATION_LIGHT_PULSE_VALIDATOR); VALIDATORS.put(POINTER_LOCATION, POINTER_LOCATION_VALIDATOR)4162 VALIDATORS.put(POINTER_LOCATION, POINTER_LOCATION_VALIDATOR); VALIDATORS.put(SHOW_TOUCHES, SHOW_TOUCHES_VALIDATOR)4163 VALIDATORS.put(SHOW_TOUCHES, SHOW_TOUCHES_VALIDATOR); VALIDATORS.put(WINDOW_ORIENTATION_LISTENER_LOG, WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR)4164 VALIDATORS.put(WINDOW_ORIENTATION_LISTENER_LOG, 4165 WINDOW_ORIENTATION_LISTENER_LOG_VALIDATOR); VALIDATORS.put(LOCKSCREEN_SOUNDS_ENABLED, LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR)4166 VALIDATORS.put(LOCKSCREEN_SOUNDS_ENABLED, LOCKSCREEN_SOUNDS_ENABLED_VALIDATOR); VALIDATORS.put(LOCKSCREEN_DISABLED, LOCKSCREEN_DISABLED_VALIDATOR)4167 VALIDATORS.put(LOCKSCREEN_DISABLED, LOCKSCREEN_DISABLED_VALIDATOR); VALIDATORS.put(SIP_RECEIVE_CALLS, SIP_RECEIVE_CALLS_VALIDATOR)4168 VALIDATORS.put(SIP_RECEIVE_CALLS, SIP_RECEIVE_CALLS_VALIDATOR); VALIDATORS.put(SIP_CALL_OPTIONS, SIP_CALL_OPTIONS_VALIDATOR)4169 VALIDATORS.put(SIP_CALL_OPTIONS, SIP_CALL_OPTIONS_VALIDATOR); VALIDATORS.put(SIP_ALWAYS, SIP_ALWAYS_VALIDATOR)4170 VALIDATORS.put(SIP_ALWAYS, SIP_ALWAYS_VALIDATOR); VALIDATORS.put(SIP_ADDRESS_ONLY, SIP_ADDRESS_ONLY_VALIDATOR)4171 VALIDATORS.put(SIP_ADDRESS_ONLY, SIP_ADDRESS_ONLY_VALIDATOR); VALIDATORS.put(SIP_ASK_ME_EACH_TIME, SIP_ASK_ME_EACH_TIME_VALIDATOR)4172 VALIDATORS.put(SIP_ASK_ME_EACH_TIME, SIP_ASK_ME_EACH_TIME_VALIDATOR); VALIDATORS.put(POINTER_SPEED, POINTER_SPEED_VALIDATOR)4173 VALIDATORS.put(POINTER_SPEED, POINTER_SPEED_VALIDATOR); VALIDATORS.put(LOCK_TO_APP_ENABLED, LOCK_TO_APP_ENABLED_VALIDATOR)4174 VALIDATORS.put(LOCK_TO_APP_ENABLED, LOCK_TO_APP_ENABLED_VALIDATOR); VALIDATORS.put(EGG_MODE, EGG_MODE_VALIDATOR)4175 VALIDATORS.put(EGG_MODE, EGG_MODE_VALIDATOR); VALIDATORS.put(WIFI_STATIC_IP, WIFI_STATIC_IP_VALIDATOR)4176 VALIDATORS.put(WIFI_STATIC_IP, WIFI_STATIC_IP_VALIDATOR); VALIDATORS.put(WIFI_STATIC_GATEWAY, WIFI_STATIC_GATEWAY_VALIDATOR)4177 VALIDATORS.put(WIFI_STATIC_GATEWAY, WIFI_STATIC_GATEWAY_VALIDATOR); VALIDATORS.put(WIFI_STATIC_NETMASK, WIFI_STATIC_NETMASK_VALIDATOR)4178 VALIDATORS.put(WIFI_STATIC_NETMASK, WIFI_STATIC_NETMASK_VALIDATOR); VALIDATORS.put(WIFI_STATIC_DNS1, WIFI_STATIC_DNS1_VALIDATOR)4179 VALIDATORS.put(WIFI_STATIC_DNS1, WIFI_STATIC_DNS1_VALIDATOR); VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR)4180 VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR); VALIDATORS.put(SHOW_BATTERY_PERCENT, SHOW_BATTERY_PERCENT_VALIDATOR)4181 VALIDATORS.put(SHOW_BATTERY_PERCENT, SHOW_BATTERY_PERCENT_VALIDATOR); 4182 } 4183 4184 /** 4185 * These entries are considered common between the personal and the managed profile, 4186 * since the managed profile doesn't get to change them. 4187 */ 4188 private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>(); 4189 static { 4190 CLONE_TO_MANAGED_PROFILE.add(DATE_FORMAT); 4191 CLONE_TO_MANAGED_PROFILE.add(HAPTIC_FEEDBACK_ENABLED); 4192 CLONE_TO_MANAGED_PROFILE.add(SOUND_EFFECTS_ENABLED); 4193 CLONE_TO_MANAGED_PROFILE.add(TEXT_SHOW_PASSWORD); 4194 CLONE_TO_MANAGED_PROFILE.add(TIME_12_24); 4195 } 4196 4197 /** @hide */ getCloneToManagedProfileSettings(Set<String> outKeySet)4198 public static void getCloneToManagedProfileSettings(Set<String> outKeySet) { 4199 outKeySet.addAll(CLONE_TO_MANAGED_PROFILE); 4200 } 4201 4202 /** 4203 * These entries should be cloned from this profile's parent only if the dependency's 4204 * value is true ("1") 4205 * 4206 * Note: the dependencies must be Secure settings 4207 * 4208 * @hide 4209 */ 4210 public static final Map<String, String> CLONE_FROM_PARENT_ON_VALUE = new ArrayMap<>(); 4211 static { CLONE_FROM_PARENT_ON_VALUE.put(RINGTONE, Secure.SYNC_PARENT_SOUNDS)4212 CLONE_FROM_PARENT_ON_VALUE.put(RINGTONE, Secure.SYNC_PARENT_SOUNDS); CLONE_FROM_PARENT_ON_VALUE.put(NOTIFICATION_SOUND, Secure.SYNC_PARENT_SOUNDS)4213 CLONE_FROM_PARENT_ON_VALUE.put(NOTIFICATION_SOUND, Secure.SYNC_PARENT_SOUNDS); CLONE_FROM_PARENT_ON_VALUE.put(ALARM_ALERT, Secure.SYNC_PARENT_SOUNDS)4214 CLONE_FROM_PARENT_ON_VALUE.put(ALARM_ALERT, Secure.SYNC_PARENT_SOUNDS); 4215 } 4216 4217 /** @hide */ getCloneFromParentOnValueSettings(Map<String, String> outMap)4218 public static void getCloneFromParentOnValueSettings(Map<String, String> outMap) { 4219 outMap.putAll(CLONE_FROM_PARENT_ON_VALUE); 4220 } 4221 4222 /** 4223 * System settings which can be accessed by instant apps. 4224 * @hide 4225 */ 4226 public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>(); 4227 static { 4228 INSTANT_APP_SETTINGS.add(TEXT_AUTO_REPLACE); 4229 INSTANT_APP_SETTINGS.add(TEXT_AUTO_CAPS); 4230 INSTANT_APP_SETTINGS.add(TEXT_AUTO_PUNCTUATE); 4231 INSTANT_APP_SETTINGS.add(TEXT_SHOW_PASSWORD); 4232 INSTANT_APP_SETTINGS.add(DATE_FORMAT); 4233 INSTANT_APP_SETTINGS.add(FONT_SCALE); 4234 INSTANT_APP_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED); 4235 INSTANT_APP_SETTINGS.add(TIME_12_24); 4236 INSTANT_APP_SETTINGS.add(SOUND_EFFECTS_ENABLED); 4237 INSTANT_APP_SETTINGS.add(ACCELEROMETER_ROTATION); 4238 } 4239 4240 /** 4241 * When to use Wi-Fi calling 4242 * 4243 * @see android.telephony.TelephonyManager.WifiCallingChoices 4244 * @hide 4245 */ 4246 public static final String WHEN_TO_MAKE_WIFI_CALLS = "when_to_make_wifi_calls"; 4247 4248 // Settings moved to Settings.Secure 4249 4250 /** 4251 * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} 4252 * instead 4253 */ 4254 @Deprecated 4255 public static final String ADB_ENABLED = Global.ADB_ENABLED; 4256 4257 /** 4258 * @deprecated Use {@link android.provider.Settings.Secure#ANDROID_ID} instead 4259 */ 4260 @Deprecated 4261 public static final String ANDROID_ID = Secure.ANDROID_ID; 4262 4263 /** 4264 * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead 4265 */ 4266 @Deprecated 4267 public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON; 4268 4269 /** 4270 * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead 4271 */ 4272 @Deprecated 4273 public static final String DATA_ROAMING = Global.DATA_ROAMING; 4274 4275 /** 4276 * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead 4277 */ 4278 @Deprecated 4279 public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED; 4280 4281 /** 4282 * @deprecated Use {@link android.provider.Settings.Global#HTTP_PROXY} instead 4283 */ 4284 @Deprecated 4285 public static final String HTTP_PROXY = Global.HTTP_PROXY; 4286 4287 /** 4288 * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead 4289 */ 4290 @Deprecated 4291 public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS; 4292 4293 /** 4294 * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED} 4295 * instead 4296 */ 4297 @Deprecated 4298 public static final String LOCATION_PROVIDERS_ALLOWED = Secure.LOCATION_PROVIDERS_ALLOWED; 4299 4300 /** 4301 * @deprecated Use {@link android.provider.Settings.Secure#LOGGING_ID} instead 4302 */ 4303 @Deprecated 4304 public static final String LOGGING_ID = Secure.LOGGING_ID; 4305 4306 /** 4307 * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead 4308 */ 4309 @Deprecated 4310 public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE; 4311 4312 /** 4313 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_ENABLED} 4314 * instead 4315 */ 4316 @Deprecated 4317 public static final String PARENTAL_CONTROL_ENABLED = Secure.PARENTAL_CONTROL_ENABLED; 4318 4319 /** 4320 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_LAST_UPDATE} 4321 * instead 4322 */ 4323 @Deprecated 4324 public static final String PARENTAL_CONTROL_LAST_UPDATE = Secure.PARENTAL_CONTROL_LAST_UPDATE; 4325 4326 /** 4327 * @deprecated Use {@link android.provider.Settings.Secure#PARENTAL_CONTROL_REDIRECT_URL} 4328 * instead 4329 */ 4330 @Deprecated 4331 public static final String PARENTAL_CONTROL_REDIRECT_URL = 4332 Secure.PARENTAL_CONTROL_REDIRECT_URL; 4333 4334 /** 4335 * @deprecated Use {@link android.provider.Settings.Secure#SETTINGS_CLASSNAME} instead 4336 */ 4337 @Deprecated 4338 public static final String SETTINGS_CLASSNAME = Secure.SETTINGS_CLASSNAME; 4339 4340 /** 4341 * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead 4342 */ 4343 @Deprecated 4344 public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED; 4345 4346 /** 4347 * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead 4348 */ 4349 @Deprecated 4350 public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL; 4351 4352 /** 4353 * @deprecated Use 4354 * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead 4355 */ 4356 @Deprecated 4357 public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT; 4358 4359 /** 4360 * @deprecated Use 4361 * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead 4362 */ 4363 @Deprecated 4364 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = 4365 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS; 4366 4367 /** 4368 * @deprecated Use 4369 * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} instead 4370 */ 4371 @Deprecated 4372 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = 4373 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON; 4374 4375 /** 4376 * @deprecated Use 4377 * {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} instead 4378 */ 4379 @Deprecated 4380 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = 4381 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY; 4382 4383 /** 4384 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT} 4385 * instead 4386 */ 4387 @Deprecated 4388 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = Global.WIFI_NUM_OPEN_NETWORKS_KEPT; 4389 4390 /** 4391 * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} instead 4392 */ 4393 @Deprecated 4394 public static final String WIFI_ON = Global.WIFI_ON; 4395 4396 /** 4397 * @deprecated Use 4398 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE} 4399 * instead 4400 */ 4401 @Deprecated 4402 public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = 4403 Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE; 4404 4405 /** 4406 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_AP_COUNT} instead 4407 */ 4408 @Deprecated 4409 public static final String WIFI_WATCHDOG_AP_COUNT = Secure.WIFI_WATCHDOG_AP_COUNT; 4410 4411 /** 4412 * @deprecated Use 4413 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS} instead 4414 */ 4415 @Deprecated 4416 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = 4417 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS; 4418 4419 /** 4420 * @deprecated Use 4421 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead 4422 */ 4423 @Deprecated 4424 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = 4425 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED; 4426 4427 /** 4428 * @deprecated Use 4429 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS} 4430 * instead 4431 */ 4432 @Deprecated 4433 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = 4434 Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS; 4435 4436 /** 4437 * @deprecated Use 4438 * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT} instead 4439 */ 4440 @Deprecated 4441 public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = 4442 Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT; 4443 4444 /** 4445 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_MAX_AP_CHECKS} 4446 * instead 4447 */ 4448 @Deprecated 4449 public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = Secure.WIFI_WATCHDOG_MAX_AP_CHECKS; 4450 4451 /** 4452 * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead 4453 */ 4454 @Deprecated 4455 public static final String WIFI_WATCHDOG_ON = Global.WIFI_WATCHDOG_ON; 4456 4457 /** 4458 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_COUNT} instead 4459 */ 4460 @Deprecated 4461 public static final String WIFI_WATCHDOG_PING_COUNT = Secure.WIFI_WATCHDOG_PING_COUNT; 4462 4463 /** 4464 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_DELAY_MS} 4465 * instead 4466 */ 4467 @Deprecated 4468 public static final String WIFI_WATCHDOG_PING_DELAY_MS = Secure.WIFI_WATCHDOG_PING_DELAY_MS; 4469 4470 /** 4471 * @deprecated Use {@link android.provider.Settings.Secure#WIFI_WATCHDOG_PING_TIMEOUT_MS} 4472 * instead 4473 */ 4474 @Deprecated 4475 public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = 4476 Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS; 4477 4478 /** 4479 * Checks if the specified app can modify system settings. As of API 4480 * level 23, an app cannot modify system settings unless it declares the 4481 * {@link android.Manifest.permission#WRITE_SETTINGS} 4482 * permission in its manifest, <em>and</em> the user specifically grants 4483 * the app this capability. To prompt the user to grant this approval, 4484 * the app must send an intent with the action {@link 4485 * android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}, which causes 4486 * the system to display a permission management screen. 4487 * 4488 * @param context App context. 4489 * @return true if the calling app can write to system settings, false otherwise 4490 */ canWrite(Context context)4491 public static boolean canWrite(Context context) { 4492 return isCallingPackageAllowedToWriteSettings(context, Process.myUid(), 4493 context.getOpPackageName(), false); 4494 } 4495 } 4496 4497 /** 4498 * Secure system settings, containing system preferences that applications 4499 * can read but are not allowed to write. These are for preferences that 4500 * the user must explicitly modify through the system UI or specialized 4501 * APIs for those values, not modified directly by applications. 4502 */ 4503 public static final class Secure extends NameValueTable { 4504 /** 4505 * The content:// style URL for this table 4506 */ 4507 public static final Uri CONTENT_URI = 4508 Uri.parse("content://" + AUTHORITY + "/secure"); 4509 4510 private static final ContentProviderHolder sProviderHolder = 4511 new ContentProviderHolder(CONTENT_URI); 4512 4513 // Populated lazily, guarded by class object: 4514 private static final NameValueCache sNameValueCache = new NameValueCache( 4515 CONTENT_URI, 4516 CALL_METHOD_GET_SECURE, 4517 CALL_METHOD_PUT_SECURE, 4518 sProviderHolder); 4519 4520 private static ILockSettings sLockSettings = null; 4521 4522 private static boolean sIsSystemProcess; 4523 private static final HashSet<String> MOVED_TO_LOCK_SETTINGS; 4524 private static final HashSet<String> MOVED_TO_GLOBAL; 4525 static { 4526 MOVED_TO_LOCK_SETTINGS = new HashSet<>(3); 4527 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_ENABLED); 4528 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_VISIBLE); 4529 MOVED_TO_LOCK_SETTINGS.add(Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED); 4530 4531 MOVED_TO_GLOBAL = new HashSet<>(); 4532 MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED); 4533 MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED); 4534 MOVED_TO_GLOBAL.add(Settings.Global.BLUETOOTH_ON); 4535 MOVED_TO_GLOBAL.add(Settings.Global.BUGREPORT_IN_POWER_MENU); 4536 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_CELL_BROADCAST_SMS); 4537 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_ROAMING_MODE); 4538 MOVED_TO_GLOBAL.add(Settings.Global.CDMA_SUBSCRIPTION_MODE); 4539 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE); 4540 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI); 4541 MOVED_TO_GLOBAL.add(Settings.Global.DATA_ROAMING); 4542 MOVED_TO_GLOBAL.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED); 4543 MOVED_TO_GLOBAL.add(Settings.Global.DEVICE_PROVISIONED); 4544 MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED); 4545 MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE); 4546 MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE); 4547 MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA); 4548 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION); 4549 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE); 4550 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES); 4551 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE); 4552 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED); 4553 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES); 4554 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL); 4555 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED); 4556 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE); 4557 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION); 4558 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_DELETE_AGE); 4559 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES); 4560 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_ROTATE_AGE); 4561 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION); 4562 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE); 4563 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES); 4564 MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE); 4565 MOVED_TO_GLOBAL.add(Settings.Global.NETWORK_PREFERENCE); 4566 MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_DIFF); 4567 MOVED_TO_GLOBAL.add(Settings.Global.NITZ_UPDATE_SPACING); 4568 MOVED_TO_GLOBAL.add(Settings.Global.NTP_SERVER); 4569 MOVED_TO_GLOBAL.add(Settings.Global.NTP_TIMEOUT); 4570 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT); 4571 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS); 4572 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT); 4573 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS); 4574 MOVED_TO_GLOBAL.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT); 4575 MOVED_TO_GLOBAL.add(Settings.Global.SAMPLING_PROFILER_MS); 4576 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL); 4577 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST); 4578 MOVED_TO_GLOBAL.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL); 4579 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_APN); 4580 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_DUN_REQUIRED); 4581 MOVED_TO_GLOBAL.add(Settings.Global.TETHER_SUPPORTED); 4582 MOVED_TO_GLOBAL.add(Settings.Global.USB_MASS_STORAGE_ENABLED); 4583 MOVED_TO_GLOBAL.add(Settings.Global.USE_GOOGLE_MAIL); 4584 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_COUNTRY_CODE); 4585 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS); 4586 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_FREQUENCY_BAND); 4587 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_IDLE_MS); 4588 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT); 4589 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS); 4590 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON); 4591 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY); 4592 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT); 4593 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON); 4594 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_P2P_DEVICE_NAME); 4595 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SAVED_STATE); 4596 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS); 4597 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED); 4598 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED); 4599 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ENHANCED_AUTO_JOIN); 4600 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_NETWORK_SHOW_RSSI); 4601 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_ON); 4602 MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED); 4603 MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON); 4604 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_ENABLE); 4605 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT); 4606 MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE); 4607 MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS); 4608 MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS); 4609 MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS); 4610 MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL); 4611 MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD); 4612 MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD); 4613 MOVED_TO_GLOBAL.add(Settings.Global.SEND_ACTION_APP_ERROR); 4614 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_AGE_SECONDS); 4615 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_MAX_FILES); 4616 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_KB); 4617 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_QUOTA_PERCENT); 4618 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_RESERVE_PERCENT); 4619 MOVED_TO_GLOBAL.add(Settings.Global.DROPBOX_TAG_PREFIX); 4620 MOVED_TO_GLOBAL.add(Settings.Global.ERROR_LOGCAT_PREFIX); 4621 MOVED_TO_GLOBAL.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL); 4622 MOVED_TO_GLOBAL.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD); 4623 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE); 4624 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES); 4625 MOVED_TO_GLOBAL.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES); 4626 MOVED_TO_GLOBAL.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS); 4627 MOVED_TO_GLOBAL.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY); 4628 MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED); 4629 MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_SERVER); 4630 MOVED_TO_GLOBAL.add(Settings.Global.NSD_ON); 4631 MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION); 4632 MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_INSTALL_LOCATION); 4633 MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY); 4634 MOVED_TO_GLOBAL.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY); 4635 MOVED_TO_GLOBAL.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT); 4636 MOVED_TO_GLOBAL.add(Settings.Global.HTTP_PROXY); 4637 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST); 4638 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT); 4639 MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST); 4640 MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY); 4641 MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER); 4642 MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE); 4643 MOVED_TO_GLOBAL.add(Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY); 4644 } 4645 4646 /** @hide */ getMovedToGlobalSettings(Set<String> outKeySet)4647 public static void getMovedToGlobalSettings(Set<String> outKeySet) { 4648 outKeySet.addAll(MOVED_TO_GLOBAL); 4649 } 4650 4651 /** @hide */ clearProviderForTest()4652 public static void clearProviderForTest() { 4653 sProviderHolder.clearProviderForTest(); 4654 sNameValueCache.clearGenerationTrackerForTest(); 4655 } 4656 4657 /** 4658 * Look up a name in the database. 4659 * @param resolver to access the database with 4660 * @param name to look up in the table 4661 * @return the corresponding value, or null if not present 4662 */ getString(ContentResolver resolver, String name)4663 public static String getString(ContentResolver resolver, String name) { 4664 return getStringForUser(resolver, name, UserHandle.myUserId()); 4665 } 4666 4667 /** @hide */ getStringForUser(ContentResolver resolver, String name, int userHandle)4668 public static String getStringForUser(ContentResolver resolver, String name, 4669 int userHandle) { 4670 if (MOVED_TO_GLOBAL.contains(name)) { 4671 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure" 4672 + " to android.provider.Settings.Global."); 4673 return Global.getStringForUser(resolver, name, userHandle); 4674 } 4675 4676 if (MOVED_TO_LOCK_SETTINGS.contains(name)) { 4677 synchronized (Secure.class) { 4678 if (sLockSettings == null) { 4679 sLockSettings = ILockSettings.Stub.asInterface( 4680 (IBinder) ServiceManager.getService("lock_settings")); 4681 sIsSystemProcess = Process.myUid() == Process.SYSTEM_UID; 4682 } 4683 } 4684 if (sLockSettings != null && !sIsSystemProcess) { 4685 // No context; use the ActivityThread's context as an approximation for 4686 // determining the target API level. 4687 Application application = ActivityThread.currentApplication(); 4688 4689 boolean isPreMnc = application != null 4690 && application.getApplicationInfo() != null 4691 && application.getApplicationInfo().targetSdkVersion 4692 <= VERSION_CODES.LOLLIPOP_MR1; 4693 if (isPreMnc) { 4694 try { 4695 return sLockSettings.getString(name, "0", userHandle); 4696 } catch (RemoteException re) { 4697 // Fall through 4698 } 4699 } else { 4700 throw new SecurityException("Settings.Secure." + name 4701 + " is deprecated and no longer accessible." 4702 + " See API documentation for potential replacements."); 4703 } 4704 } 4705 } 4706 4707 return sNameValueCache.getStringForUser(resolver, name, userHandle); 4708 } 4709 4710 /** 4711 * Store a name/value pair into the database. 4712 * @param resolver to access the database with 4713 * @param name to store 4714 * @param value to associate with the name 4715 * @return true if the value was set, false on database errors 4716 */ putString(ContentResolver resolver, String name, String value)4717 public static boolean putString(ContentResolver resolver, String name, String value) { 4718 return putStringForUser(resolver, name, value, UserHandle.myUserId()); 4719 } 4720 4721 /** @hide */ putStringForUser(ContentResolver resolver, String name, String value, int userHandle)4722 public static boolean putStringForUser(ContentResolver resolver, String name, String value, 4723 int userHandle) { 4724 return putStringForUser(resolver, name, value, null, false, userHandle); 4725 } 4726 4727 /** @hide */ putStringForUser(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, @UserIdInt int userHandle)4728 public static boolean putStringForUser(@NonNull ContentResolver resolver, 4729 @NonNull String name, @Nullable String value, @Nullable String tag, 4730 boolean makeDefault, @UserIdInt int userHandle) { 4731 if (LOCATION_MODE.equals(name)) { 4732 // Map LOCATION_MODE to underlying location provider storage API 4733 return setLocationModeForUser(resolver, Integer.parseInt(value), userHandle); 4734 } 4735 if (MOVED_TO_GLOBAL.contains(name)) { 4736 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure" 4737 + " to android.provider.Settings.Global"); 4738 return Global.putStringForUser(resolver, name, value, 4739 tag, makeDefault, userHandle); 4740 } 4741 return sNameValueCache.putStringForUser(resolver, name, value, tag, 4742 makeDefault, userHandle); 4743 } 4744 4745 /** 4746 * Store a name/value pair into the database. 4747 * <p> 4748 * The method takes an optional tag to associate with the setting 4749 * which can be used to clear only settings made by your package and 4750 * associated with this tag by passing the tag to {@link 4751 * #resetToDefaults(ContentResolver, String)}. Anyone can override 4752 * the current tag. Also if another package changes the setting 4753 * then the tag will be set to the one specified in the set call 4754 * which can be null. Also any of the settings setters that do not 4755 * take a tag as an argument effectively clears the tag. 4756 * </p><p> 4757 * For example, if you set settings A and B with tags T1 and T2 and 4758 * another app changes setting A (potentially to the same value), it 4759 * can assign to it a tag T3 (note that now the package that changed 4760 * the setting is not yours). Now if you reset your changes for T1 and 4761 * T2 only setting B will be reset and A not (as it was changed by 4762 * another package) but since A did not change you are in the desired 4763 * initial state. Now if the other app changes the value of A (assuming 4764 * you registered an observer in the beginning) you would detect that 4765 * the setting was changed by another app and handle this appropriately 4766 * (ignore, set back to some value, etc). 4767 * </p><p> 4768 * Also the method takes an argument whether to make the value the 4769 * default for this setting. If the system already specified a default 4770 * value, then the one passed in here will <strong>not</strong> 4771 * be set as the default. 4772 * </p> 4773 * 4774 * @param resolver to access the database with. 4775 * @param name to store. 4776 * @param value to associate with the name. 4777 * @param tag to associate with the setting. 4778 * @param makeDefault whether to make the value the default one. 4779 * @return true if the value was set, false on database errors. 4780 * 4781 * @see #resetToDefaults(ContentResolver, String) 4782 * 4783 * @hide 4784 */ 4785 @SystemApi 4786 @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault)4787 public static boolean putString(@NonNull ContentResolver resolver, 4788 @NonNull String name, @Nullable String value, @Nullable String tag, 4789 boolean makeDefault) { 4790 return putStringForUser(resolver, name, value, tag, makeDefault, 4791 UserHandle.myUserId()); 4792 } 4793 4794 /** 4795 * Reset the settings to their defaults. This would reset <strong>only</strong> 4796 * settings set by the caller's package. Think of it of a way to undo your own 4797 * changes to the global settings. Passing in the optional tag will reset only 4798 * settings changed by your package and associated with this tag. 4799 * 4800 * @param resolver Handle to the content resolver. 4801 * @param tag Optional tag which should be associated with the settings to reset. 4802 * 4803 * @see #putString(ContentResolver, String, String, String, boolean) 4804 * 4805 * @hide 4806 */ 4807 @SystemApi 4808 @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) resetToDefaults(@onNull ContentResolver resolver, @Nullable String tag)4809 public static void resetToDefaults(@NonNull ContentResolver resolver, 4810 @Nullable String tag) { 4811 resetToDefaultsAsUser(resolver, tag, RESET_MODE_PACKAGE_DEFAULTS, 4812 UserHandle.myUserId()); 4813 } 4814 4815 /** 4816 * 4817 * Reset the settings to their defaults for a given user with a specific mode. The 4818 * optional tag argument is valid only for {@link #RESET_MODE_PACKAGE_DEFAULTS} 4819 * allowing resetting the settings made by a package and associated with the tag. 4820 * 4821 * @param resolver Handle to the content resolver. 4822 * @param tag Optional tag which should be associated with the settings to reset. 4823 * @param mode The reset mode. 4824 * @param userHandle The user for which to reset to defaults. 4825 * 4826 * @see #RESET_MODE_PACKAGE_DEFAULTS 4827 * @see #RESET_MODE_UNTRUSTED_DEFAULTS 4828 * @see #RESET_MODE_UNTRUSTED_CHANGES 4829 * @see #RESET_MODE_TRUSTED_DEFAULTS 4830 * 4831 * @hide 4832 */ resetToDefaultsAsUser(@onNull ContentResolver resolver, @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle)4833 public static void resetToDefaultsAsUser(@NonNull ContentResolver resolver, 4834 @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle) { 4835 try { 4836 Bundle arg = new Bundle(); 4837 arg.putInt(CALL_METHOD_USER_KEY, userHandle); 4838 if (tag != null) { 4839 arg.putString(CALL_METHOD_TAG_KEY, tag); 4840 } 4841 arg.putInt(CALL_METHOD_RESET_MODE_KEY, mode); 4842 IContentProvider cp = sProviderHolder.getProvider(resolver); 4843 cp.call(resolver.getPackageName(), CALL_METHOD_RESET_SECURE, null, arg); 4844 } catch (RemoteException e) { 4845 Log.w(TAG, "Can't reset do defaults for " + CONTENT_URI, e); 4846 } 4847 } 4848 4849 /** 4850 * Construct the content URI for a particular name/value pair, 4851 * useful for monitoring changes with a ContentObserver. 4852 * @param name to look up in the table 4853 * @return the corresponding content URI, or null if not present 4854 */ getUriFor(String name)4855 public static Uri getUriFor(String name) { 4856 if (MOVED_TO_GLOBAL.contains(name)) { 4857 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Secure" 4858 + " to android.provider.Settings.Global, returning global URI."); 4859 return Global.getUriFor(Global.CONTENT_URI, name); 4860 } 4861 return getUriFor(CONTENT_URI, name); 4862 } 4863 4864 /** 4865 * Convenience function for retrieving a single secure settings value 4866 * as an integer. Note that internally setting values are always 4867 * stored as strings; this function converts the string to an integer 4868 * for you. The default value will be returned if the setting is 4869 * not defined or not an integer. 4870 * 4871 * @param cr The ContentResolver to access. 4872 * @param name The name of the setting to retrieve. 4873 * @param def Value to return if the setting is not defined. 4874 * 4875 * @return The setting's current value, or 'def' if it is not defined 4876 * or not a valid integer. 4877 */ getInt(ContentResolver cr, String name, int def)4878 public static int getInt(ContentResolver cr, String name, int def) { 4879 return getIntForUser(cr, name, def, UserHandle.myUserId()); 4880 } 4881 4882 /** @hide */ getIntForUser(ContentResolver cr, String name, int def, int userHandle)4883 public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) { 4884 if (LOCATION_MODE.equals(name)) { 4885 // Map from to underlying location provider storage API to location mode 4886 return getLocationModeForUser(cr, userHandle); 4887 } 4888 String v = getStringForUser(cr, name, userHandle); 4889 try { 4890 return v != null ? Integer.parseInt(v) : def; 4891 } catch (NumberFormatException e) { 4892 return def; 4893 } 4894 } 4895 4896 /** 4897 * Convenience function for retrieving a single secure settings value 4898 * as an integer. Note that internally setting values are always 4899 * stored as strings; this function converts the string to an integer 4900 * for you. 4901 * <p> 4902 * This version does not take a default value. If the setting has not 4903 * been set, or the string value is not a number, 4904 * it throws {@link SettingNotFoundException}. 4905 * 4906 * @param cr The ContentResolver to access. 4907 * @param name The name of the setting to retrieve. 4908 * 4909 * @throws SettingNotFoundException Thrown if a setting by the given 4910 * name can't be found or the setting value is not an integer. 4911 * 4912 * @return The setting's current value. 4913 */ getInt(ContentResolver cr, String name)4914 public static int getInt(ContentResolver cr, String name) 4915 throws SettingNotFoundException { 4916 return getIntForUser(cr, name, UserHandle.myUserId()); 4917 } 4918 4919 /** @hide */ getIntForUser(ContentResolver cr, String name, int userHandle)4920 public static int getIntForUser(ContentResolver cr, String name, int userHandle) 4921 throws SettingNotFoundException { 4922 if (LOCATION_MODE.equals(name)) { 4923 // Map from to underlying location provider storage API to location mode 4924 return getLocationModeForUser(cr, userHandle); 4925 } 4926 String v = getStringForUser(cr, name, userHandle); 4927 try { 4928 return Integer.parseInt(v); 4929 } catch (NumberFormatException e) { 4930 throw new SettingNotFoundException(name); 4931 } 4932 } 4933 4934 /** 4935 * Convenience function for updating a single settings value as an 4936 * integer. This will either create a new entry in the table if the 4937 * given name does not exist, or modify the value of the existing row 4938 * with that name. Note that internally setting values are always 4939 * stored as strings, so this function converts the given value to a 4940 * string before storing it. 4941 * 4942 * @param cr The ContentResolver to access. 4943 * @param name The name of the setting to modify. 4944 * @param value The new value for the setting. 4945 * @return true if the value was set, false on database errors 4946 */ putInt(ContentResolver cr, String name, int value)4947 public static boolean putInt(ContentResolver cr, String name, int value) { 4948 return putIntForUser(cr, name, value, UserHandle.myUserId()); 4949 } 4950 4951 /** @hide */ putIntForUser(ContentResolver cr, String name, int value, int userHandle)4952 public static boolean putIntForUser(ContentResolver cr, String name, int value, 4953 int userHandle) { 4954 return putStringForUser(cr, name, Integer.toString(value), userHandle); 4955 } 4956 4957 /** 4958 * Convenience function for retrieving a single secure settings value 4959 * as a {@code long}. Note that internally setting values are always 4960 * stored as strings; this function converts the string to a {@code long} 4961 * for you. The default value will be returned if the setting is 4962 * not defined or not a {@code long}. 4963 * 4964 * @param cr The ContentResolver to access. 4965 * @param name The name of the setting to retrieve. 4966 * @param def Value to return if the setting is not defined. 4967 * 4968 * @return The setting's current value, or 'def' if it is not defined 4969 * or not a valid {@code long}. 4970 */ getLong(ContentResolver cr, String name, long def)4971 public static long getLong(ContentResolver cr, String name, long def) { 4972 return getLongForUser(cr, name, def, UserHandle.myUserId()); 4973 } 4974 4975 /** @hide */ getLongForUser(ContentResolver cr, String name, long def, int userHandle)4976 public static long getLongForUser(ContentResolver cr, String name, long def, 4977 int userHandle) { 4978 String valString = getStringForUser(cr, name, userHandle); 4979 long value; 4980 try { 4981 value = valString != null ? Long.parseLong(valString) : def; 4982 } catch (NumberFormatException e) { 4983 value = def; 4984 } 4985 return value; 4986 } 4987 4988 /** 4989 * Convenience function for retrieving a single secure settings value 4990 * as a {@code long}. Note that internally setting values are always 4991 * stored as strings; this function converts the string to a {@code long} 4992 * for you. 4993 * <p> 4994 * This version does not take a default value. If the setting has not 4995 * been set, or the string value is not a number, 4996 * it throws {@link SettingNotFoundException}. 4997 * 4998 * @param cr The ContentResolver to access. 4999 * @param name The name of the setting to retrieve. 5000 * 5001 * @return The setting's current value. 5002 * @throws SettingNotFoundException Thrown if a setting by the given 5003 * name can't be found or the setting value is not an integer. 5004 */ getLong(ContentResolver cr, String name)5005 public static long getLong(ContentResolver cr, String name) 5006 throws SettingNotFoundException { 5007 return getLongForUser(cr, name, UserHandle.myUserId()); 5008 } 5009 5010 /** @hide */ getLongForUser(ContentResolver cr, String name, int userHandle)5011 public static long getLongForUser(ContentResolver cr, String name, int userHandle) 5012 throws SettingNotFoundException { 5013 String valString = getStringForUser(cr, name, userHandle); 5014 try { 5015 return Long.parseLong(valString); 5016 } catch (NumberFormatException e) { 5017 throw new SettingNotFoundException(name); 5018 } 5019 } 5020 5021 /** 5022 * Convenience function for updating a secure settings value as a long 5023 * integer. This will either create a new entry in the table if the 5024 * given name does not exist, or modify the value of the existing row 5025 * with that name. Note that internally setting values are always 5026 * stored as strings, so this function converts the given value to a 5027 * string before storing it. 5028 * 5029 * @param cr The ContentResolver to access. 5030 * @param name The name of the setting to modify. 5031 * @param value The new value for the setting. 5032 * @return true if the value was set, false on database errors 5033 */ putLong(ContentResolver cr, String name, long value)5034 public static boolean putLong(ContentResolver cr, String name, long value) { 5035 return putLongForUser(cr, name, value, UserHandle.myUserId()); 5036 } 5037 5038 /** @hide */ putLongForUser(ContentResolver cr, String name, long value, int userHandle)5039 public static boolean putLongForUser(ContentResolver cr, String name, long value, 5040 int userHandle) { 5041 return putStringForUser(cr, name, Long.toString(value), userHandle); 5042 } 5043 5044 /** 5045 * Convenience function for retrieving a single secure settings value 5046 * as a floating point number. Note that internally setting values are 5047 * always stored as strings; this function converts the string to an 5048 * float for you. The default value will be returned if the setting 5049 * is not defined or not a valid float. 5050 * 5051 * @param cr The ContentResolver to access. 5052 * @param name The name of the setting to retrieve. 5053 * @param def Value to return if the setting is not defined. 5054 * 5055 * @return The setting's current value, or 'def' if it is not defined 5056 * or not a valid float. 5057 */ getFloat(ContentResolver cr, String name, float def)5058 public static float getFloat(ContentResolver cr, String name, float def) { 5059 return getFloatForUser(cr, name, def, UserHandle.myUserId()); 5060 } 5061 5062 /** @hide */ getFloatForUser(ContentResolver cr, String name, float def, int userHandle)5063 public static float getFloatForUser(ContentResolver cr, String name, float def, 5064 int userHandle) { 5065 String v = getStringForUser(cr, name, userHandle); 5066 try { 5067 return v != null ? Float.parseFloat(v) : def; 5068 } catch (NumberFormatException e) { 5069 return def; 5070 } 5071 } 5072 5073 /** 5074 * Convenience function for retrieving a single secure settings value 5075 * as a float. Note that internally setting values are always 5076 * stored as strings; this function converts the string to a float 5077 * for you. 5078 * <p> 5079 * This version does not take a default value. If the setting has not 5080 * been set, or the string value is not a number, 5081 * it throws {@link SettingNotFoundException}. 5082 * 5083 * @param cr The ContentResolver to access. 5084 * @param name The name of the setting to retrieve. 5085 * 5086 * @throws SettingNotFoundException Thrown if a setting by the given 5087 * name can't be found or the setting value is not a float. 5088 * 5089 * @return The setting's current value. 5090 */ getFloat(ContentResolver cr, String name)5091 public static float getFloat(ContentResolver cr, String name) 5092 throws SettingNotFoundException { 5093 return getFloatForUser(cr, name, UserHandle.myUserId()); 5094 } 5095 5096 /** @hide */ getFloatForUser(ContentResolver cr, String name, int userHandle)5097 public static float getFloatForUser(ContentResolver cr, String name, int userHandle) 5098 throws SettingNotFoundException { 5099 String v = getStringForUser(cr, name, userHandle); 5100 if (v == null) { 5101 throw new SettingNotFoundException(name); 5102 } 5103 try { 5104 return Float.parseFloat(v); 5105 } catch (NumberFormatException e) { 5106 throw new SettingNotFoundException(name); 5107 } 5108 } 5109 5110 /** 5111 * Convenience function for updating a single settings value as a 5112 * floating point number. This will either create a new entry in the 5113 * table if the given name does not exist, or modify the value of the 5114 * existing row with that name. Note that internally setting values 5115 * are always stored as strings, so this function converts the given 5116 * value to a string before storing it. 5117 * 5118 * @param cr The ContentResolver to access. 5119 * @param name The name of the setting to modify. 5120 * @param value The new value for the setting. 5121 * @return true if the value was set, false on database errors 5122 */ putFloat(ContentResolver cr, String name, float value)5123 public static boolean putFloat(ContentResolver cr, String name, float value) { 5124 return putFloatForUser(cr, name, value, UserHandle.myUserId()); 5125 } 5126 5127 /** @hide */ putFloatForUser(ContentResolver cr, String name, float value, int userHandle)5128 public static boolean putFloatForUser(ContentResolver cr, String name, float value, 5129 int userHandle) { 5130 return putStringForUser(cr, name, Float.toString(value), userHandle); 5131 } 5132 5133 /** 5134 * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED} 5135 * instead 5136 */ 5137 @Deprecated 5138 public static final String DEVELOPMENT_SETTINGS_ENABLED = 5139 Global.DEVELOPMENT_SETTINGS_ENABLED; 5140 5141 /** 5142 * When the user has enable the option to have a "bug report" command 5143 * in the power menu. 5144 * @deprecated Use {@link android.provider.Settings.Global#BUGREPORT_IN_POWER_MENU} instead 5145 * @hide 5146 */ 5147 @Deprecated 5148 public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu"; 5149 5150 /** 5151 * @deprecated Use {@link android.provider.Settings.Global#ADB_ENABLED} instead 5152 */ 5153 @Deprecated 5154 public static final String ADB_ENABLED = Global.ADB_ENABLED; 5155 5156 /** 5157 * Setting to allow mock locations and location provider status to be injected into the 5158 * LocationManager service for testing purposes during application development. These 5159 * locations and status values override actual location and status information generated 5160 * by network, gps, or other location providers. 5161 * 5162 * @deprecated This settings is not used anymore. 5163 */ 5164 @Deprecated 5165 public static final String ALLOW_MOCK_LOCATION = "mock_location"; 5166 5167 /** 5168 * On Android 8.0 (API level 26) and higher versions of the platform, 5169 * a 64-bit number (expressed as a hexadecimal string), unique to 5170 * each combination of app-signing key, user, and device. 5171 * Values of {@code ANDROID_ID} are scoped by signing key and user. 5172 * The value may change if a factory reset is performed on the 5173 * device or if an APK signing key changes. 5174 * 5175 * For more information about how the platform handles {@code ANDROID_ID} 5176 * in Android 8.0 (API level 26) and higher, see <a 5177 * href="{@docRoot}preview/behavior-changes.html#privacy-all"> 5178 * Android 8.0 Behavior Changes</a>. 5179 * 5180 * <p class="note"><strong>Note:</strong> For apps that were installed 5181 * prior to updating the device to a version of Android 8.0 5182 * (API level 26) or higher, the value of {@code ANDROID_ID} changes 5183 * if the app is uninstalled and then reinstalled after the OTA. 5184 * To preserve values across uninstalls after an OTA to Android 8.0 5185 * or higher, developers can use 5186 * <a href="{@docRoot}guide/topics/data/keyvaluebackup.html"> 5187 * Key/Value Backup</a>.</p> 5188 * 5189 * <p>In versions of the platform lower than Android 8.0 (API level 26), 5190 * a 64-bit number (expressed as a hexadecimal string) that is randomly 5191 * generated when the user first sets up the device and should remain 5192 * constant for the lifetime of the user's device. 5193 * 5194 * On devices that have 5195 * <a href="{@docRoot}about/versions/android-4.2.html#MultipleUsers"> 5196 * multiple users</a>, each user appears as a 5197 * completely separate device, so the {@code ANDROID_ID} value is 5198 * unique to each user.</p> 5199 * 5200 * <p class="note"><strong>Note:</strong> If the caller is an Instant App the ID is scoped 5201 * to the Instant App, it is generated when the Instant App is first installed and reset if 5202 * the user clears the Instant App. 5203 */ 5204 public static final String ANDROID_ID = "android_id"; 5205 5206 /** 5207 * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead 5208 */ 5209 @Deprecated 5210 public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON; 5211 5212 /** 5213 * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead 5214 */ 5215 @Deprecated 5216 public static final String DATA_ROAMING = Global.DATA_ROAMING; 5217 5218 /** 5219 * Setting to record the input method used by default, holding the ID 5220 * of the desired method. 5221 */ 5222 public static final String DEFAULT_INPUT_METHOD = "default_input_method"; 5223 5224 /** 5225 * Setting to record the input method subtype used by default, holding the ID 5226 * of the desired method. 5227 */ 5228 public static final String SELECTED_INPUT_METHOD_SUBTYPE = 5229 "selected_input_method_subtype"; 5230 5231 /** 5232 * Setting to record the history of input method subtype, holding the pair of ID of IME 5233 * and its last used subtype. 5234 * @hide 5235 */ 5236 public static final String INPUT_METHODS_SUBTYPE_HISTORY = 5237 "input_methods_subtype_history"; 5238 5239 /** 5240 * Setting to record the visibility of input method selector 5241 */ 5242 public static final String INPUT_METHOD_SELECTOR_VISIBILITY = 5243 "input_method_selector_visibility"; 5244 5245 /** 5246 * The currently selected voice interaction service flattened ComponentName. 5247 * @hide 5248 */ 5249 @TestApi 5250 public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service"; 5251 5252 /** 5253 * The currently selected autofill service flattened ComponentName. 5254 * @hide 5255 */ 5256 @TestApi 5257 public static final String AUTOFILL_SERVICE = "autofill_service"; 5258 5259 /** 5260 * @deprecated Use {@link android.provider.Settings.Global#DEVICE_PROVISIONED} instead 5261 */ 5262 @Deprecated 5263 public static final String DEVICE_PROVISIONED = Global.DEVICE_PROVISIONED; 5264 5265 /** 5266 * Indicates whether a DPC has been downloaded during provisioning. 5267 * 5268 * <p>Type: int (0 for false, 1 for true) 5269 * 5270 * <p>If this is true, then any attempts to begin setup again should result in factory reset 5271 * 5272 * @hide 5273 */ 5274 public static final String MANAGED_PROVISIONING_DPC_DOWNLOADED = 5275 "managed_provisioning_dpc_downloaded"; 5276 5277 /** 5278 * Whether the current user has been set up via setup wizard (0 = false, 1 = true) 5279 * @hide 5280 */ 5281 @TestApi 5282 public static final String USER_SETUP_COMPLETE = "user_setup_complete"; 5283 5284 /** 5285 * Whether the current user has been set up via setup wizard (0 = false, 1 = true) 5286 * This value differs from USER_SETUP_COMPLETE in that it can be reset back to 0 5287 * in case SetupWizard has been re-enabled on TV devices. 5288 * 5289 * @hide 5290 */ 5291 public static final String TV_USER_SETUP_COMPLETE = "tv_user_setup_complete"; 5292 5293 /** 5294 * Prefix for category name that marks whether a suggested action from that category was 5295 * completed. 5296 * @hide 5297 */ 5298 public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category."; 5299 5300 /** 5301 * List of input methods that are currently enabled. This is a string 5302 * containing the IDs of all enabled input methods, each ID separated 5303 * by ':'. 5304 */ 5305 public static final String ENABLED_INPUT_METHODS = "enabled_input_methods"; 5306 5307 /** 5308 * List of system input methods that are currently disabled. This is a string 5309 * containing the IDs of all disabled input methods, each ID separated 5310 * by ':'. 5311 * @hide 5312 */ 5313 public static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods"; 5314 5315 /** 5316 * Whether to show the IME when a hard keyboard is connected. This is a boolean that 5317 * determines if the IME should be shown when a hard keyboard is attached. 5318 * @hide 5319 */ 5320 public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard"; 5321 5322 /** 5323 * Host name and port for global http proxy. Uses ':' seperator for 5324 * between host and port. 5325 * 5326 * @deprecated Use {@link Global#HTTP_PROXY} 5327 */ 5328 @Deprecated 5329 public static final String HTTP_PROXY = Global.HTTP_PROXY; 5330 5331 /** 5332 * Package designated as always-on VPN provider. 5333 * 5334 * @hide 5335 */ 5336 public static final String ALWAYS_ON_VPN_APP = "always_on_vpn_app"; 5337 5338 /** 5339 * Whether to block networking outside of VPN connections while always-on is set. 5340 * @see #ALWAYS_ON_VPN_APP 5341 * 5342 * @hide 5343 */ 5344 public static final String ALWAYS_ON_VPN_LOCKDOWN = "always_on_vpn_lockdown"; 5345 5346 /** 5347 * Whether applications can be installed for this user via the system's 5348 * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism. 5349 * 5350 * <p>1 = permit app installation via the system package installer intent 5351 * <p>0 = do not allow use of the package installer 5352 * @deprecated Starting from {@link android.os.Build.VERSION_CODES#O}, apps should use 5353 * {@link PackageManager#canRequestPackageInstalls()} 5354 * @see PackageManager#canRequestPackageInstalls() 5355 */ 5356 public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; 5357 5358 /** 5359 * A flag to tell {@link com.android.server.devicepolicy.DevicePolicyManagerService} that 5360 * the default for {@link #INSTALL_NON_MARKET_APPS} is reversed for this user on OTA. So it 5361 * can set the restriction {@link android.os.UserManager#DISALLOW_INSTALL_UNKNOWN_SOURCES} 5362 * on behalf of the profile owner if needed to make the change transparent for profile 5363 * owners. 5364 * 5365 * @hide 5366 */ 5367 public static final String UNKNOWN_SOURCES_DEFAULT_REVERSED = 5368 "unknown_sources_default_reversed"; 5369 5370 /** 5371 * Comma-separated list of location providers that activities may access. Do not rely on 5372 * this value being present in settings.db or on ContentObserver notifications on the 5373 * corresponding Uri. 5374 * 5375 * @deprecated use {@link #LOCATION_MODE} and 5376 * {@link LocationManager#MODE_CHANGED_ACTION} (or 5377 * {@link LocationManager#PROVIDERS_CHANGED_ACTION}) 5378 */ 5379 @Deprecated 5380 public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; 5381 5382 /** 5383 * The degree of location access enabled by the user. 5384 * <p> 5385 * When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link 5386 * #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link 5387 * #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link 5388 * #getInt(ContentResolver, String)}, the caller must gracefully handle additional location 5389 * modes that might be added in the future. 5390 * <p> 5391 * Note: do not rely on this value being present in settings.db or on ContentObserver 5392 * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION} 5393 * to receive changes in this value. 5394 */ 5395 public static final String LOCATION_MODE = "location_mode"; 5396 /** 5397 * Stores the previous location mode when {@link #LOCATION_MODE} is set to 5398 * {@link #LOCATION_MODE_OFF} 5399 * @hide 5400 */ 5401 public static final String LOCATION_PREVIOUS_MODE = "location_previous_mode"; 5402 5403 /** 5404 * Sets all location providers to the previous states before location was turned off. 5405 * @hide 5406 */ 5407 public static final int LOCATION_MODE_PREVIOUS = -1; 5408 /** 5409 * Location access disabled. 5410 */ 5411 public static final int LOCATION_MODE_OFF = 0; 5412 /** 5413 * Network Location Provider disabled, but GPS and other sensors enabled. 5414 */ 5415 public static final int LOCATION_MODE_SENSORS_ONLY = 1; 5416 /** 5417 * Reduced power usage, such as limiting the number of GPS updates per hour. Requests 5418 * with {@link android.location.Criteria#POWER_HIGH} may be downgraded to 5419 * {@link android.location.Criteria#POWER_MEDIUM}. 5420 */ 5421 public static final int LOCATION_MODE_BATTERY_SAVING = 2; 5422 /** 5423 * Best-effort location computation allowed. 5424 */ 5425 public static final int LOCATION_MODE_HIGH_ACCURACY = 3; 5426 5427 /** 5428 * A flag containing settings used for biometric weak 5429 * @hide 5430 */ 5431 @Deprecated 5432 public static final String LOCK_BIOMETRIC_WEAK_FLAGS = 5433 "lock_biometric_weak_flags"; 5434 5435 /** 5436 * Whether lock-to-app will lock the keyguard when exiting. 5437 * @hide 5438 */ 5439 public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked"; 5440 5441 /** 5442 * Whether autolock is enabled (0 = false, 1 = true) 5443 * 5444 * @deprecated Use {@link android.app.KeyguardManager} to determine the state and security 5445 * level of the keyguard. Accessing this setting from an app that is targeting 5446 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}. 5447 */ 5448 @Deprecated 5449 public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; 5450 5451 /** 5452 * Whether lock pattern is visible as user enters (0 = false, 1 = true) 5453 * 5454 * @deprecated Accessing this setting from an app that is targeting 5455 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}. 5456 */ 5457 @Deprecated 5458 public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; 5459 5460 /** 5461 * Whether lock pattern will vibrate as user enters (0 = false, 1 = 5462 * true) 5463 * 5464 * @deprecated Starting in {@link VERSION_CODES#JELLY_BEAN_MR1} the 5465 * lockscreen uses 5466 * {@link Settings.System#HAPTIC_FEEDBACK_ENABLED}. 5467 * Accessing this setting from an app that is targeting 5468 * {@link VERSION_CODES#M} or later throws a {@code SecurityException}. 5469 */ 5470 @Deprecated 5471 public static final String 5472 LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; 5473 5474 /** 5475 * This preference allows the device to be locked given time after screen goes off, 5476 * subject to current DeviceAdmin policy limits. 5477 * @hide 5478 */ 5479 public static final String LOCK_SCREEN_LOCK_AFTER_TIMEOUT = "lock_screen_lock_after_timeout"; 5480 5481 5482 /** 5483 * This preference contains the string that shows for owner info on LockScreen. 5484 * @hide 5485 * @deprecated 5486 */ 5487 @Deprecated 5488 public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info"; 5489 5490 /** 5491 * Ids of the user-selected appwidgets on the lockscreen (comma-delimited). 5492 * @hide 5493 */ 5494 @Deprecated 5495 public static final String LOCK_SCREEN_APPWIDGET_IDS = 5496 "lock_screen_appwidget_ids"; 5497 5498 /** 5499 * Id of the appwidget shown on the lock screen when appwidgets are disabled. 5500 * @hide 5501 */ 5502 @Deprecated 5503 public static final String LOCK_SCREEN_FALLBACK_APPWIDGET_ID = 5504 "lock_screen_fallback_appwidget_id"; 5505 5506 /** 5507 * Index of the lockscreen appwidget to restore, -1 if none. 5508 * @hide 5509 */ 5510 @Deprecated 5511 public static final String LOCK_SCREEN_STICKY_APPWIDGET = 5512 "lock_screen_sticky_appwidget"; 5513 5514 /** 5515 * This preference enables showing the owner info on LockScreen. 5516 * @hide 5517 * @deprecated 5518 */ 5519 @Deprecated 5520 public static final String LOCK_SCREEN_OWNER_INFO_ENABLED = 5521 "lock_screen_owner_info_enabled"; 5522 5523 /** 5524 * When set by a user, allows notifications to be shown atop a securely locked screen 5525 * in their full "private" form (same as when the device is unlocked). 5526 * @hide 5527 */ 5528 public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = 5529 "lock_screen_allow_private_notifications"; 5530 5531 /** 5532 * When set by a user, allows notification remote input atop a securely locked screen 5533 * without having to unlock 5534 * @hide 5535 */ 5536 public static final String LOCK_SCREEN_ALLOW_REMOTE_INPUT = 5537 "lock_screen_allow_remote_input"; 5538 5539 /** 5540 * Set by the system to track if the user needs to see the call to action for 5541 * the lockscreen notification policy. 5542 * @hide 5543 */ 5544 public static final String SHOW_NOTE_ABOUT_NOTIFICATION_HIDING = 5545 "show_note_about_notification_hiding"; 5546 5547 /** 5548 * Set to 1 by the system after trust agents have been initialized. 5549 * @hide 5550 */ 5551 public static final String TRUST_AGENTS_INITIALIZED = 5552 "trust_agents_initialized"; 5553 5554 /** 5555 * The Logging ID (a unique 64-bit value) as a hex string. 5556 * Used as a pseudonymous identifier for logging. 5557 * @deprecated This identifier is poorly initialized and has 5558 * many collisions. It should not be used. 5559 */ 5560 @Deprecated 5561 public static final String LOGGING_ID = "logging_id"; 5562 5563 /** 5564 * @deprecated Use {@link android.provider.Settings.Global#NETWORK_PREFERENCE} instead 5565 */ 5566 @Deprecated 5567 public static final String NETWORK_PREFERENCE = Global.NETWORK_PREFERENCE; 5568 5569 /** 5570 * No longer supported. 5571 */ 5572 public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; 5573 5574 /** 5575 * No longer supported. 5576 */ 5577 public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; 5578 5579 /** 5580 * No longer supported. 5581 */ 5582 public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; 5583 5584 /** 5585 * Settings classname to launch when Settings is clicked from All 5586 * Applications. Needed because of user testing between the old 5587 * and new Settings apps. 5588 */ 5589 // TODO: 881807 5590 public static final String SETTINGS_CLASSNAME = "settings_classname"; 5591 5592 /** 5593 * @deprecated Use {@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED} instead 5594 */ 5595 @Deprecated 5596 public static final String USB_MASS_STORAGE_ENABLED = Global.USB_MASS_STORAGE_ENABLED; 5597 5598 /** 5599 * @deprecated Use {@link android.provider.Settings.Global#USE_GOOGLE_MAIL} instead 5600 */ 5601 @Deprecated 5602 public static final String USE_GOOGLE_MAIL = Global.USE_GOOGLE_MAIL; 5603 5604 /** 5605 * If accessibility is enabled. 5606 */ 5607 public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled"; 5608 5609 /** 5610 * Setting specifying if the accessibility shortcut is enabled. 5611 * @hide 5612 */ 5613 public static final String ACCESSIBILITY_SHORTCUT_ENABLED = 5614 "accessibility_shortcut_enabled"; 5615 5616 /** 5617 * Setting specifying if the accessibility shortcut is enabled. 5618 * @hide 5619 */ 5620 public static final String ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN = 5621 "accessibility_shortcut_on_lock_screen"; 5622 5623 /** 5624 * Setting specifying if the accessibility shortcut dialog has been shown to this user. 5625 * @hide 5626 */ 5627 public static final String ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN = 5628 "accessibility_shortcut_dialog_shown"; 5629 5630 /** 5631 * Setting specifying the accessibility service to be toggled via the accessibility 5632 * shortcut. Must be its flattened {@link ComponentName}. 5633 * @hide 5634 */ 5635 public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE = 5636 "accessibility_shortcut_target_service"; 5637 5638 /** 5639 * Setting specifying the accessibility service or feature to be toggled via the 5640 * accessibility button in the navigation bar. This is either a flattened 5641 * {@link ComponentName} or the class name of a system class implementing a supported 5642 * accessibility feature. 5643 * @hide 5644 */ 5645 public static final String ACCESSIBILITY_BUTTON_TARGET_COMPONENT = 5646 "accessibility_button_target_component"; 5647 5648 /** 5649 * If touch exploration is enabled. 5650 */ 5651 public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled"; 5652 5653 /** 5654 * List of the enabled accessibility providers. 5655 */ 5656 public static final String ENABLED_ACCESSIBILITY_SERVICES = 5657 "enabled_accessibility_services"; 5658 5659 /** 5660 * List of the accessibility services to which the user has granted 5661 * permission to put the device into touch exploration mode. 5662 * 5663 * @hide 5664 */ 5665 public static final String TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES = 5666 "touch_exploration_granted_accessibility_services"; 5667 5668 /** 5669 * Whether to speak passwords while in accessibility mode. 5670 * 5671 * @deprecated The speaking of passwords is controlled by individual accessibility services. 5672 * Apps should ignore this setting and provide complete information to accessibility 5673 * at all times, which was the behavior when this value was {@code true}. 5674 */ 5675 @Deprecated 5676 public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password"; 5677 5678 /** 5679 * Whether to draw text with high contrast while in accessibility mode. 5680 * 5681 * @hide 5682 */ 5683 public static final String ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED = 5684 "high_text_contrast_enabled"; 5685 5686 /** 5687 * Setting that specifies whether the display magnification is enabled via a system-wide 5688 * triple tap gesture. Display magnifications allows the user to zoom in the display content 5689 * and is targeted to low vision users. The current magnification scale is controlled by 5690 * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}. 5691 * 5692 * @hide 5693 */ 5694 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED = 5695 "accessibility_display_magnification_enabled"; 5696 5697 /** 5698 * Setting that specifies whether the display magnification is enabled via a shortcut 5699 * affordance within the system's navigation area. Display magnifications allows the user to 5700 * zoom in the display content and is targeted to low vision users. The current 5701 * magnification scale is controlled by {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}. 5702 * 5703 * @hide 5704 */ 5705 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED = 5706 "accessibility_display_magnification_navbar_enabled"; 5707 5708 /** 5709 * Setting that specifies what the display magnification scale is. 5710 * Display magnifications allows the user to zoom in the display 5711 * content and is targeted to low vision users. Whether a display 5712 * magnification is performed is controlled by 5713 * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED} and 5714 * {@link #ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED} 5715 * 5716 * @hide 5717 */ 5718 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE = 5719 "accessibility_display_magnification_scale"; 5720 5721 /** 5722 * Unused mangnification setting 5723 * 5724 * @hide 5725 * @deprecated 5726 */ 5727 @Deprecated 5728 public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE = 5729 "accessibility_display_magnification_auto_update"; 5730 5731 /** 5732 * Setting that specifies what mode the soft keyboard is in (default or hidden). Can be 5733 * modified from an AccessibilityService using the SoftKeyboardController. 5734 * 5735 * @hide 5736 */ 5737 public static final String ACCESSIBILITY_SOFT_KEYBOARD_MODE = 5738 "accessibility_soft_keyboard_mode"; 5739 5740 /** 5741 * Default soft keyboard behavior. 5742 * 5743 * @hide 5744 */ 5745 public static final int SHOW_MODE_AUTO = 0; 5746 5747 /** 5748 * Soft keyboard is never shown. 5749 * 5750 * @hide 5751 */ 5752 public static final int SHOW_MODE_HIDDEN = 1; 5753 5754 /** 5755 * Setting that specifies whether timed text (captions) should be 5756 * displayed in video content. Text display properties are controlled by 5757 * the following settings: 5758 * <ul> 5759 * <li>{@link #ACCESSIBILITY_CAPTIONING_LOCALE} 5760 * <li>{@link #ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR} 5761 * <li>{@link #ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR} 5762 * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_COLOR} 5763 * <li>{@link #ACCESSIBILITY_CAPTIONING_EDGE_TYPE} 5764 * <li>{@link #ACCESSIBILITY_CAPTIONING_TYPEFACE} 5765 * <li>{@link #ACCESSIBILITY_CAPTIONING_FONT_SCALE} 5766 * </ul> 5767 * 5768 * @hide 5769 */ 5770 public static final String ACCESSIBILITY_CAPTIONING_ENABLED = 5771 "accessibility_captioning_enabled"; 5772 5773 /** 5774 * Setting that specifies the language for captions as a locale string, 5775 * e.g. en_US. 5776 * 5777 * @see java.util.Locale#toString 5778 * @hide 5779 */ 5780 public static final String ACCESSIBILITY_CAPTIONING_LOCALE = 5781 "accessibility_captioning_locale"; 5782 5783 /** 5784 * Integer property that specifies the preset style for captions, one 5785 * of: 5786 * <ul> 5787 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESET_CUSTOM} 5788 * <li>a valid index of {@link android.view.accessibility.CaptioningManager.CaptionStyle#PRESETS} 5789 * </ul> 5790 * 5791 * @see java.util.Locale#toString 5792 * @hide 5793 */ 5794 public static final String ACCESSIBILITY_CAPTIONING_PRESET = 5795 "accessibility_captioning_preset"; 5796 5797 /** 5798 * Integer property that specifes the background color for captions as a 5799 * packed 32-bit color. 5800 * 5801 * @see android.graphics.Color#argb 5802 * @hide 5803 */ 5804 public static final String ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR = 5805 "accessibility_captioning_background_color"; 5806 5807 /** 5808 * Integer property that specifes the foreground color for captions as a 5809 * packed 32-bit color. 5810 * 5811 * @see android.graphics.Color#argb 5812 * @hide 5813 */ 5814 public static final String ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR = 5815 "accessibility_captioning_foreground_color"; 5816 5817 /** 5818 * Integer property that specifes the edge type for captions, one of: 5819 * <ul> 5820 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_NONE} 5821 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_OUTLINE} 5822 * <li>{@link android.view.accessibility.CaptioningManager.CaptionStyle#EDGE_TYPE_DROP_SHADOW} 5823 * </ul> 5824 * 5825 * @see #ACCESSIBILITY_CAPTIONING_EDGE_COLOR 5826 * @hide 5827 */ 5828 public static final String ACCESSIBILITY_CAPTIONING_EDGE_TYPE = 5829 "accessibility_captioning_edge_type"; 5830 5831 /** 5832 * Integer property that specifes the edge color for captions as a 5833 * packed 32-bit color. 5834 * 5835 * @see #ACCESSIBILITY_CAPTIONING_EDGE_TYPE 5836 * @see android.graphics.Color#argb 5837 * @hide 5838 */ 5839 public static final String ACCESSIBILITY_CAPTIONING_EDGE_COLOR = 5840 "accessibility_captioning_edge_color"; 5841 5842 /** 5843 * Integer property that specifes the window color for captions as a 5844 * packed 32-bit color. 5845 * 5846 * @see android.graphics.Color#argb 5847 * @hide 5848 */ 5849 public static final String ACCESSIBILITY_CAPTIONING_WINDOW_COLOR = 5850 "accessibility_captioning_window_color"; 5851 5852 /** 5853 * String property that specifies the typeface for captions, one of: 5854 * <ul> 5855 * <li>DEFAULT 5856 * <li>MONOSPACE 5857 * <li>SANS_SERIF 5858 * <li>SERIF 5859 * </ul> 5860 * 5861 * @see android.graphics.Typeface 5862 * @hide 5863 */ 5864 public static final String ACCESSIBILITY_CAPTIONING_TYPEFACE = 5865 "accessibility_captioning_typeface"; 5866 5867 /** 5868 * Floating point property that specifies font scaling for captions. 5869 * 5870 * @hide 5871 */ 5872 public static final String ACCESSIBILITY_CAPTIONING_FONT_SCALE = 5873 "accessibility_captioning_font_scale"; 5874 5875 /** 5876 * Setting that specifies whether display color inversion is enabled. 5877 */ 5878 public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = 5879 "accessibility_display_inversion_enabled"; 5880 5881 /** 5882 * Setting that specifies whether display color space adjustment is 5883 * enabled. 5884 * 5885 * @hide 5886 */ 5887 public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED = 5888 "accessibility_display_daltonizer_enabled"; 5889 5890 /** 5891 * Integer property that specifies the type of color space adjustment to 5892 * perform. Valid values are defined in AccessibilityManager. 5893 * 5894 * @hide 5895 */ 5896 public static final String ACCESSIBILITY_DISPLAY_DALTONIZER = 5897 "accessibility_display_daltonizer"; 5898 5899 /** 5900 * Setting that specifies whether automatic click when the mouse pointer stops moving is 5901 * enabled. 5902 * 5903 * @hide 5904 */ 5905 public static final String ACCESSIBILITY_AUTOCLICK_ENABLED = 5906 "accessibility_autoclick_enabled"; 5907 5908 /** 5909 * Integer setting specifying amount of time in ms the mouse pointer has to stay still 5910 * before performing click when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set. 5911 * 5912 * @see #ACCESSIBILITY_AUTOCLICK_ENABLED 5913 * @hide 5914 */ 5915 public static final String ACCESSIBILITY_AUTOCLICK_DELAY = 5916 "accessibility_autoclick_delay"; 5917 5918 /** 5919 * Whether or not larger size icons are used for the pointer of mouse/trackpad for 5920 * accessibility. 5921 * (0 = false, 1 = true) 5922 * @hide 5923 */ 5924 public static final String ACCESSIBILITY_LARGE_POINTER_ICON = 5925 "accessibility_large_pointer_icon"; 5926 5927 /** 5928 * The timeout for considering a press to be a long press in milliseconds. 5929 * @hide 5930 */ 5931 public static final String LONG_PRESS_TIMEOUT = "long_press_timeout"; 5932 5933 /** 5934 * The duration in milliseconds between the first tap's up event and the second tap's 5935 * down event for an interaction to be considered part of the same multi-press. 5936 * @hide 5937 */ 5938 public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout"; 5939 5940 /** 5941 * List of the enabled print services. 5942 * 5943 * N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade 5944 * from pre-N. 5945 * 5946 * @hide 5947 */ 5948 public static final String ENABLED_PRINT_SERVICES = 5949 "enabled_print_services"; 5950 5951 /** 5952 * List of the disabled print services. 5953 * 5954 * @hide 5955 */ 5956 @TestApi 5957 public static final String DISABLED_PRINT_SERVICES = 5958 "disabled_print_services"; 5959 5960 /** 5961 * The saved value for WindowManagerService.setForcedDisplayDensity() 5962 * formatted as a single integer representing DPI. If unset, then use 5963 * the real display density. 5964 * 5965 * @hide 5966 */ 5967 public static final String DISPLAY_DENSITY_FORCED = "display_density_forced"; 5968 5969 /** 5970 * Setting to always use the default text-to-speech settings regardless 5971 * of the application settings. 5972 * 1 = override application settings, 5973 * 0 = use application settings (if specified). 5974 * 5975 * @deprecated The value of this setting is no longer respected by 5976 * the framework text to speech APIs as of the Ice Cream Sandwich release. 5977 */ 5978 @Deprecated 5979 public static final String TTS_USE_DEFAULTS = "tts_use_defaults"; 5980 5981 /** 5982 * Default text-to-speech engine speech rate. 100 = 1x 5983 */ 5984 public static final String TTS_DEFAULT_RATE = "tts_default_rate"; 5985 5986 /** 5987 * Default text-to-speech engine pitch. 100 = 1x 5988 */ 5989 public static final String TTS_DEFAULT_PITCH = "tts_default_pitch"; 5990 5991 /** 5992 * Default text-to-speech engine. 5993 */ 5994 public static final String TTS_DEFAULT_SYNTH = "tts_default_synth"; 5995 5996 /** 5997 * Default text-to-speech language. 5998 * 5999 * @deprecated this setting is no longer in use, as of the Ice Cream 6000 * Sandwich release. Apps should never need to read this setting directly, 6001 * instead can query the TextToSpeech framework classes for the default 6002 * locale. {@link TextToSpeech#getLanguage()}. 6003 */ 6004 @Deprecated 6005 public static final String TTS_DEFAULT_LANG = "tts_default_lang"; 6006 6007 /** 6008 * Default text-to-speech country. 6009 * 6010 * @deprecated this setting is no longer in use, as of the Ice Cream 6011 * Sandwich release. Apps should never need to read this setting directly, 6012 * instead can query the TextToSpeech framework classes for the default 6013 * locale. {@link TextToSpeech#getLanguage()}. 6014 */ 6015 @Deprecated 6016 public static final String TTS_DEFAULT_COUNTRY = "tts_default_country"; 6017 6018 /** 6019 * Default text-to-speech locale variant. 6020 * 6021 * @deprecated this setting is no longer in use, as of the Ice Cream 6022 * Sandwich release. Apps should never need to read this setting directly, 6023 * instead can query the TextToSpeech framework classes for the 6024 * locale that is in use {@link TextToSpeech#getLanguage()}. 6025 */ 6026 @Deprecated 6027 public static final String TTS_DEFAULT_VARIANT = "tts_default_variant"; 6028 6029 /** 6030 * Stores the default tts locales on a per engine basis. Stored as 6031 * a comma seperated list of values, each value being of the form 6032 * {@code engine_name:locale} for example, 6033 * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}. This 6034 * supersedes {@link #TTS_DEFAULT_LANG}, {@link #TTS_DEFAULT_COUNTRY} and 6035 * {@link #TTS_DEFAULT_VARIANT}. Apps should never need to read this 6036 * setting directly, and can query the TextToSpeech framework classes 6037 * for the locale that is in use. 6038 * 6039 * @hide 6040 */ 6041 public static final String TTS_DEFAULT_LOCALE = "tts_default_locale"; 6042 6043 /** 6044 * Space delimited list of plugin packages that are enabled. 6045 */ 6046 public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins"; 6047 6048 /** 6049 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON} 6050 * instead. 6051 */ 6052 @Deprecated 6053 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = 6054 Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON; 6055 6056 /** 6057 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} 6058 * instead. 6059 */ 6060 @Deprecated 6061 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = 6062 Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY; 6063 6064 /** 6065 * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT} 6066 * instead. 6067 */ 6068 @Deprecated 6069 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = 6070 Global.WIFI_NUM_OPEN_NETWORKS_KEPT; 6071 6072 /** 6073 * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON} 6074 * instead. 6075 */ 6076 @Deprecated 6077 public static final String WIFI_ON = Global.WIFI_ON; 6078 6079 /** 6080 * The acceptable packet loss percentage (range 0 - 100) before trying 6081 * another AP on the same network. 6082 * @deprecated This setting is not used. 6083 */ 6084 @Deprecated 6085 public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = 6086 "wifi_watchdog_acceptable_packet_loss_percentage"; 6087 6088 /** 6089 * The number of access points required for a network in order for the 6090 * watchdog to monitor it. 6091 * @deprecated This setting is not used. 6092 */ 6093 @Deprecated 6094 public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count"; 6095 6096 /** 6097 * The delay between background checks. 6098 * @deprecated This setting is not used. 6099 */ 6100 @Deprecated 6101 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = 6102 "wifi_watchdog_background_check_delay_ms"; 6103 6104 /** 6105 * Whether the Wi-Fi watchdog is enabled for background checking even 6106 * after it thinks the user has connected to a good access point. 6107 * @deprecated This setting is not used. 6108 */ 6109 @Deprecated 6110 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = 6111 "wifi_watchdog_background_check_enabled"; 6112 6113 /** 6114 * The timeout for a background ping 6115 * @deprecated This setting is not used. 6116 */ 6117 @Deprecated 6118 public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = 6119 "wifi_watchdog_background_check_timeout_ms"; 6120 6121 /** 6122 * The number of initial pings to perform that *may* be ignored if they 6123 * fail. Again, if these fail, they will *not* be used in packet loss 6124 * calculation. For example, one network always seemed to time out for 6125 * the first couple pings, so this is set to 3 by default. 6126 * @deprecated This setting is not used. 6127 */ 6128 @Deprecated 6129 public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = 6130 "wifi_watchdog_initial_ignored_ping_count"; 6131 6132 /** 6133 * The maximum number of access points (per network) to attempt to test. 6134 * If this number is reached, the watchdog will no longer monitor the 6135 * initial connection state for the network. This is a safeguard for 6136 * networks containing multiple APs whose DNS does not respond to pings. 6137 * @deprecated This setting is not used. 6138 */ 6139 @Deprecated 6140 public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks"; 6141 6142 /** 6143 * @deprecated Use {@link android.provider.Settings.Global#WIFI_WATCHDOG_ON} instead 6144 */ 6145 @Deprecated 6146 public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; 6147 6148 /** 6149 * A comma-separated list of SSIDs for which the Wi-Fi watchdog should be enabled. 6150 * @deprecated This setting is not used. 6151 */ 6152 @Deprecated 6153 public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list"; 6154 6155 /** 6156 * The number of pings to test if an access point is a good connection. 6157 * @deprecated This setting is not used. 6158 */ 6159 @Deprecated 6160 public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count"; 6161 6162 /** 6163 * The delay between pings. 6164 * @deprecated This setting is not used. 6165 */ 6166 @Deprecated 6167 public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms"; 6168 6169 /** 6170 * The timeout per ping. 6171 * @deprecated This setting is not used. 6172 */ 6173 @Deprecated 6174 public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; 6175 6176 /** 6177 * @deprecated Use 6178 * {@link android.provider.Settings.Global#WIFI_MAX_DHCP_RETRY_COUNT} instead 6179 */ 6180 @Deprecated 6181 public static final String WIFI_MAX_DHCP_RETRY_COUNT = Global.WIFI_MAX_DHCP_RETRY_COUNT; 6182 6183 /** 6184 * @deprecated Use 6185 * {@link android.provider.Settings.Global#WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS} instead 6186 */ 6187 @Deprecated 6188 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = 6189 Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS; 6190 6191 /** 6192 * The number of milliseconds to hold on to a PendingIntent based request. This delay gives 6193 * the receivers of the PendingIntent an opportunity to make a new network request before 6194 * the Network satisfying the request is potentially removed. 6195 * 6196 * @hide 6197 */ 6198 public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS = 6199 "connectivity_release_pending_intent_delay_ms"; 6200 6201 /** 6202 * Whether background data usage is allowed. 6203 * 6204 * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH}, 6205 * availability of background data depends on several 6206 * combined factors. When background data is unavailable, 6207 * {@link ConnectivityManager#getActiveNetworkInfo()} will 6208 * now appear disconnected. 6209 */ 6210 @Deprecated 6211 public static final String BACKGROUND_DATA = "background_data"; 6212 6213 /** 6214 * Origins for which browsers should allow geolocation by default. 6215 * The value is a space-separated list of origins. 6216 */ 6217 public static final String ALLOWED_GEOLOCATION_ORIGINS 6218 = "allowed_geolocation_origins"; 6219 6220 /** 6221 * The preferred TTY mode 0 = TTy Off, CDMA default 6222 * 1 = TTY Full 6223 * 2 = TTY HCO 6224 * 3 = TTY VCO 6225 * @hide 6226 */ 6227 public static final String PREFERRED_TTY_MODE = 6228 "preferred_tty_mode"; 6229 6230 /** 6231 * Whether the enhanced voice privacy mode is enabled. 6232 * 0 = normal voice privacy 6233 * 1 = enhanced voice privacy 6234 * @hide 6235 */ 6236 public static final String ENHANCED_VOICE_PRIVACY_ENABLED = "enhanced_voice_privacy_enabled"; 6237 6238 /** 6239 * Whether the TTY mode mode is enabled. 6240 * 0 = disabled 6241 * 1 = enabled 6242 * @hide 6243 */ 6244 public static final String TTY_MODE_ENABLED = "tty_mode_enabled"; 6245 6246 /** 6247 * Controls whether settings backup is enabled. 6248 * Type: int ( 0 = disabled, 1 = enabled ) 6249 * @hide 6250 */ 6251 public static final String BACKUP_ENABLED = "backup_enabled"; 6252 6253 /** 6254 * Controls whether application data is automatically restored from backup 6255 * at install time. 6256 * Type: int ( 0 = disabled, 1 = enabled ) 6257 * @hide 6258 */ 6259 public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore"; 6260 6261 /** 6262 * Indicates whether settings backup has been fully provisioned. 6263 * Type: int ( 0 = unprovisioned, 1 = fully provisioned ) 6264 * @hide 6265 */ 6266 public static final String BACKUP_PROVISIONED = "backup_provisioned"; 6267 6268 /** 6269 * Component of the transport to use for backup/restore. 6270 * @hide 6271 */ 6272 public static final String BACKUP_TRANSPORT = "backup_transport"; 6273 6274 /** 6275 * Version for which the setup wizard was last shown. Bumped for 6276 * each release when there is new setup information to show. 6277 * @hide 6278 */ 6279 public static final String LAST_SETUP_SHOWN = "last_setup_shown"; 6280 6281 /** 6282 * The interval in milliseconds after which Wi-Fi is considered idle. 6283 * When idle, it is possible for the device to be switched from Wi-Fi to 6284 * the mobile data network. 6285 * @hide 6286 * @deprecated Use {@link android.provider.Settings.Global#WIFI_IDLE_MS} 6287 * instead. 6288 */ 6289 @Deprecated 6290 public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS; 6291 6292 /** 6293 * The global search provider chosen by the user (if multiple global 6294 * search providers are installed). This will be the provider returned 6295 * by {@link SearchManager#getGlobalSearchActivity()} if it's still 6296 * installed. This setting is stored as a flattened component name as 6297 * per {@link ComponentName#flattenToString()}. 6298 * 6299 * @hide 6300 */ 6301 public static final String SEARCH_GLOBAL_SEARCH_ACTIVITY = 6302 "search_global_search_activity"; 6303 6304 /** 6305 * The number of promoted sources in GlobalSearch. 6306 * @hide 6307 */ 6308 public static final String SEARCH_NUM_PROMOTED_SOURCES = "search_num_promoted_sources"; 6309 /** 6310 * The maximum number of suggestions returned by GlobalSearch. 6311 * @hide 6312 */ 6313 public static final String SEARCH_MAX_RESULTS_TO_DISPLAY = "search_max_results_to_display"; 6314 /** 6315 * The number of suggestions GlobalSearch will ask each non-web search source for. 6316 * @hide 6317 */ 6318 public static final String SEARCH_MAX_RESULTS_PER_SOURCE = "search_max_results_per_source"; 6319 /** 6320 * The number of suggestions the GlobalSearch will ask the web search source for. 6321 * @hide 6322 */ 6323 public static final String SEARCH_WEB_RESULTS_OVERRIDE_LIMIT = 6324 "search_web_results_override_limit"; 6325 /** 6326 * The number of milliseconds that GlobalSearch will wait for suggestions from 6327 * promoted sources before continuing with all other sources. 6328 * @hide 6329 */ 6330 public static final String SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS = 6331 "search_promoted_source_deadline_millis"; 6332 /** 6333 * The number of milliseconds before GlobalSearch aborts search suggesiton queries. 6334 * @hide 6335 */ 6336 public static final String SEARCH_SOURCE_TIMEOUT_MILLIS = "search_source_timeout_millis"; 6337 /** 6338 * The maximum number of milliseconds that GlobalSearch shows the previous results 6339 * after receiving a new query. 6340 * @hide 6341 */ 6342 public static final String SEARCH_PREFILL_MILLIS = "search_prefill_millis"; 6343 /** 6344 * The maximum age of log data used for shortcuts in GlobalSearch. 6345 * @hide 6346 */ 6347 public static final String SEARCH_MAX_STAT_AGE_MILLIS = "search_max_stat_age_millis"; 6348 /** 6349 * The maximum age of log data used for source ranking in GlobalSearch. 6350 * @hide 6351 */ 6352 public static final String SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS = 6353 "search_max_source_event_age_millis"; 6354 /** 6355 * The minimum number of impressions needed to rank a source in GlobalSearch. 6356 * @hide 6357 */ 6358 public static final String SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING = 6359 "search_min_impressions_for_source_ranking"; 6360 /** 6361 * The minimum number of clicks needed to rank a source in GlobalSearch. 6362 * @hide 6363 */ 6364 public static final String SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING = 6365 "search_min_clicks_for_source_ranking"; 6366 /** 6367 * The maximum number of shortcuts shown by GlobalSearch. 6368 * @hide 6369 */ 6370 public static final String SEARCH_MAX_SHORTCUTS_RETURNED = "search_max_shortcuts_returned"; 6371 /** 6372 * The size of the core thread pool for suggestion queries in GlobalSearch. 6373 * @hide 6374 */ 6375 public static final String SEARCH_QUERY_THREAD_CORE_POOL_SIZE = 6376 "search_query_thread_core_pool_size"; 6377 /** 6378 * The maximum size of the thread pool for suggestion queries in GlobalSearch. 6379 * @hide 6380 */ 6381 public static final String SEARCH_QUERY_THREAD_MAX_POOL_SIZE = 6382 "search_query_thread_max_pool_size"; 6383 /** 6384 * The size of the core thread pool for shortcut refreshing in GlobalSearch. 6385 * @hide 6386 */ 6387 public static final String SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE = 6388 "search_shortcut_refresh_core_pool_size"; 6389 /** 6390 * The maximum size of the thread pool for shortcut refreshing in GlobalSearch. 6391 * @hide 6392 */ 6393 public static final String SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE = 6394 "search_shortcut_refresh_max_pool_size"; 6395 /** 6396 * The maximun time that excess threads in the GlobalSeach thread pools will 6397 * wait before terminating. 6398 * @hide 6399 */ 6400 public static final String SEARCH_THREAD_KEEPALIVE_SECONDS = 6401 "search_thread_keepalive_seconds"; 6402 /** 6403 * The maximum number of concurrent suggestion queries to each source. 6404 * @hide 6405 */ 6406 public static final String SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT = 6407 "search_per_source_concurrent_query_limit"; 6408 6409 /** 6410 * Whether or not alert sounds are played on StorageManagerService events. 6411 * (0 = false, 1 = true) 6412 * @hide 6413 */ 6414 public static final String MOUNT_PLAY_NOTIFICATION_SND = "mount_play_not_snd"; 6415 6416 /** 6417 * Whether or not UMS auto-starts on UMS host detection. (0 = false, 1 = true) 6418 * @hide 6419 */ 6420 public static final String MOUNT_UMS_AUTOSTART = "mount_ums_autostart"; 6421 6422 /** 6423 * Whether or not a notification is displayed on UMS host detection. (0 = false, 1 = true) 6424 * @hide 6425 */ 6426 public static final String MOUNT_UMS_PROMPT = "mount_ums_prompt"; 6427 6428 /** 6429 * Whether or not a notification is displayed while UMS is enabled. (0 = false, 1 = true) 6430 * @hide 6431 */ 6432 public static final String MOUNT_UMS_NOTIFY_ENABLED = "mount_ums_notify_enabled"; 6433 6434 /** 6435 * If nonzero, ANRs in invisible background processes bring up a dialog. 6436 * Otherwise, the process will be silently killed. 6437 * 6438 * Also prevents ANRs and crash dialogs from being suppressed. 6439 * @hide 6440 */ 6441 public static final String ANR_SHOW_BACKGROUND = "anr_show_background"; 6442 6443 /** 6444 * The {@link ComponentName} string of the service to be used as the voice recognition 6445 * service. 6446 * 6447 * @hide 6448 */ 6449 public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service"; 6450 6451 /** 6452 * Stores whether an user has consented to have apps verified through PAM. 6453 * The value is boolean (1 or 0). 6454 * 6455 * @hide 6456 */ 6457 public static final String PACKAGE_VERIFIER_USER_CONSENT = 6458 "package_verifier_user_consent"; 6459 6460 /** 6461 * The {@link ComponentName} string of the selected spell checker service which is 6462 * one of the services managed by the text service manager. 6463 * 6464 * @hide 6465 */ 6466 public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker"; 6467 6468 /** 6469 * The {@link ComponentName} string of the selected subtype of the selected spell checker 6470 * service which is one of the services managed by the text service manager. 6471 * 6472 * @hide 6473 */ 6474 public static final String SELECTED_SPELL_CHECKER_SUBTYPE = 6475 "selected_spell_checker_subtype"; 6476 6477 /** 6478 * The {@link ComponentName} string whether spell checker is enabled or not. 6479 * 6480 * @hide 6481 */ 6482 public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled"; 6483 6484 /** 6485 * What happens when the user presses the Power button while in-call 6486 * and the screen is on.<br/> 6487 * <b>Values:</b><br/> 6488 * 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/> 6489 * 2 - The Power button hangs up the current call.<br/> 6490 * 6491 * @hide 6492 */ 6493 public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior"; 6494 6495 /** 6496 * INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen". 6497 * @hide 6498 */ 6499 public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1; 6500 6501 /** 6502 * INCALL_POWER_BUTTON_BEHAVIOR value for "hang up". 6503 * @hide 6504 */ 6505 public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2; 6506 6507 /** 6508 * INCALL_POWER_BUTTON_BEHAVIOR default value. 6509 * @hide 6510 */ 6511 public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT = 6512 INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF; 6513 6514 /** 6515 * What happens when the user presses the Back button while in-call 6516 * and the screen is on.<br/> 6517 * <b>Values:</b><br/> 6518 * 0 - The Back buttons does nothing different.<br/> 6519 * 1 - The Back button hangs up the current call.<br/> 6520 * 6521 * @hide 6522 */ 6523 public static final String INCALL_BACK_BUTTON_BEHAVIOR = "incall_back_button_behavior"; 6524 6525 /** 6526 * INCALL_BACK_BUTTON_BEHAVIOR value for no action. 6527 * @hide 6528 */ 6529 public static final int INCALL_BACK_BUTTON_BEHAVIOR_NONE = 0x0; 6530 6531 /** 6532 * INCALL_BACK_BUTTON_BEHAVIOR value for "hang up". 6533 * @hide 6534 */ 6535 public static final int INCALL_BACK_BUTTON_BEHAVIOR_HANGUP = 0x1; 6536 6537 /** 6538 * INCALL_POWER_BUTTON_BEHAVIOR default value. 6539 * @hide 6540 */ 6541 public static final int INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT = 6542 INCALL_BACK_BUTTON_BEHAVIOR_NONE; 6543 6544 /** 6545 * Whether the device should wake when the wake gesture sensor detects motion. 6546 * @hide 6547 */ 6548 public static final String WAKE_GESTURE_ENABLED = "wake_gesture_enabled"; 6549 6550 /** 6551 * Whether the device should doze if configured. 6552 * @hide 6553 */ 6554 public static final String DOZE_ENABLED = "doze_enabled"; 6555 6556 /** 6557 * Whether doze should be always on. 6558 * @hide 6559 */ 6560 public static final String DOZE_ALWAYS_ON = "doze_always_on"; 6561 6562 /** 6563 * Whether the device should pulse on pick up gesture. 6564 * @hide 6565 */ 6566 public static final String DOZE_PULSE_ON_PICK_UP = "doze_pulse_on_pick_up"; 6567 6568 /** 6569 * Whether the device should pulse on long press gesture. 6570 * @hide 6571 */ 6572 public static final String DOZE_PULSE_ON_LONG_PRESS = "doze_pulse_on_long_press"; 6573 6574 /** 6575 * Whether the device should pulse on double tap gesture. 6576 * @hide 6577 */ 6578 public static final String DOZE_PULSE_ON_DOUBLE_TAP = "doze_pulse_on_double_tap"; 6579 6580 /** 6581 * The current night mode that has been selected by the user. Owned 6582 * and controlled by UiModeManagerService. Constants are as per 6583 * UiModeManager. 6584 * @hide 6585 */ 6586 public static final String UI_NIGHT_MODE = "ui_night_mode"; 6587 6588 /** 6589 * Whether screensavers are enabled. 6590 * @hide 6591 */ 6592 public static final String SCREENSAVER_ENABLED = "screensaver_enabled"; 6593 6594 /** 6595 * The user's chosen screensaver components. 6596 * 6597 * These will be launched by the PhoneWindowManager after a timeout when not on 6598 * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1). 6599 * @hide 6600 */ 6601 public static final String SCREENSAVER_COMPONENTS = "screensaver_components"; 6602 6603 /** 6604 * If screensavers are enabled, whether the screensaver should be automatically launched 6605 * when the device is inserted into a (desk) dock. 6606 * @hide 6607 */ 6608 public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock"; 6609 6610 /** 6611 * If screensavers are enabled, whether the screensaver should be automatically launched 6612 * when the screen times out when not on battery. 6613 * @hide 6614 */ 6615 public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep"; 6616 6617 /** 6618 * If screensavers are enabled, the default screensaver component. 6619 * @hide 6620 */ 6621 public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component"; 6622 6623 /** 6624 * The default NFC payment component 6625 * @hide 6626 */ 6627 public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component"; 6628 6629 /** 6630 * Whether NFC payment is handled by the foreground application or a default. 6631 * @hide 6632 */ 6633 public static final String NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground"; 6634 6635 /** 6636 * Specifies the package name currently configured to be the primary sms application 6637 * @hide 6638 */ 6639 public static final String SMS_DEFAULT_APPLICATION = "sms_default_application"; 6640 6641 /** 6642 * Specifies the package name currently configured to be the default dialer application 6643 * @hide 6644 */ 6645 public static final String DIALER_DEFAULT_APPLICATION = "dialer_default_application"; 6646 6647 /** 6648 * Specifies the package name currently configured to be the emergency assistance application 6649 * 6650 * @see android.telephony.TelephonyManager#ACTION_EMERGENCY_ASSISTANCE 6651 * 6652 * @hide 6653 */ 6654 public static final String EMERGENCY_ASSISTANCE_APPLICATION = "emergency_assistance_application"; 6655 6656 /** 6657 * Specifies whether the current app context on scren (assist data) will be sent to the 6658 * assist application (active voice interaction service). 6659 * 6660 * @hide 6661 */ 6662 public static final String ASSIST_STRUCTURE_ENABLED = "assist_structure_enabled"; 6663 6664 /** 6665 * Specifies whether a screenshot of the screen contents will be sent to the assist 6666 * application (active voice interaction service). 6667 * 6668 * @hide 6669 */ 6670 public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled"; 6671 6672 /** 6673 * Specifies whether the screen will show an animation if screen contents are sent to the 6674 * assist application (active voice interaction service). 6675 * 6676 * Note that the disclosure will be forced for third-party assistants or if the device 6677 * does not support disabling it. 6678 * 6679 * @hide 6680 */ 6681 public static final String ASSIST_DISCLOSURE_ENABLED = "assist_disclosure_enabled"; 6682 6683 /** 6684 * Read only list of the service components that the current user has explicitly allowed to 6685 * see and assist with all of the user's notifications. 6686 * 6687 * @deprecated Use 6688 * {@link NotificationManager#isNotificationListenerAccessGranted(ComponentName)}. 6689 * @hide 6690 */ 6691 @Deprecated 6692 public static final String ENABLED_NOTIFICATION_ASSISTANT = 6693 "enabled_notification_assistant"; 6694 6695 /** 6696 * Read only list of the service components that the current user has explicitly allowed to 6697 * see all of the user's notifications, separated by ':'. 6698 * 6699 * @hide 6700 * @deprecated Use 6701 * {@link NotificationManager#isNotificationAssistantAccessGranted(ComponentName)}. 6702 */ 6703 @Deprecated 6704 public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners"; 6705 6706 /** 6707 * Read only list of the packages that the current user has explicitly allowed to 6708 * manage do not disturb, separated by ':'. 6709 * 6710 * @deprecated Use {@link NotificationManager#isNotificationPolicyAccessGranted()}. 6711 * @hide 6712 */ 6713 @Deprecated 6714 @TestApi 6715 public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = 6716 "enabled_notification_policy_access_packages"; 6717 6718 /** 6719 * Defines whether managed profile ringtones should be synced from it's parent profile 6720 * <p> 6721 * 0 = ringtones are not synced 6722 * 1 = ringtones are synced from the profile's parent (default) 6723 * <p> 6724 * This value is only used for managed profiles. 6725 * @hide 6726 */ 6727 @TestApi 6728 @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) 6729 public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds"; 6730 6731 /** @hide */ 6732 public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations"; 6733 6734 /** 6735 * This is the query URI for finding a print service to install. 6736 * 6737 * @hide 6738 */ 6739 public static final String PRINT_SERVICE_SEARCH_URI = "print_service_search_uri"; 6740 6741 /** 6742 * This is the query URI for finding a NFC payment service to install. 6743 * 6744 * @hide 6745 */ 6746 public static final String PAYMENT_SERVICE_SEARCH_URI = "payment_service_search_uri"; 6747 6748 /** 6749 * This is the query URI for finding a auto fill service to install. 6750 * 6751 * @hide 6752 */ 6753 public static final String AUTOFILL_SERVICE_SEARCH_URI = "autofill_service_search_uri"; 6754 6755 /** 6756 * If enabled, apps should try to skip any introductory hints on first launch. This might 6757 * apply to users that are already familiar with the environment or temporary users. 6758 * <p> 6759 * Type : int (0 to show hints, 1 to skip showing hints) 6760 */ 6761 public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints"; 6762 6763 /** 6764 * Persisted playback time after a user confirmation of an unsafe volume level. 6765 * 6766 * @hide 6767 */ 6768 public static final String UNSAFE_VOLUME_MUSIC_ACTIVE_MS = "unsafe_volume_music_active_ms"; 6769 6770 /** 6771 * This preference enables notification display on the lockscreen. 6772 * @hide 6773 */ 6774 public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = 6775 "lock_screen_show_notifications"; 6776 6777 /** 6778 * This preference stores the last stack active task time for each user, which affects what 6779 * tasks will be visible in Overview. 6780 * @hide 6781 */ 6782 public static final String OVERVIEW_LAST_STACK_ACTIVE_TIME = 6783 "overview_last_stack_active_time"; 6784 6785 /** 6786 * List of TV inputs that are currently hidden. This is a string 6787 * containing the IDs of all hidden TV inputs. Each ID is encoded by 6788 * {@link android.net.Uri#encode(String)} and separated by ':'. 6789 * @hide 6790 */ 6791 public static final String TV_INPUT_HIDDEN_INPUTS = "tv_input_hidden_inputs"; 6792 6793 /** 6794 * List of custom TV input labels. This is a string containing <TV input id, custom name> 6795 * pairs. TV input id and custom name are encoded by {@link android.net.Uri#encode(String)} 6796 * and separated by ','. Each pair is separated by ':'. 6797 * @hide 6798 */ 6799 public static final String TV_INPUT_CUSTOM_LABELS = "tv_input_custom_labels"; 6800 6801 /** 6802 * Whether automatic routing of system audio to USB audio peripheral is disabled. 6803 * The value is boolean (1 or 0), where 1 means automatic routing is disabled, 6804 * and 0 means automatic routing is enabled. 6805 * 6806 * @hide 6807 */ 6808 public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED = 6809 "usb_audio_automatic_routing_disabled"; 6810 6811 /** 6812 * The timeout in milliseconds before the device fully goes to sleep after 6813 * a period of inactivity. This value sets an upper bound on how long the device 6814 * will stay awake or dreaming without user activity. It should generally 6815 * be longer than {@link Settings.System#SCREEN_OFF_TIMEOUT} as otherwise the device 6816 * will sleep before it ever has a chance to dream. 6817 * <p> 6818 * Use -1 to disable this timeout. 6819 * </p> 6820 * 6821 * @hide 6822 */ 6823 public static final String SLEEP_TIMEOUT = "sleep_timeout"; 6824 6825 /** 6826 * Controls whether double tap to wake is enabled. 6827 * @hide 6828 */ 6829 public static final String DOUBLE_TAP_TO_WAKE = "double_tap_to_wake"; 6830 6831 /** 6832 * The current assistant component. It could be a voice interaction service, 6833 * or an activity that handles ACTION_ASSIST, or empty which means using the default 6834 * handling. 6835 * 6836 * @hide 6837 */ 6838 public static final String ASSISTANT = "assistant"; 6839 6840 /** 6841 * Whether the camera launch gesture should be disabled. 6842 * 6843 * @hide 6844 */ 6845 public static final String CAMERA_GESTURE_DISABLED = "camera_gesture_disabled"; 6846 6847 /** 6848 * Whether the camera launch gesture to double tap the power button when the screen is off 6849 * should be disabled. 6850 * 6851 * @hide 6852 */ 6853 public static final String CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED = 6854 "camera_double_tap_power_gesture_disabled"; 6855 6856 /** 6857 * Whether the camera double twist gesture to flip between front and back mode should be 6858 * enabled. 6859 * 6860 * @hide 6861 */ 6862 public static final String CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED = 6863 "camera_double_twist_to_flip_enabled"; 6864 6865 /** 6866 * Whether or not the smart camera lift trigger that launches the camera when the user moves 6867 * the phone into a position for taking photos should be enabled. 6868 * 6869 * @hide 6870 */ 6871 public static final String CAMERA_LIFT_TRIGGER_ENABLED = "camera_lift_trigger_enabled"; 6872 6873 /** 6874 * The default enable state of the camera lift trigger. 6875 * 6876 * @hide 6877 */ 6878 public static final int CAMERA_LIFT_TRIGGER_ENABLED_DEFAULT = 1; 6879 6880 /** 6881 * Whether the assist gesture should be enabled. 6882 * 6883 * @hide 6884 */ 6885 public static final String ASSIST_GESTURE_ENABLED = "assist_gesture_enabled"; 6886 6887 /** 6888 * Sensitivity control for the assist gesture. 6889 * 6890 * @hide 6891 */ 6892 public static final String ASSIST_GESTURE_SENSITIVITY = "assist_gesture_sensitivity"; 6893 6894 /** 6895 * Whether the assist gesture should silence alerts. 6896 * 6897 * @hide 6898 */ 6899 public static final String ASSIST_GESTURE_SILENCE_ALERTS_ENABLED = 6900 "assist_gesture_silence_alerts_enabled"; 6901 6902 /** 6903 * Whether the assist gesture should wake the phone. 6904 * 6905 * @hide 6906 */ 6907 public static final String ASSIST_GESTURE_WAKE_ENABLED = 6908 "assist_gesture_wake_enabled"; 6909 6910 /** 6911 * Whether Assist Gesture Deferred Setup has been completed 6912 * 6913 * @hide 6914 */ 6915 public static final String ASSIST_GESTURE_SETUP_COMPLETE = "assist_gesture_setup_complete"; 6916 6917 /** 6918 * Control whether Night display is currently activated. 6919 * @hide 6920 */ 6921 public static final String NIGHT_DISPLAY_ACTIVATED = "night_display_activated"; 6922 6923 /** 6924 * Control whether Night display will automatically activate/deactivate. 6925 * @hide 6926 */ 6927 public static final String NIGHT_DISPLAY_AUTO_MODE = "night_display_auto_mode"; 6928 6929 /** 6930 * Control the color temperature of Night Display, represented in Kelvin. 6931 * @hide 6932 */ 6933 public static final String NIGHT_DISPLAY_COLOR_TEMPERATURE = 6934 "night_display_color_temperature"; 6935 6936 /** 6937 * Custom time when Night display is scheduled to activate. 6938 * Represented as milliseconds from midnight (e.g. 79200000 == 10pm). 6939 * @hide 6940 */ 6941 public static final String NIGHT_DISPLAY_CUSTOM_START_TIME = 6942 "night_display_custom_start_time"; 6943 6944 /** 6945 * Custom time when Night display is scheduled to deactivate. 6946 * Represented as milliseconds from midnight (e.g. 21600000 == 6am). 6947 * @hide 6948 */ 6949 public static final String NIGHT_DISPLAY_CUSTOM_END_TIME = "night_display_custom_end_time"; 6950 6951 /** 6952 * A String representing the LocalDateTime when Night display was last activated. Use to 6953 * decide whether to apply the current activated state after a reboot or user change. In 6954 * legacy cases, this is represented by the time in milliseconds (since epoch). 6955 * @hide 6956 */ 6957 public static final String NIGHT_DISPLAY_LAST_ACTIVATED_TIME = 6958 "night_display_last_activated_time"; 6959 6960 /** 6961 * Names of the service components that the current user has explicitly allowed to 6962 * be a VR mode listener, separated by ':'. 6963 * 6964 * @hide 6965 */ 6966 public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners"; 6967 6968 /** 6969 * Behavior of the display while in VR mode. 6970 * 6971 * One of {@link #VR_DISPLAY_MODE_LOW_PERSISTENCE} or {@link #VR_DISPLAY_MODE_OFF}. 6972 * 6973 * @hide 6974 */ 6975 public static final String VR_DISPLAY_MODE = "vr_display_mode"; 6976 6977 /** 6978 * Lower the display persistence while the system is in VR mode. 6979 * 6980 * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE 6981 * 6982 * @hide. 6983 */ 6984 public static final int VR_DISPLAY_MODE_LOW_PERSISTENCE = 0; 6985 6986 /** 6987 * Do not alter the display persistence while the system is in VR mode. 6988 * 6989 * @see PackageManager#FEATURE_VR_MODE_HIGH_PERFORMANCE 6990 * 6991 * @hide. 6992 */ 6993 public static final int VR_DISPLAY_MODE_OFF = 1; 6994 6995 /** 6996 * Whether CarrierAppUtils#disableCarrierAppsUntilPrivileged has been executed at least 6997 * once. 6998 * 6999 * <p>This is used to ensure that we only take one pass which will disable apps that are not 7000 * privileged (if any). From then on, we only want to enable apps (when a matching SIM is 7001 * inserted), to avoid disabling an app that the user might actively be using. 7002 * 7003 * <p>Will be set to 1 once executed. 7004 * 7005 * @hide 7006 */ 7007 public static final String CARRIER_APPS_HANDLED = "carrier_apps_handled"; 7008 7009 /** 7010 * Whether parent user can access remote contact in managed profile. 7011 * 7012 * @hide 7013 */ 7014 public static final String MANAGED_PROFILE_CONTACT_REMOTE_SEARCH = 7015 "managed_profile_contact_remote_search"; 7016 7017 /** 7018 * Whether or not the automatic storage manager is enabled and should run on the device. 7019 * 7020 * @hide 7021 */ 7022 public static final String AUTOMATIC_STORAGE_MANAGER_ENABLED = 7023 "automatic_storage_manager_enabled"; 7024 7025 /** 7026 * How many days of information for the automatic storage manager to retain on the device. 7027 * 7028 * @hide 7029 */ 7030 public static final String AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN = 7031 "automatic_storage_manager_days_to_retain"; 7032 7033 /** 7034 * Default number of days of information for the automatic storage manager to retain. 7035 * 7036 * @hide 7037 */ 7038 public static final int AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_DEFAULT = 90; 7039 7040 /** 7041 * How many bytes the automatic storage manager has cleared out. 7042 * 7043 * @hide 7044 */ 7045 public static final String AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED = 7046 "automatic_storage_manager_bytes_cleared"; 7047 7048 7049 /** 7050 * Last run time for the automatic storage manager. 7051 * 7052 * @hide 7053 */ 7054 public static final String AUTOMATIC_STORAGE_MANAGER_LAST_RUN = 7055 "automatic_storage_manager_last_run"; 7056 7057 /** 7058 * If the automatic storage manager has been disabled by policy. Note that this doesn't 7059 * mean that the automatic storage manager is prevented from being re-enabled -- this only 7060 * means that it was turned off by policy at least once. 7061 * 7062 * @hide 7063 */ 7064 public static final String AUTOMATIC_STORAGE_MANAGER_TURNED_OFF_BY_POLICY = 7065 "automatic_storage_manager_turned_off_by_policy"; 7066 7067 /** 7068 * Whether SystemUI navigation keys is enabled. 7069 * @hide 7070 */ 7071 public static final String SYSTEM_NAVIGATION_KEYS_ENABLED = 7072 "system_navigation_keys_enabled"; 7073 7074 /** 7075 * Holds comma separated list of ordering of QS tiles. 7076 * @hide 7077 */ 7078 public static final String QS_TILES = "sysui_qs_tiles"; 7079 7080 /** 7081 * Whether preloaded APKs have been installed for the user. 7082 * @hide 7083 */ 7084 public static final String DEMO_USER_SETUP_COMPLETE 7085 = "demo_user_setup_complete"; 7086 7087 /** 7088 * Specifies whether the web action API is enabled. 7089 * 7090 * @hide 7091 */ 7092 @SystemApi 7093 public static final String INSTANT_APPS_ENABLED = "instant_apps_enabled"; 7094 7095 /** 7096 * Has this pairable device been paired or upgraded from a previously paired system. 7097 * @hide 7098 */ 7099 public static final String DEVICE_PAIRED = "device_paired"; 7100 7101 /** 7102 * Integer state indicating whether package verifier is enabled. 7103 * TODO(b/34259924): Remove this setting. 7104 * 7105 * @hide 7106 */ 7107 public static final String PACKAGE_VERIFIER_STATE = "package_verifier_state"; 7108 7109 /** 7110 * Specifies additional package name for broadcasting the CMAS messages. 7111 * @hide 7112 */ 7113 public static final String CMAS_ADDITIONAL_BROADCAST_PKG = "cmas_additional_broadcast_pkg"; 7114 7115 /** 7116 * Whether the launcher should show any notification badges. 7117 * The value is boolean (1 or 0). 7118 * @hide 7119 */ 7120 public static final String NOTIFICATION_BADGING = "notification_badging"; 7121 7122 /** 7123 * Comma separated list of QS tiles that have been auto-added already. 7124 * @hide 7125 */ 7126 public static final String QS_AUTO_ADDED_TILES = "qs_auto_tiles"; 7127 7128 /** 7129 * This are the settings to be backed up. 7130 * 7131 * NOTE: Settings are backed up and restored in the order they appear 7132 * in this array. If you have one setting depending on another, 7133 * make sure that they are ordered appropriately. 7134 * 7135 * @hide 7136 */ 7137 public static final String[] SETTINGS_TO_BACKUP = { 7138 BUGREPORT_IN_POWER_MENU, // moved to global 7139 ALLOW_MOCK_LOCATION, 7140 PARENTAL_CONTROL_ENABLED, 7141 PARENTAL_CONTROL_REDIRECT_URL, 7142 USB_MASS_STORAGE_ENABLED, // moved to global 7143 ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 7144 ACCESSIBILITY_DISPLAY_DALTONIZER, 7145 ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 7146 ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 7147 ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 7148 AUTOFILL_SERVICE, 7149 ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 7150 ENABLED_ACCESSIBILITY_SERVICES, 7151 ENABLED_VR_LISTENERS, 7152 ENABLED_INPUT_METHODS, 7153 TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, 7154 TOUCH_EXPLORATION_ENABLED, 7155 ACCESSIBILITY_ENABLED, 7156 ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, 7157 ACCESSIBILITY_BUTTON_TARGET_COMPONENT, 7158 ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 7159 ACCESSIBILITY_SHORTCUT_ENABLED, 7160 ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, 7161 ACCESSIBILITY_SPEAK_PASSWORD, 7162 ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 7163 ACCESSIBILITY_CAPTIONING_PRESET, 7164 ACCESSIBILITY_CAPTIONING_ENABLED, 7165 ACCESSIBILITY_CAPTIONING_LOCALE, 7166 ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, 7167 ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, 7168 ACCESSIBILITY_CAPTIONING_EDGE_TYPE, 7169 ACCESSIBILITY_CAPTIONING_EDGE_COLOR, 7170 ACCESSIBILITY_CAPTIONING_TYPEFACE, 7171 ACCESSIBILITY_CAPTIONING_FONT_SCALE, 7172 ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, 7173 TTS_USE_DEFAULTS, 7174 TTS_DEFAULT_RATE, 7175 TTS_DEFAULT_PITCH, 7176 TTS_DEFAULT_SYNTH, 7177 TTS_DEFAULT_LANG, 7178 TTS_DEFAULT_COUNTRY, 7179 TTS_ENABLED_PLUGINS, 7180 TTS_DEFAULT_LOCALE, 7181 SHOW_IME_WITH_HARD_KEYBOARD, 7182 WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, // moved to global 7183 WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, // moved to global 7184 WIFI_NUM_OPEN_NETWORKS_KEPT, // moved to global 7185 SELECTED_SPELL_CHECKER, 7186 SELECTED_SPELL_CHECKER_SUBTYPE, 7187 SPELL_CHECKER_ENABLED, 7188 MOUNT_PLAY_NOTIFICATION_SND, 7189 MOUNT_UMS_AUTOSTART, 7190 MOUNT_UMS_PROMPT, 7191 MOUNT_UMS_NOTIFY_ENABLED, 7192 SLEEP_TIMEOUT, 7193 DOUBLE_TAP_TO_WAKE, 7194 WAKE_GESTURE_ENABLED, 7195 LONG_PRESS_TIMEOUT, 7196 CAMERA_GESTURE_DISABLED, 7197 ACCESSIBILITY_AUTOCLICK_ENABLED, 7198 ACCESSIBILITY_AUTOCLICK_DELAY, 7199 ACCESSIBILITY_LARGE_POINTER_ICON, 7200 PREFERRED_TTY_MODE, 7201 ENHANCED_VOICE_PRIVACY_ENABLED, 7202 TTY_MODE_ENABLED, 7203 INCALL_POWER_BUTTON_BEHAVIOR, 7204 NIGHT_DISPLAY_CUSTOM_START_TIME, 7205 NIGHT_DISPLAY_CUSTOM_END_TIME, 7206 NIGHT_DISPLAY_COLOR_TEMPERATURE, 7207 NIGHT_DISPLAY_AUTO_MODE, 7208 SYNC_PARENT_SOUNDS, 7209 CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 7210 CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 7211 SYSTEM_NAVIGATION_KEYS_ENABLED, 7212 QS_TILES, 7213 DOZE_ENABLED, 7214 DOZE_PULSE_ON_PICK_UP, 7215 DOZE_PULSE_ON_DOUBLE_TAP, 7216 NFC_PAYMENT_DEFAULT_COMPONENT, 7217 AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, 7218 ASSIST_GESTURE_ENABLED, 7219 ASSIST_GESTURE_SENSITIVITY, 7220 ASSIST_GESTURE_SETUP_COMPLETE, 7221 ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 7222 ASSIST_GESTURE_WAKE_ENABLED, 7223 VR_DISPLAY_MODE, 7224 NOTIFICATION_BADGING, 7225 QS_AUTO_ADDED_TILES, 7226 SCREENSAVER_ENABLED, 7227 SCREENSAVER_COMPONENTS, 7228 SCREENSAVER_ACTIVATE_ON_DOCK, 7229 SCREENSAVER_ACTIVATE_ON_SLEEP, 7230 }; 7231 7232 /** @hide */ 7233 public static final String[] LEGACY_RESTORE_SETTINGS = { 7234 ENABLED_NOTIFICATION_LISTENERS, 7235 ENABLED_NOTIFICATION_ASSISTANT, 7236 ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES 7237 }; 7238 7239 /** 7240 * These entries are considered common between the personal and the managed profile, 7241 * since the managed profile doesn't get to change them. 7242 */ 7243 private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>(); 7244 7245 static { 7246 CLONE_TO_MANAGED_PROFILE.add(ACCESSIBILITY_ENABLED); 7247 CLONE_TO_MANAGED_PROFILE.add(ALLOW_MOCK_LOCATION); 7248 CLONE_TO_MANAGED_PROFILE.add(ALLOWED_GEOLOCATION_ORIGINS); 7249 CLONE_TO_MANAGED_PROFILE.add(AUTOFILL_SERVICE); 7250 CLONE_TO_MANAGED_PROFILE.add(DEFAULT_INPUT_METHOD); 7251 CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES); 7252 CLONE_TO_MANAGED_PROFILE.add(ENABLED_INPUT_METHODS); 7253 CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE); 7254 CLONE_TO_MANAGED_PROFILE.add(LOCATION_PREVIOUS_MODE); 7255 CLONE_TO_MANAGED_PROFILE.add(LOCATION_PROVIDERS_ALLOWED); 7256 CLONE_TO_MANAGED_PROFILE.add(SELECTED_INPUT_METHOD_SUBTYPE); 7257 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER); 7258 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER_SUBTYPE); 7259 } 7260 7261 /** @hide */ getCloneToManagedProfileSettings(Set<String> outKeySet)7262 public static void getCloneToManagedProfileSettings(Set<String> outKeySet) { 7263 outKeySet.addAll(CLONE_TO_MANAGED_PROFILE); 7264 } 7265 7266 /** 7267 * Secure settings which can be accessed by instant apps. 7268 * @hide 7269 */ 7270 public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>(); 7271 static { 7272 INSTANT_APP_SETTINGS.add(ENABLED_ACCESSIBILITY_SERVICES); 7273 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_SPEAK_PASSWORD); 7274 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_INVERSION_ENABLED); 7275 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_ENABLED); 7276 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_PRESET); 7277 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_EDGE_TYPE); 7278 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_EDGE_COLOR); 7279 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_LOCALE); 7280 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR); 7281 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR); 7282 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_TYPEFACE); 7283 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_FONT_SCALE); 7284 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_CAPTIONING_WINDOW_COLOR); 7285 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED); 7286 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_DALTONIZER); 7287 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_AUTOCLICK_DELAY); 7288 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_AUTOCLICK_ENABLED); 7289 INSTANT_APP_SETTINGS.add(ACCESSIBILITY_LARGE_POINTER_ICON); 7290 7291 INSTANT_APP_SETTINGS.add(DEFAULT_INPUT_METHOD); 7292 INSTANT_APP_SETTINGS.add(ENABLED_INPUT_METHODS); 7293 7294 INSTANT_APP_SETTINGS.add(ANDROID_ID); 7295 7296 INSTANT_APP_SETTINGS.add(PACKAGE_VERIFIER_USER_CONSENT); 7297 INSTANT_APP_SETTINGS.add(ALLOW_MOCK_LOCATION); 7298 } 7299 7300 /** 7301 * Helper method for determining if a location provider is enabled. 7302 * 7303 * @param cr the content resolver to use 7304 * @param provider the location provider to query 7305 * @return true if the provider is enabled 7306 * 7307 * @deprecated use {@link #LOCATION_MODE} or 7308 * {@link LocationManager#isProviderEnabled(String)} 7309 */ 7310 @Deprecated isLocationProviderEnabled(ContentResolver cr, String provider)7311 public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) { 7312 return isLocationProviderEnabledForUser(cr, provider, UserHandle.myUserId()); 7313 } 7314 7315 /** 7316 * Helper method for determining if a location provider is enabled. 7317 * @param cr the content resolver to use 7318 * @param provider the location provider to query 7319 * @param userId the userId to query 7320 * @return true if the provider is enabled 7321 * @deprecated use {@link #LOCATION_MODE} or 7322 * {@link LocationManager#isProviderEnabled(String)} 7323 * @hide 7324 */ 7325 @Deprecated isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId)7326 public static final boolean isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId) { 7327 String allowedProviders = Settings.Secure.getStringForUser(cr, 7328 LOCATION_PROVIDERS_ALLOWED, userId); 7329 return TextUtils.delimitedStringContains(allowedProviders, ',', provider); 7330 } 7331 7332 /** 7333 * Thread-safe method for enabling or disabling a single location provider. 7334 * @param cr the content resolver to use 7335 * @param provider the location provider to enable or disable 7336 * @param enabled true if the provider should be enabled 7337 * @deprecated use {@link #putInt(ContentResolver, String, int)} and {@link #LOCATION_MODE} 7338 */ 7339 @Deprecated setLocationProviderEnabled(ContentResolver cr, String provider, boolean enabled)7340 public static final void setLocationProviderEnabled(ContentResolver cr, 7341 String provider, boolean enabled) { 7342 setLocationProviderEnabledForUser(cr, provider, enabled, UserHandle.myUserId()); 7343 } 7344 7345 /** 7346 * Thread-safe method for enabling or disabling a single location provider. 7347 * 7348 * @param cr the content resolver to use 7349 * @param provider the location provider to enable or disable 7350 * @param enabled true if the provider should be enabled 7351 * @param userId the userId for which to enable/disable providers 7352 * @return true if the value was set, false on database errors 7353 * @deprecated use {@link #putIntForUser(ContentResolver, String, int, int)} and 7354 * {@link #LOCATION_MODE} 7355 * @hide 7356 */ 7357 @Deprecated setLocationProviderEnabledForUser(ContentResolver cr, String provider, boolean enabled, int userId)7358 public static final boolean setLocationProviderEnabledForUser(ContentResolver cr, 7359 String provider, boolean enabled, int userId) { 7360 synchronized (mLocationSettingsLock) { 7361 // to ensure thread safety, we write the provider name with a '+' or '-' 7362 // and let the SettingsProvider handle it rather than reading and modifying 7363 // the list of enabled providers. 7364 if (enabled) { 7365 provider = "+" + provider; 7366 } else { 7367 provider = "-" + provider; 7368 } 7369 return putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider, 7370 userId); 7371 } 7372 } 7373 7374 /** 7375 * Saves the current location mode into {@link #LOCATION_PREVIOUS_MODE}. 7376 */ saveLocationModeForUser(ContentResolver cr, int userId)7377 private static final boolean saveLocationModeForUser(ContentResolver cr, int userId) { 7378 final int mode = getLocationModeForUser(cr, userId); 7379 return putIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE, mode, userId); 7380 } 7381 7382 /** 7383 * Restores the current location mode from {@link #LOCATION_PREVIOUS_MODE}. 7384 */ restoreLocationModeForUser(ContentResolver cr, int userId)7385 private static final boolean restoreLocationModeForUser(ContentResolver cr, int userId) { 7386 int mode = getIntForUser(cr, Settings.Secure.LOCATION_PREVIOUS_MODE, 7387 LOCATION_MODE_HIGH_ACCURACY, userId); 7388 // Make sure that the previous mode is never "off". Otherwise the user won't be able to 7389 // turn on location any longer. 7390 if (mode == LOCATION_MODE_OFF) { 7391 mode = LOCATION_MODE_HIGH_ACCURACY; 7392 } 7393 return setLocationModeForUser(cr, mode, userId); 7394 } 7395 7396 /** 7397 * Thread-safe method for setting the location mode to one of 7398 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, 7399 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. 7400 * Necessary because the mode is a composite of the underlying location provider 7401 * settings. 7402 * 7403 * @param cr the content resolver to use 7404 * @param mode such as {@link #LOCATION_MODE_HIGH_ACCURACY} 7405 * @param userId the userId for which to change mode 7406 * @return true if the value was set, false on database errors 7407 * 7408 * @throws IllegalArgumentException if mode is not one of the supported values 7409 */ setLocationModeForUser(ContentResolver cr, int mode, int userId)7410 private static final boolean setLocationModeForUser(ContentResolver cr, int mode, 7411 int userId) { 7412 synchronized (mLocationSettingsLock) { 7413 boolean gps = false; 7414 boolean network = false; 7415 switch (mode) { 7416 case LOCATION_MODE_PREVIOUS: 7417 // Retrieve the actual mode and set to that mode. 7418 return restoreLocationModeForUser(cr, userId); 7419 case LOCATION_MODE_OFF: 7420 saveLocationModeForUser(cr, userId); 7421 break; 7422 case LOCATION_MODE_SENSORS_ONLY: 7423 gps = true; 7424 break; 7425 case LOCATION_MODE_BATTERY_SAVING: 7426 network = true; 7427 break; 7428 case LOCATION_MODE_HIGH_ACCURACY: 7429 gps = true; 7430 network = true; 7431 break; 7432 default: 7433 throw new IllegalArgumentException("Invalid location mode: " + mode); 7434 } 7435 // Note it's important that we set the NLP mode first. The Google implementation 7436 // of NLP clears its NLP consent setting any time it receives a 7437 // LocationManager.PROVIDERS_CHANGED_ACTION broadcast and NLP is disabled. Also, 7438 // it shows an NLP consent dialog any time it receives the broadcast, NLP is 7439 // enabled, and the NLP consent is not set. If 1) we were to enable GPS first, 7440 // 2) a setup wizard has its own NLP consent UI that sets the NLP consent setting, 7441 // and 3) the receiver happened to complete before we enabled NLP, then the Google 7442 // NLP would detect the attempt to enable NLP and show a redundant NLP consent 7443 // dialog. Then the people who wrote the setup wizard would be sad. 7444 boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser( 7445 cr, LocationManager.NETWORK_PROVIDER, network, userId); 7446 boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser( 7447 cr, LocationManager.GPS_PROVIDER, gps, userId); 7448 return gpsSuccess && nlpSuccess; 7449 } 7450 } 7451 7452 /** 7453 * Thread-safe method for reading the location mode, returns one of 7454 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, 7455 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. Necessary 7456 * because the mode is a composite of the underlying location provider settings. 7457 * 7458 * @param cr the content resolver to use 7459 * @param userId the userId for which to read the mode 7460 * @return the location mode 7461 */ getLocationModeForUser(ContentResolver cr, int userId)7462 private static final int getLocationModeForUser(ContentResolver cr, int userId) { 7463 synchronized (mLocationSettingsLock) { 7464 boolean gpsEnabled = Settings.Secure.isLocationProviderEnabledForUser( 7465 cr, LocationManager.GPS_PROVIDER, userId); 7466 boolean networkEnabled = Settings.Secure.isLocationProviderEnabledForUser( 7467 cr, LocationManager.NETWORK_PROVIDER, userId); 7468 if (gpsEnabled && networkEnabled) { 7469 return LOCATION_MODE_HIGH_ACCURACY; 7470 } else if (gpsEnabled) { 7471 return LOCATION_MODE_SENSORS_ONLY; 7472 } else if (networkEnabled) { 7473 return LOCATION_MODE_BATTERY_SAVING; 7474 } else { 7475 return LOCATION_MODE_OFF; 7476 } 7477 } 7478 } 7479 } 7480 7481 /** 7482 * Global system settings, containing preferences that always apply identically 7483 * to all defined users. Applications can read these but are not allowed to write; 7484 * like the "Secure" settings, these are for preferences that the user must 7485 * explicitly modify through the system UI or specialized APIs for those values. 7486 */ 7487 public static final class Global extends NameValueTable { 7488 /** 7489 * The content:// style URL for global secure settings items. Not public. 7490 */ 7491 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global"); 7492 7493 /** 7494 * Whether users are allowed to add more users or guest from lockscreen. 7495 * <p> 7496 * Type: int 7497 * @hide 7498 */ 7499 public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked"; 7500 7501 /** 7502 * Setting whether the global gesture for enabling accessibility is enabled. 7503 * If this gesture is enabled the user will be able to perfrom it to enable 7504 * the accessibility state without visiting the settings app. 7505 * 7506 * @hide 7507 * No longer used. Should be removed once all dependencies have been updated. 7508 */ 7509 public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED = 7510 "enable_accessibility_global_gesture_enabled"; 7511 7512 /** 7513 * Whether Airplane Mode is on. 7514 */ 7515 public static final String AIRPLANE_MODE_ON = "airplane_mode_on"; 7516 7517 /** 7518 * Whether Theater Mode is on. 7519 * {@hide} 7520 */ 7521 @SystemApi 7522 public static final String THEATER_MODE_ON = "theater_mode_on"; 7523 7524 /** 7525 * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio. 7526 */ 7527 public static final String RADIO_BLUETOOTH = "bluetooth"; 7528 7529 /** 7530 * Constant for use in AIRPLANE_MODE_RADIOS to specify Wi-Fi radio. 7531 */ 7532 public static final String RADIO_WIFI = "wifi"; 7533 7534 /** 7535 * {@hide} 7536 */ 7537 public static final String RADIO_WIMAX = "wimax"; 7538 /** 7539 * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio. 7540 */ 7541 public static final String RADIO_CELL = "cell"; 7542 7543 /** 7544 * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio. 7545 */ 7546 public static final String RADIO_NFC = "nfc"; 7547 7548 /** 7549 * A comma separated list of radios that need to be disabled when airplane mode 7550 * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are 7551 * included in the comma separated list. 7552 */ 7553 public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; 7554 7555 /** 7556 * A comma separated list of radios that should to be disabled when airplane mode 7557 * is on, but can be manually reenabled by the user. For example, if RADIO_WIFI is 7558 * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi 7559 * will be turned off when entering airplane mode, but the user will be able to reenable 7560 * Wifi in the Settings app. 7561 * 7562 * {@hide} 7563 */ 7564 public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios"; 7565 7566 /** 7567 * A Long representing a bitmap of profiles that should be disabled when bluetooth starts. 7568 * See {@link android.bluetooth.BluetoothProfile}. 7569 * {@hide} 7570 */ 7571 public static final String BLUETOOTH_DISABLED_PROFILES = "bluetooth_disabled_profiles"; 7572 7573 /** 7574 * A semi-colon separated list of Bluetooth interoperability workarounds. 7575 * Each entry is a partial Bluetooth device address string and an integer representing 7576 * the feature to be disabled, separated by a comma. The integer must correspond 7577 * to a interoperability feature as defined in "interop.h" in /system/bt. 7578 * <p> 7579 * Example: <br/> 7580 * "00:11:22,0;01:02:03:04,2" 7581 * @hide 7582 */ 7583 public static final String BLUETOOTH_INTEROPERABILITY_LIST = "bluetooth_interoperability_list"; 7584 7585 /** 7586 * The policy for deciding when Wi-Fi should go to sleep (which will in 7587 * turn switch to using the mobile data as an Internet connection). 7588 * <p> 7589 * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT}, 7590 * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or 7591 * {@link #WIFI_SLEEP_POLICY_NEVER}. 7592 */ 7593 public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; 7594 7595 /** 7596 * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep 7597 * policy, which is to sleep shortly after the turning off 7598 * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting. 7599 */ 7600 public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; 7601 7602 /** 7603 * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when 7604 * the device is on battery, and never go to sleep when the device is 7605 * plugged in. 7606 */ 7607 public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; 7608 7609 /** 7610 * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep. 7611 */ 7612 public static final int WIFI_SLEEP_POLICY_NEVER = 2; 7613 7614 /** 7615 * Value to specify if the user prefers the date, time and time zone 7616 * to be automatically fetched from the network (NITZ). 1=yes, 0=no 7617 */ 7618 public static final String AUTO_TIME = "auto_time"; 7619 7620 /** 7621 * Value to specify if the user prefers the time zone 7622 * to be automatically fetched from the network (NITZ). 1=yes, 0=no 7623 */ 7624 public static final String AUTO_TIME_ZONE = "auto_time_zone"; 7625 7626 /** 7627 * URI for the car dock "in" event sound. 7628 * @hide 7629 */ 7630 public static final String CAR_DOCK_SOUND = "car_dock_sound"; 7631 7632 /** 7633 * URI for the car dock "out" event sound. 7634 * @hide 7635 */ 7636 public static final String CAR_UNDOCK_SOUND = "car_undock_sound"; 7637 7638 /** 7639 * URI for the desk dock "in" event sound. 7640 * @hide 7641 */ 7642 public static final String DESK_DOCK_SOUND = "desk_dock_sound"; 7643 7644 /** 7645 * URI for the desk dock "out" event sound. 7646 * @hide 7647 */ 7648 public static final String DESK_UNDOCK_SOUND = "desk_undock_sound"; 7649 7650 /** 7651 * Whether to play a sound for dock events. 7652 * @hide 7653 */ 7654 public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled"; 7655 7656 /** 7657 * Whether to play a sound for dock events, only when an accessibility service is on. 7658 * @hide 7659 */ 7660 public static final String DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY = "dock_sounds_enabled_when_accessbility"; 7661 7662 /** 7663 * URI for the "device locked" (keyguard shown) sound. 7664 * @hide 7665 */ 7666 public static final String LOCK_SOUND = "lock_sound"; 7667 7668 /** 7669 * URI for the "device unlocked" sound. 7670 * @hide 7671 */ 7672 public static final String UNLOCK_SOUND = "unlock_sound"; 7673 7674 /** 7675 * URI for the "device is trusted" sound, which is played when the device enters the trusted 7676 * state without unlocking. 7677 * @hide 7678 */ 7679 public static final String TRUSTED_SOUND = "trusted_sound"; 7680 7681 /** 7682 * URI for the low battery sound file. 7683 * @hide 7684 */ 7685 public static final String LOW_BATTERY_SOUND = "low_battery_sound"; 7686 7687 /** 7688 * Whether to play a sound for low-battery alerts. 7689 * @hide 7690 */ 7691 public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled"; 7692 7693 /** 7694 * URI for the "wireless charging started" sound. 7695 * @hide 7696 */ 7697 public static final String WIRELESS_CHARGING_STARTED_SOUND = 7698 "wireless_charging_started_sound"; 7699 7700 /** 7701 * Whether to play a sound for charging events. 7702 * @hide 7703 */ 7704 public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled"; 7705 7706 /** 7707 * Whether we keep the device on while the device is plugged in. 7708 * Supported values are: 7709 * <ul> 7710 * <li>{@code 0} to never stay on while plugged in</li> 7711 * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li> 7712 * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li> 7713 * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li> 7714 * </ul> 7715 * These values can be OR-ed together. 7716 */ 7717 public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; 7718 7719 /** 7720 * When the user has enable the option to have a "bug report" command 7721 * in the power menu. 7722 * @hide 7723 */ 7724 public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu"; 7725 7726 /** 7727 * Whether ADB is enabled. 7728 */ 7729 public static final String ADB_ENABLED = "adb_enabled"; 7730 7731 /** 7732 * Whether Views are allowed to save their attribute data. 7733 * @hide 7734 */ 7735 public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes"; 7736 7737 /** 7738 * Whether assisted GPS should be enabled or not. 7739 * @hide 7740 */ 7741 public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled"; 7742 7743 /** 7744 * Whether bluetooth is enabled/disabled 7745 * 0=disabled. 1=enabled. 7746 */ 7747 public static final String BLUETOOTH_ON = "bluetooth_on"; 7748 7749 /** 7750 * CDMA Cell Broadcast SMS 7751 * 0 = CDMA Cell Broadcast SMS disabled 7752 * 1 = CDMA Cell Broadcast SMS enabled 7753 * @hide 7754 */ 7755 public static final String CDMA_CELL_BROADCAST_SMS = 7756 "cdma_cell_broadcast_sms"; 7757 7758 /** 7759 * The CDMA roaming mode 0 = Home Networks, CDMA default 7760 * 1 = Roaming on Affiliated networks 7761 * 2 = Roaming on any networks 7762 * @hide 7763 */ 7764 public static final String CDMA_ROAMING_MODE = "roaming_settings"; 7765 7766 /** 7767 * The CDMA subscription mode 0 = RUIM/SIM (default) 7768 * 1 = NV 7769 * @hide 7770 */ 7771 public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode"; 7772 7773 /** 7774 * The default value for whether background data is enabled or not. 7775 * 7776 * Used by {@code NetworkPolicyManagerService}. 7777 * 7778 * @hide 7779 */ 7780 public static final String DEFAULT_RESTRICT_BACKGROUND_DATA = 7781 "default_restrict_background_data"; 7782 7783 /** Inactivity timeout to track mobile data activity. 7784 * 7785 * If set to a positive integer, it indicates the inactivity timeout value in seconds to 7786 * infer the data activity of mobile network. After a period of no activity on mobile 7787 * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE} 7788 * intent is fired to indicate a transition of network status from "active" to "idle". Any 7789 * subsequent activity on mobile networks triggers the firing of {@code 7790 * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active". 7791 * 7792 * Network activity refers to transmitting or receiving data on the network interfaces. 7793 * 7794 * Tracking is disabled if set to zero or negative value. 7795 * 7796 * @hide 7797 */ 7798 public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile"; 7799 7800 /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE} 7801 * but for Wifi network. 7802 * @hide 7803 */ 7804 public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi"; 7805 7806 /** 7807 * Whether or not data roaming is enabled. (0 = false, 1 = true) 7808 */ 7809 public static final String DATA_ROAMING = "data_roaming"; 7810 7811 /** 7812 * The value passed to a Mobile DataConnection via bringUp which defines the 7813 * number of retries to preform when setting up the initial connection. The default 7814 * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1. 7815 * @hide 7816 */ 7817 public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry"; 7818 7819 /** 7820 * Whether any package can be on external storage. When this is true, any 7821 * package, regardless of manifest values, is a candidate for installing 7822 * or moving onto external storage. (0 = false, 1 = true) 7823 * @hide 7824 */ 7825 public static final String FORCE_ALLOW_ON_EXTERNAL = "force_allow_on_external"; 7826 7827 /** 7828 * The default SM-DP+ configured for this device. 7829 * 7830 * <p>An SM-DP+ is used by an LPA (see {@link android.service.euicc.EuiccService}) to 7831 * download profiles. If this value is set, the LPA will query this server for any profiles 7832 * available to this device. If any are available, they may be downloaded during device 7833 * provisioning or in settings without needing the user to enter an activation code. 7834 * 7835 * @see android.service.euicc.EuiccService 7836 * @hide 7837 * 7838 * TODO(b/35851809): Make this a SystemApi. 7839 */ 7840 public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus"; 7841 7842 /** 7843 * Whether any profile has ever been downloaded onto a eUICC on the device. 7844 * 7845 * <p>Used to hide eUICC UI from users who have never made use of it and would only be 7846 * confused by seeing references to it in settings. 7847 * (0 = false, 1 = true) 7848 * @hide 7849 */ 7850 public static final String EUICC_PROVISIONED = "euicc_provisioned"; 7851 7852 /** 7853 * Whether any activity can be resized. When this is true, any 7854 * activity, regardless of manifest values, can be resized for multi-window. 7855 * (0 = false, 1 = true) 7856 * @hide 7857 */ 7858 public static final String DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES 7859 = "force_resizable_activities"; 7860 7861 /** 7862 * Whether to enable experimental freeform support for windows. 7863 * @hide 7864 */ 7865 public static final String DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT 7866 = "enable_freeform_support"; 7867 7868 /** 7869 * Whether user has enabled development settings. 7870 */ 7871 public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; 7872 7873 /** 7874 * Whether the device has been provisioned (0 = false, 1 = true). 7875 * <p>On a multiuser device with a separate system user, the screen may be locked 7876 * as soon as this is set to true and further activities cannot be launched on the 7877 * system user unless they are marked to show over keyguard. 7878 */ 7879 public static final String DEVICE_PROVISIONED = "device_provisioned"; 7880 7881 /** 7882 * Whether mobile data should be allowed while the device is being provisioned. 7883 * This allows the provisioning process to turn off mobile data before the user 7884 * has an opportunity to set things up, preventing other processes from burning 7885 * precious bytes before wifi is setup. 7886 * (0 = false, 1 = true) 7887 * @hide 7888 */ 7889 public static final String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED = 7890 "device_provisioning_mobile_data"; 7891 7892 /** 7893 * The saved value for WindowManagerService.setForcedDisplaySize(). 7894 * Two integers separated by a comma. If unset, then use the real display size. 7895 * @hide 7896 */ 7897 public static final String DISPLAY_SIZE_FORCED = "display_size_forced"; 7898 7899 /** 7900 * The saved value for WindowManagerService.setForcedDisplayScalingMode(). 7901 * 0 or unset if scaling is automatic, 1 if scaling is disabled. 7902 * @hide 7903 */ 7904 public static final String DISPLAY_SCALING_FORCE = "display_scaling_force"; 7905 7906 /** 7907 * The maximum size, in bytes, of a download that the download manager will transfer over 7908 * a non-wifi connection. 7909 * @hide 7910 */ 7911 public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE = 7912 "download_manager_max_bytes_over_mobile"; 7913 7914 /** 7915 * The recommended maximum size, in bytes, of a download that the download manager should 7916 * transfer over a non-wifi connection. Over this size, the use will be warned, but will 7917 * have the option to start the download over the mobile connection anyway. 7918 * @hide 7919 */ 7920 public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE = 7921 "download_manager_recommended_max_bytes_over_mobile"; 7922 7923 /** 7924 * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead 7925 */ 7926 @Deprecated 7927 public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS; 7928 7929 /** 7930 * Whether HDMI control shall be enabled. If disabled, no CEC/MHL command will be 7931 * sent or processed. (0 = false, 1 = true) 7932 * @hide 7933 */ 7934 public static final String HDMI_CONTROL_ENABLED = "hdmi_control_enabled"; 7935 7936 /** 7937 * Whether HDMI System Audio Control feature is enabled. If enabled, TV will try to turn on 7938 * system audio mode if there's a connected CEC-enabled AV Receiver. Then audio stream will 7939 * be played on AVR instead of TV spaeker. If disabled, the system audio mode will never be 7940 * activated. 7941 * @hide 7942 */ 7943 public static final String HDMI_SYSTEM_AUDIO_CONTROL_ENABLED = 7944 "hdmi_system_audio_control_enabled"; 7945 7946 /** 7947 * Whether TV will automatically turn on upon reception of the CEC command 7948 * <Text View On> or <Image View On>. (0 = false, 1 = true) 7949 * @hide 7950 */ 7951 public static final String HDMI_CONTROL_AUTO_WAKEUP_ENABLED = 7952 "hdmi_control_auto_wakeup_enabled"; 7953 7954 /** 7955 * Whether TV will also turn off other CEC devices when it goes to standby mode. 7956 * (0 = false, 1 = true) 7957 * @hide 7958 */ 7959 public static final String HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED = 7960 "hdmi_control_auto_device_off_enabled"; 7961 7962 /** 7963 * The interval in milliseconds at which location requests will be throttled when they are 7964 * coming from the background. 7965 * @hide 7966 */ 7967 public static final String LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS = 7968 "location_background_throttle_interval_ms"; 7969 7970 /** 7971 * Most frequent location update interval in milliseconds that proximity alert is allowed 7972 * to request. 7973 * @hide 7974 */ 7975 public static final String LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS = 7976 "location_background_throttle_proximity_alert_interval_ms"; 7977 7978 /** 7979 * Packages that are whitelisted for background throttling (throttling will not be applied). 7980 * @hide 7981 */ 7982 public static final String LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST = 7983 "location_background_throttle_package_whitelist"; 7984 7985 /** 7986 * The interval in milliseconds at which wifi scan requests will be throttled when they are 7987 * coming from the background. 7988 * @hide 7989 */ 7990 public static final String WIFI_SCAN_BACKGROUND_THROTTLE_INTERVAL_MS = 7991 "wifi_scan_background_throttle_interval_ms"; 7992 7993 /** 7994 * Packages that are whitelisted to be exempt for wifi background throttling. 7995 * @hide 7996 */ 7997 public static final String WIFI_SCAN_BACKGROUND_THROTTLE_PACKAGE_WHITELIST = 7998 "wifi_scan_background_throttle_package_whitelist"; 7999 8000 /** 8001 * Whether TV will switch to MHL port when a mobile device is plugged in. 8002 * (0 = false, 1 = true) 8003 * @hide 8004 */ 8005 public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled"; 8006 8007 /** 8008 * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true) 8009 * @hide 8010 */ 8011 public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled"; 8012 8013 /** 8014 * Whether mobile data connections are allowed by the user. See 8015 * ConnectivityManager for more info. 8016 * @hide 8017 */ 8018 public static final String MOBILE_DATA = "mobile_data"; 8019 8020 /** 8021 * Whether the mobile data connection should remain active even when higher 8022 * priority networks like WiFi are active, to help make network switching faster. 8023 * 8024 * See ConnectivityService for more info. 8025 * 8026 * (0 = disabled, 1 = enabled) 8027 * @hide 8028 */ 8029 public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on"; 8030 8031 /** 8032 * Size of the event buffer for IP connectivity metrics. 8033 * @hide 8034 */ 8035 public static final String CONNECTIVITY_METRICS_BUFFER_SIZE = 8036 "connectivity_metrics_buffer_size"; 8037 8038 /** {@hide} */ 8039 public static final String NETSTATS_ENABLED = "netstats_enabled"; 8040 /** {@hide} */ 8041 public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval"; 8042 /** {@hide} */ 8043 public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age"; 8044 /** {@hide} */ 8045 public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes"; 8046 /** {@hide} */ 8047 public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled"; 8048 /** {@hide} */ 8049 public static final String NETSTATS_AUGMENT_ENABLED = "netstats_augment_enabled"; 8050 8051 /** {@hide} */ 8052 public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration"; 8053 /** {@hide} */ 8054 public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes"; 8055 /** {@hide} */ 8056 public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age"; 8057 /** {@hide} */ 8058 public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age"; 8059 8060 /** {@hide} */ 8061 public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration"; 8062 /** {@hide} */ 8063 public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes"; 8064 /** {@hide} */ 8065 public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age"; 8066 /** {@hide} */ 8067 public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age"; 8068 8069 /** {@hide} */ 8070 public static final String NETSTATS_UID_TAG_BUCKET_DURATION = "netstats_uid_tag_bucket_duration"; 8071 /** {@hide} */ 8072 public static final String NETSTATS_UID_TAG_PERSIST_BYTES = "netstats_uid_tag_persist_bytes"; 8073 /** {@hide} */ 8074 public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age"; 8075 /** {@hide} */ 8076 public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age"; 8077 8078 /** 8079 * User preference for which network(s) should be used. Only the 8080 * connectivity service should touch this. 8081 */ 8082 public static final String NETWORK_PREFERENCE = "network_preference"; 8083 8084 /** 8085 * Which package name to use for network scoring. If null, or if the package is not a valid 8086 * scorer app, external network scores will neither be requested nor accepted. 8087 * @hide 8088 */ 8089 public static final String NETWORK_SCORER_APP = "network_scorer_app"; 8090 8091 /** 8092 * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment 8093 * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been 8094 * exceeded. 8095 * @hide 8096 */ 8097 public static final String NITZ_UPDATE_DIFF = "nitz_update_diff"; 8098 8099 /** 8100 * The length of time in milli-seconds that automatic small adjustments to 8101 * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded. 8102 * @hide 8103 */ 8104 public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing"; 8105 8106 /** Preferred NTP server. {@hide} */ 8107 public static final String NTP_SERVER = "ntp_server"; 8108 /** Timeout in milliseconds to wait for NTP server. {@hide} */ 8109 public static final String NTP_TIMEOUT = "ntp_timeout"; 8110 8111 /** {@hide} */ 8112 public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval"; 8113 8114 /** 8115 * Sample validity in seconds to configure for the system DNS resolver. 8116 * {@hide} 8117 */ 8118 public static final String DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS = 8119 "dns_resolver_sample_validity_seconds"; 8120 8121 /** 8122 * Success threshold in percent for use with the system DNS resolver. 8123 * {@hide} 8124 */ 8125 public static final String DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT = 8126 "dns_resolver_success_threshold_percent"; 8127 8128 /** 8129 * Minimum number of samples needed for statistics to be considered meaningful in the 8130 * system DNS resolver. 8131 * {@hide} 8132 */ 8133 public static final String DNS_RESOLVER_MIN_SAMPLES = "dns_resolver_min_samples"; 8134 8135 /** 8136 * Maximum number taken into account for statistics purposes in the system DNS resolver. 8137 * {@hide} 8138 */ 8139 public static final String DNS_RESOLVER_MAX_SAMPLES = "dns_resolver_max_samples"; 8140 8141 /** 8142 * Whether to disable the automatic scheduling of system updates. 8143 * 1 = system updates won't be automatically scheduled (will always 8144 * present notification instead). 8145 * 0 = system updates will be automatically scheduled. (default) 8146 * @hide 8147 */ 8148 @SystemApi 8149 public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update"; 8150 8151 /** 8152 * Whether the package manager should send package verification broadcasts for verifiers to 8153 * review apps prior to installation. 8154 * 1 = request apps to be verified prior to installation, if a verifier exists. 8155 * 0 = do not verify apps before installation 8156 * @hide 8157 */ 8158 public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable"; 8159 8160 /** Timeout for package verification. 8161 * @hide */ 8162 public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout"; 8163 8164 /** Default response code for package verification. 8165 * @hide */ 8166 public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response"; 8167 8168 /** 8169 * Show package verification setting in the Settings app. 8170 * 1 = show (default) 8171 * 0 = hide 8172 * @hide 8173 */ 8174 public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible"; 8175 8176 /** 8177 * Run package verification on apps installed through ADB/ADT/USB 8178 * 1 = perform package verification on ADB installs (default) 8179 * 0 = bypass package verification on ADB installs 8180 * @hide 8181 */ 8182 public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs"; 8183 8184 /** 8185 * Time since last fstrim (milliseconds) after which we force one to happen 8186 * during device startup. If unset, the default is 3 days. 8187 * @hide 8188 */ 8189 public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval"; 8190 8191 /** 8192 * The interval in milliseconds at which to check packet counts on the 8193 * mobile data interface when screen is on, to detect possible data 8194 * connection problems. 8195 * @hide 8196 */ 8197 public static final String PDP_WATCHDOG_POLL_INTERVAL_MS = 8198 "pdp_watchdog_poll_interval_ms"; 8199 8200 /** 8201 * The interval in milliseconds at which to check packet counts on the 8202 * mobile data interface when screen is off, to detect possible data 8203 * connection problems. 8204 * @hide 8205 */ 8206 public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS = 8207 "pdp_watchdog_long_poll_interval_ms"; 8208 8209 /** 8210 * The interval in milliseconds at which to check packet counts on the 8211 * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} 8212 * outgoing packets has been reached without incoming packets. 8213 * @hide 8214 */ 8215 public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS = 8216 "pdp_watchdog_error_poll_interval_ms"; 8217 8218 /** 8219 * The number of outgoing packets sent without seeing an incoming packet 8220 * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT} 8221 * device is logged to the event log 8222 * @hide 8223 */ 8224 public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT = 8225 "pdp_watchdog_trigger_packet_count"; 8226 8227 /** 8228 * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS}) 8229 * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before 8230 * attempting data connection recovery. 8231 * @hide 8232 */ 8233 public static final String PDP_WATCHDOG_ERROR_POLL_COUNT = 8234 "pdp_watchdog_error_poll_count"; 8235 8236 /** 8237 * The number of failed PDP reset attempts before moving to something more 8238 * drastic: re-registering to the network. 8239 * @hide 8240 */ 8241 public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT = 8242 "pdp_watchdog_max_pdp_reset_fail_count"; 8243 8244 /** 8245 * A positive value indicates how often the SamplingProfiler 8246 * should take snapshots. Zero value means SamplingProfiler 8247 * is disabled. 8248 * 8249 * @hide 8250 */ 8251 public static final String SAMPLING_PROFILER_MS = "sampling_profiler_ms"; 8252 8253 /** 8254 * URL to open browser on to allow user to manage a prepay account 8255 * @hide 8256 */ 8257 public static final String SETUP_PREPAID_DATA_SERVICE_URL = 8258 "setup_prepaid_data_service_url"; 8259 8260 /** 8261 * URL to attempt a GET on to see if this is a prepay device 8262 * @hide 8263 */ 8264 public static final String SETUP_PREPAID_DETECTION_TARGET_URL = 8265 "setup_prepaid_detection_target_url"; 8266 8267 /** 8268 * Host to check for a redirect to after an attempt to GET 8269 * SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there, 8270 * this is a prepaid device with zero balance.) 8271 * @hide 8272 */ 8273 public static final String SETUP_PREPAID_DETECTION_REDIR_HOST = 8274 "setup_prepaid_detection_redir_host"; 8275 8276 /** 8277 * The interval in milliseconds at which to check the number of SMS sent out without asking 8278 * for use permit, to limit the un-authorized SMS usage. 8279 * 8280 * @hide 8281 */ 8282 public static final String SMS_OUTGOING_CHECK_INTERVAL_MS = 8283 "sms_outgoing_check_interval_ms"; 8284 8285 /** 8286 * The number of outgoing SMS sent without asking for user permit (of {@link 8287 * #SMS_OUTGOING_CHECK_INTERVAL_MS} 8288 * 8289 * @hide 8290 */ 8291 public static final String SMS_OUTGOING_CHECK_MAX_COUNT = 8292 "sms_outgoing_check_max_count"; 8293 8294 /** 8295 * Used to disable SMS short code confirmation - defaults to true. 8296 * True indcates we will do the check, etc. Set to false to disable. 8297 * @see com.android.internal.telephony.SmsUsageMonitor 8298 * @hide 8299 */ 8300 public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation"; 8301 8302 /** 8303 * Used to select which country we use to determine premium sms codes. 8304 * One of com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_SIM, 8305 * com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_NETWORK, 8306 * or com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_BOTH. 8307 * @hide 8308 */ 8309 public static final String SMS_SHORT_CODE_RULE = "sms_short_code_rule"; 8310 8311 /** 8312 * Used to select TCP's default initial receiver window size in segments - defaults to a build config value 8313 * @hide 8314 */ 8315 public static final String TCP_DEFAULT_INIT_RWND = "tcp_default_init_rwnd"; 8316 8317 /** 8318 * Used to disable Tethering on a device - defaults to true 8319 * @hide 8320 */ 8321 public static final String TETHER_SUPPORTED = "tether_supported"; 8322 8323 /** 8324 * Used to require DUN APN on the device or not - defaults to a build config value 8325 * which defaults to false 8326 * @hide 8327 */ 8328 public static final String TETHER_DUN_REQUIRED = "tether_dun_required"; 8329 8330 /** 8331 * Used to hold a gservices-provisioned apn value for DUN. If set, or the 8332 * corresponding build config values are set it will override the APN DB 8333 * values. 8334 * Consists of a comma seperated list of strings: 8335 * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" 8336 * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" 8337 * @hide 8338 */ 8339 public static final String TETHER_DUN_APN = "tether_dun_apn"; 8340 8341 /** 8342 * Used to disable trying to talk to any available tethering offload HAL. 8343 * 8344 * Integer values are interpreted as boolean, and the absence of an explicit setting 8345 * is interpreted as |false|. 8346 * @hide 8347 */ 8348 public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled"; 8349 8350 /** 8351 * List of carrier apps which are whitelisted to prompt the user for install when 8352 * a sim card with matching uicc carrier privilege rules is inserted. 8353 * 8354 * The value is "package1;package2;..." 8355 * @hide 8356 */ 8357 public static final String CARRIER_APP_WHITELIST = "carrier_app_whitelist"; 8358 8359 /** 8360 * USB Mass Storage Enabled 8361 */ 8362 public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; 8363 8364 /** 8365 * If this setting is set (to anything), then all references 8366 * to Gmail on the device must change to Google Mail. 8367 */ 8368 public static final String USE_GOOGLE_MAIL = "use_google_mail"; 8369 8370 /** 8371 * Webview Data reduction proxy key. 8372 * @hide 8373 */ 8374 public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY = 8375 "webview_data_reduction_proxy_key"; 8376 8377 /** 8378 * Whether or not the WebView fallback mechanism should be enabled. 8379 * 0=disabled, 1=enabled. 8380 * @hide 8381 */ 8382 public static final String WEBVIEW_FALLBACK_LOGIC_ENABLED = 8383 "webview_fallback_logic_enabled"; 8384 8385 /** 8386 * Name of the package used as WebView provider (if unset the provider is instead determined 8387 * by the system). 8388 * @hide 8389 */ 8390 public static final String WEBVIEW_PROVIDER = "webview_provider"; 8391 8392 /** 8393 * Developer setting to enable WebView multiprocess rendering. 8394 * @hide 8395 */ 8396 @SystemApi 8397 public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; 8398 8399 /** 8400 * The maximum number of notifications shown in 24 hours when switching networks. 8401 * @hide 8402 */ 8403 public static final String NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT = 8404 "network_switch_notification_daily_limit"; 8405 8406 /** 8407 * The minimum time in milliseconds between notifications when switching networks. 8408 * @hide 8409 */ 8410 public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS = 8411 "network_switch_notification_rate_limit_millis"; 8412 8413 /** 8414 * Whether to automatically switch away from wifi networks that lose Internet access. 8415 * Only meaningful if config_networkAvoidBadWifi is set to 0, otherwise the system always 8416 * avoids such networks. Valid values are: 8417 * 8418 * 0: Don't avoid bad wifi, don't prompt the user. Get stuck on bad wifi like it's 2013. 8419 * null: Ask the user whether to switch away from bad wifi. 8420 * 1: Avoid bad wifi. 8421 * 8422 * @hide 8423 */ 8424 public static final String NETWORK_AVOID_BAD_WIFI = "network_avoid_bad_wifi"; 8425 8426 /** 8427 * User setting for ConnectivityManager.getMeteredMultipathPreference(). This value may be 8428 * overridden by the system based on device or application state. If null, the value 8429 * specified by config_networkMeteredMultipathPreference is used. 8430 * 8431 * @hide 8432 */ 8433 public static final String NETWORK_METERED_MULTIPATH_PREFERENCE = 8434 "network_metered_multipath_preference"; 8435 8436 /** 8437 * The thresholds of the wifi throughput badging (SD, HD etc.) as a comma-delimited list of 8438 * colon-delimited key-value pairs. The key is the badging enum value defined in 8439 * android.net.ScoredNetwork and the value is the minimum sustained network throughput in 8440 * kbps required for the badge. For example: "10:3000,20:5000,30:25000" 8441 * 8442 * @hide 8443 */ 8444 @SystemApi 8445 public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds"; 8446 8447 /** 8448 * Whether Wifi display is enabled/disabled 8449 * 0=disabled. 1=enabled. 8450 * @hide 8451 */ 8452 public static final String WIFI_DISPLAY_ON = "wifi_display_on"; 8453 8454 /** 8455 * Whether Wifi display certification mode is enabled/disabled 8456 * 0=disabled. 1=enabled. 8457 * @hide 8458 */ 8459 public static final String WIFI_DISPLAY_CERTIFICATION_ON = 8460 "wifi_display_certification_on"; 8461 8462 /** 8463 * WPS Configuration method used by Wifi display, this setting only 8464 * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled). 8465 * 8466 * Possible values are: 8467 * 8468 * WpsInfo.INVALID: use default WPS method chosen by framework 8469 * WpsInfo.PBC : use Push button 8470 * WpsInfo.KEYPAD : use Keypad 8471 * WpsInfo.DISPLAY: use Display 8472 * @hide 8473 */ 8474 public static final String WIFI_DISPLAY_WPS_CONFIG = 8475 "wifi_display_wps_config"; 8476 8477 /** 8478 * Whether to notify the user of open networks. 8479 * <p> 8480 * If not connected and the scan results have an open network, we will 8481 * put this notification up. If we attempt to connect to a network or 8482 * the open network(s) disappear, we remove the notification. When we 8483 * show the notification, we will not show it again for 8484 * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time. 8485 * 8486 * @deprecated This feature is no longer controlled by this setting in 8487 * {@link android.os.Build.VERSION_CODES#O}. 8488 */ 8489 @Deprecated 8490 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = 8491 "wifi_networks_available_notification_on"; 8492 8493 /** 8494 * {@hide} 8495 */ 8496 public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON = 8497 "wimax_networks_available_notification_on"; 8498 8499 /** 8500 * Delay (in seconds) before repeating the Wi-Fi networks available notification. 8501 * Connecting to a network will reset the timer. 8502 */ 8503 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = 8504 "wifi_networks_available_repeat_delay"; 8505 8506 /** 8507 * 802.11 country code in ISO 3166 format 8508 * @hide 8509 */ 8510 public static final String WIFI_COUNTRY_CODE = "wifi_country_code"; 8511 8512 /** 8513 * The interval in milliseconds to issue wake up scans when wifi needs 8514 * to connect. This is necessary to connect to an access point when 8515 * device is on the move and the screen is off. 8516 * @hide 8517 */ 8518 public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS = 8519 "wifi_framework_scan_interval_ms"; 8520 8521 /** 8522 * The interval in milliseconds after which Wi-Fi is considered idle. 8523 * When idle, it is possible for the device to be switched from Wi-Fi to 8524 * the mobile data network. 8525 * @hide 8526 */ 8527 public static final String WIFI_IDLE_MS = "wifi_idle_ms"; 8528 8529 /** 8530 * When the number of open networks exceeds this number, the 8531 * least-recently-used excess networks will be removed. 8532 */ 8533 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; 8534 8535 /** 8536 * Whether the Wi-Fi should be on. Only the Wi-Fi service should touch this. 8537 */ 8538 public static final String WIFI_ON = "wifi_on"; 8539 8540 /** 8541 * Setting to allow scans to be enabled even wifi is turned off for connectivity. 8542 * @hide 8543 */ 8544 public static final String WIFI_SCAN_ALWAYS_AVAILABLE = 8545 "wifi_scan_always_enabled"; 8546 8547 /** 8548 * Value to specify if Wi-Fi Wakeup feature is enabled. 8549 * 8550 * Type: int (0 for false, 1 for true) 8551 * @hide 8552 */ 8553 @SystemApi 8554 public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled"; 8555 8556 /** 8557 * Value to specify if Wi-Fi Wakeup is available. 8558 * 8559 * Wi-Fi Wakeup will only operate if it's available 8560 * and {@link #WIFI_WAKEUP_ENABLED} is true. 8561 * 8562 * Type: int (0 for false, 1 for true) 8563 * @hide 8564 */ 8565 public static final String WIFI_WAKEUP_AVAILABLE = "wifi_wakeup_available"; 8566 8567 /** 8568 * Value to specify whether network quality scores and badging should be shown in the UI. 8569 * 8570 * Type: int (0 for false, 1 for true) 8571 * @hide 8572 */ 8573 public static final String NETWORK_SCORING_UI_ENABLED = "network_scoring_ui_enabled"; 8574 8575 /** 8576 * Value to specify how long in milliseconds to retain seen score cache curves to be used 8577 * when generating SSID only bases score curves. 8578 * 8579 * Type: long 8580 * @hide 8581 */ 8582 public static final String SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS = 8583 "speed_label_cache_eviction_age_millis"; 8584 8585 /** 8586 * Value to specify if network recommendations from 8587 * {@link com.android.server.NetworkScoreService} are enabled. 8588 * 8589 * Type: int 8590 * Valid values: 8591 * -1 = Forced off 8592 * 0 = Disabled 8593 * 1 = Enabled 8594 * 8595 * Most readers of this setting should simply check if value == 1 to determined the 8596 * enabled state. 8597 * @hide 8598 */ 8599 public static final String NETWORK_RECOMMENDATIONS_ENABLED = 8600 "network_recommendations_enabled"; 8601 8602 /** 8603 * Which package name to use for network recommendations. If null, network recommendations 8604 * will neither be requested nor accepted. 8605 * 8606 * Use {@link NetworkScoreManager#getActiveScorerPackage()} to read this value and 8607 * {@link NetworkScoreManager#setActiveScorer(String)} to write it. 8608 * 8609 * Type: string - package name 8610 * @hide 8611 */ 8612 public static final String NETWORK_RECOMMENDATIONS_PACKAGE = 8613 "network_recommendations_package"; 8614 8615 /** 8616 * The package name of the application that connect and secures high quality open wifi 8617 * networks automatically. 8618 * 8619 * Type: string package name or null if the feature is either not provided or disabled. 8620 * @hide 8621 */ 8622 public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package"; 8623 8624 /** 8625 * The number of milliseconds the {@link com.android.server.NetworkScoreService} 8626 * will give a recommendation request to complete before returning a default response. 8627 * 8628 * Type: long 8629 * @hide 8630 * @deprecated to be removed 8631 */ 8632 public static final String NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS = 8633 "network_recommendation_request_timeout_ms"; 8634 8635 /** 8636 * The expiration time in milliseconds for the {@link android.net.WifiKey} request cache in 8637 * {@link com.android.server.wifi.RecommendedNetworkEvaluator}. 8638 * 8639 * Type: long 8640 * @hide 8641 */ 8642 public static final String RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS = 8643 "recommended_network_evaluator_cache_expiry_ms"; 8644 8645 /** 8646 * Settings to allow BLE scans to be enabled even when Bluetooth is turned off for 8647 * connectivity. 8648 * @hide 8649 */ 8650 public static final String BLE_SCAN_ALWAYS_AVAILABLE = 8651 "ble_scan_always_enabled"; 8652 8653 /** 8654 * Used to save the Wifi_ON state prior to tethering. 8655 * This state will be checked to restore Wifi after 8656 * the user turns off tethering. 8657 * 8658 * @hide 8659 */ 8660 public static final String WIFI_SAVED_STATE = "wifi_saved_state"; 8661 8662 /** 8663 * The interval in milliseconds to scan as used by the wifi supplicant 8664 * @hide 8665 */ 8666 public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS = 8667 "wifi_supplicant_scan_interval_ms"; 8668 8669 /** 8670 * whether frameworks handles wifi auto-join 8671 * @hide 8672 */ 8673 public static final String WIFI_ENHANCED_AUTO_JOIN = 8674 "wifi_enhanced_auto_join"; 8675 8676 /** 8677 * whether settings show RSSI 8678 * @hide 8679 */ 8680 public static final String WIFI_NETWORK_SHOW_RSSI = 8681 "wifi_network_show_rssi"; 8682 8683 /** 8684 * The interval in milliseconds to scan at supplicant when p2p is connected 8685 * @hide 8686 */ 8687 public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS = 8688 "wifi_scan_interval_p2p_connected_ms"; 8689 8690 /** 8691 * Whether the Wi-Fi watchdog is enabled. 8692 */ 8693 public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; 8694 8695 /** 8696 * Setting to turn off poor network avoidance on Wi-Fi. Feature is enabled by default and 8697 * the setting needs to be set to 0 to disable it. 8698 * @hide 8699 */ 8700 public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED = 8701 "wifi_watchdog_poor_network_test_enabled"; 8702 8703 /** 8704 * Setting to turn on suspend optimizations at screen off on Wi-Fi. Enabled by default and 8705 * needs to be set to 0 to disable it. 8706 * @hide 8707 */ 8708 public static final String WIFI_SUSPEND_OPTIMIZATIONS_ENABLED = 8709 "wifi_suspend_optimizations_enabled"; 8710 8711 /** 8712 * Setting to enable verbose logging in Wi-Fi; disabled by default, and setting to 1 8713 * will enable it. In the future, additional values may be supported. 8714 * @hide 8715 */ 8716 public static final String WIFI_VERBOSE_LOGGING_ENABLED = 8717 "wifi_verbose_logging_enabled"; 8718 8719 /** 8720 * The maximum number of times we will retry a connection to an access 8721 * point for which we have failed in acquiring an IP address from DHCP. 8722 * A value of N means that we will make N+1 connection attempts in all. 8723 */ 8724 public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; 8725 8726 /** 8727 * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile 8728 * data connectivity to be established after a disconnect from Wi-Fi. 8729 */ 8730 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = 8731 "wifi_mobile_data_transition_wakelock_timeout_ms"; 8732 8733 /** 8734 * This setting controls whether WiFi configurations created by a Device Owner app 8735 * should be locked down (that is, be editable or removable only by the Device Owner App, 8736 * not even by Settings app). 8737 * This setting takes integer values. Non-zero values mean DO created configurations 8738 * are locked down. Value of zero means they are not. Default value in the absence of 8739 * actual value to this setting is 0. 8740 */ 8741 public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN = 8742 "wifi_device_owner_configs_lockdown"; 8743 8744 /** 8745 * The operational wifi frequency band 8746 * Set to one of {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO}, 8747 * {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ} or 8748 * {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ} 8749 * 8750 * @hide 8751 */ 8752 public static final String WIFI_FREQUENCY_BAND = "wifi_frequency_band"; 8753 8754 /** 8755 * The Wi-Fi peer-to-peer device name 8756 * @hide 8757 */ 8758 public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name"; 8759 8760 /** 8761 * The min time between wifi disable and wifi enable 8762 * @hide 8763 */ 8764 public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay"; 8765 8766 /** 8767 * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect 8768 * from an ephemeral network if there is no BSSID for that network with a non-null score that 8769 * has been seen in this time period. 8770 * 8771 * If this is less than or equal to zero, we use a more conservative behavior and only check 8772 * for a non-null score from the currently connected or target BSSID. 8773 * @hide 8774 */ 8775 public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS = 8776 "wifi_ephemeral_out_of_range_timeout_ms"; 8777 8778 /** 8779 * The number of milliseconds to delay when checking for data stalls during 8780 * non-aggressive detection. (screen is turned off.) 8781 * @hide 8782 */ 8783 public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS = 8784 "data_stall_alarm_non_aggressive_delay_in_ms"; 8785 8786 /** 8787 * The number of milliseconds to delay when checking for data stalls during 8788 * aggressive detection. (screen on or suspected data stall) 8789 * @hide 8790 */ 8791 public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS = 8792 "data_stall_alarm_aggressive_delay_in_ms"; 8793 8794 /** 8795 * The number of milliseconds to allow the provisioning apn to remain active 8796 * @hide 8797 */ 8798 public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS = 8799 "provisioning_apn_alarm_delay_in_ms"; 8800 8801 /** 8802 * The interval in milliseconds at which to check gprs registration 8803 * after the first registration mismatch of gprs and voice service, 8804 * to detect possible data network registration problems. 8805 * 8806 * @hide 8807 */ 8808 public static final String GPRS_REGISTER_CHECK_PERIOD_MS = 8809 "gprs_register_check_period_ms"; 8810 8811 /** 8812 * Nonzero causes Log.wtf() to crash. 8813 * @hide 8814 */ 8815 public static final String WTF_IS_FATAL = "wtf_is_fatal"; 8816 8817 /** 8818 * Ringer mode. This is used internally, changing this value will not 8819 * change the ringer mode. See AudioManager. 8820 */ 8821 public static final String MODE_RINGER = "mode_ringer"; 8822 8823 /** 8824 * Overlay display devices setting. 8825 * The associated value is a specially formatted string that describes the 8826 * size and density of simulated secondary display devices. 8827 * <p> 8828 * Format: {width}x{height}/{dpi};... 8829 * </p><p> 8830 * Example: 8831 * <ul> 8832 * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li> 8833 * <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first 8834 * at 1080p and the second at 720p.</li> 8835 * <li>If the value is empty, then no overlay display devices are created.</li> 8836 * </ul></p> 8837 * 8838 * @hide 8839 */ 8840 public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices"; 8841 8842 /** 8843 * Threshold values for the duration and level of a discharge cycle, 8844 * under which we log discharge cycle info. 8845 * 8846 * @hide 8847 */ 8848 public static final String 8849 BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold"; 8850 8851 /** @hide */ 8852 public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold"; 8853 8854 /** 8855 * Flag for allowing ActivityManagerService to send ACTION_APP_ERROR 8856 * intents on application crashes and ANRs. If this is disabled, the 8857 * crash/ANR dialog will never display the "Report" button. 8858 * <p> 8859 * Type: int (0 = disallow, 1 = allow) 8860 * 8861 * @hide 8862 */ 8863 public static final String SEND_ACTION_APP_ERROR = "send_action_app_error"; 8864 8865 /** 8866 * Maximum age of entries kept by {@link DropBoxManager}. 8867 * 8868 * @hide 8869 */ 8870 public static final String DROPBOX_AGE_SECONDS = "dropbox_age_seconds"; 8871 8872 /** 8873 * Maximum number of entry files which {@link DropBoxManager} will keep 8874 * around. 8875 * 8876 * @hide 8877 */ 8878 public static final String DROPBOX_MAX_FILES = "dropbox_max_files"; 8879 8880 /** 8881 * Maximum amount of disk space used by {@link DropBoxManager} no matter 8882 * what. 8883 * 8884 * @hide 8885 */ 8886 public static final String DROPBOX_QUOTA_KB = "dropbox_quota_kb"; 8887 8888 /** 8889 * Percent of free disk (excluding reserve) which {@link DropBoxManager} 8890 * will use. 8891 * 8892 * @hide 8893 */ 8894 public static final String DROPBOX_QUOTA_PERCENT = "dropbox_quota_percent"; 8895 8896 /** 8897 * Percent of total disk which {@link DropBoxManager} will never dip 8898 * into. 8899 * 8900 * @hide 8901 */ 8902 public static final String DROPBOX_RESERVE_PERCENT = "dropbox_reserve_percent"; 8903 8904 /** 8905 * Prefix for per-tag dropbox disable/enable settings. 8906 * 8907 * @hide 8908 */ 8909 public static final String DROPBOX_TAG_PREFIX = "dropbox:"; 8910 8911 /** 8912 * Lines of logcat to include with system crash/ANR/etc. reports, as a 8913 * prefix of the dropbox tag of the report type. For example, 8914 * "logcat_for_system_server_anr" controls the lines of logcat captured 8915 * with system server ANR reports. 0 to disable. 8916 * 8917 * @hide 8918 */ 8919 public static final String ERROR_LOGCAT_PREFIX = "logcat_for_"; 8920 8921 /** 8922 * The interval in minutes after which the amount of free storage left 8923 * on the device is logged to the event log 8924 * 8925 * @hide 8926 */ 8927 public static final String SYS_FREE_STORAGE_LOG_INTERVAL = "sys_free_storage_log_interval"; 8928 8929 /** 8930 * Threshold for the amount of change in disk free space required to 8931 * report the amount of free space. Used to prevent spamming the logs 8932 * when the disk free space isn't changing frequently. 8933 * 8934 * @hide 8935 */ 8936 public static final String 8937 DISK_FREE_CHANGE_REPORTING_THRESHOLD = "disk_free_change_reporting_threshold"; 8938 8939 /** 8940 * Minimum percentage of free storage on the device that is used to 8941 * determine if the device is running low on storage. The default is 10. 8942 * <p> 8943 * Say this value is set to 10, the device is considered running low on 8944 * storage if 90% or more of the device storage is filled up. 8945 * 8946 * @hide 8947 */ 8948 public static final String 8949 SYS_STORAGE_THRESHOLD_PERCENTAGE = "sys_storage_threshold_percentage"; 8950 8951 /** 8952 * Maximum byte size of the low storage threshold. This is to ensure 8953 * that {@link #SYS_STORAGE_THRESHOLD_PERCENTAGE} does not result in an 8954 * overly large threshold for large storage devices. Currently this must 8955 * be less than 2GB. This default is 500MB. 8956 * 8957 * @hide 8958 */ 8959 public static final String 8960 SYS_STORAGE_THRESHOLD_MAX_BYTES = "sys_storage_threshold_max_bytes"; 8961 8962 /** 8963 * Minimum bytes of free storage on the device before the data partition 8964 * is considered full. By default, 1 MB is reserved to avoid system-wide 8965 * SQLite disk full exceptions. 8966 * 8967 * @hide 8968 */ 8969 public static final String 8970 SYS_STORAGE_FULL_THRESHOLD_BYTES = "sys_storage_full_threshold_bytes"; 8971 8972 /** 8973 * Minimum percentage of storage on the device that is reserved for 8974 * cached data. 8975 * 8976 * @hide 8977 */ 8978 public static final String 8979 SYS_STORAGE_CACHE_PERCENTAGE = "sys_storage_cache_percentage"; 8980 8981 /** 8982 * Maximum bytes of storage on the device that is reserved for cached 8983 * data. 8984 * 8985 * @hide 8986 */ 8987 public static final String 8988 SYS_STORAGE_CACHE_MAX_BYTES = "sys_storage_cache_max_bytes"; 8989 8990 /** 8991 * The maximum reconnect delay for short network outages or when the 8992 * network is suspended due to phone use. 8993 * 8994 * @hide 8995 */ 8996 public static final String 8997 SYNC_MAX_RETRY_DELAY_IN_SECONDS = "sync_max_retry_delay_in_seconds"; 8998 8999 /** 9000 * The number of milliseconds to delay before sending out 9001 * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. Ignored. 9002 * 9003 * @hide 9004 */ 9005 public static final String CONNECTIVITY_CHANGE_DELAY = "connectivity_change_delay"; 9006 9007 9008 /** 9009 * Network sampling interval, in seconds. We'll generate link information 9010 * about bytes/packets sent and error rates based on data sampled in this interval 9011 * 9012 * @hide 9013 */ 9014 9015 public static final String CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS = 9016 "connectivity_sampling_interval_in_seconds"; 9017 9018 /** 9019 * The series of successively longer delays used in retrying to download PAC file. 9020 * Last delay is used between successful PAC downloads. 9021 * 9022 * @hide 9023 */ 9024 public static final String PAC_CHANGE_DELAY = "pac_change_delay"; 9025 9026 /** 9027 * Don't attempt to detect captive portals. 9028 * 9029 * @hide 9030 */ 9031 public static final int CAPTIVE_PORTAL_MODE_IGNORE = 0; 9032 9033 /** 9034 * When detecting a captive portal, display a notification that 9035 * prompts the user to sign in. 9036 * 9037 * @hide 9038 */ 9039 public static final int CAPTIVE_PORTAL_MODE_PROMPT = 1; 9040 9041 /** 9042 * When detecting a captive portal, immediately disconnect from the 9043 * network and do not reconnect to that network in the future. 9044 * 9045 * @hide 9046 */ 9047 public static final int CAPTIVE_PORTAL_MODE_AVOID = 2; 9048 9049 /** 9050 * What to do when connecting a network that presents a captive portal. 9051 * Must be one of the CAPTIVE_PORTAL_MODE_* constants above. 9052 * 9053 * The default for this setting is CAPTIVE_PORTAL_MODE_PROMPT. 9054 * @hide 9055 */ 9056 public static final String CAPTIVE_PORTAL_MODE = "captive_portal_mode"; 9057 9058 /** 9059 * Setting to turn off captive portal detection. Feature is enabled by 9060 * default and the setting needs to be set to 0 to disable it. 9061 * 9062 * @deprecated use CAPTIVE_PORTAL_MODE_IGNORE to disable captive portal detection 9063 * @hide 9064 */ 9065 @Deprecated 9066 public static final String 9067 CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled"; 9068 9069 /** 9070 * The server used for captive portal detection upon a new conection. A 9071 * 204 response code from the server is used for validation. 9072 * TODO: remove this deprecated symbol. 9073 * 9074 * @hide 9075 */ 9076 public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server"; 9077 9078 /** 9079 * The URL used for HTTPS captive portal detection upon a new connection. 9080 * A 204 response code from the server is used for validation. 9081 * 9082 * @hide 9083 */ 9084 public static final String CAPTIVE_PORTAL_HTTPS_URL = "captive_portal_https_url"; 9085 9086 /** 9087 * The URL used for HTTP captive portal detection upon a new connection. 9088 * A 204 response code from the server is used for validation. 9089 * 9090 * @hide 9091 */ 9092 public static final String CAPTIVE_PORTAL_HTTP_URL = "captive_portal_http_url"; 9093 9094 /** 9095 * The URL used for fallback HTTP captive portal detection when previous HTTP 9096 * and HTTPS captive portal detection attemps did not return a conclusive answer. 9097 * 9098 * @hide 9099 */ 9100 public static final String CAPTIVE_PORTAL_FALLBACK_URL = "captive_portal_fallback_url"; 9101 9102 /** 9103 * A comma separated list of URLs used for captive portal detection in addition to the 9104 * fallback HTTP url associated with the CAPTIVE_PORTAL_FALLBACK_URL settings. 9105 * 9106 * @hide 9107 */ 9108 public static final String CAPTIVE_PORTAL_OTHER_FALLBACK_URLS = 9109 "captive_portal_other_fallback_urls"; 9110 9111 /** 9112 * Whether to use HTTPS for network validation. This is enabled by default and the setting 9113 * needs to be set to 0 to disable it. This setting is a misnomer because captive portals 9114 * don't actually use HTTPS, but it's consistent with the other settings. 9115 * 9116 * @hide 9117 */ 9118 public static final String CAPTIVE_PORTAL_USE_HTTPS = "captive_portal_use_https"; 9119 9120 /** 9121 * Which User-Agent string to use in the header of the captive portal detection probes. 9122 * The User-Agent field is unset when this setting has no value (HttpUrlConnection default). 9123 * 9124 * @hide 9125 */ 9126 public static final String CAPTIVE_PORTAL_USER_AGENT = "captive_portal_user_agent"; 9127 9128 /** 9129 * Whether network service discovery is enabled. 9130 * 9131 * @hide 9132 */ 9133 public static final String NSD_ON = "nsd_on"; 9134 9135 /** 9136 * Let user pick default install location. 9137 * 9138 * @hide 9139 */ 9140 public static final String SET_INSTALL_LOCATION = "set_install_location"; 9141 9142 /** 9143 * Default install location value. 9144 * 0 = auto, let system decide 9145 * 1 = internal 9146 * 2 = sdcard 9147 * @hide 9148 */ 9149 public static final String DEFAULT_INSTALL_LOCATION = "default_install_location"; 9150 9151 /** 9152 * ms during which to consume extra events related to Inet connection 9153 * condition after a transtion to fully-connected 9154 * 9155 * @hide 9156 */ 9157 public static final String 9158 INET_CONDITION_DEBOUNCE_UP_DELAY = "inet_condition_debounce_up_delay"; 9159 9160 /** 9161 * ms during which to consume extra events related to Inet connection 9162 * condtion after a transtion to partly-connected 9163 * 9164 * @hide 9165 */ 9166 public static final String 9167 INET_CONDITION_DEBOUNCE_DOWN_DELAY = "inet_condition_debounce_down_delay"; 9168 9169 /** {@hide} */ 9170 public static final String 9171 READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default"; 9172 9173 /** 9174 * Host name and port for global http proxy. Uses ':' seperator for 9175 * between host and port. 9176 */ 9177 public static final String HTTP_PROXY = "http_proxy"; 9178 9179 /** 9180 * Host name for global http proxy. Set via ConnectivityManager. 9181 * 9182 * @hide 9183 */ 9184 public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host"; 9185 9186 /** 9187 * Integer host port for global http proxy. Set via ConnectivityManager. 9188 * 9189 * @hide 9190 */ 9191 public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port"; 9192 9193 /** 9194 * Exclusion list for global proxy. This string contains a list of 9195 * comma-separated domains where the global proxy does not apply. 9196 * Domains should be listed in a comma- separated list. Example of 9197 * acceptable formats: ".domain1.com,my.domain2.com" Use 9198 * ConnectivityManager to set/get. 9199 * 9200 * @hide 9201 */ 9202 public static final String 9203 GLOBAL_HTTP_PROXY_EXCLUSION_LIST = "global_http_proxy_exclusion_list"; 9204 9205 /** 9206 * The location PAC File for the proxy. 9207 * @hide 9208 */ 9209 public static final String 9210 GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url"; 9211 9212 /** 9213 * Enables the UI setting to allow the user to specify the global HTTP 9214 * proxy and associated exclusion list. 9215 * 9216 * @hide 9217 */ 9218 public static final String SET_GLOBAL_HTTP_PROXY = "set_global_http_proxy"; 9219 9220 /** 9221 * Setting for default DNS in case nobody suggests one 9222 * 9223 * @hide 9224 */ 9225 public static final String DEFAULT_DNS_SERVER = "default_dns_server"; 9226 9227 /** {@hide} */ 9228 public static final String 9229 BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_"; 9230 /** {@hide} */ 9231 public static final String 9232 BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_"; 9233 /** {@hide} */ 9234 public static final String 9235 BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX = "bluetooth_a2dp_src_priority_"; 9236 /** {@hide} */ 9237 public static final String BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX = 9238 "bluetooth_a2dp_supports_optional_codecs_"; 9239 /** {@hide} */ 9240 public static final String BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX = 9241 "bluetooth_a2dp_optional_codecs_enabled_"; 9242 /** {@hide} */ 9243 public static final String 9244 BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_"; 9245 /** {@hide} */ 9246 public static final String 9247 BLUETOOTH_MAP_PRIORITY_PREFIX = "bluetooth_map_priority_"; 9248 /** {@hide} */ 9249 public static final String 9250 BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX = "bluetooth_map_client_priority_"; 9251 /** {@hide} */ 9252 public static final String 9253 BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX = "bluetooth_pbap_client_priority_"; 9254 /** {@hide} */ 9255 public static final String 9256 BLUETOOTH_SAP_PRIORITY_PREFIX = "bluetooth_sap_priority_"; 9257 /** {@hide} */ 9258 public static final String 9259 BLUETOOTH_PAN_PRIORITY_PREFIX = "bluetooth_pan_priority_"; 9260 9261 /** 9262 * Activity manager specific settings. 9263 * This is encoded as a key=value list, separated by commas. Ex: 9264 * 9265 * "gc_timeout=5000,max_cached_processes=24" 9266 * 9267 * The following keys are supported: 9268 * 9269 * <pre> 9270 * max_cached_processes (int) 9271 * background_settle_time (long) 9272 * fgservice_min_shown_time (long) 9273 * fgservice_min_report_time (long) 9274 * fgservice_screen_on_before_time (long) 9275 * fgservice_screen_on_after_time (long) 9276 * content_provider_retain_time (long) 9277 * gc_timeout (long) 9278 * gc_min_interval (long) 9279 * full_pss_min_interval (long) 9280 * full_pss_lowered_interval (long) 9281 * power_check_interval (long) 9282 * power_check_max_cpu_1 (int) 9283 * power_check_max_cpu_2 (int) 9284 * power_check_max_cpu_3 (int) 9285 * power_check_max_cpu_4 (int) 9286 * service_usage_interaction_time (long) 9287 * usage_stats_interaction_interval (long) 9288 * service_restart_duration (long) 9289 * service_reset_run_duration (long) 9290 * service_restart_duration_factor (int) 9291 * service_min_restart_time_between (long) 9292 * service_max_inactivity (long) 9293 * service_bg_start_timeout (long) 9294 * </pre> 9295 * 9296 * <p> 9297 * Type: string 9298 * @hide 9299 * @see com.android.server.am.ActivityManagerConstants 9300 */ 9301 public static final String ACTIVITY_MANAGER_CONSTANTS = "activity_manager_constants"; 9302 9303 /** 9304 * Device Idle (Doze) specific settings. 9305 * This is encoded as a key=value list, separated by commas. Ex: 9306 * 9307 * "inactive_to=60000,sensing_to=400000" 9308 * 9309 * The following keys are supported: 9310 * 9311 * <pre> 9312 * inactive_to (long) 9313 * sensing_to (long) 9314 * motion_inactive_to (long) 9315 * idle_after_inactive_to (long) 9316 * idle_pending_to (long) 9317 * max_idle_pending_to (long) 9318 * idle_pending_factor (float) 9319 * idle_to (long) 9320 * max_idle_to (long) 9321 * idle_factor (float) 9322 * min_time_to_alarm (long) 9323 * max_temp_app_whitelist_duration (long) 9324 * notification_whitelist_duration (long) 9325 * </pre> 9326 * 9327 * <p> 9328 * Type: string 9329 * @hide 9330 * @see com.android.server.DeviceIdleController.Constants 9331 */ 9332 public static final String DEVICE_IDLE_CONSTANTS = "device_idle_constants"; 9333 9334 /** 9335 * Device Idle (Doze) specific settings for watches. See {@code #DEVICE_IDLE_CONSTANTS} 9336 * 9337 * <p> 9338 * Type: string 9339 * @hide 9340 * @see com.android.server.DeviceIdleController.Constants 9341 */ 9342 public static final String DEVICE_IDLE_CONSTANTS_WATCH = "device_idle_constants_watch"; 9343 9344 /** 9345 * Battery Saver specific settings 9346 * This is encoded as a key=value list, separated by commas. Ex: 9347 * 9348 * "vibration_disabled=true,adjust_brightness_factor=0.5" 9349 * 9350 * The following keys are supported: 9351 * 9352 * <pre> 9353 * vibration_disabled (boolean) 9354 * animation_disabled (boolean) 9355 * soundtrigger_disabled (boolean) 9356 * fullbackup_deferred (boolean) 9357 * keyvaluebackup_deferred (boolean) 9358 * firewall_disabled (boolean) 9359 * gps_mode (int) 9360 * adjust_brightness_disabled (boolean) 9361 * adjust_brightness_factor (float) 9362 * </pre> 9363 * @hide 9364 * @see com.android.server.power.BatterySaverPolicy 9365 */ 9366 public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants"; 9367 9368 /** 9369 * Battery anomaly detection specific settings 9370 * This is encoded as a key=value list, separated by commas. 9371 * wakeup_blacklisted_tags is a string, encoded as a set of tags, encoded via 9372 * {@link Uri#encode(String)}, separated by colons. Ex: 9373 * 9374 * "anomaly_detection_enabled=true,wakelock_threshold=2000,wakeup_alarm_enabled=true," 9375 * "wakeup_alarm_threshold=10,wakeup_blacklisted_tags=tag1:tag2:with%2Ccomma:with%3Acolon" 9376 * 9377 * The following keys are supported: 9378 * 9379 * <pre> 9380 * anomaly_detection_enabled (boolean) 9381 * wakelock_enabled (boolean) 9382 * wakelock_threshold (long) 9383 * wakeup_alarm_enabled (boolean) 9384 * wakeup_alarm_threshold (long) 9385 * wakeup_blacklisted_tags (string) 9386 * bluetooth_scan_enabled (boolean) 9387 * bluetooth_scan_threshold (long) 9388 * </pre> 9389 * @hide 9390 */ 9391 public static final String ANOMALY_DETECTION_CONSTANTS = "anomaly_detection_constants"; 9392 9393 /** 9394 * Always on display(AOD) specific settings 9395 * This is encoded as a key=value list, separated by commas. Ex: 9396 * 9397 * "prox_screen_off_delay=10000,screen_brightness_array=0:1:2:3:4" 9398 * 9399 * The following keys are supported: 9400 * 9401 * <pre> 9402 * screen_brightness_array (string) 9403 * dimming_scrim_array (string) 9404 * prox_screen_off_delay (long) 9405 * prox_cooldown_trigger (long) 9406 * prox_cooldown_period (long) 9407 * </pre> 9408 * @hide 9409 */ 9410 public static final String ALWAYS_ON_DISPLAY_CONSTANTS = "always_on_display_constants"; 9411 9412 /** 9413 * App standby (app idle) specific settings. 9414 * This is encoded as a key=value list, separated by commas. Ex: 9415 * 9416 * "idle_duration=5000,parole_interval=4500" 9417 * 9418 * The following keys are supported: 9419 * 9420 * <pre> 9421 * idle_duration2 (long) 9422 * wallclock_threshold (long) 9423 * parole_interval (long) 9424 * parole_duration (long) 9425 * 9426 * idle_duration (long) // This is deprecated and used to circumvent b/26355386. 9427 * </pre> 9428 * 9429 * <p> 9430 * Type: string 9431 * @hide 9432 * @see com.android.server.usage.UsageStatsService.SettingsObserver 9433 */ 9434 public static final String APP_IDLE_CONSTANTS = "app_idle_constants"; 9435 9436 /** 9437 * Power manager specific settings. 9438 * This is encoded as a key=value list, separated by commas. Ex: 9439 * 9440 * "no_cached_wake_locks=1" 9441 * 9442 * The following keys are supported: 9443 * 9444 * <pre> 9445 * no_cached_wake_locks (boolean) 9446 * </pre> 9447 * 9448 * <p> 9449 * Type: string 9450 * @hide 9451 * @see com.android.server.power.PowerManagerConstants 9452 */ 9453 public static final String POWER_MANAGER_CONSTANTS = "power_manager_constants"; 9454 9455 /** 9456 * Alarm manager specific settings. 9457 * This is encoded as a key=value list, separated by commas. Ex: 9458 * 9459 * "min_futurity=5000,allow_while_idle_short_time=4500" 9460 * 9461 * The following keys are supported: 9462 * 9463 * <pre> 9464 * min_futurity (long) 9465 * min_interval (long) 9466 * allow_while_idle_short_time (long) 9467 * allow_while_idle_long_time (long) 9468 * allow_while_idle_whitelist_duration (long) 9469 * </pre> 9470 * 9471 * <p> 9472 * Type: string 9473 * @hide 9474 * @see com.android.server.AlarmManagerService.Constants 9475 */ 9476 public static final String ALARM_MANAGER_CONSTANTS = "alarm_manager_constants"; 9477 9478 /** 9479 * Job scheduler specific settings. 9480 * This is encoded as a key=value list, separated by commas. Ex: 9481 * 9482 * "min_ready_jobs_count=2,moderate_use_factor=.5" 9483 * 9484 * The following keys are supported: 9485 * 9486 * <pre> 9487 * min_idle_count (int) 9488 * min_charging_count (int) 9489 * min_connectivity_count (int) 9490 * min_content_count (int) 9491 * min_ready_jobs_count (int) 9492 * heavy_use_factor (float) 9493 * moderate_use_factor (float) 9494 * fg_job_count (int) 9495 * bg_normal_job_count (int) 9496 * bg_moderate_job_count (int) 9497 * bg_low_job_count (int) 9498 * bg_critical_job_count (int) 9499 * </pre> 9500 * 9501 * <p> 9502 * Type: string 9503 * @hide 9504 * @see com.android.server.job.JobSchedulerService.Constants 9505 */ 9506 public static final String JOB_SCHEDULER_CONSTANTS = "job_scheduler_constants"; 9507 9508 /** 9509 * ShortcutManager specific settings. 9510 * This is encoded as a key=value list, separated by commas. Ex: 9511 * 9512 * "reset_interval_sec=86400,max_updates_per_interval=1" 9513 * 9514 * The following keys are supported: 9515 * 9516 * <pre> 9517 * reset_interval_sec (long) 9518 * max_updates_per_interval (int) 9519 * max_icon_dimension_dp (int, DP) 9520 * max_icon_dimension_dp_lowram (int, DP) 9521 * max_shortcuts (int) 9522 * icon_quality (int, 0-100) 9523 * icon_format (String) 9524 * </pre> 9525 * 9526 * <p> 9527 * Type: string 9528 * @hide 9529 * @see com.android.server.pm.ShortcutService.ConfigConstants 9530 */ 9531 public static final String SHORTCUT_MANAGER_CONSTANTS = "shortcut_manager_constants"; 9532 9533 /** 9534 * DevicePolicyManager specific settings. 9535 * This is encoded as a key=value list, separated by commas. Ex: 9536 * 9537 * <pre> 9538 * das_died_service_reconnect_backoff_sec (long) 9539 * das_died_service_reconnect_backoff_increase (float) 9540 * das_died_service_reconnect_max_backoff_sec (long) 9541 * </pre> 9542 * 9543 * <p> 9544 * Type: string 9545 * @hide 9546 * see also com.android.server.devicepolicy.DevicePolicyConstants 9547 */ 9548 public static final String DEVICE_POLICY_CONSTANTS = "device_policy_constants"; 9549 9550 /** 9551 * TextClassifier specific settings. 9552 * This is encoded as a key=value list, separated by commas. Ex: 9553 * 9554 * <pre> 9555 * smart_selection_dark_launch (boolean) 9556 * smart_selection_enabled_for_edit_text (boolean) 9557 * </pre> 9558 * 9559 * <p> 9560 * Type: string 9561 * @hide 9562 * see also android.view.textclassifier.TextClassifierConstants 9563 */ 9564 public static final String TEXT_CLASSIFIER_CONSTANTS = "text_classifier_constants"; 9565 9566 /** 9567 * Get the key that retrieves a bluetooth headset's priority. 9568 * @hide 9569 */ getBluetoothHeadsetPriorityKey(String address)9570 public static final String getBluetoothHeadsetPriorityKey(String address) { 9571 return BLUETOOTH_HEADSET_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9572 } 9573 9574 /** 9575 * Get the key that retrieves a bluetooth a2dp sink's priority. 9576 * @hide 9577 */ getBluetoothA2dpSinkPriorityKey(String address)9578 public static final String getBluetoothA2dpSinkPriorityKey(String address) { 9579 return BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9580 } 9581 9582 /** 9583 * Get the key that retrieves a bluetooth a2dp src's priority. 9584 * @hide 9585 */ getBluetoothA2dpSrcPriorityKey(String address)9586 public static final String getBluetoothA2dpSrcPriorityKey(String address) { 9587 return BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9588 } 9589 9590 /** 9591 * Get the key that retrieves a bluetooth a2dp device's ability to support optional codecs. 9592 * @hide 9593 */ getBluetoothA2dpSupportsOptionalCodecsKey(String address)9594 public static final String getBluetoothA2dpSupportsOptionalCodecsKey(String address) { 9595 return BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX + 9596 address.toUpperCase(Locale.ROOT); 9597 } 9598 9599 /** 9600 * Get the key that retrieves whether a bluetooth a2dp device should have optional codecs 9601 * enabled. 9602 * @hide 9603 */ getBluetoothA2dpOptionalCodecsEnabledKey(String address)9604 public static final String getBluetoothA2dpOptionalCodecsEnabledKey(String address) { 9605 return BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX + 9606 address.toUpperCase(Locale.ROOT); 9607 } 9608 9609 /** 9610 * Get the key that retrieves a bluetooth Input Device's priority. 9611 * @hide 9612 */ getBluetoothInputDevicePriorityKey(String address)9613 public static final String getBluetoothInputDevicePriorityKey(String address) { 9614 return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9615 } 9616 9617 /** 9618 * Get the key that retrieves a bluetooth pan client priority. 9619 * @hide 9620 */ getBluetoothPanPriorityKey(String address)9621 public static final String getBluetoothPanPriorityKey(String address) { 9622 return BLUETOOTH_PAN_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9623 } 9624 9625 /** 9626 * Get the key that retrieves a bluetooth map priority. 9627 * @hide 9628 */ getBluetoothMapPriorityKey(String address)9629 public static final String getBluetoothMapPriorityKey(String address) { 9630 return BLUETOOTH_MAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9631 } 9632 9633 /** 9634 * Get the key that retrieves a bluetooth map client priority. 9635 * @hide 9636 */ getBluetoothMapClientPriorityKey(String address)9637 public static final String getBluetoothMapClientPriorityKey(String address) { 9638 return BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9639 } 9640 9641 /** 9642 * Get the key that retrieves a bluetooth pbap client priority. 9643 * @hide 9644 */ getBluetoothPbapClientPriorityKey(String address)9645 public static final String getBluetoothPbapClientPriorityKey(String address) { 9646 return BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9647 } 9648 9649 /** 9650 * Get the key that retrieves a bluetooth sap priority. 9651 * @hide 9652 */ getBluetoothSapPriorityKey(String address)9653 public static final String getBluetoothSapPriorityKey(String address) { 9654 return BLUETOOTH_SAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 9655 } 9656 9657 /** 9658 * Scaling factor for normal window animations. Setting to 0 will 9659 * disable window animations. 9660 */ 9661 public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale"; 9662 9663 /** 9664 * Scaling factor for activity transition animations. Setting to 0 will 9665 * disable window animations. 9666 */ 9667 public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale"; 9668 9669 /** 9670 * Scaling factor for Animator-based animations. This affects both the 9671 * start delay and duration of all such animations. Setting to 0 will 9672 * cause animations to end immediately. The default value is 1. 9673 */ 9674 public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale"; 9675 9676 /** 9677 * Scaling factor for normal window animations. Setting to 0 will 9678 * disable window animations. 9679 * 9680 * @hide 9681 */ 9682 public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations"; 9683 9684 /** 9685 * If 0, the compatibility mode is off for all applications. 9686 * If 1, older applications run under compatibility mode. 9687 * TODO: remove this settings before code freeze (bug/1907571) 9688 * @hide 9689 */ 9690 public static final String COMPATIBILITY_MODE = "compatibility_mode"; 9691 9692 /** 9693 * CDMA only settings 9694 * Emergency Tone 0 = Off 9695 * 1 = Alert 9696 * 2 = Vibrate 9697 * @hide 9698 */ 9699 public static final String EMERGENCY_TONE = "emergency_tone"; 9700 9701 /** 9702 * CDMA only settings 9703 * Whether the auto retry is enabled. The value is 9704 * boolean (1 or 0). 9705 * @hide 9706 */ 9707 public static final String CALL_AUTO_RETRY = "call_auto_retry"; 9708 9709 /** 9710 * A setting that can be read whether the emergency affordance is currently needed. 9711 * The value is a boolean (1 or 0). 9712 * @hide 9713 */ 9714 public static final String EMERGENCY_AFFORDANCE_NEEDED = "emergency_affordance_needed"; 9715 9716 /** 9717 * See RIL_PreferredNetworkType in ril.h 9718 * @hide 9719 */ 9720 public static final String PREFERRED_NETWORK_MODE = 9721 "preferred_network_mode"; 9722 9723 /** 9724 * Name of an application package to be debugged. 9725 */ 9726 public static final String DEBUG_APP = "debug_app"; 9727 9728 /** 9729 * If 1, when launching DEBUG_APP it will wait for the debugger before 9730 * starting user code. If 0, it will run normally. 9731 */ 9732 public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger"; 9733 9734 /** 9735 * Control whether the process CPU usage meter should be shown. 9736 * 9737 * @deprecated This functionality is no longer available as of 9738 * {@link android.os.Build.VERSION_CODES#N_MR1}. 9739 */ 9740 @Deprecated 9741 public static final String SHOW_PROCESSES = "show_processes"; 9742 9743 /** 9744 * If 1 low power mode is enabled. 9745 * @hide 9746 */ 9747 public static final String LOW_POWER_MODE = "low_power"; 9748 9749 /** 9750 * Battery level [1-99] at which low power mode automatically turns on. 9751 * If 0, it will not automatically turn on. 9752 * @hide 9753 */ 9754 public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level"; 9755 9756 /** 9757 * If not 0, the activity manager will aggressively finish activities and 9758 * processes as soon as they are no longer needed. If 0, the normal 9759 * extended lifetime is used. 9760 */ 9761 public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities"; 9762 9763 /** 9764 * Use Dock audio output for media: 9765 * 0 = disabled 9766 * 1 = enabled 9767 * @hide 9768 */ 9769 public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled"; 9770 9771 /** 9772 * The surround sound formats AC3, DTS or IEC61937 are 9773 * available for use if they are detected. 9774 * This is the default mode. 9775 * 9776 * Note that AUTO is equivalent to ALWAYS for Android TVs and other 9777 * devices that have an S/PDIF output. This is because S/PDIF 9778 * is unidirectional and the TV cannot know if a decoder is 9779 * connected. So it assumes they are always available. 9780 * @hide 9781 */ 9782 public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0; 9783 9784 /** 9785 * AC3, DTS or IEC61937 are NEVER available, even if they 9786 * are detected by the hardware. Those formats will not be 9787 * reported. 9788 * 9789 * An example use case would be an AVR reports that it is capable of 9790 * surround sound decoding but is broken. If NEVER is chosen 9791 * then apps must use PCM output instead of encoded output. 9792 * @hide 9793 */ 9794 public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1; 9795 9796 /** 9797 * AC3, DTS or IEC61937 are ALWAYS available, even if they 9798 * are not detected by the hardware. Those formats will be 9799 * reported as part of the HDMI output capability. Applications 9800 * are then free to use either PCM or encoded output. 9801 * 9802 * An example use case would be a when TV was connected over 9803 * TOS-link to an AVR. But the TV could not see it because TOS-link 9804 * is unidirectional. 9805 * @hide 9806 */ 9807 public static final int ENCODED_SURROUND_OUTPUT_ALWAYS = 2; 9808 9809 /** 9810 * Set to ENCODED_SURROUND_OUTPUT_AUTO, 9811 * ENCODED_SURROUND_OUTPUT_NEVER or 9812 * ENCODED_SURROUND_OUTPUT_ALWAYS 9813 * @hide 9814 */ 9815 public static final String ENCODED_SURROUND_OUTPUT = "encoded_surround_output"; 9816 9817 /** 9818 * Persisted safe headphone volume management state by AudioService 9819 * @hide 9820 */ 9821 public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state"; 9822 9823 /** 9824 * URL for tzinfo (time zone) updates 9825 * @hide 9826 */ 9827 public static final String TZINFO_UPDATE_CONTENT_URL = "tzinfo_content_url"; 9828 9829 /** 9830 * URL for tzinfo (time zone) update metadata 9831 * @hide 9832 */ 9833 public static final String TZINFO_UPDATE_METADATA_URL = "tzinfo_metadata_url"; 9834 9835 /** 9836 * URL for selinux (mandatory access control) updates 9837 * @hide 9838 */ 9839 public static final String SELINUX_UPDATE_CONTENT_URL = "selinux_content_url"; 9840 9841 /** 9842 * URL for selinux (mandatory access control) update metadata 9843 * @hide 9844 */ 9845 public static final String SELINUX_UPDATE_METADATA_URL = "selinux_metadata_url"; 9846 9847 /** 9848 * URL for sms short code updates 9849 * @hide 9850 */ 9851 public static final String SMS_SHORT_CODES_UPDATE_CONTENT_URL = 9852 "sms_short_codes_content_url"; 9853 9854 /** 9855 * URL for sms short code update metadata 9856 * @hide 9857 */ 9858 public static final String SMS_SHORT_CODES_UPDATE_METADATA_URL = 9859 "sms_short_codes_metadata_url"; 9860 9861 /** 9862 * URL for apn_db updates 9863 * @hide 9864 */ 9865 public static final String APN_DB_UPDATE_CONTENT_URL = "apn_db_content_url"; 9866 9867 /** 9868 * URL for apn_db update metadata 9869 * @hide 9870 */ 9871 public static final String APN_DB_UPDATE_METADATA_URL = "apn_db_metadata_url"; 9872 9873 /** 9874 * URL for cert pinlist updates 9875 * @hide 9876 */ 9877 public static final String CERT_PIN_UPDATE_CONTENT_URL = "cert_pin_content_url"; 9878 9879 /** 9880 * URL for cert pinlist updates 9881 * @hide 9882 */ 9883 public static final String CERT_PIN_UPDATE_METADATA_URL = "cert_pin_metadata_url"; 9884 9885 /** 9886 * URL for intent firewall updates 9887 * @hide 9888 */ 9889 public static final String INTENT_FIREWALL_UPDATE_CONTENT_URL = 9890 "intent_firewall_content_url"; 9891 9892 /** 9893 * URL for intent firewall update metadata 9894 * @hide 9895 */ 9896 public static final String INTENT_FIREWALL_UPDATE_METADATA_URL = 9897 "intent_firewall_metadata_url"; 9898 9899 /** 9900 * URL for lang id model updates 9901 * @hide 9902 */ 9903 public static final String LANG_ID_UPDATE_CONTENT_URL = "lang_id_content_url"; 9904 9905 /** 9906 * URL for lang id model update metadata 9907 * @hide 9908 */ 9909 public static final String LANG_ID_UPDATE_METADATA_URL = "lang_id_metadata_url"; 9910 9911 /** 9912 * URL for smart selection model updates 9913 * @hide 9914 */ 9915 public static final String SMART_SELECTION_UPDATE_CONTENT_URL = 9916 "smart_selection_content_url"; 9917 9918 /** 9919 * URL for smart selection model update metadata 9920 * @hide 9921 */ 9922 public static final String SMART_SELECTION_UPDATE_METADATA_URL = 9923 "smart_selection_metadata_url"; 9924 9925 /** 9926 * SELinux enforcement status. If 0, permissive; if 1, enforcing. 9927 * @hide 9928 */ 9929 public static final String SELINUX_STATUS = "selinux_status"; 9930 9931 /** 9932 * Developer setting to force RTL layout. 9933 * @hide 9934 */ 9935 public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl"; 9936 9937 /** 9938 * Milliseconds after screen-off after which low battery sounds will be silenced. 9939 * 9940 * If zero, battery sounds will always play. 9941 * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider. 9942 * 9943 * @hide 9944 */ 9945 public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout"; 9946 9947 /** 9948 * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after 9949 * the caller is done with this, they should call {@link ContentResolver#delete} to 9950 * clean up any value that they may have written. 9951 * 9952 * @hide 9953 */ 9954 public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms"; 9955 9956 /** 9957 * Defines global runtime overrides to window policy. 9958 * 9959 * See {@link com.android.server.policy.PolicyControl} for value format. 9960 * 9961 * @hide 9962 */ 9963 public static final String POLICY_CONTROL = "policy_control"; 9964 9965 /** 9966 * Defines global zen mode. ZEN_MODE_OFF, ZEN_MODE_IMPORTANT_INTERRUPTIONS, 9967 * or ZEN_MODE_NO_INTERRUPTIONS. 9968 * 9969 * @hide 9970 */ 9971 public static final String ZEN_MODE = "zen_mode"; 9972 9973 /** @hide */ public static final int ZEN_MODE_OFF = 0; 9974 /** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; 9975 /** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2; 9976 /** @hide */ public static final int ZEN_MODE_ALARMS = 3; 9977 zenModeToString(int mode)9978 /** @hide */ public static String zenModeToString(int mode) { 9979 if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS"; 9980 if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS"; 9981 if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS"; 9982 return "ZEN_MODE_OFF"; 9983 } 9984 isValidZenMode(int value)9985 /** @hide */ public static boolean isValidZenMode(int value) { 9986 switch (value) { 9987 case Global.ZEN_MODE_OFF: 9988 case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: 9989 case Global.ZEN_MODE_ALARMS: 9990 case Global.ZEN_MODE_NO_INTERRUPTIONS: 9991 return true; 9992 default: 9993 return false; 9994 } 9995 } 9996 9997 /** 9998 * Value of the ringer before entering zen mode. 9999 * 10000 * @hide 10001 */ 10002 public static final String ZEN_MODE_RINGER_LEVEL = "zen_mode_ringer_level"; 10003 10004 /** 10005 * Opaque value, changes when persisted zen mode configuration changes. 10006 * 10007 * @hide 10008 */ 10009 public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag"; 10010 10011 /** 10012 * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON. 10013 * 10014 * @hide 10015 */ 10016 public static final String HEADS_UP_NOTIFICATIONS_ENABLED = 10017 "heads_up_notifications_enabled"; 10018 10019 /** @hide */ public static final int HEADS_UP_OFF = 0; 10020 /** @hide */ public static final int HEADS_UP_ON = 1; 10021 10022 /** 10023 * The name of the device 10024 */ 10025 public static final String DEVICE_NAME = "device_name"; 10026 10027 /** 10028 * Whether the NetworkScoringService has been first initialized. 10029 * <p> 10030 * Type: int (0 for false, 1 for true) 10031 * @hide 10032 */ 10033 public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned"; 10034 10035 /** 10036 * Whether the user wants to be prompted for password to decrypt the device on boot. 10037 * This only matters if the storage is encrypted. 10038 * <p> 10039 * Type: int (0 for false, 1 for true) 10040 * @hide 10041 */ 10042 public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; 10043 10044 /** 10045 * Whether the Volte is enabled 10046 * <p> 10047 * Type: int (0 for false, 1 for true) 10048 * @hide 10049 */ 10050 public static final String ENHANCED_4G_MODE_ENABLED = "volte_vt_enabled"; 10051 10052 /** 10053 * Whether VT (Video Telephony over IMS) is enabled 10054 * <p> 10055 * Type: int (0 for false, 1 for true) 10056 * 10057 * @hide 10058 */ 10059 public static final String VT_IMS_ENABLED = "vt_ims_enabled"; 10060 10061 /** 10062 * Whether WFC is enabled 10063 * <p> 10064 * Type: int (0 for false, 1 for true) 10065 * 10066 * @hide 10067 */ 10068 public static final String WFC_IMS_ENABLED = "wfc_ims_enabled"; 10069 10070 /** 10071 * WFC mode on home/non-roaming network. 10072 * <p> 10073 * Type: int - 2=Wi-Fi preferred, 1=Cellular preferred, 0=Wi-Fi only 10074 * 10075 * @hide 10076 */ 10077 public static final String WFC_IMS_MODE = "wfc_ims_mode"; 10078 10079 /** 10080 * WFC mode on roaming network. 10081 * <p> 10082 * Type: int - see {@link #WFC_IMS_MODE} for values 10083 * 10084 * @hide 10085 */ 10086 public static final String WFC_IMS_ROAMING_MODE = "wfc_ims_roaming_mode"; 10087 10088 /** 10089 * Whether WFC roaming is enabled 10090 * <p> 10091 * Type: int (0 for false, 1 for true) 10092 * 10093 * @hide 10094 */ 10095 public static final String WFC_IMS_ROAMING_ENABLED = "wfc_ims_roaming_enabled"; 10096 10097 /** 10098 * Whether user can enable/disable LTE as a preferred network. A carrier might control 10099 * this via gservices, OMA-DM, carrier app, etc. 10100 * <p> 10101 * Type: int (0 for false, 1 for true) 10102 * @hide 10103 */ 10104 public static final String LTE_SERVICE_FORCED = "lte_service_forced"; 10105 10106 /** 10107 * Ephemeral app cookie max size in bytes. 10108 * <p> 10109 * Type: int 10110 * @hide 10111 */ 10112 public static final String EPHEMERAL_COOKIE_MAX_SIZE_BYTES = 10113 "ephemeral_cookie_max_size_bytes"; 10114 10115 /** 10116 * Toggle to enable/disable the entire ephemeral feature. By default, ephemeral is 10117 * enabled. Set to zero to disable. 10118 * <p> 10119 * Type: int (0 for false, 1 for true) 10120 * 10121 * @hide 10122 */ 10123 public static final String ENABLE_EPHEMERAL_FEATURE = "enable_ephemeral_feature"; 10124 10125 /** 10126 * Toggle to enable/disable dexopt for instant applications. The default is for dexopt 10127 * to be disabled. 10128 * <p> 10129 * Type: int (0 to disable, 1 to enable) 10130 * 10131 * @hide 10132 */ 10133 public static final String INSTANT_APP_DEXOPT_ENABLED = "instant_app_dexopt_enabled"; 10134 10135 /** 10136 * The min period for caching installed instant apps in milliseconds. 10137 * <p> 10138 * Type: long 10139 * @hide 10140 */ 10141 public static final String INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD = 10142 "installed_instant_app_min_cache_period"; 10143 10144 /** 10145 * The max period for caching installed instant apps in milliseconds. 10146 * <p> 10147 * Type: long 10148 * @hide 10149 */ 10150 public static final String INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD = 10151 "installed_instant_app_max_cache_period"; 10152 10153 /** 10154 * The min period for caching uninstalled instant apps in milliseconds. 10155 * <p> 10156 * Type: long 10157 * @hide 10158 */ 10159 public static final String UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD = 10160 "uninstalled_instant_app_min_cache_period"; 10161 10162 /** 10163 * The max period for caching uninstalled instant apps in milliseconds. 10164 * <p> 10165 * Type: long 10166 * @hide 10167 */ 10168 public static final String UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD = 10169 "uninstalled_instant_app_max_cache_period"; 10170 10171 /** 10172 * The min period for caching unused static shared libs in milliseconds. 10173 * <p> 10174 * Type: long 10175 * @hide 10176 */ 10177 public static final String UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD = 10178 "unused_static_shared_lib_min_cache_period"; 10179 10180 /** 10181 * Allows switching users when system user is locked. 10182 * <p> 10183 * Type: int 10184 * @hide 10185 */ 10186 public static final String ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED = 10187 "allow_user_switching_when_system_user_locked"; 10188 10189 /** 10190 * Boot count since the device starts running APK level 24. 10191 * <p> 10192 * Type: int 10193 */ 10194 public static final String BOOT_COUNT = "boot_count"; 10195 10196 /** 10197 * Whether the safe boot is disallowed. 10198 * 10199 * <p>This setting should have the identical value as the corresponding user restriction. 10200 * The purpose of the setting is to make the restriction available in early boot stages 10201 * before the user restrictions are loaded. 10202 * @hide 10203 */ 10204 public static final String SAFE_BOOT_DISALLOWED = "safe_boot_disallowed"; 10205 10206 /** 10207 * Whether this device is currently in retail demo mode. If true, device 10208 * usage is severely limited. 10209 * <p> 10210 * Type: int (0 for false, 1 for true) 10211 * @hide 10212 */ 10213 public static final String DEVICE_DEMO_MODE = "device_demo_mode"; 10214 10215 /** 10216 * Indicates the maximum time that an app is blocked for the network rules to get updated. 10217 * 10218 * Type: long 10219 * 10220 * @hide 10221 */ 10222 public static final String NETWORK_ACCESS_TIMEOUT_MS = "network_access_timeout_ms"; 10223 10224 /** 10225 * The reason for the settings database being downgraded. This is only for 10226 * troubleshooting purposes and its value should not be interpreted in any way. 10227 * 10228 * Type: string 10229 * 10230 * @hide 10231 */ 10232 public static final String DATABASE_DOWNGRADE_REASON = "database_downgrade_reason"; 10233 10234 /** 10235 * The build id of when the settings database was first created (or re-created due it 10236 * being missing). 10237 * 10238 * Type: string 10239 * 10240 * @hide 10241 */ 10242 public static final String DATABASE_CREATION_BUILDID = "database_creation_buildid"; 10243 10244 /** 10245 * Flag to toggle journal mode WAL on or off for the contacts database. WAL is enabled by 10246 * default. Set to 0 to disable. 10247 * 10248 * @hide 10249 */ 10250 public static final String CONTACTS_DATABASE_WAL_ENABLED = "contacts_database_wal_enabled"; 10251 10252 /** 10253 * Flag to enable the link to location permissions in location setting. Set to 0 to disable. 10254 * 10255 * @hide 10256 */ 10257 public static final String LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED = 10258 "location_settings_link_to_permissions_enabled"; 10259 10260 /** 10261 * Flag to enable use of RefactoredBackupManagerService. 10262 * 10263 * @hide 10264 */ 10265 public static final String BACKUP_REFACTORED_SERVICE_DISABLED = 10266 "backup_refactored_service_disabled"; 10267 10268 /** 10269 * Flag to set the waiting time for euicc factory reset inside System > Settings 10270 * Type: long 10271 * 10272 * @hide 10273 */ 10274 public static final String EUICC_FACTORY_RESET_TIMEOUT_MILLIS = 10275 "euicc_factory_reset_timeout_millis"; 10276 10277 /** 10278 * Flag to set the timeout for when to refresh the storage settings cached data. 10279 * Type: long 10280 * 10281 * @hide 10282 */ 10283 public static final String STORAGE_SETTINGS_CLOBBER_THRESHOLD = 10284 "storage_settings_clobber_threshold"; 10285 10286 /** 10287 * Settings to backup. This is here so that it's in the same place as the settings 10288 * keys and easy to update. 10289 * 10290 * These keys may be mentioned in the SETTINGS_TO_BACKUP arrays in System 10291 * and Secure as well. This is because those tables drive both backup and 10292 * restore, and restore needs to properly whitelist keys that used to live 10293 * in those namespaces. The keys will only actually be backed up / restored 10294 * if they are also mentioned in this table (Global.SETTINGS_TO_BACKUP). 10295 * 10296 * NOTE: Settings are backed up and restored in the order they appear 10297 * in this array. If you have one setting depending on another, 10298 * make sure that they are ordered appropriately. 10299 * 10300 * @hide 10301 */ 10302 public static final String[] SETTINGS_TO_BACKUP = { 10303 BUGREPORT_IN_POWER_MENU, 10304 STAY_ON_WHILE_PLUGGED_IN, 10305 AUTO_TIME, 10306 AUTO_TIME_ZONE, 10307 POWER_SOUNDS_ENABLED, 10308 DOCK_SOUNDS_ENABLED, 10309 CHARGING_SOUNDS_ENABLED, 10310 USB_MASS_STORAGE_ENABLED, 10311 NETWORK_RECOMMENDATIONS_ENABLED, 10312 WIFI_WAKEUP_ENABLED, 10313 WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 10314 USE_OPEN_WIFI_PACKAGE, 10315 WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, 10316 EMERGENCY_TONE, 10317 CALL_AUTO_RETRY, 10318 DOCK_AUDIO_MEDIA_ENABLED, 10319 ENCODED_SURROUND_OUTPUT, 10320 LOW_POWER_MODE_TRIGGER_LEVEL, 10321 BLUETOOTH_ON 10322 }; 10323 10324 /** @hide */ 10325 public static final String[] LEGACY_RESTORE_SETTINGS = { 10326 }; 10327 10328 private static final ContentProviderHolder sProviderHolder = 10329 new ContentProviderHolder(CONTENT_URI); 10330 10331 // Populated lazily, guarded by class object: 10332 private static final NameValueCache sNameValueCache = new NameValueCache( 10333 CONTENT_URI, 10334 CALL_METHOD_GET_GLOBAL, 10335 CALL_METHOD_PUT_GLOBAL, 10336 sProviderHolder); 10337 10338 // Certain settings have been moved from global to the per-user secure namespace 10339 private static final HashSet<String> MOVED_TO_SECURE; 10340 static { 10341 MOVED_TO_SECURE = new HashSet<>(1); 10342 MOVED_TO_SECURE.add(Settings.Global.INSTALL_NON_MARKET_APPS); 10343 } 10344 10345 /** @hide */ getMovedToSecureSettings(Set<String> outKeySet)10346 public static void getMovedToSecureSettings(Set<String> outKeySet) { 10347 outKeySet.addAll(MOVED_TO_SECURE); 10348 } 10349 10350 /** @hide */ clearProviderForTest()10351 public static void clearProviderForTest() { 10352 sProviderHolder.clearProviderForTest(); 10353 sNameValueCache.clearGenerationTrackerForTest(); 10354 } 10355 10356 /** 10357 * Look up a name in the database. 10358 * @param resolver to access the database with 10359 * @param name to look up in the table 10360 * @return the corresponding value, or null if not present 10361 */ getString(ContentResolver resolver, String name)10362 public static String getString(ContentResolver resolver, String name) { 10363 return getStringForUser(resolver, name, UserHandle.myUserId()); 10364 } 10365 10366 /** @hide */ getStringForUser(ContentResolver resolver, String name, int userHandle)10367 public static String getStringForUser(ContentResolver resolver, String name, 10368 int userHandle) { 10369 if (MOVED_TO_SECURE.contains(name)) { 10370 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global" 10371 + " to android.provider.Settings.Secure, returning read-only value."); 10372 return Secure.getStringForUser(resolver, name, userHandle); 10373 } 10374 return sNameValueCache.getStringForUser(resolver, name, userHandle); 10375 } 10376 10377 /** 10378 * Store a name/value pair into the database. 10379 * @param resolver to access the database with 10380 * @param name to store 10381 * @param value to associate with the name 10382 * @return true if the value was set, false on database errors 10383 */ putString(ContentResolver resolver, String name, String value)10384 public static boolean putString(ContentResolver resolver, 10385 String name, String value) { 10386 return putStringForUser(resolver, name, value, null, false, UserHandle.myUserId()); 10387 } 10388 10389 /** 10390 * Store a name/value pair into the database. 10391 * <p> 10392 * The method takes an optional tag to associate with the setting 10393 * which can be used to clear only settings made by your package and 10394 * associated with this tag by passing the tag to {@link 10395 * #resetToDefaults(ContentResolver, String)}. Anyone can override 10396 * the current tag. Also if another package changes the setting 10397 * then the tag will be set to the one specified in the set call 10398 * which can be null. Also any of the settings setters that do not 10399 * take a tag as an argument effectively clears the tag. 10400 * </p><p> 10401 * For example, if you set settings A and B with tags T1 and T2 and 10402 * another app changes setting A (potentially to the same value), it 10403 * can assign to it a tag T3 (note that now the package that changed 10404 * the setting is not yours). Now if you reset your changes for T1 and 10405 * T2 only setting B will be reset and A not (as it was changed by 10406 * another package) but since A did not change you are in the desired 10407 * initial state. Now if the other app changes the value of A (assuming 10408 * you registered an observer in the beginning) you would detect that 10409 * the setting was changed by another app and handle this appropriately 10410 * (ignore, set back to some value, etc). 10411 * </p><p> 10412 * Also the method takes an argument whether to make the value the 10413 * default for this setting. If the system already specified a default 10414 * value, then the one passed in here will <strong>not</strong> 10415 * be set as the default. 10416 * </p> 10417 * 10418 * @param resolver to access the database with. 10419 * @param name to store. 10420 * @param value to associate with the name. 10421 * @param tag to associated with the setting. 10422 * @param makeDefault whether to make the value the default one. 10423 * @return true if the value was set, false on database errors. 10424 * 10425 * @see #resetToDefaults(ContentResolver, String) 10426 * 10427 * @hide 10428 */ 10429 @SystemApi 10430 @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) putString(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault)10431 public static boolean putString(@NonNull ContentResolver resolver, 10432 @NonNull String name, @Nullable String value, @Nullable String tag, 10433 boolean makeDefault) { 10434 return putStringForUser(resolver, name, value, tag, makeDefault, 10435 UserHandle.myUserId()); 10436 } 10437 10438 /** 10439 * Reset the settings to their defaults. This would reset <strong>only</strong> 10440 * settings set by the caller's package. Think of it of a way to undo your own 10441 * changes to the secure settings. Passing in the optional tag will reset only 10442 * settings changed by your package and associated with this tag. 10443 * 10444 * @param resolver Handle to the content resolver. 10445 * @param tag Optional tag which should be associated with the settings to reset. 10446 * 10447 * @see #putString(ContentResolver, String, String, String, boolean) 10448 * 10449 * @hide 10450 */ 10451 @SystemApi 10452 @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) resetToDefaults(@onNull ContentResolver resolver, @Nullable String tag)10453 public static void resetToDefaults(@NonNull ContentResolver resolver, 10454 @Nullable String tag) { 10455 resetToDefaultsAsUser(resolver, tag, RESET_MODE_PACKAGE_DEFAULTS, 10456 UserHandle.myUserId()); 10457 } 10458 10459 /** 10460 * Reset the settings to their defaults for a given user with a specific mode. The 10461 * optional tag argument is valid only for {@link #RESET_MODE_PACKAGE_DEFAULTS} 10462 * allowing resetting the settings made by a package and associated with the tag. 10463 * 10464 * @param resolver Handle to the content resolver. 10465 * @param tag Optional tag which should be associated with the settings to reset. 10466 * @param mode The reset mode. 10467 * @param userHandle The user for which to reset to defaults. 10468 * 10469 * @see #RESET_MODE_PACKAGE_DEFAULTS 10470 * @see #RESET_MODE_UNTRUSTED_DEFAULTS 10471 * @see #RESET_MODE_UNTRUSTED_CHANGES 10472 * @see #RESET_MODE_TRUSTED_DEFAULTS 10473 * 10474 * @hide 10475 */ resetToDefaultsAsUser(@onNull ContentResolver resolver, @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle)10476 public static void resetToDefaultsAsUser(@NonNull ContentResolver resolver, 10477 @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle) { 10478 try { 10479 Bundle arg = new Bundle(); 10480 arg.putInt(CALL_METHOD_USER_KEY, userHandle); 10481 if (tag != null) { 10482 arg.putString(CALL_METHOD_TAG_KEY, tag); 10483 } 10484 arg.putInt(CALL_METHOD_RESET_MODE_KEY, mode); 10485 IContentProvider cp = sProviderHolder.getProvider(resolver); 10486 cp.call(resolver.getPackageName(), CALL_METHOD_RESET_GLOBAL, null, arg); 10487 } catch (RemoteException e) { 10488 Log.w(TAG, "Can't reset do defaults for " + CONTENT_URI, e); 10489 } 10490 } 10491 10492 /** @hide */ putStringForUser(ContentResolver resolver, String name, String value, int userHandle)10493 public static boolean putStringForUser(ContentResolver resolver, 10494 String name, String value, int userHandle) { 10495 return putStringForUser(resolver, name, value, null, false, userHandle); 10496 } 10497 10498 /** @hide */ putStringForUser(@onNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, @UserIdInt int userHandle)10499 public static boolean putStringForUser(@NonNull ContentResolver resolver, 10500 @NonNull String name, @Nullable String value, @Nullable String tag, 10501 boolean makeDefault, @UserIdInt int userHandle) { 10502 if (LOCAL_LOGV) { 10503 Log.v(TAG, "Global.putString(name=" + name + ", value=" + value 10504 + " for " + userHandle); 10505 } 10506 // Global and Secure have the same access policy so we can forward writes 10507 if (MOVED_TO_SECURE.contains(name)) { 10508 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global" 10509 + " to android.provider.Settings.Secure, value is unchanged."); 10510 return Secure.putStringForUser(resolver, name, value, tag, 10511 makeDefault, userHandle); 10512 } 10513 return sNameValueCache.putStringForUser(resolver, name, value, tag, 10514 makeDefault, userHandle); 10515 } 10516 10517 /** 10518 * Construct the content URI for a particular name/value pair, 10519 * useful for monitoring changes with a ContentObserver. 10520 * @param name to look up in the table 10521 * @return the corresponding content URI, or null if not present 10522 */ getUriFor(String name)10523 public static Uri getUriFor(String name) { 10524 return getUriFor(CONTENT_URI, name); 10525 } 10526 10527 /** 10528 * Convenience function for retrieving a single secure settings value 10529 * as an integer. Note that internally setting values are always 10530 * stored as strings; this function converts the string to an integer 10531 * for you. The default value will be returned if the setting is 10532 * not defined or not an integer. 10533 * 10534 * @param cr The ContentResolver to access. 10535 * @param name The name of the setting to retrieve. 10536 * @param def Value to return if the setting is not defined. 10537 * 10538 * @return The setting's current value, or 'def' if it is not defined 10539 * or not a valid integer. 10540 */ getInt(ContentResolver cr, String name, int def)10541 public static int getInt(ContentResolver cr, String name, int def) { 10542 String v = getString(cr, name); 10543 try { 10544 return v != null ? Integer.parseInt(v) : def; 10545 } catch (NumberFormatException e) { 10546 return def; 10547 } 10548 } 10549 10550 /** 10551 * Convenience function for retrieving a single secure settings value 10552 * as an integer. Note that internally setting values are always 10553 * stored as strings; this function converts the string to an integer 10554 * for you. 10555 * <p> 10556 * This version does not take a default value. If the setting has not 10557 * been set, or the string value is not a number, 10558 * it throws {@link SettingNotFoundException}. 10559 * 10560 * @param cr The ContentResolver to access. 10561 * @param name The name of the setting to retrieve. 10562 * 10563 * @throws SettingNotFoundException Thrown if a setting by the given 10564 * name can't be found or the setting value is not an integer. 10565 * 10566 * @return The setting's current value. 10567 */ getInt(ContentResolver cr, String name)10568 public static int getInt(ContentResolver cr, String name) 10569 throws SettingNotFoundException { 10570 String v = getString(cr, name); 10571 try { 10572 return Integer.parseInt(v); 10573 } catch (NumberFormatException e) { 10574 throw new SettingNotFoundException(name); 10575 } 10576 } 10577 10578 /** 10579 * Convenience function for updating a single settings value as an 10580 * integer. This will either create a new entry in the table if the 10581 * given name does not exist, or modify the value of the existing row 10582 * with that name. Note that internally setting values are always 10583 * stored as strings, so this function converts the given value to a 10584 * string before storing it. 10585 * 10586 * @param cr The ContentResolver to access. 10587 * @param name The name of the setting to modify. 10588 * @param value The new value for the setting. 10589 * @return true if the value was set, false on database errors 10590 */ putInt(ContentResolver cr, String name, int value)10591 public static boolean putInt(ContentResolver cr, String name, int value) { 10592 return putString(cr, name, Integer.toString(value)); 10593 } 10594 10595 /** 10596 * Convenience function for retrieving a single secure settings value 10597 * as a {@code long}. Note that internally setting values are always 10598 * stored as strings; this function converts the string to a {@code long} 10599 * for you. The default value will be returned if the setting is 10600 * not defined or not a {@code long}. 10601 * 10602 * @param cr The ContentResolver to access. 10603 * @param name The name of the setting to retrieve. 10604 * @param def Value to return if the setting is not defined. 10605 * 10606 * @return The setting's current value, or 'def' if it is not defined 10607 * or not a valid {@code long}. 10608 */ getLong(ContentResolver cr, String name, long def)10609 public static long getLong(ContentResolver cr, String name, long def) { 10610 String valString = getString(cr, name); 10611 long value; 10612 try { 10613 value = valString != null ? Long.parseLong(valString) : def; 10614 } catch (NumberFormatException e) { 10615 value = def; 10616 } 10617 return value; 10618 } 10619 10620 /** 10621 * Convenience function for retrieving a single secure settings value 10622 * as a {@code long}. Note that internally setting values are always 10623 * stored as strings; this function converts the string to a {@code long} 10624 * for you. 10625 * <p> 10626 * This version does not take a default value. If the setting has not 10627 * been set, or the string value is not a number, 10628 * it throws {@link SettingNotFoundException}. 10629 * 10630 * @param cr The ContentResolver to access. 10631 * @param name The name of the setting to retrieve. 10632 * 10633 * @return The setting's current value. 10634 * @throws SettingNotFoundException Thrown if a setting by the given 10635 * name can't be found or the setting value is not an integer. 10636 */ getLong(ContentResolver cr, String name)10637 public static long getLong(ContentResolver cr, String name) 10638 throws SettingNotFoundException { 10639 String valString = getString(cr, name); 10640 try { 10641 return Long.parseLong(valString); 10642 } catch (NumberFormatException e) { 10643 throw new SettingNotFoundException(name); 10644 } 10645 } 10646 10647 /** 10648 * Convenience function for updating a secure settings value as a long 10649 * integer. This will either create a new entry in the table if the 10650 * given name does not exist, or modify the value of the existing row 10651 * with that name. Note that internally setting values are always 10652 * stored as strings, so this function converts the given value to a 10653 * string before storing it. 10654 * 10655 * @param cr The ContentResolver to access. 10656 * @param name The name of the setting to modify. 10657 * @param value The new value for the setting. 10658 * @return true if the value was set, false on database errors 10659 */ putLong(ContentResolver cr, String name, long value)10660 public static boolean putLong(ContentResolver cr, String name, long value) { 10661 return putString(cr, name, Long.toString(value)); 10662 } 10663 10664 /** 10665 * Convenience function for retrieving a single secure settings value 10666 * as a floating point number. Note that internally setting values are 10667 * always stored as strings; this function converts the string to an 10668 * float for you. The default value will be returned if the setting 10669 * is not defined or not a valid float. 10670 * 10671 * @param cr The ContentResolver to access. 10672 * @param name The name of the setting to retrieve. 10673 * @param def Value to return if the setting is not defined. 10674 * 10675 * @return The setting's current value, or 'def' if it is not defined 10676 * or not a valid float. 10677 */ getFloat(ContentResolver cr, String name, float def)10678 public static float getFloat(ContentResolver cr, String name, float def) { 10679 String v = getString(cr, name); 10680 try { 10681 return v != null ? Float.parseFloat(v) : def; 10682 } catch (NumberFormatException e) { 10683 return def; 10684 } 10685 } 10686 10687 /** 10688 * Convenience function for retrieving a single secure settings value 10689 * as a float. Note that internally setting values are always 10690 * stored as strings; this function converts the string to a float 10691 * for you. 10692 * <p> 10693 * This version does not take a default value. If the setting has not 10694 * been set, or the string value is not a number, 10695 * it throws {@link SettingNotFoundException}. 10696 * 10697 * @param cr The ContentResolver to access. 10698 * @param name The name of the setting to retrieve. 10699 * 10700 * @throws SettingNotFoundException Thrown if a setting by the given 10701 * name can't be found or the setting value is not a float. 10702 * 10703 * @return The setting's current value. 10704 */ getFloat(ContentResolver cr, String name)10705 public static float getFloat(ContentResolver cr, String name) 10706 throws SettingNotFoundException { 10707 String v = getString(cr, name); 10708 if (v == null) { 10709 throw new SettingNotFoundException(name); 10710 } 10711 try { 10712 return Float.parseFloat(v); 10713 } catch (NumberFormatException e) { 10714 throw new SettingNotFoundException(name); 10715 } 10716 } 10717 10718 /** 10719 * Convenience function for updating a single settings value as a 10720 * floating point number. This will either create a new entry in the 10721 * table if the given name does not exist, or modify the value of the 10722 * existing row with that name. Note that internally setting values 10723 * are always stored as strings, so this function converts the given 10724 * value to a string before storing it. 10725 * 10726 * @param cr The ContentResolver to access. 10727 * @param name The name of the setting to modify. 10728 * @param value The new value for the setting. 10729 * @return true if the value was set, false on database errors 10730 */ putFloat(ContentResolver cr, String name, float value)10731 public static boolean putFloat(ContentResolver cr, String name, float value) { 10732 return putString(cr, name, Float.toString(value)); 10733 } 10734 10735 /** 10736 * Subscription to be used for voice call on a multi sim device. The supported values 10737 * are 0 = SUB1, 1 = SUB2 and etc. 10738 * @hide 10739 */ 10740 public static final String MULTI_SIM_VOICE_CALL_SUBSCRIPTION = "multi_sim_voice_call"; 10741 10742 /** 10743 * Used to provide option to user to select subscription during dial. 10744 * The supported values are 0 = disable or 1 = enable prompt. 10745 * @hide 10746 */ 10747 public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt"; 10748 10749 /** 10750 * Subscription to be used for data call on a multi sim device. The supported values 10751 * are 0 = SUB1, 1 = SUB2 and etc. 10752 * @hide 10753 */ 10754 public static final String MULTI_SIM_DATA_CALL_SUBSCRIPTION = "multi_sim_data_call"; 10755 10756 /** 10757 * Subscription to be used for SMS on a multi sim device. The supported values 10758 * are 0 = SUB1, 1 = SUB2 and etc. 10759 * @hide 10760 */ 10761 public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms"; 10762 10763 /** 10764 * Used to provide option to user to select subscription during send SMS. 10765 * The value 1 - enable, 0 - disable 10766 * @hide 10767 */ 10768 public static final String MULTI_SIM_SMS_PROMPT = "multi_sim_sms_prompt"; 10769 10770 10771 10772 /** User preferred subscriptions setting. 10773 * This holds the details of the user selected subscription from the card and 10774 * the activation status. Each settings string have the coma separated values 10775 * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index 10776 * @hide 10777 */ 10778 public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1", 10779 "user_preferred_sub2","user_preferred_sub3"}; 10780 10781 /** 10782 * Whether to enable new contacts aggregator or not. 10783 * The value 1 - enable, 0 - disable 10784 * @hide 10785 */ 10786 public static final String NEW_CONTACT_AGGREGATOR = "new_contact_aggregator"; 10787 10788 /** 10789 * Whether to enable contacts metadata syncing or not 10790 * The value 1 - enable, 0 - disable 10791 * 10792 * @removed 10793 */ 10794 @Deprecated 10795 public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync"; 10796 10797 /** 10798 * Whether to enable contacts metadata syncing or not 10799 * The value 1 - enable, 0 - disable 10800 */ 10801 public static final String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled"; 10802 10803 /** 10804 * Whether to enable cellular on boot. 10805 * The value 1 - enable, 0 - disable 10806 * @hide 10807 */ 10808 public static final String ENABLE_CELLULAR_ON_BOOT = "enable_cellular_on_boot"; 10809 10810 /** 10811 * The maximum allowed notification enqueue rate in Hertz. 10812 * 10813 * Should be a float, and includes updates only. 10814 * @hide 10815 */ 10816 public static final String MAX_NOTIFICATION_ENQUEUE_RATE = "max_notification_enqueue_rate"; 10817 10818 /** 10819 * Displays toasts when an app posts a notification that does not specify a valid channel. 10820 * 10821 * The value 1 - enable, 0 - disable 10822 * @hide 10823 */ 10824 public static final String SHOW_NOTIFICATION_CHANNEL_WARNINGS = 10825 "show_notification_channel_warnings"; 10826 10827 /** 10828 * Whether cell is enabled/disabled 10829 * @hide 10830 */ 10831 public static final String CELL_ON = "cell_on"; 10832 10833 /** 10834 * Global settings which can be accessed by instant apps. 10835 * @hide 10836 */ 10837 public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>(); 10838 static { 10839 INSTANT_APP_SETTINGS.add(WAIT_FOR_DEBUGGER); 10840 INSTANT_APP_SETTINGS.add(DEVICE_PROVISIONED); 10841 INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES); 10842 INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RTL); 10843 INSTANT_APP_SETTINGS.add(EPHEMERAL_COOKIE_MAX_SIZE_BYTES); 10844 INSTANT_APP_SETTINGS.add(AIRPLANE_MODE_ON); 10845 INSTANT_APP_SETTINGS.add(WINDOW_ANIMATION_SCALE); 10846 INSTANT_APP_SETTINGS.add(TRANSITION_ANIMATION_SCALE); 10847 INSTANT_APP_SETTINGS.add(ANIMATOR_DURATION_SCALE); 10848 INSTANT_APP_SETTINGS.add(DEBUG_VIEW_ATTRIBUTES); 10849 INSTANT_APP_SETTINGS.add(WTF_IS_FATAL); 10850 INSTANT_APP_SETTINGS.add(SEND_ACTION_APP_ERROR); 10851 } 10852 10853 /** 10854 * Whether to show the high temperature warning notification. 10855 * @hide 10856 */ 10857 public static final String SHOW_TEMPERATURE_WARNING = "show_temperature_warning"; 10858 10859 /** 10860 * Temperature at which the high temperature warning notification should be shown. 10861 * @hide 10862 */ 10863 public static final String WARNING_TEMPERATURE = "warning_temperature"; 10864 10865 /** 10866 * Whether the diskstats logging task is enabled/disabled. 10867 * @hide 10868 */ 10869 public static final String ENABLE_DISKSTATS_LOGGING = "enable_diskstats_logging"; 10870 10871 /** 10872 * Whether the cache quota calculation task is enabled/disabled. 10873 * @hide 10874 */ 10875 public static final String ENABLE_CACHE_QUOTA_CALCULATION = 10876 "enable_cache_quota_calculation"; 10877 10878 /** 10879 * Whether the Deletion Helper no threshold toggle is available. 10880 * @hide 10881 */ 10882 public static final String ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE = 10883 "enable_deletion_helper_no_threshold_toggle"; 10884 10885 /** 10886 * The list of snooze options for notifications 10887 * This is encoded as a key=value list, separated by commas. Ex: 10888 * 10889 * "default=60,options_array=15:30:60:120" 10890 * 10891 * The following keys are supported: 10892 * 10893 * <pre> 10894 * default (int) 10895 * options_array (string) 10896 * </pre> 10897 * 10898 * All delays in integer minutes. Array order is respected. 10899 * Options will be used in order up to the maximum allowed by the UI. 10900 * @hide 10901 */ 10902 public static final String NOTIFICATION_SNOOZE_OPTIONS = 10903 "notification_snooze_options"; 10904 } 10905 10906 /** 10907 * User-defined bookmarks and shortcuts. The target of each bookmark is an 10908 * Intent URL, allowing it to be either a web page or a particular 10909 * application activity. 10910 * 10911 * @hide 10912 */ 10913 public static final class Bookmarks implements BaseColumns 10914 { 10915 private static final String TAG = "Bookmarks"; 10916 10917 /** 10918 * The content:// style URL for this table 10919 */ 10920 public static final Uri CONTENT_URI = 10921 Uri.parse("content://" + AUTHORITY + "/bookmarks"); 10922 10923 /** 10924 * The row ID. 10925 * <p>Type: INTEGER</p> 10926 */ 10927 public static final String ID = "_id"; 10928 10929 /** 10930 * Descriptive name of the bookmark that can be displayed to the user. 10931 * If this is empty, the title should be resolved at display time (use 10932 * {@link #getTitle(Context, Cursor)} any time you want to display the 10933 * title of a bookmark.) 10934 * <P> 10935 * Type: TEXT 10936 * </P> 10937 */ 10938 public static final String TITLE = "title"; 10939 10940 /** 10941 * Arbitrary string (displayed to the user) that allows bookmarks to be 10942 * organized into categories. There are some special names for 10943 * standard folders, which all start with '@'. The label displayed for 10944 * the folder changes with the locale (via {@link #getLabelForFolder}) but 10945 * the folder name does not change so you can consistently query for 10946 * the folder regardless of the current locale. 10947 * 10948 * <P>Type: TEXT</P> 10949 * 10950 */ 10951 public static final String FOLDER = "folder"; 10952 10953 /** 10954 * The Intent URL of the bookmark, describing what it points to. This 10955 * value is given to {@link android.content.Intent#getIntent} to create 10956 * an Intent that can be launched. 10957 * <P>Type: TEXT</P> 10958 */ 10959 public static final String INTENT = "intent"; 10960 10961 /** 10962 * Optional shortcut character associated with this bookmark. 10963 * <P>Type: INTEGER</P> 10964 */ 10965 public static final String SHORTCUT = "shortcut"; 10966 10967 /** 10968 * The order in which the bookmark should be displayed 10969 * <P>Type: INTEGER</P> 10970 */ 10971 public static final String ORDERING = "ordering"; 10972 10973 private static final String[] sIntentProjection = { INTENT }; 10974 private static final String[] sShortcutProjection = { ID, SHORTCUT }; 10975 private static final String sShortcutSelection = SHORTCUT + "=?"; 10976 10977 /** 10978 * Convenience function to retrieve the bookmarked Intent for a 10979 * particular shortcut key. 10980 * 10981 * @param cr The ContentResolver to query. 10982 * @param shortcut The shortcut key. 10983 * 10984 * @return Intent The bookmarked URL, or null if there is no bookmark 10985 * matching the given shortcut. 10986 */ getIntentForShortcut(ContentResolver cr, char shortcut)10987 public static Intent getIntentForShortcut(ContentResolver cr, char shortcut) 10988 { 10989 Intent intent = null; 10990 10991 Cursor c = cr.query(CONTENT_URI, 10992 sIntentProjection, sShortcutSelection, 10993 new String[] { String.valueOf((int) shortcut) }, ORDERING); 10994 // Keep trying until we find a valid shortcut 10995 try { 10996 while (intent == null && c.moveToNext()) { 10997 try { 10998 String intentURI = c.getString(c.getColumnIndexOrThrow(INTENT)); 10999 intent = Intent.parseUri(intentURI, 0); 11000 } catch (java.net.URISyntaxException e) { 11001 // The stored URL is bad... ignore it. 11002 } catch (IllegalArgumentException e) { 11003 // Column not found 11004 Log.w(TAG, "Intent column not found", e); 11005 } 11006 } 11007 } finally { 11008 if (c != null) c.close(); 11009 } 11010 11011 return intent; 11012 } 11013 11014 /** 11015 * Add a new bookmark to the system. 11016 * 11017 * @param cr The ContentResolver to query. 11018 * @param intent The desired target of the bookmark. 11019 * @param title Bookmark title that is shown to the user; null if none 11020 * or it should be resolved to the intent's title. 11021 * @param folder Folder in which to place the bookmark; null if none. 11022 * @param shortcut Shortcut that will invoke the bookmark; 0 if none. If 11023 * this is non-zero and there is an existing bookmark entry 11024 * with this same shortcut, then that existing shortcut is 11025 * cleared (the bookmark is not removed). 11026 * @return The unique content URL for the new bookmark entry. 11027 */ add(ContentResolver cr, Intent intent, String title, String folder, char shortcut, int ordering)11028 public static Uri add(ContentResolver cr, 11029 Intent intent, 11030 String title, 11031 String folder, 11032 char shortcut, 11033 int ordering) 11034 { 11035 // If a shortcut is supplied, and it is already defined for 11036 // another bookmark, then remove the old definition. 11037 if (shortcut != 0) { 11038 cr.delete(CONTENT_URI, sShortcutSelection, 11039 new String[] { String.valueOf((int) shortcut) }); 11040 } 11041 11042 ContentValues values = new ContentValues(); 11043 if (title != null) values.put(TITLE, title); 11044 if (folder != null) values.put(FOLDER, folder); 11045 values.put(INTENT, intent.toUri(0)); 11046 if (shortcut != 0) values.put(SHORTCUT, (int) shortcut); 11047 values.put(ORDERING, ordering); 11048 return cr.insert(CONTENT_URI, values); 11049 } 11050 11051 /** 11052 * Return the folder name as it should be displayed to the user. This 11053 * takes care of localizing special folders. 11054 * 11055 * @param r Resources object for current locale; only need access to 11056 * system resources. 11057 * @param folder The value found in the {@link #FOLDER} column. 11058 * 11059 * @return CharSequence The label for this folder that should be shown 11060 * to the user. 11061 */ getLabelForFolder(Resources r, String folder)11062 public static CharSequence getLabelForFolder(Resources r, String folder) { 11063 return folder; 11064 } 11065 11066 /** 11067 * Return the title as it should be displayed to the user. This takes 11068 * care of localizing bookmarks that point to activities. 11069 * 11070 * @param context A context. 11071 * @param cursor A cursor pointing to the row whose title should be 11072 * returned. The cursor must contain at least the {@link #TITLE} 11073 * and {@link #INTENT} columns. 11074 * @return A title that is localized and can be displayed to the user, 11075 * or the empty string if one could not be found. 11076 */ getTitle(Context context, Cursor cursor)11077 public static CharSequence getTitle(Context context, Cursor cursor) { 11078 int titleColumn = cursor.getColumnIndex(TITLE); 11079 int intentColumn = cursor.getColumnIndex(INTENT); 11080 if (titleColumn == -1 || intentColumn == -1) { 11081 throw new IllegalArgumentException( 11082 "The cursor must contain the TITLE and INTENT columns."); 11083 } 11084 11085 String title = cursor.getString(titleColumn); 11086 if (!TextUtils.isEmpty(title)) { 11087 return title; 11088 } 11089 11090 String intentUri = cursor.getString(intentColumn); 11091 if (TextUtils.isEmpty(intentUri)) { 11092 return ""; 11093 } 11094 11095 Intent intent; 11096 try { 11097 intent = Intent.parseUri(intentUri, 0); 11098 } catch (URISyntaxException e) { 11099 return ""; 11100 } 11101 11102 PackageManager packageManager = context.getPackageManager(); 11103 ResolveInfo info = packageManager.resolveActivity(intent, 0); 11104 return info != null ? info.loadLabel(packageManager) : ""; 11105 } 11106 } 11107 11108 /** 11109 * Returns the device ID that we should use when connecting to the mobile gtalk server. 11110 * This is a string like "android-0x1242", where the hex string is the Android ID obtained 11111 * from the GoogleLoginService. 11112 * 11113 * @param androidId The Android ID for this device. 11114 * @return The device ID that should be used when connecting to the mobile gtalk server. 11115 * @hide 11116 */ getGTalkDeviceId(long androidId)11117 public static String getGTalkDeviceId(long androidId) { 11118 return "android-" + Long.toHexString(androidId); 11119 } 11120 11121 private static final String[] PM_WRITE_SETTINGS = { 11122 android.Manifest.permission.WRITE_SETTINGS 11123 }; 11124 private static final String[] PM_CHANGE_NETWORK_STATE = { 11125 android.Manifest.permission.CHANGE_NETWORK_STATE, 11126 android.Manifest.permission.WRITE_SETTINGS 11127 }; 11128 private static final String[] PM_SYSTEM_ALERT_WINDOW = { 11129 android.Manifest.permission.SYSTEM_ALERT_WINDOW 11130 }; 11131 11132 /** 11133 * Performs a strict and comprehensive check of whether a calling package is allowed to 11134 * write/modify system settings, as the condition differs for pre-M, M+, and 11135 * privileged/preinstalled apps. If the provided uid does not match the 11136 * callingPackage, a negative result will be returned. 11137 * @hide 11138 */ isCallingPackageAllowedToWriteSettings(Context context, int uid, String callingPackage, boolean throwException)11139 public static boolean isCallingPackageAllowedToWriteSettings(Context context, int uid, 11140 String callingPackage, boolean throwException) { 11141 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 11142 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 11143 PM_WRITE_SETTINGS, false); 11144 } 11145 11146 /** 11147 * Performs a strict and comprehensive check of whether a calling package is allowed to 11148 * write/modify system settings, as the condition differs for pre-M, M+, and 11149 * privileged/preinstalled apps. If the provided uid does not match the 11150 * callingPackage, a negative result will be returned. The caller is expected to have 11151 * the WRITE_SETTINGS permission declared. 11152 * 11153 * Note: if the check is successful, the operation of this app will be updated to the 11154 * current time. 11155 * @hide 11156 */ checkAndNoteWriteSettingsOperation(Context context, int uid, String callingPackage, boolean throwException)11157 public static boolean checkAndNoteWriteSettingsOperation(Context context, int uid, 11158 String callingPackage, boolean throwException) { 11159 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 11160 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 11161 PM_WRITE_SETTINGS, true); 11162 } 11163 11164 /** 11165 * Performs a strict and comprehensive check of whether a calling package is allowed to 11166 * change the state of network, as the condition differs for pre-M, M+, and 11167 * privileged/preinstalled apps. The caller is expected to have either the 11168 * CHANGE_NETWORK_STATE or the WRITE_SETTINGS permission declared. Either of these 11169 * permissions allow changing network state; WRITE_SETTINGS is a runtime permission and 11170 * can be revoked, but (except in M, excluding M MRs), CHANGE_NETWORK_STATE is a normal 11171 * permission and cannot be revoked. See http://b/23597341 11172 * 11173 * Note: if the check succeeds because the application holds WRITE_SETTINGS, the operation 11174 * of this app will be updated to the current time. 11175 * @hide 11176 */ checkAndNoteChangeNetworkStateOperation(Context context, int uid, String callingPackage, boolean throwException)11177 public static boolean checkAndNoteChangeNetworkStateOperation(Context context, int uid, 11178 String callingPackage, boolean throwException) { 11179 if (context.checkCallingOrSelfPermission(android.Manifest.permission.CHANGE_NETWORK_STATE) 11180 == PackageManager.PERMISSION_GRANTED) { 11181 return true; 11182 } 11183 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 11184 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 11185 PM_CHANGE_NETWORK_STATE, true); 11186 } 11187 11188 /** 11189 * Performs a strict and comprehensive check of whether a calling package is allowed to 11190 * draw on top of other apps, as the conditions differs for pre-M, M+, and 11191 * privileged/preinstalled apps. If the provided uid does not match the callingPackage, 11192 * a negative result will be returned. 11193 * @hide 11194 */ isCallingPackageAllowedToDrawOverlays(Context context, int uid, String callingPackage, boolean throwException)11195 public static boolean isCallingPackageAllowedToDrawOverlays(Context context, int uid, 11196 String callingPackage, boolean throwException) { 11197 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 11198 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, 11199 PM_SYSTEM_ALERT_WINDOW, false); 11200 } 11201 11202 /** 11203 * Performs a strict and comprehensive check of whether a calling package is allowed to 11204 * draw on top of other apps, as the conditions differs for pre-M, M+, and 11205 * privileged/preinstalled apps. If the provided uid does not match the callingPackage, 11206 * a negative result will be returned. 11207 * 11208 * Note: if the check is successful, the operation of this app will be updated to the 11209 * current time. 11210 * @hide 11211 */ checkAndNoteDrawOverlaysOperation(Context context, int uid, String callingPackage, boolean throwException)11212 public static boolean checkAndNoteDrawOverlaysOperation(Context context, int uid, String 11213 callingPackage, boolean throwException) { 11214 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 11215 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, 11216 PM_SYSTEM_ALERT_WINDOW, true); 11217 } 11218 11219 /** 11220 * Helper method to perform a general and comprehensive check of whether an operation that is 11221 * protected by appops can be performed by a caller or not. e.g. OP_SYSTEM_ALERT_WINDOW and 11222 * OP_WRITE_SETTINGS 11223 * @hide 11224 */ isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[] permissions, boolean makeNote)11225 public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, 11226 int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[] 11227 permissions, boolean makeNote) { 11228 if (callingPackage == null) { 11229 return false; 11230 } 11231 11232 AppOpsManager appOpsMgr = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE); 11233 int mode = AppOpsManager.MODE_DEFAULT; 11234 if (makeNote) { 11235 mode = appOpsMgr.noteOpNoThrow(appOpsOpCode, uid, callingPackage); 11236 } else { 11237 mode = appOpsMgr.checkOpNoThrow(appOpsOpCode, uid, callingPackage); 11238 } 11239 11240 switch (mode) { 11241 case AppOpsManager.MODE_ALLOWED: 11242 return true; 11243 11244 case AppOpsManager.MODE_DEFAULT: 11245 // this is the default operating mode after an app's installation 11246 // In this case we will check all associated static permission to see 11247 // if it is granted during install time. 11248 for (String permission : permissions) { 11249 if (context.checkCallingOrSelfPermission(permission) == PackageManager 11250 .PERMISSION_GRANTED) { 11251 // if either of the permissions are granted, we will allow it 11252 return true; 11253 } 11254 } 11255 11256 default: 11257 // this is for all other cases trickled down here... 11258 if (!throwException) { 11259 return false; 11260 } 11261 } 11262 11263 // prepare string to throw SecurityException 11264 StringBuilder exceptionMessage = new StringBuilder(); 11265 exceptionMessage.append(callingPackage); 11266 exceptionMessage.append(" was not granted "); 11267 if (permissions.length > 1) { 11268 exceptionMessage.append(" either of these permissions: "); 11269 } else { 11270 exceptionMessage.append(" this permission: "); 11271 } 11272 for (int i = 0; i < permissions.length; i++) { 11273 exceptionMessage.append(permissions[i]); 11274 exceptionMessage.append((i == permissions.length - 1) ? "." : ", "); 11275 } 11276 11277 throw new SecurityException(exceptionMessage.toString()); 11278 } 11279 11280 /** 11281 * Retrieves a correponding package name for a given uid. It will query all 11282 * packages that are associated with the given uid, but it will return only 11283 * the zeroth result. 11284 * Note: If package could not be found, a null is returned. 11285 * @hide 11286 */ getPackageNameForUid(Context context, int uid)11287 public static String getPackageNameForUid(Context context, int uid) { 11288 String[] packages = context.getPackageManager().getPackagesForUid(uid); 11289 if (packages == null) { 11290 return null; 11291 } 11292 return packages[0]; 11293 } 11294 } 11295