Settings.java revision f39ca8f5e5f43f130b4590921087a63f88bb8286
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 20a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines * Copyright (C) 2006 The Android Open Source Project 3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License. 6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at 7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software 11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and 14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License. 15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */ 16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang 17e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinespackage android.provider; 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.annotation.SdkConstant; 20e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport android.annotation.SdkConstant.SdkConstantType; 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.annotation.SystemApi; 22e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport android.app.ActivityThread; 23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.app.AppOpsManager; 2465f23ed862e1a1e16477ba740f295ff4a83ac822David Grossimport android.app.Application; 25fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niimport android.app.SearchManager; 26e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport android.app.WallpaperManager; 27e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport android.content.ComponentName; 28be27482cdeaf08576bc39b72a15d35d13014a636Loganimport android.content.ContentResolver; 29462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.content.ContentValues; 309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport android.content.Context; 319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport android.content.IContentProvider; 32462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.content.Intent; 3334e6205f1d5ceb90a73192cee8b215fa0b7ab306David Grossimport android.content.pm.ActivityInfo; 343fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hinesimport android.content.pm.PackageManager; 35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.content.pm.ResolveInfo; 366315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.content.res.Configuration; 3723c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hinesimport android.content.res.Resources; 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport android.database.Cursor; 39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.database.SQLException; 40462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.location.LocationManager; 416315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.net.ConnectivityManager; 426315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.net.Uri; 436315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.net.wifi.WifiManager; 446315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.os.BatteryManager; 45fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niimport android.os.Binder; 466315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrimport android.os.Bundle; 47fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niimport android.os.DropBoxManager; 4865f23ed862e1a1e16477ba740f295ff4a83ac822David Grossimport android.os.IBinder; 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport android.os.Process; 50462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.os.RemoteException; 51462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.os.ServiceManager; 52a41ce1d98094da84643995d40d71c529905123fcZonr Changimport android.os.SystemProperties; 53a41ce1d98094da84643995d40d71c529905123fcZonr Changimport android.os.UserHandle; 54a41ce1d98094da84643995d40d71c529905123fcZonr Changimport android.os.Build.VERSION_CODES; 55593a894650e81be54173106ec266f0311cebebd3Stephen Hinesimport android.speech.tts.TextToSpeech; 56c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Walaimport android.text.TextUtils; 5715e44e66adc350adb4fe0533a442092c64333ab5David Grossimport android.util.AndroidException; 58a41ce1d98094da84643995d40d71c529905123fcZonr Changimport android.util.ArrayMap; 59462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.util.ArraySet; 60462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport android.util.Log; 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport com.android.internal.util.ArrayUtils; 639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport com.android.internal.widget.ILockSettings; 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport java.net.URISyntaxException; 66a41ce1d98094da84643995d40d71c529905123fcZonr Changimport java.text.SimpleDateFormat; 679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport java.util.HashMap; 689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoimport java.util.HashSet; 69fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niimport java.util.Locale; 70c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Walaimport java.util.Map; 7115e44e66adc350adb4fe0533a442092c64333ab5David Grossimport java.util.Set; 7265f23ed862e1a1e16477ba740f295ff4a83ac822David Gross 7365f23ed862e1a1e16477ba740f295ff4a83ac822David Gross/** 7465f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * The Settings provider contains global system-level device preferences. 7565f23ed862e1a1e16477ba740f295ff4a83ac822David Gross */ 769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaopublic final class Settings { 779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Intent actions for Settings 799e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines 809e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines /** 813fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * Activity Action: Show system settings. 82109e90a854ac8d8f4df24ef27db636a641ba9913Jean-Luc Brouillet * <p> 83109e90a854ac8d8f4df24ef27db636a641ba9913Jean-Luc Brouillet * Input: Nothing. 84109e90a854ac8d8f4df24ef27db636a641ba9913Jean-Luc Brouillet * <p> 85c9454afec1649846512993d0ef65a9f868976bb4Chris Wailes * Output: Nothing. 86fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines */ 879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 8823c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines public static final String ACTION_SETTINGS = "android.settings.SETTINGS"; 899ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 91a41ce1d98094da84643995d40d71c529905123fcZonr Chang * Activity Action: Show settings to allow configuration of APNs. 92a41ce1d98094da84643995d40d71c529905123fcZonr Chang * <p> 939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Output: Nothing. 969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS"; 990a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines 1000a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines /** 10196ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines * Activity Action: Show settings to allow configuration of current location 10282754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines * sources. 1032eb9a3f7c48fe54eb4e813d80e3363bc79553a1eStephen Hines * <p> 10496ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines * In some cases, a matching Activity may not exist, so ensure you 1059ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines * safeguard against this. 1069ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines * <p> 1079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 1089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 1099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Output: Nothing. 1109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 111fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 112fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni public static final String ACTION_LOCATION_SOURCE_SETTINGS = 113c17e198ffcd37bfc57e3add1f6eee952ae2a2eabStephen Hines "android.settings.LOCATION_SOURCE_SETTINGS"; 1149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 116fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * Activity Action: Show settings to allow configuration of wireless controls 117fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * such as Wi-Fi, Bluetooth and Mobile networks. 118c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala * <p> 11915e44e66adc350adb4fe0533a442092c64333ab5David Gross * In some cases, a matching Activity may not exist, so ensure you 12065f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * safeguard against this. 1219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 1229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 123fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * <p> 1242615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * Output: Nothing. 125fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni */ 1269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1279e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines public static final String ACTION_WIRELESS_SETTINGS = 1289e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines "android.settings.WIRELESS_SETTINGS"; 1293fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines 1304cc67fce91f43215d61b2695746eab102a3db516Stephen Hines /** 131fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * Activity Action: Show settings to allow entering/exiting airplane mode. 132fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * <p> 1339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * In some cases, a matching Activity may not exist, so ensure you 1349e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines * safeguard against this. 1359e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines * <p> 136be27482cdeaf08576bc39b72a15d35d13014a636Logan * Input: Nothing. 137be27482cdeaf08576bc39b72a15d35d13014a636Logan * <p> 138f2174cfd6a556b51aadf2b8765e50df080e8f18eStephen Hines * Output: Nothing. 13923c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines */ 1409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String ACTION_AIRPLANE_MODE_SETTINGS = 1429e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines "android.settings.AIRPLANE_MODE_SETTINGS"; 1439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1449207a2e495c8363606861e4f034504ec5c153dabLogan Chien /** 1452ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines * Activity Action: Modify Airplane mode settings using a voice command. 1462ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines * <p> 147c9454afec1649846512993d0ef65a9f868976bb4Chris Wailes * In some cases, a matching Activity may not exist, so ensure you safeguard against this. 1484a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines * <p> 1494a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines * This intent MUST be started using 1509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity 151fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * startVoiceActivity}. 152fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * <p> 153fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * Note: The activity implementing this intent MUST verify that 1549ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before 1559ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines * modifying the setting. 1569ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines * <p> 157fc4f78b9c7941132fb048a83f0e4ba528c3b4fd0Stephen Hines * Input: To tell which state airplane mode should be set to, add the 1589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified. 1599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * If the extra is not included, no changes will be made. 1609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 1619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Output: Nothing. 1629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 1639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 1649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE = 1659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "android.settings.VOICE_CONTROL_AIRPLANE_MODE"; 1669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 1689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Activity Action: Show settings for accessibility modules. 1699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 170dde98533fad4c6534af537ae583aa4db35a1c699Tim Murray * In some cases, a matching Activity may not exist, so ensure you 1714cc67fce91f43215d61b2695746eab102a3db516Stephen Hines * safeguard against this. 1724cc67fce91f43215d61b2695746eab102a3db516Stephen Hines * <p> 1739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 1740a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines * <p> 1750a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines * Output: Nothing. 1760a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines */ 17712fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 17812fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet public static final String ACTION_ACCESSIBILITY_SETTINGS = 1790a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines "android.settings.ACCESSIBILITY_SETTINGS"; 18088f21e16250d2e52a75607b7f0c396e1c2a34201Yang Ni 18188f21e16250d2e52a75607b7f0c396e1c2a34201Yang Ni /** 18288f21e16250d2e52a75607b7f0c396e1c2a34201Yang Ni * Activity Action: Show settings to control access to usage information. 18388f21e16250d2e52a75607b7f0c396e1c2a34201Yang Ni * <p> 18488f21e16250d2e52a75607b7f0c396e1c2a34201Yang Ni * In some cases, a matching Activity may not exist, so ensure you 1852615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * safeguard against this. 1862615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * <p> 1872615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * Input: Nothing. 1882615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * <p> 1892615f383dfc1542a05f19aee23b03a09bd018f4eYang Ni * Output: Nothing. 190fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni */ 191fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 192a41ce1d98094da84643995d40d71c529905123fcZonr Chang public static final String ACTION_USAGE_ACCESS_SETTINGS = 1935abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes "android.settings.USAGE_ACCESS_SETTINGS"; 194a41ce1d98094da84643995d40d71c529905123fcZonr Chang 195a41ce1d98094da84643995d40d71c529905123fcZonr Chang /** 196641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * Activity Category: Show application settings related to usage access. 197641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * <p> 198641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * An activity that provides a user interface for adjusting usage access related 199641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * preferences for its containing application. Optional but recommended for apps that 200641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * use {@link android.Manifest.permission#PACKAGE_USAGE_STATS}. 201641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * <p> 202641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang * The activity may define meta-data to describe what usage access is 2039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * used for within their app with {@link #METADATA_USAGE_ACCESS_REASON}, which 2049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * will be displayed in Settings. 2059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 2079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Output: Nothing. 2099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 2109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.INTENT_CATEGORY) 2119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG = 2129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "android.intent.category.USAGE_ACCESS_CONFIG"; 2139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 2159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Metadata key: Reason for needing usage access. 2169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2179ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * A key for metadata attached to an activity that receives action 2189ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * {@link #INTENT_CATEGORY_USAGE_ACCESS_CONFIG}, shown to the 2199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * user as description of how the app uses usage access. 2209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 2229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String METADATA_USAGE_ACCESS_REASON = 2239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "android.settings.metadata.USAGE_ACCESS_REASON"; 224fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni 225593a894650e81be54173106ec266f0311cebebd3Stephen Hines /** 226593a894650e81be54173106ec266f0311cebebd3Stephen Hines * Activity Action: Show settings to allow configuration of security and 227593a894650e81be54173106ec266f0311cebebd3Stephen Hines * location privacy. 228593a894650e81be54173106ec266f0311cebebd3Stephen Hines * <p> 229593a894650e81be54173106ec266f0311cebebd3Stephen Hines * In some cases, a matching Activity may not exist, so ensure you 230593a894650e81be54173106ec266f0311cebebd3Stephen Hines * safeguard against this. 231593a894650e81be54173106ec266f0311cebebd3Stephen Hines * <p> 232fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * Input: Nothing. 233593a894650e81be54173106ec266f0311cebebd3Stephen Hines * <p> 234c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala * Output: Nothing. 235c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala */ 236c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 237c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala public static final String ACTION_SECURITY_SETTINGS = 238c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala "android.settings.SECURITY_SETTINGS"; 239c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala 240c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala /** 241c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala * Activity Action: Show trusted credentials settings, opening to the user tab, 242c0c5dd85f2d2df2bcf0cb284001f544d6c42eff9Matt Wala * to allow management of installed credentials. 24315e44e66adc350adb4fe0533a442092c64333ab5David Gross * <p> 24415e44e66adc350adb4fe0533a442092c64333ab5David Gross * In some cases, a matching Activity may not exist, so ensure you 24515e44e66adc350adb4fe0533a442092c64333ab5David Gross * safeguard against this. 24615e44e66adc350adb4fe0533a442092c64333ab5David Gross * <p> 24715e44e66adc350adb4fe0533a442092c64333ab5David Gross * Input: Nothing. 24815e44e66adc350adb4fe0533a442092c64333ab5David Gross * <p> 24915e44e66adc350adb4fe0533a442092c64333ab5David Gross * Output: Nothing. 25015e44e66adc350adb4fe0533a442092c64333ab5David Gross * @hide 25115e44e66adc350adb4fe0533a442092c64333ab5David Gross */ 25215e44e66adc350adb4fe0533a442092c64333ab5David Gross @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 25315e44e66adc350adb4fe0533a442092c64333ab5David Gross public static final String ACTION_TRUSTED_CREDENTIALS_USER = 25465f23ed862e1a1e16477ba740f295ff4a83ac822David Gross "com.android.settings.TRUSTED_CREDENTIALS_USER"; 25565f23ed862e1a1e16477ba740f295ff4a83ac822David Gross 25665f23ed862e1a1e16477ba740f295ff4a83ac822David Gross /** 25765f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * Activity Action: Show dialog explaining that an installed CA cert may enable 25865f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * monitoring of encrypted network traffic. 25965f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * <p> 260277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * In some cases, a matching Activity may not exist, so ensure you 261277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * safeguard against this. 262277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * <p> 263277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Input: Nothing. 26465f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * <p> 26565f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * Output: Nothing. 26665f23ed862e1a1e16477ba740f295ff4a83ac822David Gross * @hide 26715e44e66adc350adb4fe0533a442092c64333ab5David Gross */ 2689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 2699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String ACTION_MONITORING_CERT_INFO = 2709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "com.android.settings.MONITORING_CERT_INFO"; 2719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 2739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Activity Action: Show settings to allow configuration of privacy options. 2749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * In some cases, a matching Activity may not exist, so ensure you 2769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * safeguard against this. 2779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Input: Nothing. 2799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Output: Nothing. 2819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 2829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 2839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public static final String ACTION_PRIVACY_SETTINGS = 2849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "android.settings.PRIVACY_SETTINGS"; 2859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao /** 2879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * Activity Action: Show settings to allow configuration of Wi-Fi. 2889ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 2899ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * In some cases, a matching Activity may not exist, so ensure you 2909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * safeguard against this. 2919ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 29296ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines * Input: Nothing. 29396ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines * <p> 29496ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines * Output: Nothing. 29596ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines 29696ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines */ 29712fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 29812fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet public static final String ACTION_WIFI_SETTINGS = 29912fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet "android.settings.WIFI_SETTINGS"; 30012fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet 30112fc283f4108fd6f7f0164c121ff2f6fb5044225Jean-Luc Brouillet /** 30282754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines * Activity Action: Show settings to allow configuration of a static IP 3033fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * address for Wi-Fi. 3043fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * <p> 3053fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * In some cases, a matching Activity may not exist, so ensure you safeguard 306109e90a854ac8d8f4df24ef27db636a641ba9913Jean-Luc Brouillet * against this. 307109e90a854ac8d8f4df24ef27db636a641ba9913Jean-Luc Brouillet * <p> 3083fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * Input: Nothing. 309d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 310ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Output: Nothing. 311d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet */ 312ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 313ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray public static final String ACTION_WIFI_IP_SETTINGS = 314ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray "android.settings.WIFI_IP_SETTINGS"; 315ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray 316ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray /** 317ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Activity Action: Show settings to allow configuration of Bluetooth. 318d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 319ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * In some cases, a matching Activity may not exist, so ensure you 320ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * safeguard against this. 321ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * <p> 322ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Input: Nothing. 323ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * <p> 324ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Output: Nothing. 325ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray */ 326d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 327d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet public static final String ACTION_BLUETOOTH_SETTINGS = 328d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet "android.settings.BLUETOOTH_SETTINGS"; 329ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray 330ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray /** 331ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Activity Action: Show settings to allow configuration of cast endpoints. 332d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 333ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * In some cases, a matching Activity may not exist, so ensure you 334ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * safeguard against this. 335d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 336ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Input: Nothing. 337ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * <p> 338d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * Output: Nothing. 339ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray */ 340ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 341ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray public static final String ACTION_CAST_SETTINGS = 342ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray "android.settings.CAST_SETTINGS"; 343d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet 344ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray /** 345ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * Activity Action: Show settings to allow configuration of date and time. 346d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 347ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * In some cases, a matching Activity may not exist, so ensure you 348ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray * safeguard against this. 349d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * <p> 350d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet * Input: Nothing. 3519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * <p> 352462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * Output: Nothing. 353462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao */ 3549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 355462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao public static final String ACTION_DATE_SETTINGS = 356e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "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 UI_NIGHT_MODE, 5743 SLEEP_TIMEOUT, 5744 DOUBLE_TAP_TO_WAKE, 5745 }; 5746 5747 /** 5748 * These entries are considered common between the personal and the managed profile, 5749 * since the managed profile doesn't get to change them. 5750 */ 5751 private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>(); 5752 5753 static { 5754 CLONE_TO_MANAGED_PROFILE.add(ACCESSIBILITY_ENABLED); 5755 CLONE_TO_MANAGED_PROFILE.add(ALLOW_MOCK_LOCATION); 5756 CLONE_TO_MANAGED_PROFILE.add(ALLOWED_GEOLOCATION_ORIGINS); 5757 CLONE_TO_MANAGED_PROFILE.add(DEFAULT_INPUT_METHOD); 5758 CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES); 5759 CLONE_TO_MANAGED_PROFILE.add(ENABLED_INPUT_METHODS); 5760 CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE); 5761 CLONE_TO_MANAGED_PROFILE.add(LOCATION_PROVIDERS_ALLOWED); 5762 CLONE_TO_MANAGED_PROFILE.add(LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS); 5763 CLONE_TO_MANAGED_PROFILE.add(SELECTED_INPUT_METHOD_SUBTYPE); 5764 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER); 5765 CLONE_TO_MANAGED_PROFILE.add(SELECTED_SPELL_CHECKER_SUBTYPE); 5766 } 5767 5768 /** @hide */ 5769 public static void getCloneToManagedProfileSettings(Set<String> outKeySet) { 5770 outKeySet.addAll(CLONE_TO_MANAGED_PROFILE); 5771 } 5772 5773 /** 5774 * Helper method for determining if a location provider is enabled. 5775 * 5776 * @param cr the content resolver to use 5777 * @param provider the location provider to query 5778 * @return true if the provider is enabled 5779 * 5780 * @deprecated use {@link #LOCATION_MODE} or 5781 * {@link LocationManager#isProviderEnabled(String)} 5782 */ 5783 @Deprecated 5784 public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) { 5785 return isLocationProviderEnabledForUser(cr, provider, UserHandle.myUserId()); 5786 } 5787 5788 /** 5789 * Helper method for determining if a location provider is enabled. 5790 * @param cr the content resolver to use 5791 * @param provider the location provider to query 5792 * @param userId the userId to query 5793 * @return true if the provider is enabled 5794 * @deprecated use {@link #LOCATION_MODE} or 5795 * {@link LocationManager#isProviderEnabled(String)} 5796 * @hide 5797 */ 5798 @Deprecated 5799 public static final boolean isLocationProviderEnabledForUser(ContentResolver cr, String provider, int userId) { 5800 String allowedProviders = Settings.Secure.getStringForUser(cr, 5801 LOCATION_PROVIDERS_ALLOWED, userId); 5802 return TextUtils.delimitedStringContains(allowedProviders, ',', provider); 5803 } 5804 5805 /** 5806 * Thread-safe method for enabling or disabling a single location provider. 5807 * @param cr the content resolver to use 5808 * @param provider the location provider to enable or disable 5809 * @param enabled true if the provider should be enabled 5810 * @deprecated use {@link #putInt(ContentResolver, String, int)} and {@link #LOCATION_MODE} 5811 */ 5812 @Deprecated 5813 public static final void setLocationProviderEnabled(ContentResolver cr, 5814 String provider, boolean enabled) { 5815 setLocationProviderEnabledForUser(cr, provider, enabled, UserHandle.myUserId()); 5816 } 5817 5818 /** 5819 * Thread-safe method for enabling or disabling a single location provider. 5820 * 5821 * @param cr the content resolver to use 5822 * @param provider the location provider to enable or disable 5823 * @param enabled true if the provider should be enabled 5824 * @param userId the userId for which to enable/disable providers 5825 * @return true if the value was set, false on database errors 5826 * @deprecated use {@link #putIntForUser(ContentResolver, String, int, int)} and 5827 * {@link #LOCATION_MODE} 5828 * @hide 5829 */ 5830 @Deprecated 5831 public static final boolean setLocationProviderEnabledForUser(ContentResolver cr, 5832 String provider, boolean enabled, int userId) { 5833 synchronized (mLocationSettingsLock) { 5834 // to ensure thread safety, we write the provider name with a '+' or '-' 5835 // and let the SettingsProvider handle it rather than reading and modifying 5836 // the list of enabled providers. 5837 if (enabled) { 5838 provider = "+" + provider; 5839 } else { 5840 provider = "-" + provider; 5841 } 5842 return putStringForUser(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider, 5843 userId); 5844 } 5845 } 5846 5847 /** 5848 * Thread-safe method for setting the location mode to one of 5849 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, 5850 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. 5851 * 5852 * @param cr the content resolver to use 5853 * @param mode such as {@link #LOCATION_MODE_HIGH_ACCURACY} 5854 * @param userId the userId for which to change mode 5855 * @return true if the value was set, false on database errors 5856 * 5857 * @throws IllegalArgumentException if mode is not one of the supported values 5858 */ 5859 private static final boolean setLocationModeForUser(ContentResolver cr, int mode, 5860 int userId) { 5861 synchronized (mLocationSettingsLock) { 5862 boolean gps = false; 5863 boolean network = false; 5864 switch (mode) { 5865 case LOCATION_MODE_OFF: 5866 break; 5867 case LOCATION_MODE_SENSORS_ONLY: 5868 gps = true; 5869 break; 5870 case LOCATION_MODE_BATTERY_SAVING: 5871 network = true; 5872 break; 5873 case LOCATION_MODE_HIGH_ACCURACY: 5874 gps = true; 5875 network = true; 5876 break; 5877 default: 5878 throw new IllegalArgumentException("Invalid location mode: " + mode); 5879 } 5880 // Note it's important that we set the NLP mode first. The Google implementation 5881 // of NLP clears its NLP consent setting any time it receives a 5882 // LocationManager.PROVIDERS_CHANGED_ACTION broadcast and NLP is disabled. Also, 5883 // it shows an NLP consent dialog any time it receives the broadcast, NLP is 5884 // enabled, and the NLP consent is not set. If 1) we were to enable GPS first, 5885 // 2) a setup wizard has its own NLP consent UI that sets the NLP consent setting, 5886 // and 3) the receiver happened to complete before we enabled NLP, then the Google 5887 // NLP would detect the attempt to enable NLP and show a redundant NLP consent 5888 // dialog. Then the people who wrote the setup wizard would be sad. 5889 boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser( 5890 cr, LocationManager.NETWORK_PROVIDER, network, userId); 5891 boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser( 5892 cr, LocationManager.GPS_PROVIDER, gps, userId); 5893 return gpsSuccess && nlpSuccess; 5894 } 5895 } 5896 5897 /** 5898 * Thread-safe method for reading the location mode, returns one of 5899 * {@link #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, 5900 * {@link #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. 5901 * 5902 * @param cr the content resolver to use 5903 * @param userId the userId for which to read the mode 5904 * @return the location mode 5905 */ 5906 private static final int getLocationModeForUser(ContentResolver cr, int userId) { 5907 synchronized (mLocationSettingsLock) { 5908 boolean gpsEnabled = Settings.Secure.isLocationProviderEnabledForUser( 5909 cr, LocationManager.GPS_PROVIDER, userId); 5910 boolean networkEnabled = Settings.Secure.isLocationProviderEnabledForUser( 5911 cr, LocationManager.NETWORK_PROVIDER, userId); 5912 if (gpsEnabled && networkEnabled) { 5913 return LOCATION_MODE_HIGH_ACCURACY; 5914 } else if (gpsEnabled) { 5915 return LOCATION_MODE_SENSORS_ONLY; 5916 } else if (networkEnabled) { 5917 return LOCATION_MODE_BATTERY_SAVING; 5918 } else { 5919 return LOCATION_MODE_OFF; 5920 } 5921 } 5922 } 5923 } 5924 5925 /** 5926 * Global system settings, containing preferences that always apply identically 5927 * to all defined users. Applications can read these but are not allowed to write; 5928 * like the "Secure" settings, these are for preferences that the user must 5929 * explicitly modify through the system UI or specialized APIs for those values. 5930 */ 5931 public static final class Global extends NameValueTable { 5932 public static final String SYS_PROP_SETTING_VERSION = "sys.settings_global_version"; 5933 5934 /** 5935 * The content:// style URL for global secure settings items. Not public. 5936 */ 5937 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global"); 5938 5939 /** 5940 * Whether users are allowed to add more users or guest from lockscreen. 5941 * <p> 5942 * Type: int 5943 * @hide 5944 */ 5945 public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked"; 5946 5947 /** 5948 * Setting whether the global gesture for enabling accessibility is enabled. 5949 * If this gesture is enabled the user will be able to perfrom it to enable 5950 * the accessibility state without visiting the settings app. 5951 * @hide 5952 */ 5953 public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED = 5954 "enable_accessibility_global_gesture_enabled"; 5955 5956 /** 5957 * Whether Airplane Mode is on. 5958 */ 5959 public static final String AIRPLANE_MODE_ON = "airplane_mode_on"; 5960 5961 /** 5962 * Whether Theater Mode is on. 5963 * {@hide} 5964 */ 5965 @SystemApi 5966 public static final String THEATER_MODE_ON = "theater_mode_on"; 5967 5968 /** 5969 * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio. 5970 */ 5971 public static final String RADIO_BLUETOOTH = "bluetooth"; 5972 5973 /** 5974 * Constant for use in AIRPLANE_MODE_RADIOS to specify Wi-Fi radio. 5975 */ 5976 public static final String RADIO_WIFI = "wifi"; 5977 5978 /** 5979 * {@hide} 5980 */ 5981 public static final String RADIO_WIMAX = "wimax"; 5982 /** 5983 * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio. 5984 */ 5985 public static final String RADIO_CELL = "cell"; 5986 5987 /** 5988 * Constant for use in AIRPLANE_MODE_RADIOS to specify NFC radio. 5989 */ 5990 public static final String RADIO_NFC = "nfc"; 5991 5992 /** 5993 * A comma separated list of radios that need to be disabled when airplane mode 5994 * is on. This overrides WIFI_ON and BLUETOOTH_ON, if Wi-Fi and bluetooth are 5995 * included in the comma separated list. 5996 */ 5997 public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; 5998 5999 /** 6000 * A comma separated list of radios that should to be disabled when airplane mode 6001 * is on, but can be manually reenabled by the user. For example, if RADIO_WIFI is 6002 * added to both AIRPLANE_MODE_RADIOS and AIRPLANE_MODE_TOGGLEABLE_RADIOS, then Wifi 6003 * will be turned off when entering airplane mode, but the user will be able to reenable 6004 * Wifi in the Settings app. 6005 * 6006 * {@hide} 6007 */ 6008 public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios"; 6009 6010 /** 6011 * The policy for deciding when Wi-Fi should go to sleep (which will in 6012 * turn switch to using the mobile data as an Internet connection). 6013 * <p> 6014 * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT}, 6015 * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or 6016 * {@link #WIFI_SLEEP_POLICY_NEVER}. 6017 */ 6018 public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; 6019 6020 /** 6021 * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep 6022 * policy, which is to sleep shortly after the turning off 6023 * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting. 6024 */ 6025 public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; 6026 6027 /** 6028 * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when 6029 * the device is on battery, and never go to sleep when the device is 6030 * plugged in. 6031 */ 6032 public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; 6033 6034 /** 6035 * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep. 6036 */ 6037 public static final int WIFI_SLEEP_POLICY_NEVER = 2; 6038 6039 /** 6040 * Value to specify if the user prefers the date, time and time zone 6041 * to be automatically fetched from the network (NITZ). 1=yes, 0=no 6042 */ 6043 public static final String AUTO_TIME = "auto_time"; 6044 6045 /** 6046 * Value to specify if the user prefers the time zone 6047 * to be automatically fetched from the network (NITZ). 1=yes, 0=no 6048 */ 6049 public static final String AUTO_TIME_ZONE = "auto_time_zone"; 6050 6051 /** 6052 * URI for the car dock "in" event sound. 6053 * @hide 6054 */ 6055 public static final String CAR_DOCK_SOUND = "car_dock_sound"; 6056 6057 /** 6058 * URI for the car dock "out" event sound. 6059 * @hide 6060 */ 6061 public static final String CAR_UNDOCK_SOUND = "car_undock_sound"; 6062 6063 /** 6064 * URI for the desk dock "in" event sound. 6065 * @hide 6066 */ 6067 public static final String DESK_DOCK_SOUND = "desk_dock_sound"; 6068 6069 /** 6070 * URI for the desk dock "out" event sound. 6071 * @hide 6072 */ 6073 public static final String DESK_UNDOCK_SOUND = "desk_undock_sound"; 6074 6075 /** 6076 * Whether to play a sound for dock events. 6077 * @hide 6078 */ 6079 public static final String DOCK_SOUNDS_ENABLED = "dock_sounds_enabled"; 6080 6081 /** 6082 * URI for the "device locked" (keyguard shown) sound. 6083 * @hide 6084 */ 6085 public static final String LOCK_SOUND = "lock_sound"; 6086 6087 /** 6088 * URI for the "device unlocked" sound. 6089 * @hide 6090 */ 6091 public static final String UNLOCK_SOUND = "unlock_sound"; 6092 6093 /** 6094 * URI for the "device is trusted" sound, which is played when the device enters the trusted 6095 * state without unlocking. 6096 * @hide 6097 */ 6098 public static final String TRUSTED_SOUND = "trusted_sound"; 6099 6100 /** 6101 * URI for the low battery sound file. 6102 * @hide 6103 */ 6104 public static final String LOW_BATTERY_SOUND = "low_battery_sound"; 6105 6106 /** 6107 * Whether to play a sound for low-battery alerts. 6108 * @hide 6109 */ 6110 public static final String POWER_SOUNDS_ENABLED = "power_sounds_enabled"; 6111 6112 /** 6113 * URI for the "wireless charging started" sound. 6114 * @hide 6115 */ 6116 public static final String WIRELESS_CHARGING_STARTED_SOUND = 6117 "wireless_charging_started_sound"; 6118 6119 /** 6120 * Whether to play a sound for charging events. 6121 * @hide 6122 */ 6123 public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled"; 6124 6125 /** 6126 * Whether we keep the device on while the device is plugged in. 6127 * Supported values are: 6128 * <ul> 6129 * <li>{@code 0} to never stay on while plugged in</li> 6130 * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li> 6131 * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li> 6132 * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li> 6133 * </ul> 6134 * These values can be OR-ed together. 6135 */ 6136 public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; 6137 6138 /** 6139 * When the user has enable the option to have a "bug report" command 6140 * in the power menu. 6141 * @hide 6142 */ 6143 public static final String BUGREPORT_IN_POWER_MENU = "bugreport_in_power_menu"; 6144 6145 /** 6146 * Whether ADB is enabled. 6147 */ 6148 public static final String ADB_ENABLED = "adb_enabled"; 6149 6150 /** 6151 * Whether Views are allowed to save their attribute data. 6152 * @hide 6153 */ 6154 public static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes"; 6155 6156 /** 6157 * Whether assisted GPS should be enabled or not. 6158 * @hide 6159 */ 6160 public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled"; 6161 6162 /** 6163 * Whether bluetooth is enabled/disabled 6164 * 0=disabled. 1=enabled. 6165 */ 6166 public static final String BLUETOOTH_ON = "bluetooth_on"; 6167 6168 /** 6169 * CDMA Cell Broadcast SMS 6170 * 0 = CDMA Cell Broadcast SMS disabled 6171 * 1 = CDMA Cell Broadcast SMS enabled 6172 * @hide 6173 */ 6174 public static final String CDMA_CELL_BROADCAST_SMS = 6175 "cdma_cell_broadcast_sms"; 6176 6177 /** 6178 * The CDMA roaming mode 0 = Home Networks, CDMA default 6179 * 1 = Roaming on Affiliated networks 6180 * 2 = Roaming on any networks 6181 * @hide 6182 */ 6183 public static final String CDMA_ROAMING_MODE = "roaming_settings"; 6184 6185 /** 6186 * The CDMA subscription mode 0 = RUIM/SIM (default) 6187 * 1 = NV 6188 * @hide 6189 */ 6190 public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode"; 6191 6192 /** Inactivity timeout to track mobile data activity. 6193 * 6194 * If set to a positive integer, it indicates the inactivity timeout value in seconds to 6195 * infer the data activity of mobile network. After a period of no activity on mobile 6196 * networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE} 6197 * intent is fired to indicate a transition of network status from "active" to "idle". Any 6198 * subsequent activity on mobile networks triggers the firing of {@code 6199 * ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active". 6200 * 6201 * Network activity refers to transmitting or receiving data on the network interfaces. 6202 * 6203 * Tracking is disabled if set to zero or negative value. 6204 * 6205 * @hide 6206 */ 6207 public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile"; 6208 6209 /** Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE} 6210 * but for Wifi network. 6211 * @hide 6212 */ 6213 public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi"; 6214 6215 /** 6216 * Whether or not data roaming is enabled. (0 = false, 1 = true) 6217 */ 6218 public static final String DATA_ROAMING = "data_roaming"; 6219 6220 /** 6221 * The value passed to a Mobile DataConnection via bringUp which defines the 6222 * number of retries to preform when setting up the initial connection. The default 6223 * value defined in DataConnectionTrackerBase#DEFAULT_MDC_INITIAL_RETRY is currently 1. 6224 * @hide 6225 */ 6226 public static final String MDC_INITIAL_MAX_RETRY = "mdc_initial_max_retry"; 6227 6228 /** 6229 * Whether any package can be on external storage. When this is true, any 6230 * package, regardless of manifest values, is a candidate for installing 6231 * or moving onto external storage. (0 = false, 1 = true) 6232 * @hide 6233 */ 6234 public static final String FORCE_ALLOW_ON_EXTERNAL = "force_allow_on_external"; 6235 6236 /** 6237 * Whether user has enabled development settings. 6238 */ 6239 public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; 6240 6241 /** 6242 * Whether the device has been provisioned (0 = false, 1 = true) 6243 */ 6244 public static final String DEVICE_PROVISIONED = "device_provisioned"; 6245 6246 /** 6247 * The saved value for WindowManagerService.setForcedDisplayDensity(). 6248 * One integer in dpi. If unset, then use the real display density. 6249 * @hide 6250 */ 6251 public static final String DISPLAY_DENSITY_FORCED = "display_density_forced"; 6252 6253 /** 6254 * The saved value for WindowManagerService.setForcedDisplaySize(). 6255 * Two integers separated by a comma. If unset, then use the real display size. 6256 * @hide 6257 */ 6258 public static final String DISPLAY_SIZE_FORCED = "display_size_forced"; 6259 6260 /** 6261 * The saved value for WindowManagerService.setForcedDisplayScalingMode(). 6262 * 0 or unset if scaling is automatic, 1 if scaling is disabled. 6263 * @hide 6264 */ 6265 public static final String DISPLAY_SCALING_FORCE = "display_scaling_force"; 6266 6267 /** 6268 * The maximum size, in bytes, of a download that the download manager will transfer over 6269 * a non-wifi connection. 6270 * @hide 6271 */ 6272 public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE = 6273 "download_manager_max_bytes_over_mobile"; 6274 6275 /** 6276 * The recommended maximum size, in bytes, of a download that the download manager should 6277 * transfer over a non-wifi connection. Over this size, the use will be warned, but will 6278 * have the option to start the download over the mobile connection anyway. 6279 * @hide 6280 */ 6281 public static final String DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE = 6282 "download_manager_recommended_max_bytes_over_mobile"; 6283 6284 /** 6285 * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead 6286 */ 6287 @Deprecated 6288 public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS; 6289 6290 /** 6291 * Whether HDMI control shall be enabled. If disabled, no CEC/MHL command will be 6292 * sent or processed. (0 = false, 1 = true) 6293 * @hide 6294 */ 6295 public static final String HDMI_CONTROL_ENABLED = "hdmi_control_enabled"; 6296 6297 /** 6298 * Whether HDMI system audio is enabled. If enabled, TV internal speaker is muted, 6299 * and the output is redirected to AV Receiver connected via 6300 * {@Global#HDMI_SYSTEM_AUDIO_OUTPUT}. 6301 * @hide 6302 */ 6303 public static final String HDMI_SYSTEM_AUDIO_ENABLED = "hdmi_system_audio_enabled"; 6304 6305 /** 6306 * Whether TV will automatically turn on upon reception of the CEC command 6307 * <Text View On> or <Image View On>. (0 = false, 1 = true) 6308 * @hide 6309 */ 6310 public static final String HDMI_CONTROL_AUTO_WAKEUP_ENABLED = 6311 "hdmi_control_auto_wakeup_enabled"; 6312 6313 /** 6314 * Whether TV will also turn off other CEC devices when it goes to standby mode. 6315 * (0 = false, 1 = true) 6316 * @hide 6317 */ 6318 public static final String HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED = 6319 "hdmi_control_auto_device_off_enabled"; 6320 6321 /** 6322 * Whether to use the DHCP client from Lollipop and earlier instead of the newer Android DHCP 6323 * client. 6324 * (0 = false, 1 = true) 6325 * @hide 6326 */ 6327 public static final String LEGACY_DHCP_CLIENT = "legacy_dhcp_client"; 6328 6329 /** 6330 * Whether TV will switch to MHL port when a mobile device is plugged in. 6331 * (0 = false, 1 = true) 6332 * @hide 6333 */ 6334 public static final String MHL_INPUT_SWITCHING_ENABLED = "mhl_input_switching_enabled"; 6335 6336 /** 6337 * Whether TV will charge the mobile device connected at MHL port. (0 = false, 1 = true) 6338 * @hide 6339 */ 6340 public static final String MHL_POWER_CHARGE_ENABLED = "mhl_power_charge_enabled"; 6341 6342 /** 6343 * Whether mobile data connections are allowed by the user. See 6344 * ConnectivityManager for more info. 6345 * @hide 6346 */ 6347 public static final String MOBILE_DATA = "mobile_data"; 6348 6349 /** 6350 * Whether the mobile data connection should remain active even when higher 6351 * priority networks like WiFi are active, to help make network switching faster. 6352 * 6353 * See ConnectivityService for more info. 6354 * 6355 * (0 = disabled, 1 = enabled) 6356 * @hide 6357 */ 6358 public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on"; 6359 6360 /** {@hide} */ 6361 public static final String NETSTATS_ENABLED = "netstats_enabled"; 6362 /** {@hide} */ 6363 public static final String NETSTATS_POLL_INTERVAL = "netstats_poll_interval"; 6364 /** {@hide} */ 6365 public static final String NETSTATS_TIME_CACHE_MAX_AGE = "netstats_time_cache_max_age"; 6366 /** {@hide} */ 6367 public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes"; 6368 /** {@hide} */ 6369 public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled"; 6370 6371 /** {@hide} */ 6372 public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration"; 6373 /** {@hide} */ 6374 public static final String NETSTATS_DEV_PERSIST_BYTES = "netstats_dev_persist_bytes"; 6375 /** {@hide} */ 6376 public static final String NETSTATS_DEV_ROTATE_AGE = "netstats_dev_rotate_age"; 6377 /** {@hide} */ 6378 public static final String NETSTATS_DEV_DELETE_AGE = "netstats_dev_delete_age"; 6379 6380 /** {@hide} */ 6381 public static final String NETSTATS_UID_BUCKET_DURATION = "netstats_uid_bucket_duration"; 6382 /** {@hide} */ 6383 public static final String NETSTATS_UID_PERSIST_BYTES = "netstats_uid_persist_bytes"; 6384 /** {@hide} */ 6385 public static final String NETSTATS_UID_ROTATE_AGE = "netstats_uid_rotate_age"; 6386 /** {@hide} */ 6387 public static final String NETSTATS_UID_DELETE_AGE = "netstats_uid_delete_age"; 6388 6389 /** {@hide} */ 6390 public static final String NETSTATS_UID_TAG_BUCKET_DURATION = "netstats_uid_tag_bucket_duration"; 6391 /** {@hide} */ 6392 public static final String NETSTATS_UID_TAG_PERSIST_BYTES = "netstats_uid_tag_persist_bytes"; 6393 /** {@hide} */ 6394 public static final String NETSTATS_UID_TAG_ROTATE_AGE = "netstats_uid_tag_rotate_age"; 6395 /** {@hide} */ 6396 public static final String NETSTATS_UID_TAG_DELETE_AGE = "netstats_uid_tag_delete_age"; 6397 6398 /** 6399 * User preference for which network(s) should be used. Only the 6400 * connectivity service should touch this. 6401 */ 6402 public static final String NETWORK_PREFERENCE = "network_preference"; 6403 6404 /** 6405 * Which package name to use for network scoring. If null, or if the package is not a valid 6406 * scorer app, external network scores will neither be requested nor accepted. 6407 * @hide 6408 */ 6409 public static final String NETWORK_SCORER_APP = "network_scorer_app"; 6410 6411 /** 6412 * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment 6413 * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been 6414 * exceeded. 6415 * @hide 6416 */ 6417 public static final String NITZ_UPDATE_DIFF = "nitz_update_diff"; 6418 6419 /** 6420 * The length of time in milli-seconds that automatic small adjustments to 6421 * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded. 6422 * @hide 6423 */ 6424 public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing"; 6425 6426 /** Preferred NTP server. {@hide} */ 6427 public static final String NTP_SERVER = "ntp_server"; 6428 /** Timeout in milliseconds to wait for NTP server. {@hide} */ 6429 public static final String NTP_TIMEOUT = "ntp_timeout"; 6430 6431 /** {@hide} */ 6432 public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval"; 6433 6434 /** 6435 * Whether the package manager should send package verification broadcasts for verifiers to 6436 * review apps prior to installation. 6437 * 1 = request apps to be verified prior to installation, if a verifier exists. 6438 * 0 = do not verify apps before installation 6439 * @hide 6440 */ 6441 public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable"; 6442 6443 /** Timeout for package verification. 6444 * @hide */ 6445 public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout"; 6446 6447 /** Default response code for package verification. 6448 * @hide */ 6449 public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response"; 6450 6451 /** 6452 * Show package verification setting in the Settings app. 6453 * 1 = show (default) 6454 * 0 = hide 6455 * @hide 6456 */ 6457 public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible"; 6458 6459 /** 6460 * Run package verification on apps installed through ADB/ADT/USB 6461 * 1 = perform package verification on ADB installs (default) 6462 * 0 = bypass package verification on ADB installs 6463 * @hide 6464 */ 6465 public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs"; 6466 6467 /** 6468 * Time since last fstrim (milliseconds) after which we force one to happen 6469 * during device startup. If unset, the default is 3 days. 6470 * @hide 6471 */ 6472 public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval"; 6473 6474 /** 6475 * The interval in milliseconds at which to check packet counts on the 6476 * mobile data interface when screen is on, to detect possible data 6477 * connection problems. 6478 * @hide 6479 */ 6480 public static final String PDP_WATCHDOG_POLL_INTERVAL_MS = 6481 "pdp_watchdog_poll_interval_ms"; 6482 6483 /** 6484 * The interval in milliseconds at which to check packet counts on the 6485 * mobile data interface when screen is off, to detect possible data 6486 * connection problems. 6487 * @hide 6488 */ 6489 public static final String PDP_WATCHDOG_LONG_POLL_INTERVAL_MS = 6490 "pdp_watchdog_long_poll_interval_ms"; 6491 6492 /** 6493 * The interval in milliseconds at which to check packet counts on the 6494 * mobile data interface after {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} 6495 * outgoing packets has been reached without incoming packets. 6496 * @hide 6497 */ 6498 public static final String PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS = 6499 "pdp_watchdog_error_poll_interval_ms"; 6500 6501 /** 6502 * The number of outgoing packets sent without seeing an incoming packet 6503 * that triggers a countdown (of {@link #PDP_WATCHDOG_ERROR_POLL_COUNT} 6504 * device is logged to the event log 6505 * @hide 6506 */ 6507 public static final String PDP_WATCHDOG_TRIGGER_PACKET_COUNT = 6508 "pdp_watchdog_trigger_packet_count"; 6509 6510 /** 6511 * The number of polls to perform (at {@link #PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS}) 6512 * after hitting {@link #PDP_WATCHDOG_TRIGGER_PACKET_COUNT} before 6513 * attempting data connection recovery. 6514 * @hide 6515 */ 6516 public static final String PDP_WATCHDOG_ERROR_POLL_COUNT = 6517 "pdp_watchdog_error_poll_count"; 6518 6519 /** 6520 * The number of failed PDP reset attempts before moving to something more 6521 * drastic: re-registering to the network. 6522 * @hide 6523 */ 6524 public static final String PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT = 6525 "pdp_watchdog_max_pdp_reset_fail_count"; 6526 6527 /** 6528 * A positive value indicates how often the SamplingProfiler 6529 * should take snapshots. Zero value means SamplingProfiler 6530 * is disabled. 6531 * 6532 * @hide 6533 */ 6534 public static final String SAMPLING_PROFILER_MS = "sampling_profiler_ms"; 6535 6536 /** 6537 * URL to open browser on to allow user to manage a prepay account 6538 * @hide 6539 */ 6540 public static final String SETUP_PREPAID_DATA_SERVICE_URL = 6541 "setup_prepaid_data_service_url"; 6542 6543 /** 6544 * URL to attempt a GET on to see if this is a prepay device 6545 * @hide 6546 */ 6547 public static final String SETUP_PREPAID_DETECTION_TARGET_URL = 6548 "setup_prepaid_detection_target_url"; 6549 6550 /** 6551 * Host to check for a redirect to after an attempt to GET 6552 * SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there, 6553 * this is a prepaid device with zero balance.) 6554 * @hide 6555 */ 6556 public static final String SETUP_PREPAID_DETECTION_REDIR_HOST = 6557 "setup_prepaid_detection_redir_host"; 6558 6559 /** 6560 * The interval in milliseconds at which to check the number of SMS sent out without asking 6561 * for use permit, to limit the un-authorized SMS usage. 6562 * 6563 * @hide 6564 */ 6565 public static final String SMS_OUTGOING_CHECK_INTERVAL_MS = 6566 "sms_outgoing_check_interval_ms"; 6567 6568 /** 6569 * The number of outgoing SMS sent without asking for user permit (of {@link 6570 * #SMS_OUTGOING_CHECK_INTERVAL_MS} 6571 * 6572 * @hide 6573 */ 6574 public static final String SMS_OUTGOING_CHECK_MAX_COUNT = 6575 "sms_outgoing_check_max_count"; 6576 6577 /** 6578 * Used to disable SMS short code confirmation - defaults to true. 6579 * True indcates we will do the check, etc. Set to false to disable. 6580 * @see com.android.internal.telephony.SmsUsageMonitor 6581 * @hide 6582 */ 6583 public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation"; 6584 6585 /** 6586 * Used to select which country we use to determine premium sms codes. 6587 * One of com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_SIM, 6588 * com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_NETWORK, 6589 * or com.android.internal.telephony.SMSDispatcher.PREMIUM_RULE_USE_BOTH. 6590 * @hide 6591 */ 6592 public static final String SMS_SHORT_CODE_RULE = "sms_short_code_rule"; 6593 6594 /** 6595 * Used to select TCP's default initial receiver window size in segments - defaults to a build config value 6596 * @hide 6597 */ 6598 public static final String TCP_DEFAULT_INIT_RWND = "tcp_default_init_rwnd"; 6599 6600 /** 6601 * Used to disable Tethering on a device - defaults to true 6602 * @hide 6603 */ 6604 public static final String TETHER_SUPPORTED = "tether_supported"; 6605 6606 /** 6607 * Used to require DUN APN on the device or not - defaults to a build config value 6608 * which defaults to false 6609 * @hide 6610 */ 6611 public static final String TETHER_DUN_REQUIRED = "tether_dun_required"; 6612 6613 /** 6614 * Used to hold a gservices-provisioned apn value for DUN. If set, or the 6615 * corresponding build config values are set it will override the APN DB 6616 * values. 6617 * Consists of a comma seperated list of strings: 6618 * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" 6619 * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" 6620 * @hide 6621 */ 6622 public static final String TETHER_DUN_APN = "tether_dun_apn"; 6623 6624 /** 6625 * USB Mass Storage Enabled 6626 */ 6627 public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; 6628 6629 /** 6630 * If this setting is set (to anything), then all references 6631 * to Gmail on the device must change to Google Mail. 6632 */ 6633 public static final String USE_GOOGLE_MAIL = "use_google_mail"; 6634 6635 /** 6636 * Webview Data reduction proxy key. 6637 * @hide 6638 */ 6639 public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY = 6640 "webview_data_reduction_proxy_key"; 6641 6642 /** 6643 * Whether Wifi display is enabled/disabled 6644 * 0=disabled. 1=enabled. 6645 * @hide 6646 */ 6647 public static final String WIFI_DISPLAY_ON = "wifi_display_on"; 6648 6649 /** 6650 * Whether Wifi display certification mode is enabled/disabled 6651 * 0=disabled. 1=enabled. 6652 * @hide 6653 */ 6654 public static final String WIFI_DISPLAY_CERTIFICATION_ON = 6655 "wifi_display_certification_on"; 6656 6657 /** 6658 * WPS Configuration method used by Wifi display, this setting only 6659 * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled). 6660 * 6661 * Possible values are: 6662 * 6663 * WpsInfo.INVALID: use default WPS method chosen by framework 6664 * WpsInfo.PBC : use Push button 6665 * WpsInfo.KEYPAD : use Keypad 6666 * WpsInfo.DISPLAY: use Display 6667 * @hide 6668 */ 6669 public static final String WIFI_DISPLAY_WPS_CONFIG = 6670 "wifi_display_wps_config"; 6671 6672 /** 6673 * Whether to notify the user of open networks. 6674 * <p> 6675 * If not connected and the scan results have an open network, we will 6676 * put this notification up. If we attempt to connect to a network or 6677 * the open network(s) disappear, we remove the notification. When we 6678 * show the notification, we will not show it again for 6679 * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time. 6680 */ 6681 public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = 6682 "wifi_networks_available_notification_on"; 6683 /** 6684 * {@hide} 6685 */ 6686 public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON = 6687 "wimax_networks_available_notification_on"; 6688 6689 /** 6690 * Delay (in seconds) before repeating the Wi-Fi networks available notification. 6691 * Connecting to a network will reset the timer. 6692 */ 6693 public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = 6694 "wifi_networks_available_repeat_delay"; 6695 6696 /** 6697 * 802.11 country code in ISO 3166 format 6698 * @hide 6699 */ 6700 public static final String WIFI_COUNTRY_CODE = "wifi_country_code"; 6701 6702 /** 6703 * The interval in milliseconds to issue wake up scans when wifi needs 6704 * to connect. This is necessary to connect to an access point when 6705 * device is on the move and the screen is off. 6706 * @hide 6707 */ 6708 public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS = 6709 "wifi_framework_scan_interval_ms"; 6710 6711 /** 6712 * The interval in milliseconds after which Wi-Fi is considered idle. 6713 * When idle, it is possible for the device to be switched from Wi-Fi to 6714 * the mobile data network. 6715 * @hide 6716 */ 6717 public static final String WIFI_IDLE_MS = "wifi_idle_ms"; 6718 6719 /** 6720 * When the number of open networks exceeds this number, the 6721 * least-recently-used excess networks will be removed. 6722 */ 6723 public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; 6724 6725 /** 6726 * Whether the Wi-Fi should be on. Only the Wi-Fi service should touch this. 6727 */ 6728 public static final String WIFI_ON = "wifi_on"; 6729 6730 /** 6731 * Setting to allow scans to be enabled even wifi is turned off for connectivity. 6732 * @hide 6733 */ 6734 public static final String WIFI_SCAN_ALWAYS_AVAILABLE = 6735 "wifi_scan_always_enabled"; 6736 6737 /** 6738 * Settings to allow BLE scans to be enabled even when Bluetooth is turned off for 6739 * connectivity. 6740 * @hide 6741 */ 6742 public static final String BLE_SCAN_ALWAYS_AVAILABLE = 6743 "ble_scan_always_enabled"; 6744 6745 /** 6746 * Used to save the Wifi_ON state prior to tethering. 6747 * This state will be checked to restore Wifi after 6748 * the user turns off tethering. 6749 * 6750 * @hide 6751 */ 6752 public static final String WIFI_SAVED_STATE = "wifi_saved_state"; 6753 6754 /** 6755 * The interval in milliseconds to scan as used by the wifi supplicant 6756 * @hide 6757 */ 6758 public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS = 6759 "wifi_supplicant_scan_interval_ms"; 6760 6761 /** 6762 * whether frameworks handles wifi auto-join 6763 * @hide 6764 */ 6765 public static final String WIFI_ENHANCED_AUTO_JOIN = 6766 "wifi_enhanced_auto_join"; 6767 6768 /** 6769 * whether settings show RSSI 6770 * @hide 6771 */ 6772 public static final String WIFI_NETWORK_SHOW_RSSI = 6773 "wifi_network_show_rssi"; 6774 6775 /** 6776 * The interval in milliseconds to scan at supplicant when p2p is connected 6777 * @hide 6778 */ 6779 public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS = 6780 "wifi_scan_interval_p2p_connected_ms"; 6781 6782 /** 6783 * Whether the Wi-Fi watchdog is enabled. 6784 */ 6785 public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; 6786 6787 /** 6788 * Setting to turn off poor network avoidance on Wi-Fi. Feature is enabled by default and 6789 * the setting needs to be set to 0 to disable it. 6790 * @hide 6791 */ 6792 public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED = 6793 "wifi_watchdog_poor_network_test_enabled"; 6794 6795 /** 6796 * Setting to turn on suspend optimizations at screen off on Wi-Fi. Enabled by default and 6797 * needs to be set to 0 to disable it. 6798 * @hide 6799 */ 6800 public static final String WIFI_SUSPEND_OPTIMIZATIONS_ENABLED = 6801 "wifi_suspend_optimizations_enabled"; 6802 6803 /** 6804 * The maximum number of times we will retry a connection to an access 6805 * point for which we have failed in acquiring an IP address from DHCP. 6806 * A value of N means that we will make N+1 connection attempts in all. 6807 */ 6808 public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; 6809 6810 /** 6811 * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile 6812 * data connectivity to be established after a disconnect from Wi-Fi. 6813 */ 6814 public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = 6815 "wifi_mobile_data_transition_wakelock_timeout_ms"; 6816 6817 /** 6818 * This setting controls whether WiFi configurations created by a Device Owner app 6819 * should be locked down (that is, be editable or removable only by the Device Owner App, 6820 * not even by Settings app). 6821 * This setting takes integer values. Non-zero values mean DO created configurations 6822 * are locked down. Value of zero means they are not. Default value in the absence of 6823 * actual value to this setting is 0. 6824 */ 6825 public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN = 6826 "wifi_device_owner_configs_lockdown"; 6827 6828 /** 6829 * The operational wifi frequency band 6830 * Set to one of {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO}, 6831 * {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ} or 6832 * {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ} 6833 * 6834 * @hide 6835 */ 6836 public static final String WIFI_FREQUENCY_BAND = "wifi_frequency_band"; 6837 6838 /** 6839 * The Wi-Fi peer-to-peer device name 6840 * @hide 6841 */ 6842 public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name"; 6843 6844 /** 6845 * The min time between wifi disable and wifi enable 6846 * @hide 6847 */ 6848 public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay"; 6849 6850 /** 6851 * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect 6852 * from an ephemeral network if there is no BSSID for that network with a non-null score that 6853 * has been seen in this time period. 6854 * 6855 * If this is less than or equal to zero, we use a more conservative behavior and only check 6856 * for a non-null score from the currently connected or target BSSID. 6857 * @hide 6858 */ 6859 public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS = 6860 "wifi_ephemeral_out_of_range_timeout_ms"; 6861 6862 /** 6863 * The number of milliseconds to delay when checking for data stalls during 6864 * non-aggressive detection. (screen is turned off.) 6865 * @hide 6866 */ 6867 public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS = 6868 "data_stall_alarm_non_aggressive_delay_in_ms"; 6869 6870 /** 6871 * The number of milliseconds to delay when checking for data stalls during 6872 * aggressive detection. (screen on or suspected data stall) 6873 * @hide 6874 */ 6875 public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS = 6876 "data_stall_alarm_aggressive_delay_in_ms"; 6877 6878 /** 6879 * The number of milliseconds to allow the provisioning apn to remain active 6880 * @hide 6881 */ 6882 public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS = 6883 "provisioning_apn_alarm_delay_in_ms"; 6884 6885 /** 6886 * The interval in milliseconds at which to check gprs registration 6887 * after the first registration mismatch of gprs and voice service, 6888 * to detect possible data network registration problems. 6889 * 6890 * @hide 6891 */ 6892 public static final String GPRS_REGISTER_CHECK_PERIOD_MS = 6893 "gprs_register_check_period_ms"; 6894 6895 /** 6896 * Nonzero causes Log.wtf() to crash. 6897 * @hide 6898 */ 6899 public static final String WTF_IS_FATAL = "wtf_is_fatal"; 6900 6901 /** 6902 * Ringer mode. This is used internally, changing this value will not 6903 * change the ringer mode. See AudioManager. 6904 */ 6905 public static final String MODE_RINGER = "mode_ringer"; 6906 6907 /** 6908 * Overlay display devices setting. 6909 * The associated value is a specially formatted string that describes the 6910 * size and density of simulated secondary display devices. 6911 * <p> 6912 * Format: {width}x{height}/{dpi};... 6913 * </p><p> 6914 * Example: 6915 * <ul> 6916 * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li> 6917 * <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first 6918 * at 1080p and the second at 720p.</li> 6919 * <li>If the value is empty, then no overlay display devices are created.</li> 6920 * </ul></p> 6921 * 6922 * @hide 6923 */ 6924 public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices"; 6925 6926 /** 6927 * Threshold values for the duration and level of a discharge cycle, 6928 * under which we log discharge cycle info. 6929 * 6930 * @hide 6931 */ 6932 public static final String 6933 BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold"; 6934 6935 /** @hide */ 6936 public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold"; 6937 6938 /** 6939 * Flag for allowing ActivityManagerService to send ACTION_APP_ERROR 6940 * intents on application crashes and ANRs. If this is disabled, the 6941 * crash/ANR dialog will never display the "Report" button. 6942 * <p> 6943 * Type: int (0 = disallow, 1 = allow) 6944 * 6945 * @hide 6946 */ 6947 public static final String SEND_ACTION_APP_ERROR = "send_action_app_error"; 6948 6949 /** 6950 * Maximum age of entries kept by {@link DropBoxManager}. 6951 * 6952 * @hide 6953 */ 6954 public static final String DROPBOX_AGE_SECONDS = "dropbox_age_seconds"; 6955 6956 /** 6957 * Maximum number of entry files which {@link DropBoxManager} will keep 6958 * around. 6959 * 6960 * @hide 6961 */ 6962 public static final String DROPBOX_MAX_FILES = "dropbox_max_files"; 6963 6964 /** 6965 * Maximum amount of disk space used by {@link DropBoxManager} no matter 6966 * what. 6967 * 6968 * @hide 6969 */ 6970 public static final String DROPBOX_QUOTA_KB = "dropbox_quota_kb"; 6971 6972 /** 6973 * Percent of free disk (excluding reserve) which {@link DropBoxManager} 6974 * will use. 6975 * 6976 * @hide 6977 */ 6978 public static final String DROPBOX_QUOTA_PERCENT = "dropbox_quota_percent"; 6979 6980 /** 6981 * Percent of total disk which {@link DropBoxManager} will never dip 6982 * into. 6983 * 6984 * @hide 6985 */ 6986 public static final String DROPBOX_RESERVE_PERCENT = "dropbox_reserve_percent"; 6987 6988 /** 6989 * Prefix for per-tag dropbox disable/enable settings. 6990 * 6991 * @hide 6992 */ 6993 public static final String DROPBOX_TAG_PREFIX = "dropbox:"; 6994 6995 /** 6996 * Lines of logcat to include with system crash/ANR/etc. reports, as a 6997 * prefix of the dropbox tag of the report type. For example, 6998 * "logcat_for_system_server_anr" controls the lines of logcat captured 6999 * with system server ANR reports. 0 to disable. 7000 * 7001 * @hide 7002 */ 7003 public static final String ERROR_LOGCAT_PREFIX = "logcat_for_"; 7004 7005 /** 7006 * The interval in minutes after which the amount of free storage left 7007 * on the device is logged to the event log 7008 * 7009 * @hide 7010 */ 7011 public static final String SYS_FREE_STORAGE_LOG_INTERVAL = "sys_free_storage_log_interval"; 7012 7013 /** 7014 * Threshold for the amount of change in disk free space required to 7015 * report the amount of free space. Used to prevent spamming the logs 7016 * when the disk free space isn't changing frequently. 7017 * 7018 * @hide 7019 */ 7020 public static final String 7021 DISK_FREE_CHANGE_REPORTING_THRESHOLD = "disk_free_change_reporting_threshold"; 7022 7023 /** 7024 * Minimum percentage of free storage on the device that is used to 7025 * determine if the device is running low on storage. The default is 10. 7026 * <p> 7027 * Say this value is set to 10, the device is considered running low on 7028 * storage if 90% or more of the device storage is filled up. 7029 * 7030 * @hide 7031 */ 7032 public static final String 7033 SYS_STORAGE_THRESHOLD_PERCENTAGE = "sys_storage_threshold_percentage"; 7034 7035 /** 7036 * Maximum byte size of the low storage threshold. This is to ensure 7037 * that {@link #SYS_STORAGE_THRESHOLD_PERCENTAGE} does not result in an 7038 * overly large threshold for large storage devices. Currently this must 7039 * be less than 2GB. This default is 500MB. 7040 * 7041 * @hide 7042 */ 7043 public static final String 7044 SYS_STORAGE_THRESHOLD_MAX_BYTES = "sys_storage_threshold_max_bytes"; 7045 7046 /** 7047 * Minimum bytes of free storage on the device before the data partition 7048 * is considered full. By default, 1 MB is reserved to avoid system-wide 7049 * SQLite disk full exceptions. 7050 * 7051 * @hide 7052 */ 7053 public static final String 7054 SYS_STORAGE_FULL_THRESHOLD_BYTES = "sys_storage_full_threshold_bytes"; 7055 7056 /** 7057 * The maximum reconnect delay for short network outages or when the 7058 * network is suspended due to phone use. 7059 * 7060 * @hide 7061 */ 7062 public static final String 7063 SYNC_MAX_RETRY_DELAY_IN_SECONDS = "sync_max_retry_delay_in_seconds"; 7064 7065 /** 7066 * The number of milliseconds to delay before sending out 7067 * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. Ignored. 7068 * 7069 * @hide 7070 */ 7071 public static final String CONNECTIVITY_CHANGE_DELAY = "connectivity_change_delay"; 7072 7073 7074 /** 7075 * Network sampling interval, in seconds. We'll generate link information 7076 * about bytes/packets sent and error rates based on data sampled in this interval 7077 * 7078 * @hide 7079 */ 7080 7081 public static final String CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS = 7082 "connectivity_sampling_interval_in_seconds"; 7083 7084 /** 7085 * The series of successively longer delays used in retrying to download PAC file. 7086 * Last delay is used between successful PAC downloads. 7087 * 7088 * @hide 7089 */ 7090 public static final String PAC_CHANGE_DELAY = "pac_change_delay"; 7091 7092 /** 7093 * Setting to turn off captive portal detection. Feature is enabled by 7094 * default and the setting needs to be set to 0 to disable it. 7095 * 7096 * @hide 7097 */ 7098 public static final String 7099 CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled"; 7100 7101 /** 7102 * The server used for captive portal detection upon a new conection. A 7103 * 204 response code from the server is used for validation. 7104 * 7105 * @hide 7106 */ 7107 public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server"; 7108 7109 /** 7110 * Whether network service discovery is enabled. 7111 * 7112 * @hide 7113 */ 7114 public static final String NSD_ON = "nsd_on"; 7115 7116 /** 7117 * Let user pick default install location. 7118 * 7119 * @hide 7120 */ 7121 public static final String SET_INSTALL_LOCATION = "set_install_location"; 7122 7123 /** 7124 * Default install location value. 7125 * 0 = auto, let system decide 7126 * 1 = internal 7127 * 2 = sdcard 7128 * @hide 7129 */ 7130 public static final String DEFAULT_INSTALL_LOCATION = "default_install_location"; 7131 7132 /** 7133 * ms during which to consume extra events related to Inet connection 7134 * condition after a transtion to fully-connected 7135 * 7136 * @hide 7137 */ 7138 public static final String 7139 INET_CONDITION_DEBOUNCE_UP_DELAY = "inet_condition_debounce_up_delay"; 7140 7141 /** 7142 * ms during which to consume extra events related to Inet connection 7143 * condtion after a transtion to partly-connected 7144 * 7145 * @hide 7146 */ 7147 public static final String 7148 INET_CONDITION_DEBOUNCE_DOWN_DELAY = "inet_condition_debounce_down_delay"; 7149 7150 /** {@hide} */ 7151 public static final String 7152 READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default"; 7153 7154 /** 7155 * Host name and port for global http proxy. Uses ':' seperator for 7156 * between host and port. 7157 */ 7158 public static final String HTTP_PROXY = "http_proxy"; 7159 7160 /** 7161 * Host name for global http proxy. Set via ConnectivityManager. 7162 * 7163 * @hide 7164 */ 7165 public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host"; 7166 7167 /** 7168 * Integer host port for global http proxy. Set via ConnectivityManager. 7169 * 7170 * @hide 7171 */ 7172 public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port"; 7173 7174 /** 7175 * Exclusion list for global proxy. This string contains a list of 7176 * comma-separated domains where the global proxy does not apply. 7177 * Domains should be listed in a comma- separated list. Example of 7178 * acceptable formats: ".domain1.com,my.domain2.com" Use 7179 * ConnectivityManager to set/get. 7180 * 7181 * @hide 7182 */ 7183 public static final String 7184 GLOBAL_HTTP_PROXY_EXCLUSION_LIST = "global_http_proxy_exclusion_list"; 7185 7186 /** 7187 * The location PAC File for the proxy. 7188 * @hide 7189 */ 7190 public static final String 7191 GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url"; 7192 7193 /** 7194 * Enables the UI setting to allow the user to specify the global HTTP 7195 * proxy and associated exclusion list. 7196 * 7197 * @hide 7198 */ 7199 public static final String SET_GLOBAL_HTTP_PROXY = "set_global_http_proxy"; 7200 7201 /** 7202 * Setting for default DNS in case nobody suggests one 7203 * 7204 * @hide 7205 */ 7206 public static final String DEFAULT_DNS_SERVER = "default_dns_server"; 7207 7208 /** {@hide} */ 7209 public static final String 7210 BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_"; 7211 /** {@hide} */ 7212 public static final String 7213 BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_"; 7214 /** {@hide} */ 7215 public static final String 7216 BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_"; 7217 /** {@hide} */ 7218 public static final String 7219 BLUETOOTH_MAP_PRIORITY_PREFIX = "bluetooth_map_priority_"; 7220 /** {@hide} */ 7221 public static final String 7222 BLUETOOTH_SAP_PRIORITY_PREFIX = "bluetooth_sap_priority_"; 7223 7224 /** 7225 * Device Idle (Doze) specific settings. 7226 * This is encoded as a key=value list, separated by commas. Ex: 7227 * 7228 * "inactive_timeout=60000,sensing_timeout=400000" 7229 * 7230 * The following keys are supported: 7231 * 7232 * <pre> 7233 * inactive_to (long) 7234 * sensing_to (long) 7235 * motion_inactive_to (long) 7236 * idle_after_inactive_to (long) 7237 * idle_pending_to (long) 7238 * max_idle_pending_to (long) 7239 * idle_pending_factor (float) 7240 * idle_to (long) 7241 * max_idle_to (long) 7242 * idle_factor (float) 7243 * min_time_to_alarm (long) 7244 * max_temp_app_whitelist_duration (long) 7245 * </pre> 7246 * 7247 * <p> 7248 * Type: string 7249 * @hide 7250 * @see com.android.server.DeviceIdleController.Constants 7251 */ 7252 public static final String DEVICE_IDLE_CONSTANTS = "device_idle_constants"; 7253 7254 /** 7255 * App standby (app idle) specific settings. 7256 * This is encoded as a key=value list, separated by commas. Ex: 7257 * 7258 * "idle_duration=5000,parole_interval=4500" 7259 * 7260 * The following keys are supported: 7261 * 7262 * <pre> 7263 * idle_duration (long) 7264 * wallclock_threshold (long) 7265 * parole_interval (long) 7266 * parole_duration (long) 7267 * </pre> 7268 * 7269 * <p> 7270 * Type: string 7271 * @hide 7272 * @see com.android.server.usage.UsageStatsService.SettingsObserver 7273 */ 7274 public static final String APP_IDLE_CONSTANTS = "app_idle_constants"; 7275 7276 /** 7277 * Alarm manager specific settings. 7278 * This is encoded as a key=value list, separated by commas. Ex: 7279 * 7280 * "min_futurity=5000,allow_while_idle_short_time=4500" 7281 * 7282 * The following keys are supported: 7283 * 7284 * <pre> 7285 * min_futurity (long) 7286 * min_interval (long) 7287 * allow_while_idle_short_time (long) 7288 * allow_while_idle_long_time (long) 7289 * allow_while_idle_whitelist_duration (long) 7290 * </pre> 7291 * 7292 * <p> 7293 * Type: string 7294 * @hide 7295 * @see com.android.server.AlarmManagerService.Constants 7296 */ 7297 public static final String ALARM_MANAGER_CONSTANTS = "alarm_manager_constants"; 7298 7299 /** 7300 * Get the key that retrieves a bluetooth headset's priority. 7301 * @hide 7302 */ 7303 public static final String getBluetoothHeadsetPriorityKey(String address) { 7304 return BLUETOOTH_HEADSET_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 7305 } 7306 7307 /** 7308 * Get the key that retrieves a bluetooth a2dp sink's priority. 7309 * @hide 7310 */ 7311 public static final String getBluetoothA2dpSinkPriorityKey(String address) { 7312 return BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 7313 } 7314 7315 /** 7316 * Get the key that retrieves a bluetooth Input Device's priority. 7317 * @hide 7318 */ 7319 public static final String getBluetoothInputDevicePriorityKey(String address) { 7320 return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 7321 } 7322 7323 /** 7324 * Get the key that retrieves a bluetooth map priority. 7325 * @hide 7326 */ 7327 public static final String getBluetoothMapPriorityKey(String address) { 7328 return BLUETOOTH_MAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 7329 } 7330 7331 /** 7332 * Get the key that retrieves a bluetooth map priority. 7333 * @hide 7334 */ 7335 public static final String getBluetoothSapPriorityKey(String address) { 7336 return BLUETOOTH_SAP_PRIORITY_PREFIX + address.toUpperCase(Locale.ROOT); 7337 } 7338 7339 /** 7340 * Scaling factor for normal window animations. Setting to 0 will 7341 * disable window animations. 7342 */ 7343 public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale"; 7344 7345 /** 7346 * Scaling factor for activity transition animations. Setting to 0 will 7347 * disable window animations. 7348 */ 7349 public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale"; 7350 7351 /** 7352 * Scaling factor for Animator-based animations. This affects both the 7353 * start delay and duration of all such animations. Setting to 0 will 7354 * cause animations to end immediately. The default value is 1. 7355 */ 7356 public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale"; 7357 7358 /** 7359 * Scaling factor for normal window animations. Setting to 0 will 7360 * disable window animations. 7361 * 7362 * @hide 7363 */ 7364 public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations"; 7365 7366 /** 7367 * If 0, the compatibility mode is off for all applications. 7368 * If 1, older applications run under compatibility mode. 7369 * TODO: remove this settings before code freeze (bug/1907571) 7370 * @hide 7371 */ 7372 public static final String COMPATIBILITY_MODE = "compatibility_mode"; 7373 7374 /** 7375 * CDMA only settings 7376 * Emergency Tone 0 = Off 7377 * 1 = Alert 7378 * 2 = Vibrate 7379 * @hide 7380 */ 7381 public static final String EMERGENCY_TONE = "emergency_tone"; 7382 7383 /** 7384 * CDMA only settings 7385 * Whether the auto retry is enabled. The value is 7386 * boolean (1 or 0). 7387 * @hide 7388 */ 7389 public static final String CALL_AUTO_RETRY = "call_auto_retry"; 7390 7391 /** 7392 * See RIL_PreferredNetworkType in ril.h 7393 * @hide 7394 */ 7395 public static final String PREFERRED_NETWORK_MODE = 7396 "preferred_network_mode"; 7397 7398 /** 7399 * Name of an application package to be debugged. 7400 */ 7401 public static final String DEBUG_APP = "debug_app"; 7402 7403 /** 7404 * If 1, when launching DEBUG_APP it will wait for the debugger before 7405 * starting user code. If 0, it will run normally. 7406 */ 7407 public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger"; 7408 7409 /** 7410 * Control whether the process CPU usage meter should be shown. 7411 */ 7412 public static final String SHOW_PROCESSES = "show_processes"; 7413 7414 /** 7415 * If 1 low power mode is enabled. 7416 * @hide 7417 */ 7418 public static final String LOW_POWER_MODE = "low_power"; 7419 7420 /** 7421 * Battery level [1-99] at which low power mode automatically turns on. 7422 * If 0, it will not automatically turn on. 7423 * @hide 7424 */ 7425 public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level"; 7426 7427 /** 7428 * If 1, the activity manager will aggressively finish activities and 7429 * processes as soon as they are no longer needed. If 0, the normal 7430 * extended lifetime is used. 7431 */ 7432 public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities"; 7433 7434 /** 7435 * Use Dock audio output for media: 7436 * 0 = disabled 7437 * 1 = enabled 7438 * @hide 7439 */ 7440 public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled"; 7441 7442 /** 7443 * Persisted safe headphone volume management state by AudioService 7444 * @hide 7445 */ 7446 public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state"; 7447 7448 /** 7449 * URL for tzinfo (time zone) updates 7450 * @hide 7451 */ 7452 public static final String TZINFO_UPDATE_CONTENT_URL = "tzinfo_content_url"; 7453 7454 /** 7455 * URL for tzinfo (time zone) update metadata 7456 * @hide 7457 */ 7458 public static final String TZINFO_UPDATE_METADATA_URL = "tzinfo_metadata_url"; 7459 7460 /** 7461 * URL for selinux (mandatory access control) updates 7462 * @hide 7463 */ 7464 public static final String SELINUX_UPDATE_CONTENT_URL = "selinux_content_url"; 7465 7466 /** 7467 * URL for selinux (mandatory access control) update metadata 7468 * @hide 7469 */ 7470 public static final String SELINUX_UPDATE_METADATA_URL = "selinux_metadata_url"; 7471 7472 /** 7473 * URL for sms short code updates 7474 * @hide 7475 */ 7476 public static final String SMS_SHORT_CODES_UPDATE_CONTENT_URL = 7477 "sms_short_codes_content_url"; 7478 7479 /** 7480 * URL for sms short code update metadata 7481 * @hide 7482 */ 7483 public static final String SMS_SHORT_CODES_UPDATE_METADATA_URL = 7484 "sms_short_codes_metadata_url"; 7485 7486 /** 7487 * URL for apn_db updates 7488 * @hide 7489 */ 7490 public static final String APN_DB_UPDATE_CONTENT_URL = "apn_db_content_url"; 7491 7492 /** 7493 * URL for apn_db update metadata 7494 * @hide 7495 */ 7496 public static final String APN_DB_UPDATE_METADATA_URL = "apn_db_metadata_url"; 7497 7498 /** 7499 * URL for cert pinlist updates 7500 * @hide 7501 */ 7502 public static final String CERT_PIN_UPDATE_CONTENT_URL = "cert_pin_content_url"; 7503 7504 /** 7505 * URL for cert pinlist updates 7506 * @hide 7507 */ 7508 public static final String CERT_PIN_UPDATE_METADATA_URL = "cert_pin_metadata_url"; 7509 7510 /** 7511 * URL for intent firewall updates 7512 * @hide 7513 */ 7514 public static final String INTENT_FIREWALL_UPDATE_CONTENT_URL = 7515 "intent_firewall_content_url"; 7516 7517 /** 7518 * URL for intent firewall update metadata 7519 * @hide 7520 */ 7521 public static final String INTENT_FIREWALL_UPDATE_METADATA_URL = 7522 "intent_firewall_metadata_url"; 7523 7524 /** 7525 * SELinux enforcement status. If 0, permissive; if 1, enforcing. 7526 * @hide 7527 */ 7528 public static final String SELINUX_STATUS = "selinux_status"; 7529 7530 /** 7531 * Developer setting to force RTL layout. 7532 * @hide 7533 */ 7534 public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl"; 7535 7536 /** 7537 * Milliseconds after screen-off after which low battery sounds will be silenced. 7538 * 7539 * If zero, battery sounds will always play. 7540 * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider. 7541 * 7542 * @hide 7543 */ 7544 public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout"; 7545 7546 /** 7547 * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after 7548 * the caller is done with this, they should call {@link ContentResolver#delete} to 7549 * clean up any value that they may have written. 7550 * 7551 * @hide 7552 */ 7553 public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms"; 7554 7555 /** 7556 * Defines global runtime overrides to window policy. 7557 * 7558 * See {@link com.android.server.policy.PolicyControl} for value format. 7559 * 7560 * @hide 7561 */ 7562 public static final String POLICY_CONTROL = "policy_control"; 7563 7564 /** 7565 * Defines global zen mode. ZEN_MODE_OFF, ZEN_MODE_IMPORTANT_INTERRUPTIONS, 7566 * or ZEN_MODE_NO_INTERRUPTIONS. 7567 * 7568 * @hide 7569 */ 7570 public static final String ZEN_MODE = "zen_mode"; 7571 7572 /** @hide */ public static final int ZEN_MODE_OFF = 0; 7573 /** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; 7574 /** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2; 7575 /** @hide */ public static final int ZEN_MODE_ALARMS = 3; 7576 7577 /** @hide */ public static String zenModeToString(int mode) { 7578 if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS"; 7579 if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS"; 7580 if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS"; 7581 return "ZEN_MODE_OFF"; 7582 } 7583 7584 /** @hide */ public static boolean isValidZenMode(int value) { 7585 switch (value) { 7586 case Global.ZEN_MODE_OFF: 7587 case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: 7588 case Global.ZEN_MODE_ALARMS: 7589 case Global.ZEN_MODE_NO_INTERRUPTIONS: 7590 return true; 7591 default: 7592 return false; 7593 } 7594 } 7595 7596 /** 7597 * Value of the ringer before entering zen mode. 7598 * 7599 * @hide 7600 */ 7601 public static final String ZEN_MODE_RINGER_LEVEL = "zen_mode_ringer_level"; 7602 7603 /** 7604 * Opaque value, changes when persisted zen mode configuration changes. 7605 * 7606 * @hide 7607 */ 7608 public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag"; 7609 7610 /** 7611 * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON. 7612 * 7613 * @hide 7614 */ 7615 public static final String HEADS_UP_NOTIFICATIONS_ENABLED = 7616 "heads_up_notifications_enabled"; 7617 7618 /** @hide */ public static final int HEADS_UP_OFF = 0; 7619 /** @hide */ public static final int HEADS_UP_ON = 1; 7620 7621 /** 7622 * The name of the device 7623 * 7624 * @hide 7625 */ 7626 public static final String DEVICE_NAME = "device_name"; 7627 7628 /** 7629 * Whether it should be possible to create a guest user on the device. 7630 * <p> 7631 * Type: int (0 for disabled, 1 for enabled) 7632 * @hide 7633 */ 7634 public static final String GUEST_USER_ENABLED = "guest_user_enabled"; 7635 7636 /** 7637 * Whether the NetworkScoringService has been first initialized. 7638 * <p> 7639 * Type: int (0 for false, 1 for true) 7640 * @hide 7641 */ 7642 public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned"; 7643 7644 /** 7645 * Whether the user wants to be prompted for password to decrypt the device on boot. 7646 * This only matters if the storage is encrypted. 7647 * <p> 7648 * Type: int (0 for false, 1 for true) 7649 * @hide 7650 */ 7651 public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; 7652 7653 /** 7654 * Whether the Volte/VT is enabled 7655 * <p> 7656 * Type: int (0 for false, 1 for true) 7657 * @hide 7658 */ 7659 public static final String ENHANCED_4G_MODE_ENABLED = "volte_vt_enabled"; 7660 7661 /** 7662 * Whether WFC is enabled 7663 * <p> 7664 * Type: int (0 for false, 1 for true) 7665 * 7666 * @hide 7667 */ 7668 public static final String WFC_IMS_ENABLED = "wfc_ims_enabled"; 7669 7670 /** 7671 * WFC Mode. 7672 * <p> 7673 * Type: int - 2=Wi-Fi preferred, 1=Cellular preferred, 0=Wi-Fi only 7674 * 7675 * @hide 7676 */ 7677 public static final String WFC_IMS_MODE = "wfc_ims_mode"; 7678 7679 /** 7680 * Whether WFC roaming is enabled 7681 * <p> 7682 * Type: int (0 for false, 1 for true) 7683 * 7684 * @hide 7685 */ 7686 public static final String WFC_IMS_ROAMING_ENABLED = "wfc_ims_roaming_enabled"; 7687 7688 /** 7689 * Whether user can enable/disable LTE as a preferred network. A carrier might control 7690 * this via gservices, OMA-DM, carrier app, etc. 7691 * <p> 7692 * Type: int (0 for false, 1 for true) 7693 * @hide 7694 */ 7695 public static final String LTE_SERVICE_FORCED = "lte_service_forced"; 7696 7697 /** 7698 * Settings to backup. This is here so that it's in the same place as the settings 7699 * keys and easy to update. 7700 * 7701 * These keys may be mentioned in the SETTINGS_TO_BACKUP arrays in System 7702 * and Secure as well. This is because those tables drive both backup and 7703 * restore, and restore needs to properly whitelist keys that used to live 7704 * in those namespaces. The keys will only actually be backed up / restored 7705 * if they are also mentioned in this table (Global.SETTINGS_TO_BACKUP). 7706 * 7707 * NOTE: Settings are backed up and restored in the order they appear 7708 * in this array. If you have one setting depending on another, 7709 * make sure that they are ordered appropriately. 7710 * 7711 * @hide 7712 */ 7713 public static final String[] SETTINGS_TO_BACKUP = { 7714 BUGREPORT_IN_POWER_MENU, 7715 STAY_ON_WHILE_PLUGGED_IN, 7716 AUTO_TIME, 7717 AUTO_TIME_ZONE, 7718 POWER_SOUNDS_ENABLED, 7719 DOCK_SOUNDS_ENABLED, 7720 USB_MASS_STORAGE_ENABLED, 7721 ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 7722 WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 7723 WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 7724 WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, 7725 WIFI_NUM_OPEN_NETWORKS_KEPT, 7726 EMERGENCY_TONE, 7727 CALL_AUTO_RETRY, 7728 DOCK_AUDIO_MEDIA_ENABLED, 7729 LOW_POWER_MODE_TRIGGER_LEVEL 7730 }; 7731 7732 // Populated lazily, guarded by class object: 7733 private static NameValueCache sNameValueCache = new NameValueCache( 7734 SYS_PROP_SETTING_VERSION, 7735 CONTENT_URI, 7736 CALL_METHOD_GET_GLOBAL, 7737 CALL_METHOD_PUT_GLOBAL); 7738 7739 // Certain settings have been moved from global to the per-user secure namespace 7740 private static final HashSet<String> MOVED_TO_SECURE; 7741 static { 7742 MOVED_TO_SECURE = new HashSet<String>(1); 7743 MOVED_TO_SECURE.add(Settings.Global.INSTALL_NON_MARKET_APPS); 7744 } 7745 7746 /** @hide */ 7747 public static void getMovedToSecureSettings(Set<String> outKeySet) { 7748 outKeySet.addAll(MOVED_TO_SECURE); 7749 } 7750 7751 /** 7752 * Look up a name in the database. 7753 * @param resolver to access the database with 7754 * @param name to look up in the table 7755 * @return the corresponding value, or null if not present 7756 */ 7757 public static String getString(ContentResolver resolver, String name) { 7758 return getStringForUser(resolver, name, UserHandle.myUserId()); 7759 } 7760 7761 /** @hide */ 7762 public static String getStringForUser(ContentResolver resolver, String name, 7763 int userHandle) { 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, returning read-only value."); 7767 return Secure.getStringForUser(resolver, name, userHandle); 7768 } 7769 return sNameValueCache.getStringForUser(resolver, name, userHandle); 7770 } 7771 7772 /** 7773 * Store a name/value pair into the database. 7774 * @param resolver to access the database with 7775 * @param name to store 7776 * @param value to associate with the name 7777 * @return true if the value was set, false on database errors 7778 */ 7779 public static boolean putString(ContentResolver resolver, 7780 String name, String value) { 7781 return putStringForUser(resolver, name, value, UserHandle.myUserId()); 7782 } 7783 7784 /** @hide */ 7785 public static boolean putStringForUser(ContentResolver resolver, 7786 String name, String value, int userHandle) { 7787 if (LOCAL_LOGV) { 7788 Log.v(TAG, "Global.putString(name=" + name + ", value=" + value 7789 + " for " + userHandle); 7790 } 7791 // Global and Secure have the same access policy so we can forward writes 7792 if (MOVED_TO_SECURE.contains(name)) { 7793 Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global" 7794 + " to android.provider.Settings.Secure, value is unchanged."); 7795 return Secure.putStringForUser(resolver, name, value, userHandle); 7796 } 7797 return sNameValueCache.putStringForUser(resolver, name, value, userHandle); 7798 } 7799 7800 /** 7801 * Construct the content URI for a particular name/value pair, 7802 * useful for monitoring changes with a ContentObserver. 7803 * @param name to look up in the table 7804 * @return the corresponding content URI, or null if not present 7805 */ 7806 public static Uri getUriFor(String name) { 7807 return getUriFor(CONTENT_URI, name); 7808 } 7809 7810 /** 7811 * Convenience function for retrieving a single secure settings value 7812 * as an integer. Note that internally setting values are always 7813 * stored as strings; this function converts the string to an integer 7814 * for you. The default value will be returned if the setting is 7815 * not defined or not an integer. 7816 * 7817 * @param cr The ContentResolver to access. 7818 * @param name The name of the setting to retrieve. 7819 * @param def Value to return if the setting is not defined. 7820 * 7821 * @return The setting's current value, or 'def' if it is not defined 7822 * or not a valid integer. 7823 */ 7824 public static int getInt(ContentResolver cr, String name, int def) { 7825 String v = getString(cr, name); 7826 try { 7827 return v != null ? Integer.parseInt(v) : def; 7828 } catch (NumberFormatException e) { 7829 return def; 7830 } 7831 } 7832 7833 /** 7834 * Convenience function for retrieving a single secure settings value 7835 * as an integer. Note that internally setting values are always 7836 * stored as strings; this function converts the string to an integer 7837 * for you. 7838 * <p> 7839 * This version does not take a default value. If the setting has not 7840 * been set, or the string value is not a number, 7841 * it throws {@link SettingNotFoundException}. 7842 * 7843 * @param cr The ContentResolver to access. 7844 * @param name The name of the setting to retrieve. 7845 * 7846 * @throws SettingNotFoundException Thrown if a setting by the given 7847 * name can't be found or the setting value is not an integer. 7848 * 7849 * @return The setting's current value. 7850 */ 7851 public static int getInt(ContentResolver cr, String name) 7852 throws SettingNotFoundException { 7853 String v = getString(cr, name); 7854 try { 7855 return Integer.parseInt(v); 7856 } catch (NumberFormatException e) { 7857 throw new SettingNotFoundException(name); 7858 } 7859 } 7860 7861 /** 7862 * Convenience function for updating a single settings value as an 7863 * integer. This will either create a new entry in the table if the 7864 * given name does not exist, or modify the value of the existing row 7865 * with that name. Note that internally setting values are always 7866 * stored as strings, so this function converts the given value to a 7867 * string before storing it. 7868 * 7869 * @param cr The ContentResolver to access. 7870 * @param name The name of the setting to modify. 7871 * @param value The new value for the setting. 7872 * @return true if the value was set, false on database errors 7873 */ 7874 public static boolean putInt(ContentResolver cr, String name, int value) { 7875 return putString(cr, name, Integer.toString(value)); 7876 } 7877 7878 /** 7879 * Convenience function for retrieving a single secure settings value 7880 * as a {@code long}. Note that internally setting values are always 7881 * stored as strings; this function converts the string to a {@code long} 7882 * for you. The default value will be returned if the setting is 7883 * not defined or not a {@code long}. 7884 * 7885 * @param cr The ContentResolver to access. 7886 * @param name The name of the setting to retrieve. 7887 * @param def Value to return if the setting is not defined. 7888 * 7889 * @return The setting's current value, or 'def' if it is not defined 7890 * or not a valid {@code long}. 7891 */ 7892 public static long getLong(ContentResolver cr, String name, long def) { 7893 String valString = getString(cr, name); 7894 long value; 7895 try { 7896 value = valString != null ? Long.parseLong(valString) : def; 7897 } catch (NumberFormatException e) { 7898 value = def; 7899 } 7900 return value; 7901 } 7902 7903 /** 7904 * Convenience function for retrieving a single secure settings value 7905 * as a {@code long}. Note that internally setting values are always 7906 * stored as strings; this function converts the string to a {@code long} 7907 * for you. 7908 * <p> 7909 * This version does not take a default value. If the setting has not 7910 * been set, or the string value is not a number, 7911 * it throws {@link SettingNotFoundException}. 7912 * 7913 * @param cr The ContentResolver to access. 7914 * @param name The name of the setting to retrieve. 7915 * 7916 * @return The setting's current value. 7917 * @throws SettingNotFoundException Thrown if a setting by the given 7918 * name can't be found or the setting value is not an integer. 7919 */ 7920 public static long getLong(ContentResolver cr, String name) 7921 throws SettingNotFoundException { 7922 String valString = getString(cr, name); 7923 try { 7924 return Long.parseLong(valString); 7925 } catch (NumberFormatException e) { 7926 throw new SettingNotFoundException(name); 7927 } 7928 } 7929 7930 /** 7931 * Convenience function for updating a secure settings value as a long 7932 * integer. This will either create a new entry in the table if the 7933 * given name does not exist, or modify the value of the existing row 7934 * with that name. Note that internally setting values are always 7935 * stored as strings, so this function converts the given value to a 7936 * string before storing it. 7937 * 7938 * @param cr The ContentResolver to access. 7939 * @param name The name of the setting to modify. 7940 * @param value The new value for the setting. 7941 * @return true if the value was set, false on database errors 7942 */ 7943 public static boolean putLong(ContentResolver cr, String name, long value) { 7944 return putString(cr, name, Long.toString(value)); 7945 } 7946 7947 /** 7948 * Convenience function for retrieving a single secure settings value 7949 * as a floating point number. Note that internally setting values are 7950 * always stored as strings; this function converts the string to an 7951 * float for you. The default value will be returned if the setting 7952 * is not defined or not a valid float. 7953 * 7954 * @param cr The ContentResolver to access. 7955 * @param name The name of the setting to retrieve. 7956 * @param def Value to return if the setting is not defined. 7957 * 7958 * @return The setting's current value, or 'def' if it is not defined 7959 * or not a valid float. 7960 */ 7961 public static float getFloat(ContentResolver cr, String name, float def) { 7962 String v = getString(cr, name); 7963 try { 7964 return v != null ? Float.parseFloat(v) : def; 7965 } catch (NumberFormatException e) { 7966 return def; 7967 } 7968 } 7969 7970 /** 7971 * Convenience function for retrieving a single secure settings value 7972 * as a float. Note that internally setting values are always 7973 * stored as strings; this function converts the string to a float 7974 * for you. 7975 * <p> 7976 * This version does not take a default value. If the setting has not 7977 * been set, or the string value is not a number, 7978 * it throws {@link SettingNotFoundException}. 7979 * 7980 * @param cr The ContentResolver to access. 7981 * @param name The name of the setting to retrieve. 7982 * 7983 * @throws SettingNotFoundException Thrown if a setting by the given 7984 * name can't be found or the setting value is not a float. 7985 * 7986 * @return The setting's current value. 7987 */ 7988 public static float getFloat(ContentResolver cr, String name) 7989 throws SettingNotFoundException { 7990 String v = getString(cr, name); 7991 if (v == null) { 7992 throw new SettingNotFoundException(name); 7993 } 7994 try { 7995 return Float.parseFloat(v); 7996 } catch (NumberFormatException e) { 7997 throw new SettingNotFoundException(name); 7998 } 7999 } 8000 8001 /** 8002 * Convenience function for updating a single settings value as a 8003 * floating point number. This will either create a new entry in the 8004 * table if the given name does not exist, or modify the value of the 8005 * existing row with that name. Note that internally setting values 8006 * are always stored as strings, so this function converts the given 8007 * value to a string before storing it. 8008 * 8009 * @param cr The ContentResolver to access. 8010 * @param name The name of the setting to modify. 8011 * @param value The new value for the setting. 8012 * @return true if the value was set, false on database errors 8013 */ 8014 public static boolean putFloat(ContentResolver cr, String name, float value) { 8015 return putString(cr, name, Float.toString(value)); 8016 } 8017 8018 8019 /** 8020 * Subscription to be used for voice call on a multi sim device. The supported values 8021 * are 0 = SUB1, 1 = SUB2 and etc. 8022 * @hide 8023 */ 8024 public static final String MULTI_SIM_VOICE_CALL_SUBSCRIPTION = "multi_sim_voice_call"; 8025 8026 /** 8027 * Used to provide option to user to select subscription during dial. 8028 * The supported values are 0 = disable or 1 = enable prompt. 8029 * @hide 8030 */ 8031 public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt"; 8032 8033 /** 8034 * Subscription to be used for data call on a multi sim device. The supported values 8035 * are 0 = SUB1, 1 = SUB2 and etc. 8036 * @hide 8037 */ 8038 public static final String MULTI_SIM_DATA_CALL_SUBSCRIPTION = "multi_sim_data_call"; 8039 8040 /** 8041 * Subscription to be used for SMS on a multi sim device. The supported values 8042 * are 0 = SUB1, 1 = SUB2 and etc. 8043 * @hide 8044 */ 8045 public static final String MULTI_SIM_SMS_SUBSCRIPTION = "multi_sim_sms"; 8046 8047 /** 8048 * Used to provide option to user to select subscription during send SMS. 8049 * The value 1 - enable, 0 - disable 8050 * @hide 8051 */ 8052 public static final String MULTI_SIM_SMS_PROMPT = "multi_sim_sms_prompt"; 8053 8054 8055 8056 /** User preferred subscriptions setting. 8057 * This holds the details of the user selected subscription from the card and 8058 * the activation status. Each settings string have the coma separated values 8059 * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index 8060 * @hide 8061 */ 8062 public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1", 8063 "user_preferred_sub2","user_preferred_sub3"}; 8064 8065 /** 8066 * Whether to enable new contacts aggregator or not. 8067 * The value 1 - enable, 0 - disable 8068 * @hide 8069 */ 8070 public static final String NEW_CONTACT_AGGREGATOR = "new_contact_aggregator"; 8071 8072 /** 8073 * Whether to enable contacts metadata syncing or not 8074 * The value 1 - enable, 0 - disable 8075 * @hide 8076 */ 8077 public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync"; 8078 } 8079 8080 /** 8081 * User-defined bookmarks and shortcuts. The target of each bookmark is an 8082 * Intent URL, allowing it to be either a web page or a particular 8083 * application activity. 8084 * 8085 * @hide 8086 */ 8087 public static final class Bookmarks implements BaseColumns 8088 { 8089 private static final String TAG = "Bookmarks"; 8090 8091 /** 8092 * The content:// style URL for this table 8093 */ 8094 public static final Uri CONTENT_URI = 8095 Uri.parse("content://" + AUTHORITY + "/bookmarks"); 8096 8097 /** 8098 * The row ID. 8099 * <p>Type: INTEGER</p> 8100 */ 8101 public static final String ID = "_id"; 8102 8103 /** 8104 * Descriptive name of the bookmark that can be displayed to the user. 8105 * If this is empty, the title should be resolved at display time (use 8106 * {@link #getTitle(Context, Cursor)} any time you want to display the 8107 * title of a bookmark.) 8108 * <P> 8109 * Type: TEXT 8110 * </P> 8111 */ 8112 public static final String TITLE = "title"; 8113 8114 /** 8115 * Arbitrary string (displayed to the user) that allows bookmarks to be 8116 * organized into categories. There are some special names for 8117 * standard folders, which all start with '@'. The label displayed for 8118 * the folder changes with the locale (via {@link #getLabelForFolder}) but 8119 * the folder name does not change so you can consistently query for 8120 * the folder regardless of the current locale. 8121 * 8122 * <P>Type: TEXT</P> 8123 * 8124 */ 8125 public static final String FOLDER = "folder"; 8126 8127 /** 8128 * The Intent URL of the bookmark, describing what it points to. This 8129 * value is given to {@link android.content.Intent#getIntent} to create 8130 * an Intent that can be launched. 8131 * <P>Type: TEXT</P> 8132 */ 8133 public static final String INTENT = "intent"; 8134 8135 /** 8136 * Optional shortcut character associated with this bookmark. 8137 * <P>Type: INTEGER</P> 8138 */ 8139 public static final String SHORTCUT = "shortcut"; 8140 8141 /** 8142 * The order in which the bookmark should be displayed 8143 * <P>Type: INTEGER</P> 8144 */ 8145 public static final String ORDERING = "ordering"; 8146 8147 private static final String[] sIntentProjection = { INTENT }; 8148 private static final String[] sShortcutProjection = { ID, SHORTCUT }; 8149 private static final String sShortcutSelection = SHORTCUT + "=?"; 8150 8151 /** 8152 * Convenience function to retrieve the bookmarked Intent for a 8153 * particular shortcut key. 8154 * 8155 * @param cr The ContentResolver to query. 8156 * @param shortcut The shortcut key. 8157 * 8158 * @return Intent The bookmarked URL, or null if there is no bookmark 8159 * matching the given shortcut. 8160 */ 8161 public static Intent getIntentForShortcut(ContentResolver cr, char shortcut) 8162 { 8163 Intent intent = null; 8164 8165 Cursor c = cr.query(CONTENT_URI, 8166 sIntentProjection, sShortcutSelection, 8167 new String[] { String.valueOf((int) shortcut) }, ORDERING); 8168 // Keep trying until we find a valid shortcut 8169 try { 8170 while (intent == null && c.moveToNext()) { 8171 try { 8172 String intentURI = c.getString(c.getColumnIndexOrThrow(INTENT)); 8173 intent = Intent.parseUri(intentURI, 0); 8174 } catch (java.net.URISyntaxException e) { 8175 // The stored URL is bad... ignore it. 8176 } catch (IllegalArgumentException e) { 8177 // Column not found 8178 Log.w(TAG, "Intent column not found", e); 8179 } 8180 } 8181 } finally { 8182 if (c != null) c.close(); 8183 } 8184 8185 return intent; 8186 } 8187 8188 /** 8189 * Add a new bookmark to the system. 8190 * 8191 * @param cr The ContentResolver to query. 8192 * @param intent The desired target of the bookmark. 8193 * @param title Bookmark title that is shown to the user; null if none 8194 * or it should be resolved to the intent's title. 8195 * @param folder Folder in which to place the bookmark; null if none. 8196 * @param shortcut Shortcut that will invoke the bookmark; 0 if none. If 8197 * this is non-zero and there is an existing bookmark entry 8198 * with this same shortcut, then that existing shortcut is 8199 * cleared (the bookmark is not removed). 8200 * @return The unique content URL for the new bookmark entry. 8201 */ 8202 public static Uri add(ContentResolver cr, 8203 Intent intent, 8204 String title, 8205 String folder, 8206 char shortcut, 8207 int ordering) 8208 { 8209 // If a shortcut is supplied, and it is already defined for 8210 // another bookmark, then remove the old definition. 8211 if (shortcut != 0) { 8212 cr.delete(CONTENT_URI, sShortcutSelection, 8213 new String[] { String.valueOf((int) shortcut) }); 8214 } 8215 8216 ContentValues values = new ContentValues(); 8217 if (title != null) values.put(TITLE, title); 8218 if (folder != null) values.put(FOLDER, folder); 8219 values.put(INTENT, intent.toUri(0)); 8220 if (shortcut != 0) values.put(SHORTCUT, (int) shortcut); 8221 values.put(ORDERING, ordering); 8222 return cr.insert(CONTENT_URI, values); 8223 } 8224 8225 /** 8226 * Return the folder name as it should be displayed to the user. This 8227 * takes care of localizing special folders. 8228 * 8229 * @param r Resources object for current locale; only need access to 8230 * system resources. 8231 * @param folder The value found in the {@link #FOLDER} column. 8232 * 8233 * @return CharSequence The label for this folder that should be shown 8234 * to the user. 8235 */ 8236 public static CharSequence getLabelForFolder(Resources r, String folder) { 8237 return folder; 8238 } 8239 8240 /** 8241 * Return the title as it should be displayed to the user. This takes 8242 * care of localizing bookmarks that point to activities. 8243 * 8244 * @param context A context. 8245 * @param cursor A cursor pointing to the row whose title should be 8246 * returned. The cursor must contain at least the {@link #TITLE} 8247 * and {@link #INTENT} columns. 8248 * @return A title that is localized and can be displayed to the user, 8249 * or the empty string if one could not be found. 8250 */ 8251 public static CharSequence getTitle(Context context, Cursor cursor) { 8252 int titleColumn = cursor.getColumnIndex(TITLE); 8253 int intentColumn = cursor.getColumnIndex(INTENT); 8254 if (titleColumn == -1 || intentColumn == -1) { 8255 throw new IllegalArgumentException( 8256 "The cursor must contain the TITLE and INTENT columns."); 8257 } 8258 8259 String title = cursor.getString(titleColumn); 8260 if (!TextUtils.isEmpty(title)) { 8261 return title; 8262 } 8263 8264 String intentUri = cursor.getString(intentColumn); 8265 if (TextUtils.isEmpty(intentUri)) { 8266 return ""; 8267 } 8268 8269 Intent intent; 8270 try { 8271 intent = Intent.parseUri(intentUri, 0); 8272 } catch (URISyntaxException e) { 8273 return ""; 8274 } 8275 8276 PackageManager packageManager = context.getPackageManager(); 8277 ResolveInfo info = packageManager.resolveActivity(intent, 0); 8278 return info != null ? info.loadLabel(packageManager) : ""; 8279 } 8280 } 8281 8282 /** 8283 * Returns the device ID that we should use when connecting to the mobile gtalk server. 8284 * This is a string like "android-0x1242", where the hex string is the Android ID obtained 8285 * from the GoogleLoginService. 8286 * 8287 * @param androidId The Android ID for this device. 8288 * @return The device ID that should be used when connecting to the mobile gtalk server. 8289 * @hide 8290 */ 8291 public static String getGTalkDeviceId(long androidId) { 8292 return "android-" + Long.toHexString(androidId); 8293 } 8294 8295 private static final String[] PM_WRITE_SETTINGS = { 8296 android.Manifest.permission.WRITE_SETTINGS 8297 }; 8298 private static final String[] PM_CHANGE_NETWORK_STATE = { 8299 android.Manifest.permission.CHANGE_NETWORK_STATE, 8300 android.Manifest.permission.WRITE_SETTINGS 8301 }; 8302 private static final String[] PM_SYSTEM_ALERT_WINDOW = { 8303 android.Manifest.permission.SYSTEM_ALERT_WINDOW 8304 }; 8305 8306 /** 8307 * Performs a strict and comprehensive check of whether a calling package is allowed to 8308 * write/modify system settings, as the condition differs for pre-M, M+, and 8309 * privileged/preinstalled apps. If the provided uid does not match the 8310 * callingPackage, a negative result will be returned. 8311 * @hide 8312 */ 8313 public static boolean isCallingPackageAllowedToWriteSettings(Context context, int uid, 8314 String callingPackage, boolean throwException) { 8315 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8316 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 8317 PM_WRITE_SETTINGS, false); 8318 } 8319 8320 /** 8321 * Performs a strict and comprehensive check of whether a calling package is allowed to 8322 * write/modify system settings, as the condition differs for pre-M, M+, and 8323 * privileged/preinstalled apps. If the provided uid does not match the 8324 * callingPackage, a negative result will be returned. The caller is expected to have 8325 * either WRITE_SETTINGS or CHANGE_NETWORK_STATE permission declared. 8326 * 8327 * Note: if the check is successful, the operation of this app will be updated to the 8328 * current time. 8329 * @hide 8330 */ 8331 public static boolean checkAndNoteWriteSettingsOperation(Context context, int uid, 8332 String callingPackage, boolean throwException) { 8333 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8334 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 8335 PM_WRITE_SETTINGS, true); 8336 } 8337 8338 /** 8339 * Performs a strict and comprehensive check of whether a calling package is allowed to 8340 * change the state of network, as the condition differs for pre-M, M+, and 8341 * privileged/preinstalled apps. If the provided uid does not match the 8342 * callingPackage, a negative result will be returned. The caller is expected to have 8343 * either of CHANGE_NETWORK_STATE or WRITE_SETTINGS permission declared. 8344 * @hide 8345 */ 8346 public static boolean isCallingPackageAllowedToChangeNetworkState(Context context, int uid, 8347 String callingPackage, boolean throwException) { 8348 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8349 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 8350 PM_CHANGE_NETWORK_STATE, false); 8351 } 8352 8353 /** 8354 * Performs a strict and comprehensive check of whether a calling package is allowed to 8355 * change the state of network, as the condition differs for pre-M, M+, and 8356 * privileged/preinstalled apps. If the provided uid does not match the 8357 * callingPackage, a negative result will be returned. The caller is expected to have 8358 * either CHANGE_NETWORK_STATE or WRITE_SETTINGS permission declared. 8359 * 8360 * Note: if the check is successful, the operation of this app will be updated to the 8361 * current time. 8362 * @hide 8363 */ 8364 public static boolean checkAndNoteChangeNetworkStateOperation(Context context, int uid, 8365 String callingPackage, boolean throwException) { 8366 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8367 callingPackage, throwException, AppOpsManager.OP_WRITE_SETTINGS, 8368 PM_CHANGE_NETWORK_STATE, true); 8369 } 8370 8371 /** 8372 * Performs a strict and comprehensive check of whether a calling package is allowed to 8373 * draw on top of other apps, as the conditions differs for pre-M, M+, and 8374 * privileged/preinstalled apps. If the provided uid does not match the callingPackage, 8375 * a negative result will be returned. 8376 * @hide 8377 */ 8378 public static boolean isCallingPackageAllowedToDrawOverlays(Context context, int uid, 8379 String callingPackage, boolean throwException) { 8380 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8381 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, 8382 PM_SYSTEM_ALERT_WINDOW, false); 8383 } 8384 8385 /** 8386 * Performs a strict and comprehensive check of whether a calling package is allowed to 8387 * draw on top of other apps, as the conditions differs for pre-M, M+, and 8388 * privileged/preinstalled apps. If the provided uid does not match the callingPackage, 8389 * a negative result will be returned. 8390 * 8391 * Note: if the check is successful, the operation of this app will be updated to the 8392 * current time. 8393 * @hide 8394 */ 8395 public static boolean checkAndNoteDrawOverlaysOperation(Context context, int uid, String 8396 callingPackage, boolean throwException) { 8397 return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, 8398 callingPackage, throwException, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, 8399 PM_SYSTEM_ALERT_WINDOW, true); 8400 } 8401 8402 /** 8403 * Helper method to perform a general and comprehensive check of whether an operation that is 8404 * protected by appops can be performed by a caller or not. e.g. OP_SYSTEM_ALERT_WINDOW and 8405 * OP_WRITE_SETTINGS 8406 * @hide 8407 */ 8408 public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, 8409 int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[] 8410 permissions, boolean makeNote) { 8411 if (callingPackage == null) { 8412 return false; 8413 } 8414 8415 AppOpsManager appOpsMgr = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE); 8416 int mode = AppOpsManager.MODE_DEFAULT; 8417 if (makeNote) { 8418 mode = appOpsMgr.noteOpNoThrow(appOpsOpCode, uid, callingPackage); 8419 } else { 8420 mode = appOpsMgr.checkOpNoThrow(appOpsOpCode, uid, callingPackage); 8421 } 8422 8423 switch (mode) { 8424 case AppOpsManager.MODE_ALLOWED: 8425 return true; 8426 8427 case AppOpsManager.MODE_DEFAULT: 8428 // this is the default operating mode after an app's installation 8429 // In this case we will check all associated static permission to see 8430 // if it is granted during install time. 8431 for (String permission : permissions) { 8432 if (context.checkCallingOrSelfPermission(permission) == PackageManager 8433 .PERMISSION_GRANTED) { 8434 // if either of the permissions are granted, we will allow it 8435 return true; 8436 } 8437 } 8438 8439 default: 8440 // this is for all other cases trickled down here... 8441 if (!throwException) { 8442 return false; 8443 } 8444 } 8445 8446 // prepare string to throw SecurityException 8447 StringBuilder exceptionMessage = new StringBuilder(); 8448 exceptionMessage.append(callingPackage); 8449 exceptionMessage.append(" was not granted "); 8450 if (permissions.length > 1) { 8451 exceptionMessage.append(" either of these permissions: "); 8452 } else { 8453 exceptionMessage.append(" this permission: "); 8454 } 8455 for (int i = 0; i < permissions.length; i++) { 8456 exceptionMessage.append(permissions[i]); 8457 exceptionMessage.append((i == permissions.length - 1) ? "." : ", "); 8458 } 8459 8460 throw new SecurityException(exceptionMessage.toString()); 8461 } 8462 8463 /** 8464 * Retrieves a correponding package name for a given uid. It will query all 8465 * packages that are associated with the given uid, but it will return only 8466 * the zeroth result. 8467 * Note: If package could not be found, a null is returned. 8468 * @hide 8469 */ 8470 public static String getPackageNameForUid(Context context, int uid) { 8471 String[] packages = context.getPackageManager().getPackagesForUid(uid); 8472 if (packages == null) { 8473 return null; 8474 } 8475 return packages[0]; 8476 } 8477} 8478