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