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