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