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