19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.telephony; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 193256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkeyimport android.annotation.Nullable; 20d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brownimport android.annotation.SystemApi; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant; 229bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport android.annotation.SdkConstant.SdkConstantType; 234e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganovimport android.app.ActivityThread; 24421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajanimport android.content.ContentResolver; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 2663c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawalimport android.content.Intent; 272c222510f602197354f9eb1f26871a70e5892606Amit Mahajanimport android.net.ConnectivityManager; 28740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chenimport android.net.Uri; 29010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinskiimport android.os.BatteryStats; 30010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinskiimport android.os.ResultReceiver; 31421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajanimport android.provider.Settings; 32421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajanimport android.provider.Settings.SettingNotFoundException; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties; 3764997623bfa04e80064b6056fab0fb23144acb44Meng Wangimport android.service.carrier.CarrierIdentifier; 38ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordonimport android.telecom.PhoneAccount; 39740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chenimport android.telecom.PhoneAccountHandle; 4006e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padaweimport android.telephony.TelephonyHistogram; 41f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Pealimport android.util.Log; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.ITelecomService; 44d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawalimport com.android.internal.telephony.CellNetworkScanResult; 45767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IPhoneSubInfo; 46767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.ITelephony; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.ITelephonyRegistry; 48d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawalimport com.android.internal.telephony.OperatorInfo; 49a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport com.android.internal.telephony.PhoneConstants; 50a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport com.android.internal.telephony.RILConstants; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.TelephonyProperties; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 53a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport java.io.FileInputStream; 54a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport java.io.IOException; 5564997623bfa04e80064b6056fab0fb23144acb44Meng Wangimport java.util.ArrayList; 564ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasaniimport java.util.Collections; 579bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport java.util.List; 58a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport java.util.regex.Matcher; 59a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport java.util.regex.Pattern; 609bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provides access to information about the telephony services on 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device. Applications can use the methods in this class to 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determine telephony services and states, as well as to access some 65767a662ecde33c3979bf02b793d392aca0403162Wink Saville * types of subscriber information. Applications can also register 66767a662ecde33c3979bf02b793d392aca0403162Wink Saville * a listener to receive notification of telephony state changes. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You do not instantiate this class directly; instead, you retrieve 69767a662ecde33c3979bf02b793d392aca0403162Wink Saville * a reference to an instance through 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Context#getSystemService 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Context.getSystemService(Context.TELEPHONY_SERVICE)}. 728a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * 738a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * The returned TelephonyManager will use the default subscription for all calls. 748a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * To call an API for a specific subscription, use {@link #createForSubscriptionId(int)}. e.g. 758a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * <code> 768a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * telephonyManager = defaultSubTelephonyManager.createForSubscriptionId(subId); 778a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * </code> 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 79633dfb6da6d70cb369797b42df4bf046fdb3a07fJake Hamby * Note that access to some telephony information is 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville * permission-protected. Your application cannot access the protected 81767a662ecde33c3979bf02b793d392aca0403162Wink Saville * information unless it has the appropriate permissions declared in 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville * its manifest file. Where permissions apply, they are noted in the 83767a662ecde33c3979bf02b793d392aca0403162Wink Saville * the methods through which you access the protected information. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TelephonyManager { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "TelephonyManager"; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 88010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski /** 89010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * The key to use when placing the result of {@link #requestModemActivityInfo(ResultReceiver)} 90010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * into the ResultReceiver Bundle. 91010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * @hide 92010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski */ 93010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski public static final String MODEM_ACTIVITY_RESULT_KEY = 94010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY; 95010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski 966e2884817d7f51257fbf5195f3a47e3cfa3b5d98Robert Greenwalt private static ITelephonyRegistry sRegistry; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 981bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal /** 991bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal * The allowed states of Wi-Fi calling. 1001bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal * 1011bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal * @hide 1021bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal */ 1031bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal public interface WifiCallingChoices { 1041bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal /** Always use Wi-Fi calling */ 1051bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal static final int ALWAYS_USE = 0; 1061bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal /** Ask the user whether to use Wi-Fi on every call */ 1072cde710fe42b706b368aec9b85f134f2d2452f7fSailesh Nepal static final int ASK_EVERY_TIME = 1; 1082cde710fe42b706b368aec9b85f134f2d2452f7fSailesh Nepal /** Never use Wi-Fi calling */ 1092cde710fe42b706b368aec9b85f134f2d2452f7fSailesh Nepal static final int NEVER_USE = 2; 1101bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal } 1111bd7876d76167922f38d78747c5696c82020c1eaSailesh Nepal 1128b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal private final Context mContext; 1138a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri private final int mSubId; 114d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private SubscriptionManager mSubscriptionManager; 115f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 116fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville private static String multiSimConfig = 117fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville SystemProperties.get(TelephonyProperties.PROPERTY_MULTI_SIM_CONFIG); 118fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 119fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** Enum indicating multisim variants 120fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * DSDS - Dual SIM Dual Standby 121fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * DSDA - Dual SIM Dual Active 122fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * TSTS - Triple SIM Triple Standby 123fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville **/ 124fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** @hide */ 125fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public enum MultiSimVariants { 126fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville DSDS, 127fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville DSDA, 128fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville TSTS, 129fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville UNKNOWN 130fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville }; 131fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1328b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 1338b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal public TelephonyManager(Context context) { 1348a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID); 1358a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri } 1368a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri 1378a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri /** @hide */ 1388a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri public TelephonyManager(Context context, int subId) { 1398a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri mSubId = subId; 1408b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Context appContext = context.getApplicationContext(); 1418b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal if (appContext != null) { 1428b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal mContext = appContext; 1438b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal } else { 1448b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal mContext = context; 1458b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal } 146d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville mSubscriptionManager = SubscriptionManager.from(mContext); 1478b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal 1488b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal if (sRegistry == null) { 1498b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService( 1508b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal "telephony.registry")); 1518b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal } 1528b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal } 1538b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal 1548b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 1558b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal private TelephonyManager() { 1568b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal mContext = null; 1578a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; 1588b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal } 1598b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal 1608b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal private static TelephonyManager sInstance = new TelephonyManager(); 1618b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal 1626e2884817d7f51257fbf5195f3a47e3cfa3b5d98Robert Greenwalt /** @hide 1636e2884817d7f51257fbf5195f3a47e3cfa3b5d98Robert Greenwalt /* @deprecated - use getSystemService as described above */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static TelephonyManager getDefault() { 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sInstance; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1684e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov private String getOpPackageName() { 1694e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov // For legacy reasons the TelephonyManager has API for getting 1704e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov // a static instance with no context set preventing us from 1714e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov // getting the op package name. As a workaround we do a best 1724e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov // effort and get the context from the current activity thread. 1734e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov if (mContext != null) { 1744e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return mContext.getOpPackageName(); 1754e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov } 1764e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return ActivityThread.currentOpPackageName(); 1774e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov } 178fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 179fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 180fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the multi SIM variant 181fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns DSDS for Dual SIM Dual Standby 182fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns DSDA for Dual SIM Dual Active 183fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns TSTS for Triple SIM Triple Standby 184fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns UNKNOWN for others 185fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 186fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 187fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public MultiSimVariants getMultiSimConfiguration() { 188fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String mSimConfig = 189fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville SystemProperties.get(TelephonyProperties.PROPERTY_MULTI_SIM_CONFIG); 190fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (mSimConfig.equals("dsds")) { 191fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return MultiSimVariants.DSDS; 192fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else if (mSimConfig.equals("dsda")) { 193fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return MultiSimVariants.DSDA; 194fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else if (mSimConfig.equals("tsts")) { 195fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return MultiSimVariants.TSTS; 196fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else { 197fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return MultiSimVariants.UNKNOWN; 198fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 199fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 200fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 201fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 202fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 203fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the number of phones available. 2042c222510f602197354f9eb1f26871a70e5892606Amit Mahajan * Returns 0 if none of voice, sms, data is not supported 205fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns 1 for Single standby mode (Single SIM functionality) 206fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns 2 for Dual standby mode.(Dual SIM functionality) 207fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 208fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public int getPhoneCount() { 209fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int phoneCount = 1; 210fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville switch (getMultiSimConfiguration()) { 211d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville case UNKNOWN: 2122c222510f602197354f9eb1f26871a70e5892606Amit Mahajan // if voice or sms or data is supported, return 1 otherwise 0 2132c222510f602197354f9eb1f26871a70e5892606Amit Mahajan if (isVoiceCapable() || isSmsCapable()) { 2142c222510f602197354f9eb1f26871a70e5892606Amit Mahajan phoneCount = 1; 2152c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } else { 2162c222510f602197354f9eb1f26871a70e5892606Amit Mahajan // todo: try to clean this up further by getting rid of the nested conditions 2172c222510f602197354f9eb1f26871a70e5892606Amit Mahajan if (mContext == null) { 2182c222510f602197354f9eb1f26871a70e5892606Amit Mahajan phoneCount = 1; 2192c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } else { 2202c222510f602197354f9eb1f26871a70e5892606Amit Mahajan // check for data support 2212c222510f602197354f9eb1f26871a70e5892606Amit Mahajan ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService( 2222c222510f602197354f9eb1f26871a70e5892606Amit Mahajan Context.CONNECTIVITY_SERVICE); 2232c222510f602197354f9eb1f26871a70e5892606Amit Mahajan if (cm == null) { 2242c222510f602197354f9eb1f26871a70e5892606Amit Mahajan phoneCount = 1; 2252c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } else { 2262c222510f602197354f9eb1f26871a70e5892606Amit Mahajan if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) { 2272c222510f602197354f9eb1f26871a70e5892606Amit Mahajan phoneCount = 1; 2282c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } else { 2292c222510f602197354f9eb1f26871a70e5892606Amit Mahajan phoneCount = 0; 2302c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } 2312c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } 2322c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } 2332c222510f602197354f9eb1f26871a70e5892606Amit Mahajan } 234d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville break; 235fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville case DSDS: 236fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville case DSDA: 237fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville phoneCount = PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM; 238fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville break; 239fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville case TSTS: 240fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville phoneCount = PhoneConstants.MAX_PHONE_COUNT_TRI_SIM; 241fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville break; 242fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 243fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return phoneCount; 244fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 245fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2468fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey /** {@hide} */ 2478fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey public static TelephonyManager from(Context context) { 2488fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 2498fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2518a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri /** 2528a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * Create a new TelephonyManager object pinned to the given subscription ID. 2538a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * 2548a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @return a TelephonyManager that uses the given subId for all calls. 2558a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri */ 2568a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri public TelephonyManager createForSubscriptionId(int subId) { 2578a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri // Don't reuse any TelephonyManager objects. 2588a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return new TelephonyManager(mContext, subId); 2598a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri } 2608a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri 261fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 262fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public boolean isMultiSimEnabled() { 263fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return (multiSimConfig.equals("dsds") || multiSimConfig.equals("dsda") || 264fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville multiSimConfig.equals("tsts")); 265fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 266fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Broadcast Intent actions 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2728c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * Broadcast intent action indicating that the call state 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the device has changed. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@link #EXTRA_STATE} extra indicates the new call state. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the new state is RINGING, a second extra 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #EXTRA_INCOMING_NUMBER} provides the incoming phone number as 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a String. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note"> 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Requires the READ_PHONE_STATE permission. 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note"> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This was a {@link android.content.Context#sendStickyBroadcast sticky} 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcast in version 1.0, but it is no longer sticky. 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instead, use {@link #getCallState} to synchronously query the current call state. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_STATE 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_INCOMING_NUMBER 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getCallState 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ACTION_PHONE_STATE_CHANGED = 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.intent.action.PHONE_STATE"; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 298149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa * The Phone app sends this intent when a user opts to respond-via-message during an incoming 2999006c422909a13e61aa10bac385f05940f345b3bScott Main * call. By default, the device's default SMS app consumes this message and sends a text message 3009006c422909a13e61aa10bac385f05940f345b3bScott Main * to the caller. A third party app can also provide this functionality by consuming this Intent 3019006c422909a13e61aa10bac385f05940f345b3bScott Main * with a {@link android.app.Service} and sending the message using its own messaging system. 3029006c422909a13e61aa10bac385f05940f345b3bScott Main * <p>The intent contains a URI (available from {@link android.content.Intent#getData}) 3039006c422909a13e61aa10bac385f05940f345b3bScott Main * describing the recipient, using either the {@code sms:}, {@code smsto:}, {@code mms:}, 3049006c422909a13e61aa10bac385f05940f345b3bScott Main * or {@code mmsto:} URI schema. Each of these URI schema carry the recipient information the 3059006c422909a13e61aa10bac385f05940f345b3bScott Main * same way: the path part of the URI contains the recipient's phone number or a comma-separated 3069006c422909a13e61aa10bac385f05940f345b3bScott Main * set of phone numbers if there are multiple recipients. For example, {@code 3079006c422909a13e61aa10bac385f05940f345b3bScott Main * smsto:2065551234}.</p> 3089006c422909a13e61aa10bac385f05940f345b3bScott Main * 3099006c422909a13e61aa10bac385f05940f345b3bScott Main * <p>The intent may also contain extras for the message text (in {@link 3109006c422909a13e61aa10bac385f05940f345b3bScott Main * android.content.Intent#EXTRA_TEXT}) and a message subject 3119006c422909a13e61aa10bac385f05940f345b3bScott Main * (in {@link android.content.Intent#EXTRA_SUBJECT}).</p> 3129006c422909a13e61aa10bac385f05940f345b3bScott Main * 313aafed1df0404e2fb64c1adeb127dc7f300a2c07bScott Main * <p class="note"><strong>Note:</strong> 3149006c422909a13e61aa10bac385f05940f345b3bScott Main * The intent-filter that consumes this Intent needs to be in a {@link android.app.Service} 3159006c422909a13e61aa10bac385f05940f345b3bScott Main * that requires the 316aafed1df0404e2fb64c1adeb127dc7f300a2c07bScott Main * permission {@link android.Manifest.permission#SEND_RESPOND_VIA_MESSAGE}.</p> 3179006c422909a13e61aa10bac385f05940f345b3bScott Main * <p>For example, the service that receives this intent can be declared in the manifest file 3189006c422909a13e61aa10bac385f05940f345b3bScott Main * with an intent filter like this:</p> 3199006c422909a13e61aa10bac385f05940f345b3bScott Main * <pre> 3209006c422909a13e61aa10bac385f05940f345b3bScott Main * <!-- Service that delivers SMS messages received from the phone "quick response" --> 3219006c422909a13e61aa10bac385f05940f345b3bScott Main * <service android:name=".HeadlessSmsSendService" 3229006c422909a13e61aa10bac385f05940f345b3bScott Main * android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 3239006c422909a13e61aa10bac385f05940f345b3bScott Main * android:exported="true" > 3249006c422909a13e61aa10bac385f05940f345b3bScott Main * <intent-filter> 3259006c422909a13e61aa10bac385f05940f345b3bScott Main * <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> 3269006c422909a13e61aa10bac385f05940f345b3bScott Main * <category android:name="android.intent.category.DEFAULT" /> 3279006c422909a13e61aa10bac385f05940f345b3bScott Main * <data android:scheme="sms" /> 3289006c422909a13e61aa10bac385f05940f345b3bScott Main * <data android:scheme="smsto" /> 3299006c422909a13e61aa10bac385f05940f345b3bScott Main * <data android:scheme="mms" /> 3309006c422909a13e61aa10bac385f05940f345b3bScott Main * <data android:scheme="mmsto" /> 3319006c422909a13e61aa10bac385f05940f345b3bScott Main * </intent-filter> 3329006c422909a13e61aa10bac385f05940f345b3bScott Main * </service></pre> 333149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa * <p> 334149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa * Output: nothing. 335149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa */ 336943eb8654ff64ad854adada782ab911421a649a0Adrian Roos @SdkConstant(SdkConstantType.SERVICE_ACTION) 337149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa public static final String ACTION_RESPOND_VIA_MESSAGE = 338149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa "android.intent.action.RESPOND_VIA_MESSAGE"; 339149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa 340149ceec6ebac9dd000c213fc91ee8e5c08522cc6Daisuke Miyakawa /** 341943eb8654ff64ad854adada782ab911421a649a0Adrian Roos * The emergency dialer may choose to present activities with intent filters for this 342943eb8654ff64ad854adada782ab911421a649a0Adrian Roos * action as emergency assistance buttons that launch the activity when clicked. 34346fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos * 34446fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos * @hide 345943eb8654ff64ad854adada782ab911421a649a0Adrian Roos */ 346943eb8654ff64ad854adada782ab911421a649a0Adrian Roos @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 347943eb8654ff64ad854adada782ab911421a649a0Adrian Roos public static final String ACTION_EMERGENCY_ASSISTANCE = 348943eb8654ff64ad854adada782ab911421a649a0Adrian Roos "android.telephony.action.EMERGENCY_ASSISTANCE"; 349943eb8654ff64ad854adada782ab911421a649a0Adrian Roos 350943eb8654ff64ad854adada782ab911421a649a0Adrian Roos /** 351a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen * Open the voicemail settings activity to make changes to voicemail configuration. 352a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen */ 353a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 354a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen public static final String ACTION_CONFIGURE_VOICEMAIL = 355a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen "android.telephony.action.CONFIGURE_VOICEMAIL"; 356a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen 357a51765ed6d495dec81009371a7c13e2c9efd5609Nancy Chen /** 35846fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos * @hide 35946fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos */ 3605b63b416fcfb4027115306075fd1a7ef666ca17dAkshay Kannan public static final boolean EMERGENCY_ASSISTANCE_ENABLED = true; 36146fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos 36246fa08d66483bf041fdc0a4eace63f9addf8e629Adrian Roos /** 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The lookup key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a String containing the new call state. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_STATE_IDLE 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_STATE_RINGING 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_STATE_OFFHOOK 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note"> 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve with 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#getStringExtra(String)}. 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 374a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final String EXTRA_STATE = PhoneConstants.STATE_KEY; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Value used with {@link #EXTRA_STATE} corresponding to 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #CALL_STATE_IDLE}. 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 380a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final String EXTRA_STATE_IDLE = PhoneConstants.State.IDLE.toString(); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Value used with {@link #EXTRA_STATE} corresponding to 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #CALL_STATE_RINGING}. 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 386a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final String EXTRA_STATE_RINGING = PhoneConstants.State.RINGING.toString(); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Value used with {@link #EXTRA_STATE} corresponding to 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #CALL_STATE_OFFHOOK}. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 392a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final String EXTRA_STATE_OFFHOOK = PhoneConstants.State.OFFHOOK.toString(); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The lookup key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a String containing the incoming phone number. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only valid when the new call state is RINGING. 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note"> 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve with 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#getStringExtra(String)}. 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_INCOMING_NUMBER = "incoming_number"; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 405c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 406c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Broadcast intent action indicating that a precise call state 407c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * (cellular) on the device has changed. 408c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 409c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p> 410c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_RINGING_CALL_STATE} extra indicates the ringing call state. 411c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_FOREGROUND_CALL_STATE} extra indicates the foreground call state. 412c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_BACKGROUND_CALL_STATE} extra indicates the background call state. 413c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DISCONNECT_CAUSE} extra indicates the disconnect cause. 414c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_PRECISE_DISCONNECT_CAUSE} extra indicates the precise disconnect cause. 415c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 416c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 417c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Requires the READ_PRECISE_PHONE_STATE permission. 418c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 419c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_RINGING_CALL_STATE 420c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_FOREGROUND_CALL_STATE 421c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_BACKGROUND_CALL_STATE 422c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DISCONNECT_CAUSE 423c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_PRECISE_DISCONNECT_CAUSE 424c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 425c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 426c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Requires the READ_PRECISE_PHONE_STATE permission. 427c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 428c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 429c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 430c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 431c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String ACTION_PRECISE_CALL_STATE_CHANGED = 432c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela "android.intent.action.PRECISE_CALL_STATE"; 433c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 434c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 435c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast 436c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the state of the current ringing call. 437c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 438c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID 439c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_IDLE 440c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE 441c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING 442c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DIALING 443c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING 444c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING 445c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_WAITING 446c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED 447c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING 448c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 449c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 450c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 451c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 452c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 453c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 454c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 455c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_RINGING_CALL_STATE = "ringing_state"; 456c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 457c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 458c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast 459c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the state of the current foreground call. 460c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 461c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID 462c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_IDLE 463c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE 464c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING 465c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DIALING 466c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING 467c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING 468c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_WAITING 469c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED 470c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING 471c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 472c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 473c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 474c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 475c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 476c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 477c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 478c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_FOREGROUND_CALL_STATE = "foreground_state"; 479c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 480c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 481c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast 482c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the state of the current background call. 483c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 484c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID 485c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_IDLE 486c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE 487c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING 488c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DIALING 489c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING 490c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING 491c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_WAITING 492c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED 493c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING 494c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 495c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 496c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 497c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 498c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 499c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 500c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 501c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_BACKGROUND_CALL_STATE = "background_state"; 502c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 503c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 504c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast 505c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the disconnect cause. 506c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 507c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see DisconnectCause 508c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 509c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 510c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 511c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 512c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 513c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 514c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 515c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DISCONNECT_CAUSE = "disconnect_cause"; 516c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 517c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 518c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast 519c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the disconnect cause provided by the RIL. 520c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 521c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see PreciseDisconnectCause 522c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 523c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 524c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 525c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 526c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 527c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 528c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 529c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_PRECISE_DISCONNECT_CAUSE = "precise_disconnect_cause"; 530c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 531c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 532c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Broadcast intent action indicating a data connection has changed, 533c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * providing precise information about the connection. 534c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 535c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p> 536c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_STATE} extra indicates the connection state. 537c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_NETWORK_TYPE} extra indicates the connection network type. 538c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_APN_TYPE} extra indicates the APN type. 539c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_APN} extra indicates the APN. 540c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_CHANGE_REASON} extra indicates the connection change reason. 541c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_IFACE_PROPERTIES} extra indicates the connection interface. 542c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The {@link #EXTRA_DATA_FAILURE_CAUSE} extra indicates the connection fail cause. 543c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 544c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 545c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Requires the READ_PRECISE_PHONE_STATE permission. 546c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 547c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_STATE 548c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_NETWORK_TYPE 549c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_APN_TYPE 550c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_APN 551c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_CHANGE_REASON 552c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_IFACE 553c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see #EXTRA_DATA_FAILURE_CAUSE 554c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 555c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 556c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 557c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED = 558c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela "android.intent.action.PRECISE_DATA_CONNECTION_STATE_CHANGED"; 559c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 560c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 561c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 562c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the state of the current data connection. 563c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 564c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#DATA_UNKNOWN 565c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#DATA_DISCONNECTED 566c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#DATA_CONNECTING 567c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#DATA_CONNECTED 568c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#DATA_SUSPENDED 569c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 570c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 571c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 572c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 573c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 574c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 575c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 576c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_STATE = PhoneConstants.STATE_KEY; 577c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 578c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 579c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 580c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an integer containing the network type. 581c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 582c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_UNKNOWN 583c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_GPRS 584c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_EDGE 585c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_UMTS 586c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_CDMA 587c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_EVDO_0 588c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_EVDO_A 589c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_1xRTT 590c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_HSDPA 591c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_HSUPA 592c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_HSPA 593c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_IDEN 594c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_EVDO_B 595c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_LTE 596c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_EHRPD 597c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @see TelephonyManager#NETWORK_TYPE_HSPAP 598c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 599c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 600c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 601c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getIntExtra(String name, int defaultValue)}. 602c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 603c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 604c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 605c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_NETWORK_TYPE = PhoneConstants.DATA_NETWORK_TYPE_KEY; 606c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 607c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 608c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 609c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an String containing the data APN type. 610c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 611c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 612c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 613c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getStringExtra(String name)}. 614c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 615c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 616c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 617c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_APN_TYPE = PhoneConstants.DATA_APN_TYPE_KEY; 618c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 619c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 620c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 621c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an String containing the data APN. 622c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 623c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 624c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 625c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getStringExtra(String name)}. 626c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 627c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 628c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 629c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_APN = PhoneConstants.DATA_APN_KEY; 630c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 631c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 632c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 633c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an String representation of the change reason. 634c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 635c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 636c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 637c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getStringExtra(String name)}. 638c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 639c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 640c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 641c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_CHANGE_REASON = PhoneConstants.STATE_CHANGE_REASON_KEY; 642c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 643c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 644c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 645c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for an String representation of the data interface. 646c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 647c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 648c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 649c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getParcelableExtra(String name)}. 650c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 651c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 652c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 653c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_LINK_PROPERTIES_KEY = PhoneConstants.DATA_LINK_PROPERTIES_KEY; 654c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela 655c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela /** 656c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * The lookup key used with the {@link #ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED} broadcast 657c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * for the data connection fail cause. 658c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 659c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * <p class="note"> 660c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * Retrieve with 661c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * {@link android.content.Intent#getStringExtra(String name)}. 662c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * 663c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela * @hide 664c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela */ 665c5ac15a3e11c03951e269b243674858411204b67Antonio Marín Cerezuela public static final String EXTRA_DATA_FAILURE_CAUSE = PhoneConstants.DATA_FAILURE_CAUSE_KEY; 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6672aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon /** 6682a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * Broadcast intent action for letting custom component know to show voicemail notification. 6692a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * @hide 6702a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee */ 6712a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee @SystemApi 6722a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION = 6732a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION"; 6742a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee 6752a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee /** 6762a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * The number of voice messages associated with the notification. 6772a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * @hide 6782a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee */ 6792a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee @SystemApi 6802a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee public static final String EXTRA_NOTIFICATION_COUNT = 6812a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee "android.telephony.extra.NOTIFICATION_COUNT"; 6822a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee 6832a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee /** 6842a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * The voicemail number. 6852a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * @hide 6862a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee */ 6872a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee @SystemApi 6882a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee public static final String EXTRA_VOICEMAIL_NUMBER = 6892a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee "android.telephony.extra.VOICEMAIL_NUMBER"; 6902a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee 6912a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee /** 6922a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * The intent to call voicemail. 6932a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * @hide 6942a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee */ 6952a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee @SystemApi 6962a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee public static final String EXTRA_CALL_VOICEMAIL_INTENT = 6972a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee "android.telephony.extra.CALL_VOICEMAIL_INTENT"; 6982a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee 6992a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee /** 7002a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * The intent to launch voicemail settings. 7012a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee * @hide 7022a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee */ 7032a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee @SystemApi 7042a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee public static final String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = 7052a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT"; 7062a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee 7072a532f2f729a935b651d171ee05800d1c909fe68Bryce Lee /** 708481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * {@link android.telecom.Connection} event used to indicate that an IMS call has be 709481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * successfully handed over from WIFI to LTE. 710481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * <p> 711481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}. 712481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * The {@link Bundle} parameter is expected to be null when this connection event is used. 713481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn * @hide 714481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn */ 715481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn public static final String EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE = 716481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn "android.telephony.event.EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE"; 717481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn 718481255dc1c5ae03020237fa8fedce7ae1c1e75cbTyler Gunn /** 719920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * {@link android.telecom.Connection} event used to indicate that an IMS call failed to be 720920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * handed over from LTE to WIFI. 721920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * <p> 722920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}. 723920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * The {@link Bundle} parameter is expected to be null when this connection event is used. 724920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn * @hide 725920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn */ 726920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn public static final String EVENT_HANDOVER_TO_WIFI_FAILED = 727920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn "android.telephony.event.EVENT_HANDOVER_TO_WIFI_FAILED"; 728920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn 729920f79411cbaef8cc461068dda97586c9e80f1a5Tyler Gunn /** 73086d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * {@link android.telecom.Connection} event used to indicate that a video call was downgraded to 73186d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * audio because the data limit was reached. 73286d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * <p> 73386d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}. 73486d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * The {@link Bundle} parameter is expected to be null when this connection event is used. 73586d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * @hide 73686d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn */ 73786d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn public static final String EVENT_DOWNGRADE_DATA_LIMIT_REACHED = 73886d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn "android.telephony.event.EVENT_DOWNGRADE_DATA_LIMIT_REACHED"; 73986d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn 74086d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn /** 74186d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * {@link android.telecom.Connection} event used to indicate that a video call was downgraded to 74286d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * audio because the data was disabled. 74386d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * <p> 74486d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}. 74586d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * The {@link Bundle} parameter is expected to be null when this connection event is used. 74686d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn * @hide 74786d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn */ 74886d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn public static final String EVENT_DOWNGRADE_DATA_DISABLED = 74986d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn "android.telephony.event.EVENT_DOWNGRADE_DATA_DISABLED"; 75086d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn 75186d5c3fcde9231e02c10f1e88fd78639d1ca717dTyler Gunn /** 7522aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * Response codes for sim activation. Activation completed successfully. 7532aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * @hide 7542aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon */ 7552aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon @SystemApi 7562aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon public static final int SIM_ACTIVATION_RESULT_COMPLETE = 0; 7572aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon /** 7582aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * Response codes for sim activation. Activation not supported (device has no SIM). 7592aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * @hide 7602aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon */ 7612aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon @SystemApi 7622aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon public static final int SIM_ACTIVATION_RESULT_NOT_SUPPORTED = 1; 7632aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon /** 7642aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * Response codes for sim activation. Activation is in progress. 7652aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * @hide 7662aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon */ 7672aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon @SystemApi 7682aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon public static final int SIM_ACTIVATION_RESULT_IN_PROGRESS = 2; 7692aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon /** 7702aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * Response codes for sim activation. Activation failed to complete. 7712aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * @hide 7722aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon */ 7732aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon @SystemApi 7742aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon public static final int SIM_ACTIVATION_RESULT_FAILED = 3; 7752aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon /** 7762aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * Response codes for sim activation. Activation canceled by user. 7772aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon * @hide 7782aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon */ 7792aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon @SystemApi 7802aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon public static final int SIM_ACTIVATION_RESULT_CANCELED = 4; 7812aebb3fec319f5715e70dc5d3c3139f8821ec6abSantos Cordon 7829e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen /* Visual voicemail protocols */ 7839e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen 7849e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen /** 7859e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen * The OMTP protocol. 7869e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen */ 7879e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen public static final String VVM_TYPE_OMTP = "vvm_type_omtp"; 7889e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen 7899e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen /** 7906c1dc315aaf68676c56cc00b13f6937ef5592f8dJonathan Basseri * A flavor of OMTP protocol with a different mobile originated (MO) format 7919e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen */ 7929e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen public static final String VVM_TYPE_CVVM = "vvm_type_cvvm"; 7939e4cd8332ac89bc409445eff3b81d739edaccb0fNancy Chen 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Device Info 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 801767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the software version number for the device, for example, 8025f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * the IMEI/SV for GSM phones. Return null if the software version is 8035f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * not available. 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 805767a662ecde33c3979bf02b793d392aca0403162Wink Saville * <p>Requires Permission: 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceSoftwareVersion() { 80905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getDeviceSoftwareVersion(getDefaultSim()); 81005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville } 81105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville 81205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** 81305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * Returns the software version number for the device, for example, 81405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * the IMEI/SV for GSM phones. Return null if the software version is 81505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * not available. 81605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * 81705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * <p>Requires Permission: 81805e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 81905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * 82005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * @param slotId of which deviceID is returned 82105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville */ 82205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** {@hide} */ 82305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville public String getDeviceSoftwareVersion(int slotId) { 824dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal ITelephony telephony = getITelephony(); 825dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal if (telephony == null) return null; 826dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 828dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return telephony.getDeviceSoftwareVersionForSlot(slotId, getOpPackageName()); 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 8305f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 8315f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 8325f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8375f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * Returns the unique device ID, for example, the IMEI for GSM and the MEID 8383158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville * or ESN for CDMA phones. Return null if device ID is not available. 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 840767a662ecde33c3979bf02b793d392aca0403162Wink Saville * <p>Requires Permission: 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceId() { 8440b7f5e81ba06f694df8c8cccaea9e009e3200b4cSanket Padawe try { 845f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 846f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 847f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 84816a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov return telephony.getDeviceId(mContext.getOpPackageName()); 8490b7f5e81ba06f694df8c8cccaea9e009e3200b4cSanket Padawe } catch (RemoteException ex) { 8500b7f5e81ba06f694df8c8cccaea9e009e3200b4cSanket Padawe return null; 851201cc00947bceb71166d0800fb770eedb4ccb3f1Sanket Padawe } catch (NullPointerException ex) { 852201cc00947bceb71166d0800fb770eedb4ccb3f1Sanket Padawe return null; 8530b7f5e81ba06f694df8c8cccaea9e009e3200b4cSanket Padawe } 854fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 855fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 856fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 857fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the unique device ID of a subscription, for example, the IMEI for 858fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * GSM and the MEID for CDMA phones. Return null if device ID is not available. 859fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 860fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p>Requires Permission: 861fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 862fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 863fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param slotId of which deviceID is returned 864fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 865fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public String getDeviceId(int slotId) { 866d456ec4be1d2310c498dda2c7319562754ad643eStuart Scott // FIXME this assumes phoneId == slotId 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 868f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 869f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 870f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 871afa16001a8b97c298c89a3c9e24cce6608660f83Robert Greenwalt return info.getDeviceIdForPhone(slotId, mContext.getOpPackageName()); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 8735f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 8745f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 8755f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 880284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * Returns the IMEI. Return null if IMEI is not available. 881284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * 882284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * <p>Requires Permission: 883284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 884284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan */ 885284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan /** {@hide} */ 886284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan public String getImei() { 887284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan return getImei(getDefaultSim()); 888284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan } 889284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan 890284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan /** 891284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * Returns the IMEI. Return null if IMEI is not available. 892284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * 893284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * <p>Requires Permission: 894284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 895284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * 896284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan * @param slotId of which deviceID is returned 897284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan */ 898284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan /** {@hide} */ 899284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan public String getImei(int slotId) { 900dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal ITelephony telephony = getITelephony(); 901dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal if (telephony == null) return null; 902dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 903284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan try { 904dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return telephony.getImeiForSlot(slotId, getOpPackageName()); 905284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan } catch (RemoteException ex) { 906284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan return null; 907284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan } catch (NullPointerException ex) { 908284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan return null; 909284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan } 910284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan } 911284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan 912284f1ec16e816f60cbbf243cebb2de90c50322bbAmit Mahajan /** 9136bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe * Returns the NAI. Return null if NAI is not available. 9146bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe * 9156bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe */ 9166bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe /** {@hide}*/ 9176bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe public String getNai() { 9186bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe return getNai(getDefaultSim()); 9196bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe } 9206bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe 9216bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe /** 9226bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe * Returns the NAI. Return null if NAI is not available. 9236bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe * 9246bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe * @param slotId of which Nai is returned 9256bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe */ 9266bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe /** {@hide}*/ 9276bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe public String getNai(int slotId) { 92863f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville int[] subId = SubscriptionManager.getSubId(slotId); 9296bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe try { 930f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 931f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 932f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 933735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov String nai = info.getNaiForSubscriber(subId[0], mContext.getOpPackageName()); 9346620b4273ef6a1489e091a6b6cc766c0eff30f8dxinhe if (Log.isLoggable(TAG, Log.VERBOSE)) { 9356620b4273ef6a1489e091a6b6cc766c0eff30f8dxinhe Rlog.v(TAG, "Nai = " + nai); 9366620b4273ef6a1489e091a6b6cc766c0eff30f8dxinhe } 9376620b4273ef6a1489e091a6b6cc766c0eff30f8dxinhe return nai; 9386bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe } catch (RemoteException ex) { 9396bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe return null; 9406bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe } catch (NullPointerException ex) { 9416bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe return null; 9426bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe } 9436bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe } 9446bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe 9456bb21401a4e7c8d1ed4f60a5b1572ce78b5311f6xinhe /** 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current location of the device. 947ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 948ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * If there is only one radio in the device and that radio has an LTE connection, 949ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * this method will return null. The implementation must not to try add LTE 950ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * identifiers into the existing cdma/gsm classes. 951ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 952ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * In the future this call will be deprecated. 953ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 954ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * @return Current location of the device or null if not available. 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 956ac61f6bc2b24f7ab03cdb0089c67c4034ea8549cMike Lockwood * <p>Requires Permission: 957ac61f6bc2b24f7ab03cdb0089c67c4034ea8549cMike Lockwood * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_COARSE_LOCATION} or 958ac61f6bc2b24f7ab03cdb0089c67c4034ea8549cMike Lockwood * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION}. 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CellLocation getCellLocation() { 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 962f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 9632e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan if (telephony == null) { 9642e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan Rlog.d(TAG, "getCellLocation returning null because telephony is null"); 965f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 9662e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan } 967275b5635ad98a411d511894e98f80e8b8bc41799Svetoslav Bundle bundle = telephony.getCellLocation(mContext.getOpPackageName()); 9682e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan if (bundle.isEmpty()) { 9692e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan Rlog.d(TAG, "getCellLocation returning null because bundle is empty"); 9702e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan return null; 9712e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan } 97241a46718b3deec95661e149b3acea2a9e54016beJohn Wang CellLocation cl = CellLocation.newFromBundle(bundle); 9732e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan if (cl.isEmpty()) { 9742e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan Rlog.d(TAG, "getCellLocation returning null because CellLocation is empty"); 97541a46718b3deec95661e149b3acea2a9e54016beJohn Wang return null; 9762e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan } 97741a46718b3deec95661e149b3acea2a9e54016beJohn Wang return cl; 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 9792e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan Rlog.d(TAG, "getCellLocation returning null due to RemoteException " + ex); 9805f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 9815f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 9822e7ca76a8a1b87c2ea6102ba14fe324cfe20f8caAmit Mahajan Rlog.d(TAG, "getCellLocation returning null due to NullPointerException " + ex); 9835f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Enables location update notifications. {@link PhoneStateListener#onCellLocationChanged 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PhoneStateListener.onCellLocationChanged} will be called on location updates. 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 991767a662ecde33c3979bf02b793d392aca0403162Wink Saville * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CONTROL_LOCATION_UPDATES} 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enableLocationUpdates() { 9978a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri enableLocationUpdates(getSubId()); 998fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 999fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1000fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1001fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Enables location update notifications for a subscription. 1002fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link PhoneStateListener#onCellLocationChanged 1003fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * PhoneStateListener.onCellLocationChanged} will be called on location updates. 1004fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1005fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES 1006fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * CONTROL_LOCATION_UPDATES} 1007fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1008fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which the location updates are enabled 10098a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1010fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 101163f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public void enableLocationUpdates(int subId) { 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1013f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 1014f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 1015f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.enableLocationUpdatesForSubscriber(subId); 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 10175f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Disables location update notifications. {@link PhoneStateListener#onCellLocationChanged 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PhoneStateListener.onCellLocationChanged} will be called on location updates. 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Requires Permission: {@link android.Manifest.permission#CONTROL_LOCATION_UPDATES 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CONTROL_LOCATION_UPDATES} 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disableLocationUpdates() { 10318a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri disableLocationUpdates(getSubId()); 1032fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1033fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1034fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** @hide */ 103563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public void disableLocationUpdates(int subId) { 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1037f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 1038f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 1039f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.disableLocationUpdatesForSubscriber(subId); 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 10415f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1046748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold * Returns the neighboring cell information of the device. 1047748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold * 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return List of NeighboringCellInfo or null if info unavailable. 10499bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh * 10509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh * <p>Requires Permission: 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (@link android.Manifest.permission#ACCESS_COARSE_UPDATES} 1052748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold * 1053748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold * @deprecated Use (@link getAllCellInfo} which returns a superset of the information 1054748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold * from NeighboringCellInfo. 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1056748e9d59792184e6a2122c78d51ab7ea8fa8d559Nathan Harold @Deprecated 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<NeighboringCellInfo> getNeighboringCellInfo() { 10589c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang try { 1059f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 1060f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 1061f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 1062f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getNeighboringCellInfo(mContext.getOpPackageName()); 10639c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang } catch (RemoteException ex) { 10649c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang return null; 10659c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang } catch (NullPointerException ex) { 10669c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang return null; 10679c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang } 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 10703cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink /** No phone radio. */ 1071a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final int PHONE_TYPE_NONE = PhoneConstants.PHONE_TYPE_NONE; 10723cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink /** Phone radio is GSM. */ 1073a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final int PHONE_TYPE_GSM = PhoneConstants.PHONE_TYPE_GSM; 10743cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink /** Phone radio is CDMA. */ 1075a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final int PHONE_TYPE_CDMA = PhoneConstants.PHONE_TYPE_CDMA; 1076962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt /** Phone is via SIP. */ 1077a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static final int PHONE_TYPE_SIP = PhoneConstants.PHONE_TYPE_SIP; 1078767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1079767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 10809d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * Returns the current phone type. 10819d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * TODO: This is a last minute change and hence hidden. 1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #PHONE_TYPE_NONE 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #PHONE_TYPE_GSM 1085767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @see #PHONE_TYPE_CDMA 1086962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt * @see #PHONE_TYPE_SIP 10879d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * 10889d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * {@hide} 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 109096b3e61ff6476ff1c5ad7cce725b374d9f87e868Wink Saville @SystemApi 10919d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville public int getCurrentPhoneType() { 10928a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCurrentPhoneType(getSubId()); 1093fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1094fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1095fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1096fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns a constant indicating the device phone type for a subscription. 1097fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1098fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #PHONE_TYPE_NONE 1099fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #PHONE_TYPE_GSM 1100fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #PHONE_TYPE_CDMA 1101fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1102fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which phone type is returned 11038a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1104fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 110596b3e61ff6476ff1c5ad7cce725b374d9f87e868Wink Saville @SystemApi 110663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getCurrentPhoneType(int subId) { 1107d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt int phoneId; 1108d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { 1109d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt // if we don't have any sims, we don't have subscriptions, but we 1110d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt // still may want to know what type of phone we've got. 1111d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt phoneId = 0; 1112d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt } else { 1113d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt phoneId = SubscriptionManager.getPhoneId(subId); 1114d314de0aa495e7a5e5d8a8754f2bdb1d09d45a21Robert Greenwalt } 1115dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 1116dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return getCurrentPhoneTypeForSlot(phoneId); 1117dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal } 1118dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 1119dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal /** 1120dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * See getCurrentPhoneType. 1121dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * 1122dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * @hide 1123dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal */ 1124dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal public int getCurrentPhoneTypeForSlot(int slotId) { 1125767a662ecde33c3979bf02b793d392aca0403162Wink Saville try{ 11269bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh ITelephony telephony = getITelephony(); 1127dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal if (telephony != null) { 1128dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return telephony.getActivePhoneTypeForSlot(slotId); 1129767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 11309bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // This can happen when the ITelephony interface is not up yet. 1131dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return getPhoneTypeFromProperty(slotId); 1132767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 11335f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (RemoteException ex) { 11345f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This shouldn't happen in the normal case, as a backup we 11355f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // read from the system property. 1136dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return getPhoneTypeFromProperty(slotId); 11375f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 11389bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // This shouldn't happen in the normal case, as a backup we 11399bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // read from the system property. 1140dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return getPhoneTypeFromProperty(slotId); 1141767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11449d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville /** 11459d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * Returns a constant indicating the device phone type. This 11469d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * indicates the type of radio used to transmit voice calls. 11479d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * 11489d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * @see #PHONE_TYPE_NONE 11499d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * @see #PHONE_TYPE_GSM 11509d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * @see #PHONE_TYPE_CDMA 11519d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville * @see #PHONE_TYPE_SIP 11529d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville */ 11539d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville public int getPhoneType() { 11549d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville if (!isVoiceCapable()) { 11559d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville return PHONE_TYPE_NONE; 11569d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville } 11579d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville return getCurrentPhoneType(); 11589d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville } 11599bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 11609bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh private int getPhoneTypeFromProperty() { 116105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getPhoneTypeFromProperty(getDefaultPhone()); 1162fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1163fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1164fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 116505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville private int getPhoneTypeFromProperty(int phoneId) { 116605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville String type = getTelephonyProperty(phoneId, 116705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville TelephonyProperties.CURRENT_ACTIVE_PHONE, null); 116805e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville if (type == null || type.equals("")) { 116905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getPhoneTypeFromNetworkType(phoneId); 1170fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 117105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return Integer.parseInt(type); 11729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh } 11739bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 11749bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh private int getPhoneTypeFromNetworkType() { 117505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getPhoneTypeFromNetworkType(getDefaultPhone()); 1176fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1177fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1178fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 117905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville private int getPhoneTypeFromNetworkType(int phoneId) { 11809bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // When the system property CURRENT_ACTIVE_PHONE, has not been set, 11819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // use the system property for default network type. 11829bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // This is a fail safe, and can only happen at first boot. 118305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville String mode = getTelephonyProperty(phoneId, "ro.telephony.default_network", null); 1184fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (mode != null) { 1185fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return TelephonyManager.getPhoneType(Integer.parseInt(mode)); 1186fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1187fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return TelephonyManager.PHONE_TYPE_NONE; 11889bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh } 1189a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1190a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** 1191a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * This function returns the type of the phone, depending 1192a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * on the network mode. 1193a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * 1194f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn * @param networkMode 1195a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * @return Phone Type 1196a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * 1197a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * @hide 1198a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville */ 1199a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static int getPhoneType(int networkMode) { 1200a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville switch(networkMode) { 1201a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_CDMA: 1202a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_CDMA_NO_EVDO: 1203a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_EVDO_NO_CDMA: 1204a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_CDMA; 1205a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1206a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_WCDMA_PREF: 1207a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_GSM_ONLY: 1208a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_WCDMA_ONLY: 1209a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_GSM_UMTS: 1210ec7f4a69535151e04d11b66bd2de5c69c133f022Uma Maheswari Ramalingam case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA: 1211ec7f4a69535151e04d11b66bd2de5c69c133f022Uma Maheswari Ramalingam case RILConstants.NETWORK_MODE_LTE_WCDMA: 12128f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA: 1213dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_TDSCDMA_ONLY: 1214dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_TDSCDMA_WCDMA: 1215dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_LTE_TDSCDMA: 1216dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_TDSCDMA_GSM: 1217dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM: 1218dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA: 1219dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA: 1220dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA: 1221dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: 1222a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_GSM; 1223a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1224a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville // Use CDMA Phone for the global mode including CDMA 1225a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_GLOBAL: 1226a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO: 1227dd8efa820b4ca75279d1c31afdd1aab0bbfbb3afSungmin Choi case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: 1228a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_CDMA; 1229a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1230a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case RILConstants.NETWORK_MODE_LTE_ONLY: 1231a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (getLteOnCdmaModeStatic() == PhoneConstants.LTE_ON_CDMA_TRUE) { 1232a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_CDMA; 1233a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } else { 1234a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_GSM; 1235a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1236a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville default: 1237a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.PHONE_TYPE_GSM; 1238a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1239a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1240a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1241a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** 1242a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * The contents of the /proc/cmdline file 1243a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville */ 1244a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville private static String getProcCmdLine() 1245a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville { 1246a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville String cmdline = ""; 1247a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville FileInputStream is = null; 1248a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville try { 1249a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville is = new FileInputStream("/proc/cmdline"); 1250a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville byte [] buffer = new byte[2048]; 1251a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville int count = is.read(buffer); 1252a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (count > 0) { 1253a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville cmdline = new String(buffer, 0, count); 1254a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1255a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } catch (IOException e) { 1256599a90c2a02645a5f2d189b9065b863397a4076eWink Saville Rlog.d(TAG, "No /proc/cmdline exception=" + e); 1257a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } finally { 1258a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (is != null) { 1259a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville try { 1260a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville is.close(); 1261a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } catch (IOException e) { 1262a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1263a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1264a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1265599a90c2a02645a5f2d189b9065b863397a4076eWink Saville Rlog.d(TAG, "/proc/cmdline=" + cmdline); 1266a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return cmdline; 1267a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1268a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1269a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** Kernel command line */ 1270a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville private static final String sKernelCmdLine = getProcCmdLine(); 1271a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1272a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** Pattern for selecting the product type from the kernel command line */ 1273a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville private static final Pattern sProductTypePattern = 1274a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville Pattern.compile("\\sproduct_type\\s*=\\s*(\\w+)"); 1275a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1276a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** The ProductType used for LTE on CDMA devices */ 1277a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville private static final String sLteOnCdmaProductType = 1278a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville SystemProperties.get(TelephonyProperties.PROPERTY_LTE_ON_CDMA_PRODUCT_TYPE, ""); 1279a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1280a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville /** 1281a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * Return if the current radio is LTE on CDMA. This 1282a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * is a tri-state return value as for a period of time 1283a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * the mode may be unknown. 1284a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * 1285a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE} 1286a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * or {@link PhoneConstants#LTE_ON_CDMA_TRUE} 1287a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * 1288a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville * @hide 1289a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville */ 1290a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville public static int getLteOnCdmaModeStatic() { 1291a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville int retVal; 1292a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville int curVal; 1293a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville String productType = ""; 1294a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1295a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville curVal = SystemProperties.getInt(TelephonyProperties.PROPERTY_LTE_ON_CDMA_DEVICE, 1296a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville PhoneConstants.LTE_ON_CDMA_UNKNOWN); 1297a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville retVal = curVal; 1298a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (retVal == PhoneConstants.LTE_ON_CDMA_UNKNOWN) { 1299a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville Matcher matcher = sProductTypePattern.matcher(sKernelCmdLine); 1300a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (matcher.find()) { 1301a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville productType = matcher.group(1); 1302a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville if (sLteOnCdmaProductType.equals(productType)) { 1303a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville retVal = PhoneConstants.LTE_ON_CDMA_TRUE; 1304a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } else { 1305a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville retVal = PhoneConstants.LTE_ON_CDMA_FALSE; 1306a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1307a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } else { 1308a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville retVal = PhoneConstants.LTE_ON_CDMA_FALSE; 1309a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1310a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1311a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 1312599a90c2a02645a5f2d189b9065b863397a4076eWink Saville Rlog.d(TAG, "getLteOnCdmaMode=" + retVal + " curVal=" + curVal + 1313a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville " product_type='" + productType + 1314a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville "' lteOnCdmaProductType='" + sLteOnCdmaProductType + "'"); 1315a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return retVal; 1316a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville } 1317a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 1319767a662ecde33c3979bf02b793d392aca0403162Wink Saville // 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Current Network 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1324767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the alphabetic name of current registered operator. 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1327aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * Availability: Only when user is registered to a network. Result may be 1328aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1329aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * on a CDMA network). 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getNetworkOperatorName() { 13328a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getNetworkOperatorName(getSubId()); 1333fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1334fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1335fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1336fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the alphabetic name of current registered operator 1337fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a particular subscription. 1338fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 1339fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: Only when user is registered to a network. Result may be 1340fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1341fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * on a CDMA network). 1342fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId 13438a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1344fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 134563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getNetworkOperatorName(int subId) { 134605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 134705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ALPHA, ""); 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1350767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the numeric name (MCC+MNC) of current registered operator. 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1353aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * Availability: Only when user is registered to a network. Result may be 1354aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1355aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * on a CDMA network). 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getNetworkOperator() { 135885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getNetworkOperatorForPhone(getDefaultPhone()); 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1361767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1362fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the numeric name (MCC+MNC) of current registered operator 1363fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a particular subscription. 1364fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 1365fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: Only when user is registered to a network. Result may be 1366fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1367fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * on a CDMA network). 1368fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1369fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId 13708a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1371fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 13727ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getNetworkOperator(int subId) { 137305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 137485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getNetworkOperatorForPhone(phoneId); 137585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 137685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 137785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 137885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the numeric name (MCC+MNC) of current registered operator 137985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * for a particular subscription. 138085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * <p> 138185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Availability: Only when user is registered to a network. Result may be 138285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 138385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * on a CDMA network). 138485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 138585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId 138685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 138785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu **/ 13887ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getNetworkOperatorForPhone(int phoneId) { 138905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, ""); 1390fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1391fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1392fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the device is considered roaming on the current 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network, for GSM purposes. 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1396aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * Availability: Only when user registered to a network. 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isNetworkRoaming() { 13998a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return isNetworkRoaming(getSubId()); 1400fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1401fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1402fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1403fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns true if the device is considered roaming on the current 1404fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * network for a subscription. 1405fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 1406fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: Only when user registered to a network. 1407fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1408fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId 14098a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1410fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 141163f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public boolean isNetworkRoaming(int subId) { 141205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 141305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return Boolean.parseBoolean(getTelephonyProperty(phoneId, 141405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville TelephonyProperties.PROPERTY_OPERATOR_ISROAMING, null)); 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1417767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1418633dfb6da6d70cb369797b42df4bf046fdb3a07fJake Hamby * Returns the ISO country code equivalent of the current registered 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * operator's MCC (Mobile Country Code). 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1421aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * Availability: Only when user is registered to a network. Result may be 1422aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1423aa4593706e4586fb4dfa6bd00d49c6f6159cbe0fjsh * on a CDMA network). 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getNetworkCountryIso() { 142685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getNetworkCountryIsoForPhone(getDefaultPhone()); 1427fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1428fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1429fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1430fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the ISO country code equivalent of the current registered 1431fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * operator's MCC (Mobile Country Code) of a subscription. 1432fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 1433fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: Only when user is registered to a network. Result may be 1434fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 1435fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * on a CDMA network). 1436fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1437fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which Network CountryIso is returned 14388a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1439fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 14407ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getNetworkCountryIso(int subId) { 144105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 144285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getNetworkCountryIsoForPhone(phoneId); 144385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 144485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 144585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 144685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the ISO country code equivalent of the current registered 144785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * operator's MCC (Mobile Country Code) of a subscription. 144885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * <p> 144985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Availability: Only when user is registered to a network. Result may be 145085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * unreliable on CDMA networks (use {@link #getPhoneType()} to determine if 145185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * on a CDMA network). 145285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 145385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which Network CountryIso is returned 145485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 145585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** {@hide} */ 145685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getNetworkCountryIsoForPhone(int phoneId) { 145705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, ""); 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Network type is unknown */ 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NETWORK_TYPE_UNKNOWN = 0; 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Current network is GPRS */ 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NETWORK_TYPE_GPRS = 1; 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Current network is EDGE */ 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NETWORK_TYPE_EDGE = 2; 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Current network is UMTS */ 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NETWORK_TYPE_UMTS = 3; 1468767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Current network is CDMA: Either IS95A or IS95B*/ 1469767a662ecde33c3979bf02b793d392aca0403162Wink Saville public static final int NETWORK_TYPE_CDMA = 4; 1470fb2b04b7bc505f5e600e360a9de6f63e16c21bf9John Wang /** Current network is EVDO revision 0*/ 1471767a662ecde33c3979bf02b793d392aca0403162Wink Saville public static final int NETWORK_TYPE_EVDO_0 = 5; 1472fb2b04b7bc505f5e600e360a9de6f63e16c21bf9John Wang /** Current network is EVDO revision A*/ 1473767a662ecde33c3979bf02b793d392aca0403162Wink Saville public static final int NETWORK_TYPE_EVDO_A = 6; 1474767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Current network is 1xRTT*/ 1475767a662ecde33c3979bf02b793d392aca0403162Wink Saville public static final int NETWORK_TYPE_1xRTT = 7; 1476ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe /** Current network is HSDPA */ 1477ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe public static final int NETWORK_TYPE_HSDPA = 8; 1478ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe /** Current network is HSUPA */ 1479ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe public static final int NETWORK_TYPE_HSUPA = 9; 1480ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe /** Current network is HSPA */ 1481ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe public static final int NETWORK_TYPE_HSPA = 10; 14828214deb542392f48b6c3fdc377fdf976c0b17a32jsh /** Current network is iDen */ 14838214deb542392f48b6c3fdc377fdf976c0b17a32jsh public static final int NETWORK_TYPE_IDEN = 11; 14840a5174a6e947d5cbeb8846a1273a90b6de065cbfNaveen Kalla /** Current network is EVDO revision B*/ 14850a5174a6e947d5cbeb8846a1273a90b6de065cbfNaveen Kalla public static final int NETWORK_TYPE_EVDO_B = 12; 1486962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt /** Current network is LTE */ 1487962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt public static final int NETWORK_TYPE_LTE = 13; 1488962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt /** Current network is eHRPD */ 1489962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt public static final int NETWORK_TYPE_EHRPD = 14; 149097ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt /** Current network is HSPA+ */ 14919e4ba121dc5168398bb29badfa2b35a57b1077a1Robert Greenwalt public static final int NETWORK_TYPE_HSPAP = 15; 14924652826d7100df88ce0117b703cd6cc8a030f777Sanket Padawe /** Current network is GSM */ 149310731a6140ad9e1be895406206ced1db7b6d85cdSandeep Kunta public static final int NETWORK_TYPE_GSM = 16; 14944652826d7100df88ce0117b703cd6cc8a030f777Sanket Padawe /** Current network is TD_SCDMA */ 1495bece926b51854f196e015b025c4177be17c8f5abYashdev Singh public static final int NETWORK_TYPE_TD_SCDMA = 17; 14964652826d7100df88ce0117b703cd6cc8a030f777Sanket Padawe /** Current network is IWLAN */ 1497bece926b51854f196e015b025c4177be17c8f5abYashdev Singh public static final int NETWORK_TYPE_IWLAN = 18; 14987965fa41c32493f723a883ca71e7c246b940331cAjay Nambi /** Current network is LTE_CA {@hide} */ 14997965fa41c32493f723a883ca71e7c246b940331cAjay Nambi public static final int NETWORK_TYPE_LTE_CA = 19; 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1501ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * @return the NETWORK_TYPE_xxxx for current data connection. 15020dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville */ 15030dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville public int getNetworkType() { 15049bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt try { 15059bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt ITelephony telephony = getITelephony(); 15069bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt if (telephony != null) { 15079bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt return telephony.getNetworkType(); 15089bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt } else { 15099bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt // This can happen when the ITelephony interface is not up yet. 15109bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt return NETWORK_TYPE_UNKNOWN; 15119bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt } 15129bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt } catch(RemoteException ex) { 15139bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt // This shouldn't happen in the normal case 15149bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt return NETWORK_TYPE_UNKNOWN; 15159bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt } catch (NullPointerException ex) { 15169bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt // This could happen before phone restarts due to crashing 15179bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt return NETWORK_TYPE_UNKNOWN; 15189bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt } 15190dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } 15200dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville 15210dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville /** 1522767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns a constant indicating the radio technology (network type) 1523fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * currently in use on the device for a subscription. 1524fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the network type 1525fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1526fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which network type is returned 1527fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1528fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_UNKNOWN 1529fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_GPRS 1530fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_EDGE 1531fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_UMTS 1532fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_HSDPA 1533fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_HSUPA 1534fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_HSPA 1535fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_CDMA 1536fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_EVDO_0 1537fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_EVDO_A 1538fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_EVDO_B 1539fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_1xRTT 1540fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_IDEN 1541fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_LTE 1542fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_EHRPD 1543fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #NETWORK_TYPE_HSPAP 15449bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * 15459bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 15469bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 15479bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 15488a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1549fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 155063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getNetworkType(int subId) { 1551fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 1552fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ITelephony telephony = getITelephony(); 1553fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (telephony != null) { 15546e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getNetworkTypeForSubscriber(subId, getOpPackageName()); 1555fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else { 1556fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This can happen when the ITelephony interface is not up yet. 1557fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return NETWORK_TYPE_UNKNOWN; 1558fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1559fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch(RemoteException ex) { 1560fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This shouldn't happen in the normal case 1561fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return NETWORK_TYPE_UNKNOWN; 1562fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 1563fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone restarts due to crashing 1564fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return NETWORK_TYPE_UNKNOWN; 1565fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1566fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1567fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1568fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1569fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns a constant indicating the radio technology (network type) 1570962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt * currently in use on the device for data transmission. 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network type 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #NETWORK_TYPE_UNKNOWN 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #NETWORK_TYPE_GPRS 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #NETWORK_TYPE_EDGE 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #NETWORK_TYPE_UMTS 1577ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe * @see #NETWORK_TYPE_HSDPA 1578ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe * @see #NETWORK_TYPE_HSUPA 1579ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe * @see #NETWORK_TYPE_HSPA 1580767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @see #NETWORK_TYPE_CDMA 1581767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @see #NETWORK_TYPE_EVDO_0 1582767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @see #NETWORK_TYPE_EVDO_A 15830a5174a6e947d5cbeb8846a1273a90b6de065cbfNaveen Kalla * @see #NETWORK_TYPE_EVDO_B 1584767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @see #NETWORK_TYPE_1xRTT 1585962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt * @see #NETWORK_TYPE_IDEN 1586962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt * @see #NETWORK_TYPE_LTE 1587962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt * @see #NETWORK_TYPE_EHRPD 158897ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt * @see #NETWORK_TYPE_HSPAP 15890dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville * 15909bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 15919bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 15929bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15940dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville public int getDataNetworkType() { 15958a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getDataNetworkType(getSubId()); 1596fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1597fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1598fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1599fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns a constant indicating the radio technology (network type) 1600fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * currently in use on the device for data transmission for a subscription 1601fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the network type 1602fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1603fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which network type is returned 16049bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * 16059bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 16069bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 16079bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 16088a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1609fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 161063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getDataNetworkType(int subId) { 16110dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville try{ 16120dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville ITelephony telephony = getITelephony(); 16130dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville if (telephony != null) { 16146e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getDataNetworkTypeForSubscriber(subId, getOpPackageName()); 16150dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } else { 16160dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville // This can happen when the ITelephony interface is not up yet. 16170dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville return NETWORK_TYPE_UNKNOWN; 16180dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } 16190dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } catch(RemoteException ex) { 16200dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville // This shouldn't happen in the normal case 16210dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville return NETWORK_TYPE_UNKNOWN; 16220dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } catch (NullPointerException ex) { 16230dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville // This could happen before phone restarts due to crashing 16240dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville return NETWORK_TYPE_UNKNOWN; 16250dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } 16260dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville } 16270dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville 16280dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville /** 16290dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville * Returns the NETWORK_TYPE_xxxx for voice 16300dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville * 16319bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 16329bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 16339bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 16340dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville */ 16350dde2c20a07770bc2f1b21e49222c968f3d8b39aWink Saville public int getVoiceNetworkType() { 16368a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getVoiceNetworkType(getSubId()); 1637fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1638fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1639fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1640fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the NETWORK_TYPE_xxxx for voice for a subId 1641fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 16429bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 16439bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 16449bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 16458a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 1646fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 164763f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getVoiceNetworkType(int subId) { 1648ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe try{ 1649ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe ITelephony telephony = getITelephony(); 1650ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe if (telephony != null) { 16519bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt return telephony.getVoiceNetworkTypeForSubscriber(subId, getOpPackageName()); 1652ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe } else { 1653ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe // This can happen when the ITelephony interface is not up yet. 1654ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe return NETWORK_TYPE_UNKNOWN; 1655767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 16565f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch(RemoteException ex) { 1657ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe // This shouldn't happen in the normal case 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NETWORK_TYPE_UNKNOWN; 16595f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 16605f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 16615f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return NETWORK_TYPE_UNKNOWN; 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1665de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger /** 1666de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger * Network Class Definitions. 1667de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger * Do not change this order, it is used for sorting during emergency calling in 1668de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger * {@link TelephonyConnectionService#getFirstPhoneForEmergencyCall()}. Any newer technologies 1669de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger * should be added after the current definitions. 1670de780c84b5bf986f9b1b905c2480bf77ec49cc23Brad Ebinger */ 1671d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** Unknown network class. {@hide} */ 1672d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static final int NETWORK_CLASS_UNKNOWN = 0; 1673d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** Class of broadly defined "2G" networks. {@hide} */ 1674d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static final int NETWORK_CLASS_2_G = 1; 1675d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** Class of broadly defined "3G" networks. {@hide} */ 1676d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static final int NETWORK_CLASS_3_G = 2; 1677d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** Class of broadly defined "4G" networks. {@hide} */ 1678d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static final int NETWORK_CLASS_4_G = 3; 1679d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 1680d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** 1681d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Return general class of network type, such as "3G" or "4G". In cases 1682d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * where classification is contentious, this method is conservative. 1683d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 1684d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * @hide 1685d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey */ 1686d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static int getNetworkClass(int networkType) { 1687d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey switch (networkType) { 1688d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_GPRS: 168910731a6140ad9e1be895406206ced1db7b6d85cdSandeep Kunta case NETWORK_TYPE_GSM: 1690d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_EDGE: 1691d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_CDMA: 1692d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_1xRTT: 1693d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_IDEN: 1694d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return NETWORK_CLASS_2_G; 1695d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_UMTS: 1696d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_EVDO_0: 1697d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_EVDO_A: 1698d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_HSDPA: 1699d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_HSUPA: 1700d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_HSPA: 1701d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_EVDO_B: 1702d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_EHRPD: 1703d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_HSPAP: 1704bece926b51854f196e015b025c4177be17c8f5abYashdev Singh case NETWORK_TYPE_TD_SCDMA: 1705d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return NETWORK_CLASS_3_G; 1706d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey case NETWORK_TYPE_LTE: 1707bece926b51854f196e015b025c4177be17c8f5abYashdev Singh case NETWORK_TYPE_IWLAN: 17087965fa41c32493f723a883ca71e7c246b940331cAjay Nambi case NETWORK_TYPE_LTE_CA: 1709d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return NETWORK_CLASS_4_G; 1710d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey default: 1711d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return NETWORK_CLASS_UNKNOWN; 1712d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 1713d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 1714d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a string representation of the radio technology (network type) 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently in use on the device. 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the radio technology 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide pending API council review 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getNetworkTypeName() { 1723d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return getNetworkTypeName(getNetworkType()); 1724d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey } 1725d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 1726fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1727fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns a string representation of the radio technology (network type) 1728fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * currently in use on the device. 1729fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which network type is returned 1730fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the name of the radio technology 1731fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1732fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 1733d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey /** {@hide} */ 1734d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static String getNetworkTypeName(int type) { 1735d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey switch (type) { 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NETWORK_TYPE_GPRS: 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "GPRS"; 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NETWORK_TYPE_EDGE: 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EDGE"; 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NETWORK_TYPE_UMTS: 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "UMTS"; 1742ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case NETWORK_TYPE_HSDPA: 1743ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe return "HSDPA"; 1744ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case NETWORK_TYPE_HSUPA: 1745ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe return "HSUPA"; 1746ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case NETWORK_TYPE_HSPA: 1747ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe return "HSPA"; 1748767a662ecde33c3979bf02b793d392aca0403162Wink Saville case NETWORK_TYPE_CDMA: 1749767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA"; 1750767a662ecde33c3979bf02b793d392aca0403162Wink Saville case NETWORK_TYPE_EVDO_0: 1751767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA - EvDo rev. 0"; 1752767a662ecde33c3979bf02b793d392aca0403162Wink Saville case NETWORK_TYPE_EVDO_A: 1753767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA - EvDo rev. A"; 17540a5174a6e947d5cbeb8846a1273a90b6de065cbfNaveen Kalla case NETWORK_TYPE_EVDO_B: 17550a5174a6e947d5cbeb8846a1273a90b6de065cbfNaveen Kalla return "CDMA - EvDo rev. B"; 1756767a662ecde33c3979bf02b793d392aca0403162Wink Saville case NETWORK_TYPE_1xRTT: 1757767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA - 1xRTT"; 1758962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt case NETWORK_TYPE_LTE: 1759962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt return "LTE"; 1760962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt case NETWORK_TYPE_EHRPD: 1761962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt return "CDMA - eHRPD"; 17624d76f364226cf049bfc850a339ea2cf63e3ae3e7John Wang case NETWORK_TYPE_IDEN: 17634d76f364226cf049bfc850a339ea2cf63e3ae3e7John Wang return "iDEN"; 176497ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt case NETWORK_TYPE_HSPAP: 176597ab2d4f86ee9c2b661a00688e934fc7030df22eRobert Greenwalt return "HSPA+"; 176610731a6140ad9e1be895406206ced1db7b6d85cdSandeep Kunta case NETWORK_TYPE_GSM: 176710731a6140ad9e1be895406206ced1db7b6d85cdSandeep Kunta return "GSM"; 1768bece926b51854f196e015b025c4177be17c8f5abYashdev Singh case NETWORK_TYPE_TD_SCDMA: 1769bece926b51854f196e015b025c4177be17c8f5abYashdev Singh return "TD_SCDMA"; 1770bece926b51854f196e015b025c4177be17c8f5abYashdev Singh case NETWORK_TYPE_IWLAN: 1771bece926b51854f196e015b025c4177be17c8f5abYashdev Singh return "IWLAN"; 17727965fa41c32493f723a883ca71e7c246b940331cAjay Nambi case NETWORK_TYPE_LTE_CA: 17737965fa41c32493f723a883ca71e7c246b940331cAjay Nambi return "LTE_CA"; 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "UNKNOWN"; 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SIM Card 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 178547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** 178647920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * SIM card state: Unknown. Signifies that the SIM is in transition 178747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * between states. For example, when the user inputs the SIM pin 178847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * under PIN_REQUIRED state, a query for sim status returns 178947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * this state before turning to SIM_STATE_READY. 179047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * 179147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * These are the ordinal value of IccCardConstants.State. 179247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville */ 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_UNKNOWN = 0; 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** SIM card state: no SIM card is available in the device */ 17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_ABSENT = 1; 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** SIM card state: Locked: requires the user's SIM PIN to unlock */ 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_PIN_REQUIRED = 2; 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** SIM card state: Locked: requires the user's SIM PUK to unlock */ 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_PUK_REQUIRED = 3; 180047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** SIM card state: Locked: requires a network PIN to unlock */ 18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_NETWORK_LOCKED = 4; 18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** SIM card state: Ready */ 18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIM_STATE_READY = 5; 180447920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** SIM card state: SIM Card is NOT READY 180547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville *@hide 180647920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville */ 180747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville public static final int SIM_STATE_NOT_READY = 6; 180847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** SIM card state: SIM Card Error, permanently disabled 180947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville *@hide 181047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville */ 181147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville public static final int SIM_STATE_PERM_DISABLED = 7; 181247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** SIM card state: SIM Card Error, present but faulty 1813f099a5f389a43a1a1f0abc6577e45c7dfca14c5cRakesh Pallerla *@hide 1814f099a5f389a43a1a1f0abc6577e45c7dfca14c5cRakesh Pallerla */ 181547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville public static final int SIM_STATE_CARD_IO_ERROR = 8; 1816a2f6a675112fa7029dbdd51eb6379bc9ce2bbf53Junda Liu /** SIM card state: SIM Card restricted, present but not usable due to 1817a2f6a675112fa7029dbdd51eb6379bc9ce2bbf53Junda Liu * carrier restrictions. 1818a2f6a675112fa7029dbdd51eb6379bc9ce2bbf53Junda Liu *@hide 1819a2f6a675112fa7029dbdd51eb6379bc9ce2bbf53Junda Liu */ 1820a2f6a675112fa7029dbdd51eb6379bc9ce2bbf53Junda Liu public static final int SIM_STATE_CARD_RESTRICTED = 9; 1821767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1822767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 182365d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville * @return true if a ICC card is present 182465d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville */ 182565d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville public boolean hasIccCard() { 1826fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return hasIccCard(getDefaultSim()); 1827fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1828fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1829fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1830fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return true if a ICC card is present for a subscription 1831fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1832fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param slotId for which icc card presence is checked 1833fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 1834fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 1835fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // FIXME Input argument slotId should be of type int 183663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public boolean hasIccCard(int slotId) { 1837fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1838e40f66ffc11cfc7e1bbe3e4c2ae1cf6dbc24cc17Wink Saville try { 1839f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 1840f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 1841f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return false; 1842f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.hasIccCardUsingSlotId(slotId); 1843e40f66ffc11cfc7e1bbe3e4c2ae1cf6dbc24cc17Wink Saville } catch (RemoteException ex) { 1844e40f66ffc11cfc7e1bbe3e4c2ae1cf6dbc24cc17Wink Saville // Assume no ICC card if remote exception which shouldn't happen 1845e40f66ffc11cfc7e1bbe3e4c2ae1cf6dbc24cc17Wink Saville return false; 18465f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 18475f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 18485f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return false; 1849e40f66ffc11cfc7e1bbe3e4c2ae1cf6dbc24cc17Wink Saville } 185065d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville } 185165d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville 185265d62c774e42d8bf9a55ef50e153ffc9e277ef37Wink Saville /** 185347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * Returns a constant indicating the state of the default SIM card. 1854767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_UNKNOWN 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_ABSENT 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_PIN_REQUIRED 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_PUK_REQUIRED 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_NETWORK_LOCKED 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #SIM_STATE_READY 186147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @see #SIM_STATE_NOT_READY 186247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @see #SIM_STATE_PERM_DISABLED 1863f099a5f389a43a1a1f0abc6577e45c7dfca14c5cRakesh Pallerla * @see #SIM_STATE_CARD_IO_ERROR 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSimState() { 18669387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan int slotIdx = getDefaultSim(); 18679387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan // slotIdx may be invalid due to sim being absent. In that case query all slots to get 18689387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan // sim state 18699387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan if (slotIdx < 0) { 18709387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan // query for all slots and return absent if all sim states are absent, otherwise 18719387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan // return unknown 18729387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan for (int i = 0; i < getPhoneCount(); i++) { 18739387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan int simState = getSimState(i); 18749387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan if (simState != SIM_STATE_ABSENT) { 18759387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan Rlog.d(TAG, "getSimState: default sim:" + slotIdx + ", sim state for " + 18769387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan "slotIdx=" + i + " is " + simState + ", return state as unknown"); 18779387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan return SIM_STATE_UNKNOWN; 18789387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan } 18799387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan } 18809387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan Rlog.d(TAG, "getSimState: default sim:" + slotIdx + ", all SIMs absent, return " + 18819387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan "state as absent"); 18829387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan return SIM_STATE_ABSENT; 18839387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan } 18849387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan return getSimState(slotIdx); 1885fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1886fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1887fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 188847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * Returns a constant indicating the state of the device SIM card in a slot. 1889fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 189047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @param slotIdx 1891fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1892fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_UNKNOWN 1893fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_ABSENT 1894fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_PIN_REQUIRED 1895fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_PUK_REQUIRED 1896fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_NETWORK_LOCKED 1897fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #SIM_STATE_READY 189847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @see #SIM_STATE_NOT_READY 189947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @see #SIM_STATE_PERM_DISABLED 190047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @see #SIM_STATE_CARD_IO_ERROR 1901fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 1902fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 190347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville public int getSimState(int slotIdx) { 19049387f1dfe3788661e883672b36edabf11a96de51Amit Mahajan int simState = SubscriptionManager.getSimStateForSlotIdx(slotIdx); 190547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville return simState; 19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1908767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the MCC+MNC (mobile country code + mobile network code) of the 19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provider of the SIM. 5 or 6 decimal digits. 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Availability: SIM state must be {@link #SIM_STATE_READY} 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSimState 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSimOperator() { 191785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimOperatorNumeric(); 191885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 191985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 192085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 192185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the MCC+MNC (mobile country code + mobile network code) of the 192285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * provider of the SIM. 5 or 6 decimal digits. 192385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * <p> 192485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Availability: SIM state must be {@link #SIM_STATE_READY} 192585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 192685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @see #getSimState 192785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 192885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param subId for which SimOperator is returned 19298a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 193085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 193185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getSimOperator(int subId) { 19327ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return getSimOperatorNumeric(subId); 193385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 193485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 193585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 193685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the MCC+MNC (mobile country code + mobile network code) of the 193785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * provider of the SIM. 5 or 6 decimal digits. 193885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * <p> 193985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Availability: SIM state must be {@link #SIM_STATE_READY} 194085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 194185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @see #getSimState 194285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 194385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 194485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getSimOperatorNumeric() { 19457ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal int subId = SubscriptionManager.getDefaultDataSubscriptionId(); 1946015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott if (!SubscriptionManager.isUsableSubIdValue(subId)) { 19477ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal subId = SubscriptionManager.getDefaultSmsSubscriptionId(); 1948015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott if (!SubscriptionManager.isUsableSubIdValue(subId)) { 19497ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal subId = SubscriptionManager.getDefaultVoiceSubscriptionId(); 1950015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott if (!SubscriptionManager.isUsableSubIdValue(subId)) { 19517ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal subId = SubscriptionManager.getDefaultSubscriptionId(); 1952015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott } 1953015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott } 1954015f3b464c42421ade3ce508d9412b217ba2c23dStuart Scott } 19557ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return getSimOperatorNumeric(subId); 1956fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1957fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1958fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1959fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the MCC+MNC (mobile country code + mobile network code) of the 1960fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * provider of the SIM for a particular subscription. 5 or 6 decimal digits. 1961fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 1962fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: SIM state must be {@link #SIM_STATE_READY} 1963fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1964fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #getSimState 1965fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1966fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which SimOperator is returned 196785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 1968fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 19697ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getSimOperatorNumeric(int subId) { 197005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 197185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimOperatorNumericForPhone(phoneId); 197285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 197385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 1974349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** 197585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the MCC+MNC (mobile country code + mobile network code) of the 197685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * provider of the SIM for a particular subscription. 5 or 6 decimal digits. 197785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * <p> 197885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 197985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which SimOperator is returned 198085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 198185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 198285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getSimOperatorNumericForPhone(int phoneId) { 198385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getTelephonyProperty(phoneId, 198405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, ""); 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1987767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1988767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the Service Provider Name (SPN). 19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Availability: SIM state must be {@link #SIM_STATE_READY} 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSimState 19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSimOperatorName() { 199585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimOperatorNameForPhone(getDefaultPhone()); 1996fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1997fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1998fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 1999fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the Service Provider Name (SPN). 2000fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2001fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Availability: SIM state must be {@link #SIM_STATE_READY} 2002fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2003fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @see #getSimState 2004fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2005fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which SimOperatorName is returned 20068a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2007fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 20087ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getSimOperatorName(int subId) { 200905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 201085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimOperatorNameForPhone(phoneId); 201185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 201285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 201385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 201485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the Service Provider Name (SPN). 201585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 201685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 201785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 201885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getSimOperatorNameForPhone(int phoneId) { 201985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getTelephonyProperty(phoneId, 202085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA, ""); 20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2023767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the ISO country code equivalent for the SIM provider's country code. 20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSimCountryIso() { 202785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimCountryIsoForPhone(getDefaultPhone()); 2028fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2029fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2030fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2031fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the ISO country code equivalent for the SIM provider's country code. 2032fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2033fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which SimCountryIso is returned 20348a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2035fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 203663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getSimCountryIso(int subId) { 203705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville int phoneId = SubscriptionManager.getPhoneId(subId); 203885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSimCountryIsoForPhone(phoneId); 203985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 204085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 204185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 204285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Returns the ISO country code equivalent for the SIM provider's country code. 204385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 204485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 204585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 204685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getSimCountryIsoForPhone(int phoneId) { 204785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getTelephonyProperty(phoneId, 204885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 20499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20525f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * Returns the serial number of the SIM, if applicable. Return null if it is 20535f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * unavailable. 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2055767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSimSerialNumber() { 20598a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getSimSerialNumber(getSubId()); 2060fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2061fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2062fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2063fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the serial number for the given subscription, if applicable. Return null if it is 2064fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * unavailable. 2065fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2066fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which Sim Serial number is returned 2067fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2068fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 20698a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2070fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 207163f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getSimSerialNumber(int subId) { 20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2073f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2074f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2075f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2076735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov return info.getIccSerialNumberForSubscriber(subId, mContext.getOpPackageName()); 20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 20785f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 20795f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 20805f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 20815f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 20829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20855e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville /** 20865e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * Return if the current radio is LTE on CDMA. This 20875e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * is a tri-state return value as for a period of time 20885e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * the mode may be unknown. 20895e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * 2090ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE} 2091ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * or {@link PhoneConstants#LTE_ON_CDMA_TRUE} 20925e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * 20939bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 20949bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 20959bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 20969bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * 20975e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville * @hide 20985e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville */ 20995e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville public int getLteOnCdmaMode() { 21008a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getLteOnCdmaMode(getSubId()); 2101fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2102fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2103fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2104fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Return if the current radio is LTE on CDMA for Subscription. This 2105fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * is a tri-state return value as for a period of time 2106fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * the mode may be unknown. 2107fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2108fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which radio is LTE on CDMA is returned 2109fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE} 2110fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * or {@link PhoneConstants#LTE_ON_CDMA_TRUE} 2111fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 21129bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 21139bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 21149bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 21158a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2116fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 211763f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getLteOnCdmaMode(int subId) { 21185e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville try { 2119f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2120f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 2121f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return PhoneConstants.LTE_ON_CDMA_UNKNOWN; 21226e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getLteOnCdmaModeForSubscriber(subId, getOpPackageName()); 21235e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville } catch (RemoteException ex) { 21245e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville // Assume no ICC card if remote exception which shouldn't happen 2125a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.LTE_ON_CDMA_UNKNOWN; 21265e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville } catch (NullPointerException ex) { 21275e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville // This could happen before phone restarts due to crashing 2128a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville return PhoneConstants.LTE_ON_CDMA_UNKNOWN; 21295e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville } 21305e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville } 21315e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville 21329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 21339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 21349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Subscriber Info 21359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 21369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 21379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the unique subscriber ID, for example, the IMSI for a GSM phone. 21405f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * Return null if it is unavailable. 21419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2142767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 21439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubscriberId() { 21468a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getSubscriberId(getSubId()); 2147fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2148fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2149fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2150fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the unique subscriber ID, for example, the IMSI for a GSM phone 2151fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a subscription. 2152fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Return null if it is unavailable. 2153fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2154fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2155fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2156fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2157fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose subscriber id is returned 21588a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2159fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 216063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getSubscriberId(int subId) { 21619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2162f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2163f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2164f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2165735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov return info.getSubscriberIdForSubscriber(subId, mContext.getOpPackageName()); 21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 21675f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 21685f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 21695f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 21705f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 217152a08cf683a6d183222d795862cfd135cec5694fSungmin Choi } 217252a08cf683a6d183222d795862cfd135cec5694fSungmin Choi } 217352a08cf683a6d183222d795862cfd135cec5694fSungmin Choi 217452a08cf683a6d183222d795862cfd135cec5694fSungmin Choi /** 217552a08cf683a6d183222d795862cfd135cec5694fSungmin Choi * Returns the Group Identifier Level1 for a GSM phone. 217652a08cf683a6d183222d795862cfd135cec5694fSungmin Choi * Return null if it is unavailable. 217752a08cf683a6d183222d795862cfd135cec5694fSungmin Choi * <p> 217852a08cf683a6d183222d795862cfd135cec5694fSungmin Choi * Requires Permission: 217952a08cf683a6d183222d795862cfd135cec5694fSungmin Choi * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 218052a08cf683a6d183222d795862cfd135cec5694fSungmin Choi */ 218152a08cf683a6d183222d795862cfd135cec5694fSungmin Choi public String getGroupIdLevel1() { 218252a08cf683a6d183222d795862cfd135cec5694fSungmin Choi try { 2183f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2184f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2185f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2186735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov return info.getGroupIdLevel1(mContext.getOpPackageName()); 218752a08cf683a6d183222d795862cfd135cec5694fSungmin Choi } catch (RemoteException ex) { 218852a08cf683a6d183222d795862cfd135cec5694fSungmin Choi return null; 218952a08cf683a6d183222d795862cfd135cec5694fSungmin Choi } catch (NullPointerException ex) { 219052a08cf683a6d183222d795862cfd135cec5694fSungmin Choi // This could happen before phone restarts due to crashing 219152a08cf683a6d183222d795862cfd135cec5694fSungmin Choi return null; 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2196fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the Group Identifier Level1 for a GSM phone for a particular subscription. 2197fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Return null if it is unavailable. 2198fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2199fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2200fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2201fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 22027ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal * @param subId whose subscriber id is returned 22038a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2204fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 220563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getGroupIdLevel1(int subId) { 2206fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 2207f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2208f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2209f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2210735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov return info.getGroupIdLevel1ForSubscriber(subId, mContext.getOpPackageName()); 2211fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 2212fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 2213fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 2214fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone restarts due to crashing 2215fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 2216fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2217fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2218fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2219fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2220767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the phone number string for line 1, for example, the MSISDN 22215f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * for a GSM phone. Return null if it is unavailable. 22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2223767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 22249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2225ad4c63b53d1e2b9b632833fb989a1aa444588de3Makoto Onuki * OR 2226ad4c63b53d1e2b9b632833fb989a1aa444588de3Makoto Onuki * {@link android.Manifest.permission#READ_SMS} 2227a26a019c6c8d7d39b1d3beefb3f2f55845175ea5Makoto Onuki * <p> 2228a26a019c6c8d7d39b1d3beefb3f2f55845175ea5Makoto Onuki * The default SMS app can also use this. 22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1Number() { 22318a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getLine1Number(getSubId()); 2232fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2233fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2234fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2235fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the phone number string for line 1, for example, the MSISDN 2236fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a GSM phone for a particular subscription. Return null if it is unavailable. 2237fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2238fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2239fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2240ad4c63b53d1e2b9b632833fb989a1aa444588de3Makoto Onuki * OR 2241ad4c63b53d1e2b9b632833fb989a1aa444588de3Makoto Onuki * {@link android.Manifest.permission#READ_SMS} 2242a26a019c6c8d7d39b1d3beefb3f2f55845175ea5Makoto Onuki * <p> 2243a26a019c6c8d7d39b1d3beefb3f2f55845175ea5Makoto Onuki * The default SMS app can also use this. 2244fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2245fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose phone number for line 1 is returned 22468a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2247fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 22487ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getLine1Number(int subId) { 2249818631b679171ffb49eaa641bee06b9c953651daDerek Tan String number = null; 2250818631b679171ffb49eaa641bee06b9c953651daDerek Tan try { 2251f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2252f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 225316a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov number = telephony.getLine1NumberForDisplay(subId, mContext.getOpPackageName()); 2254818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (RemoteException ex) { 2255818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (NullPointerException ex) { 2256818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 2257818631b679171ffb49eaa641bee06b9c953651daDerek Tan if (number != null) { 2258818631b679171ffb49eaa641bee06b9c953651daDerek Tan return number; 2259818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2261f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2262f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2263f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2264735e61b30f3099dff9dd6f4f9b65b6b1e5e38413Fyodor Kupolov return info.getLine1NumberForSubscriber(subId, mContext.getOpPackageName()); 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 22665f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 22675f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 22685f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 22695f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22742bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * Set the line 1 phone number string and its alphatag for the current ICCID 22752bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * for display purpose only, for example, displayed in Phone Status. It won't 22762bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * change the actual MSISDN/MDN. To unset alphatag or number, pass in a null 22772bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * value. 2278ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * 2279ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * <p>Requires that the calling app has carrier privileges. 2280ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 2281818631b679171ffb49eaa641bee06b9c953651daDerek Tan * 2282818631b679171ffb49eaa641bee06b9c953651daDerek Tan * @param alphaTag alpha-tagging of the dailing nubmer 2283818631b679171ffb49eaa641bee06b9c953651daDerek Tan * @param number The dialing number 22840201a6f6f16a872405a5f9ee65026e948eb162d0Shishir Agrawal * @return true if the operation was executed correctly. 2285818631b679171ffb49eaa641bee06b9c953651daDerek Tan */ 22860201a6f6f16a872405a5f9ee65026e948eb162d0Shishir Agrawal public boolean setLine1NumberForDisplay(String alphaTag, String number) { 22878a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return setLine1NumberForDisplay(getSubId(), alphaTag, number); 2288818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 2289818631b679171ffb49eaa641bee06b9c953651daDerek Tan 2290818631b679171ffb49eaa641bee06b9c953651daDerek Tan /** 22912bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * Set the line 1 phone number string and its alphatag for the current ICCID 22922bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * for display purpose only, for example, displayed in Phone Status. It won't 22932bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * change the actual MSISDN/MDN. To unset alphatag or number, pass in a null 22942bae510ccef2da7dd767f8148d4e3539037f4aaaDerek Tan * value. 2295ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * 2296ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * <p>Requires that the calling app has carrier privileges. 2297ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 2298818631b679171ffb49eaa641bee06b9c953651daDerek Tan * 2299818631b679171ffb49eaa641bee06b9c953651daDerek Tan * @param subId the subscriber that the alphatag and dialing number belongs to. 2300818631b679171ffb49eaa641bee06b9c953651daDerek Tan * @param alphaTag alpha-tagging of the dailing nubmer 2301818631b679171ffb49eaa641bee06b9c953651daDerek Tan * @param number The dialing number 23020201a6f6f16a872405a5f9ee65026e948eb162d0Shishir Agrawal * @return true if the operation was executed correctly. 23038a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2304818631b679171ffb49eaa641bee06b9c953651daDerek Tan */ 23057ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public boolean setLine1NumberForDisplay(int subId, String alphaTag, String number) { 2306818631b679171ffb49eaa641bee06b9c953651daDerek Tan try { 2307f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2308f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 2309f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.setLine1NumberForDisplayForSubscriber(subId, alphaTag, number); 2310818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (RemoteException ex) { 2311818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (NullPointerException ex) { 2312818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 23130201a6f6f16a872405a5f9ee65026e948eb162d0Shishir Agrawal return false; 2314818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 2315818631b679171ffb49eaa641bee06b9c953651daDerek Tan 2316818631b679171ffb49eaa641bee06b9c953651daDerek Tan /** 2317767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the alphabetic identifier associated with the line 1 number. 23185f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * Return null if it is unavailable. 23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2320767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * nobody seems to call this. 23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1AlphaTag() { 23268a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getLine1AlphaTag(getSubId()); 2327fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2328fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2329fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2330fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the alphabetic identifier associated with the line 1 number 2331fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a subscription. 2332fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Return null if it is unavailable. 2333fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2334fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2335fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2336fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose alphabetic identifier associated with line 1 is returned 2337fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * nobody seems to call this. 23388a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2339fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 23407ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal public String getLine1AlphaTag(int subId) { 2341818631b679171ffb49eaa641bee06b9c953651daDerek Tan String alphaTag = null; 2342818631b679171ffb49eaa641bee06b9c953651daDerek Tan try { 2343f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2344f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 234516a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov alphaTag = telephony.getLine1AlphaTagForDisplay(subId, 23464e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov getOpPackageName()); 2347818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (RemoteException ex) { 2348818631b679171ffb49eaa641bee06b9c953651daDerek Tan } catch (NullPointerException ex) { 2349818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 2350818631b679171ffb49eaa641bee06b9c953651daDerek Tan if (alphaTag != null) { 2351818631b679171ffb49eaa641bee06b9c953651daDerek Tan return alphaTag; 2352818631b679171ffb49eaa641bee06b9c953651daDerek Tan } 23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2354f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2355f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2356f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 23574e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return info.getLine1AlphaTagForSubscriber(subId, getOpPackageName()); 23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 23595f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 23605f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 23615f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 23625f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23673256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * Return the set of subscriber IDs that should be considered as "merged 23683256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * together" for data usage purposes. This is commonly {@code null} to 23693256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * indicate no merging is required. Any returned subscribers are sorted in a 23703256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * deterministic order. 23713256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * 23723256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey * @hide 23733256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey */ 23743256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey public @Nullable String[] getMergedSubscriberIds() { 23753256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey try { 2376f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2377f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 23784e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return telephony.getMergedSubscriberIds(getOpPackageName()); 23793256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey } catch (RemoteException ex) { 23803256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey } catch (NullPointerException ex) { 23813256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey } 23823256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey return null; 23833256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey } 23843256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey 23853256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey /** 238680c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * Returns the MSISDN string. 238780c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * for a GSM phone. Return null if it is unavailable. 238880c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * <p> 238980c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * Requires Permission: 239080c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 239180c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * 239280c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai * @hide 239380c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai */ 239480c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai public String getMsisdn() { 23958a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getMsisdn(getSubId()); 2396fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2397fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2398fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2399fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the MSISDN string. 2400fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a GSM phone. Return null if it is unavailable. 2401fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2402fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2403fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2404fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2405fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId for which msisdn is returned 24068a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2407fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 240863f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getMsisdn(int subId) { 240980c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai try { 2410f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2411f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2412f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 24134e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return info.getMsisdnForSubscriber(subId, getOpPackageName()); 241480c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai } catch (RemoteException ex) { 241580c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai return null; 241680c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai } catch (NullPointerException ex) { 241780c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai // This could happen before phone restarts due to crashing 241880c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai return null; 241980c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai } 242080c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai } 242180c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai 242280c32a37b63ceff885199e22a8505ac557c86d35duckyoung.chai /** 24235f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang * Returns the voice mail number. Return null if it is unavailable. 24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2425767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailNumber() { 24298a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getVoiceMailNumber(getSubId()); 2430fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2431fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2432fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2433fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the voice mail number for a subscription. 2434fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Return null if it is unavailable. 2435fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2436fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2437fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2438fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose voice mail number is returned 24398a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2440fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 244163f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getVoiceMailNumber(int subId) { 24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2443f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2444f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2445f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 24464e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return info.getVoiceMailNumberForSubscriber(subId, getOpPackageName()); 24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 24485f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 24495f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 24505f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 24515f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2456c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * Returns the complete voice mail number. Return null if it is unavailable. 2457c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * <p> 2458c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * Requires Permission: 2459c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * {@link android.Manifest.permission#CALL_PRIVILEGED CALL_PRIVILEGED} 2460c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * 2461c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville * @hide 2462c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville */ 2463c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville public String getCompleteVoiceMailNumber() { 24648a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCompleteVoiceMailNumber(getSubId()); 2465fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2466fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2467fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2468fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the complete voice mail number. Return null if it is unavailable. 2469fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2470fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2471fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#CALL_PRIVILEGED CALL_PRIVILEGED} 2472fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2473fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId 24748a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2475fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 247663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getCompleteVoiceMailNumber(int subId) { 2477c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville try { 2478f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2479f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2480f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2481f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getCompleteVoiceMailNumberForSubscriber(subId); 2482c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville } catch (RemoteException ex) { 2483c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville return null; 2484c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville } catch (NullPointerException ex) { 2485c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville // This could happen before phone restarts due to crashing 2486c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville return null; 2487c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville } 2488c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville } 2489c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville 2490c69f5be0ed3529564e5db6874de52775c2c99007Wink Saville /** 24915c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * Sets the voice mail number. 2492ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * 2493ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * <p>Requires that the calling app has carrier privileges. 2494ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 24955c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * 24965c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * @param alphaTag The alpha tag to display. 24975c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * @param number The voicemail number. 24985c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal */ 24995c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal public boolean setVoiceMailNumber(String alphaTag, String number) { 25008a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return setVoiceMailNumber(getSubId(), alphaTag, number); 25015c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal } 25025c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal 25035c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal /** 25045c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * Sets the voicemail number for the given subscriber. 2505ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * 2506ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * <p>Requires that the calling app has carrier privileges. 2507ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 25085c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * 2509d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param subId The subscription id. 25105c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * @param alphaTag The alpha tag to display. 25115c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal * @param number The voicemail number. 25128a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 25135c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal */ 25145c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal public boolean setVoiceMailNumber(int subId, String alphaTag, String number) { 25155c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal try { 2516f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2517f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 2518f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.setVoiceMailNumber(subId, alphaTag, number); 25195c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal } catch (RemoteException ex) { 25205c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal } catch (NullPointerException ex) { 25215c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal } 25225c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal return false; 25235c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal } 25245c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal 25255c1a63c2235c36ce0b520fa88a9d21ffe255756eShishir Agrawal /** 252620f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * Enables or disables the visual voicemail client for a phone account. 252720f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * 252820f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * <p>Requires that the calling app is the default dialer, or has carrier privileges, or 252920f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * has permission {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. 253020f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @see #hasCarrierPrivileges 253120f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * 253220f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @param phoneAccountHandle the phone account to change the client state 253320f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @param enabled the new state of the client 253420f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @hide 253520f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen */ 253620f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen @SystemApi 253720f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen public void setVisualVoicemailEnabled(PhoneAccountHandle phoneAccountHandle, boolean enabled){ 253820f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen try { 253920f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen ITelephony telephony = getITelephony(); 254020f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen if (telephony != null) { 254120f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen telephony.setVisualVoicemailEnabled(mContext.getOpPackageName(), phoneAccountHandle, 254220f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen enabled); 254320f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 254420f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } catch (RemoteException ex) { 254520f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } catch (NullPointerException ex) { 254620f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen // This could happen before phone restarts due to crashing 254720f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 254820f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 254920f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen 255020f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen /** 255120f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * Returns whether the visual voicemail client is enabled. 255220f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * 255320f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * <p>Requires Permission: 255420f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 255520f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * 255620f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @param phoneAccountHandle the phone account to check for. 255720f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @return {@code true} when the visual voicemail client is enabled for this client 255820f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen * @hide 255920f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen */ 256020f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen @SystemApi 256120f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen public boolean isVisualVoicemailEnabled(PhoneAccountHandle phoneAccountHandle){ 256220f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen try { 256320f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen ITelephony telephony = getITelephony(); 256420f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen if (telephony != null) { 256520f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen return telephony.isVisualVoicemailEnabled( 256620f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen mContext.getOpPackageName(), phoneAccountHandle); 256720f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 256820f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } catch (RemoteException ex) { 256920f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } catch (NullPointerException ex) { 257020f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen // This could happen before phone restarts due to crashing 257120f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 257220f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen return false; 257320f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen } 257420f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen 257520f2ebbf4d16e0654efe73ac92afc89c29cfaedeTa-wei Yen /** 257667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Enables the visual voicemail SMS filter for a phone account. When the filter is 2577349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * enabled, Incoming SMS messages matching the OMTP VVM SMS interface will be redirected to the 2578349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * visual voicemail client with 2579349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * {@link android.provider.VoicemailContract.ACTION_VOICEMAIL_SMS_RECEIVED}. 2580349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 258167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>This takes effect only when the caller is the default dialer. The enabled status and 258267ab168b78782c4de5de3f44817961468533757cTa-wei Yen * settings persist through default dialer changes, but the filter will only honor the setting 258367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * set by the current default dialer. 2584349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 2585349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 2586349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * @param subId The subscription id of the phone account. 258767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @param settings The settings for the filter. 2588349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen */ 2589349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** @hide */ 259067ab168b78782c4de5de3f44817961468533757cTa-wei Yen public void enableVisualVoicemailSmsFilter(int subId, 259167ab168b78782c4de5de3f44817961468533757cTa-wei Yen VisualVoicemailSmsFilterSettings settings) { 259267ab168b78782c4de5de3f44817961468533757cTa-wei Yen if(settings == null){ 259367ab168b78782c4de5de3f44817961468533757cTa-wei Yen throw new IllegalArgumentException("Settings cannot be null"); 2594349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2595349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen try { 2596349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen ITelephony telephony = getITelephony(); 2597349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen if (telephony != null) { 259867ab168b78782c4de5de3f44817961468533757cTa-wei Yen telephony.enableVisualVoicemailSmsFilter(mContext.getOpPackageName(), subId, 259967ab168b78782c4de5de3f44817961468533757cTa-wei Yen settings); 2600349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2601349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (RemoteException ex) { 2602349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (NullPointerException ex) { 2603349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2604349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2605349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen 2606349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** 260767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Disables the visual voicemail SMS filter for a phone account. 2608349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 260967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>This takes effect only when the caller is the default dialer. The enabled status and 261067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * settings persist through default dialer changes, but the filter will only honor the setting 261167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * set by the current default dialer. 2612349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen */ 2613349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** @hide */ 261467ab168b78782c4de5de3f44817961468533757cTa-wei Yen public void disableVisualVoicemailSmsFilter(int subId) { 2615349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen try { 2616349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen ITelephony telephony = getITelephony(); 2617349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen if (telephony != null) { 261867ab168b78782c4de5de3f44817961468533757cTa-wei Yen telephony.disableVisualVoicemailSmsFilter(mContext.getOpPackageName(), subId); 2619349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2620349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (RemoteException ex) { 2621349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (NullPointerException ex) { 2622349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2623349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2624349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen 2625349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** 262667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @returns the settings of the visual voicemail SMS filter for a phone account, or {@code null} 262767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * if the filter is disabled. 2628349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 262967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>This takes effect only when the caller is the default dialer. The enabled status and 263067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * settings persist through default dialer changes, but the filter will only honor the setting 263167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * set by the current default dialer. 2632349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen */ 2633349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** @hide */ 263467ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Nullable 263567ab168b78782c4de5de3f44817961468533757cTa-wei Yen public VisualVoicemailSmsFilterSettings getVisualVoicemailSmsFilterSettings(int subId) { 2636349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen try { 2637349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen ITelephony telephony = getITelephony(); 2638349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen if (telephony != null) { 263967ab168b78782c4de5de3f44817961468533757cTa-wei Yen return telephony 264067ab168b78782c4de5de3f44817961468533757cTa-wei Yen .getVisualVoicemailSmsFilterSettings(mContext.getOpPackageName(), subId); 2641349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2642349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (RemoteException ex) { 2643349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (NullPointerException ex) { 2644349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2645349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen 2646349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen return null; 2647349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2648349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen 2649349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** 265067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @returns the settings of the visual voicemail SMS filter for a phone account set by the 265167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * package, or {@code null} if the filter is disabled. 2652349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen * 265367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>Requires the calling app to have READ_PRIVILEGED_PHONE_STATE permission. 2654349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen */ 2655349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** @hide */ 265667ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Nullable 265767ab168b78782c4de5de3f44817961468533757cTa-wei Yen public VisualVoicemailSmsFilterSettings getVisualVoicemailSmsFilterSettings(String packageName, 265867ab168b78782c4de5de3f44817961468533757cTa-wei Yen int subId) { 2659349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen try { 2660349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen ITelephony telephony = getITelephony(); 2661349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen if (telephony != null) { 266267ab168b78782c4de5de3f44817961468533757cTa-wei Yen return telephony.getSystemVisualVoicemailSmsFilterSettings(packageName, subId); 2663349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2664349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (RemoteException ex) { 2665349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } catch (NullPointerException ex) { 2666349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 2667349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen 266867ab168b78782c4de5de3f44817961468533757cTa-wei Yen return null; 2669349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen } 267067ab168b78782c4de5de3f44817961468533757cTa-wei Yen 2671349f4eddf76d1f16966a7ae7b599e984f599cf2eTa-wei Yen /** 267253477531889214c2ef983501b0698beb0495e10eAmit Mahajan * Returns the voice mail count. Return 0 if unavailable, -1 if there are unread voice messages 2673b2556363e7c142d7e0ab8f62e1a82662600a0821Amit Mahajan * but the count is unknown. 2674ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * <p> 2675ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * Requires Permission: 2676ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2677ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * @hide 2678ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause */ 2679ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 26808a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getVoiceMessageCount(getSubId()); 2681fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2682fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2683fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2684fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the voice mail count for a subscription. Return 0 if unavailable. 2685fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2686fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2687fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2688fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose voice message count is returned 26898a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2690fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 269163f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getVoiceMessageCount(int subId) { 2692ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause try { 2693f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2694f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 2695f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return 0; 2696f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getVoiceMessageCountForSubscriber(subId); 2697ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } catch (RemoteException ex) { 26985f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return 0; 26995f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 27005f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 27015f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return 0; 2702ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 2703ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 2704ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 2705ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /** 27069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieves the alphabetic identifier associated with the voice 27079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mail number. 27089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2709767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Requires Permission: 27109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 27119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailAlphaTag() { 27138a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getVoiceMailAlphaTag(getSubId()); 2714fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2715fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2716fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2717fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Retrieves the alphabetic identifier associated with the voice 2718fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * mail number for a subscription. 2719fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 2720fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Requires Permission: 2721fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 2722fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose alphabetic identifier associated with the 2723fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * voice mail number is returned 27248a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2725fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 272663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getVoiceMailAlphaTag(int subId) { 27279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2728f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2729f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2730f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 27314e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return info.getVoiceMailAlphaTagForSubscriber(subId, getOpPackageName()); 27329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 27335f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 27345f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 27355f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // This could happen before phone restarts due to crashing 27365f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 27379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2740463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 2741463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Returns the IMS private user identity (IMPI) that was loaded from the ISIM. 2742463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @return the IMPI, or null if not present or not loaded 2743463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @hide 2744463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 2745463f22114587344c96460179069a08d7381fbfd6Jake Hamby public String getIsimImpi() { 2746463f22114587344c96460179069a08d7381fbfd6Jake Hamby try { 2747f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2748f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2749f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2750f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimImpi(); 2751463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (RemoteException ex) { 2752463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2753463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (NullPointerException ex) { 2754463f22114587344c96460179069a08d7381fbfd6Jake Hamby // This could happen before phone restarts due to crashing 2755463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2756463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2757463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2758463f22114587344c96460179069a08d7381fbfd6Jake Hamby 2759463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 2760463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Returns the IMS home network domain name that was loaded from the ISIM. 2761463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @return the IMS domain name, or null if not present or not loaded 2762463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @hide 2763463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 2764463f22114587344c96460179069a08d7381fbfd6Jake Hamby public String getIsimDomain() { 2765463f22114587344c96460179069a08d7381fbfd6Jake Hamby try { 2766f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2767f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2768f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2769f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimDomain(); 2770463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (RemoteException ex) { 2771463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2772463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (NullPointerException ex) { 2773463f22114587344c96460179069a08d7381fbfd6Jake Hamby // This could happen before phone restarts due to crashing 2774463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2775463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2776463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2777463f22114587344c96460179069a08d7381fbfd6Jake Hamby 2778463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 2779463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Returns the IMS public user identities (IMPU) that were loaded from the ISIM. 2780463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @return an array of IMPU strings, with one IMPU per string, or null if 2781463f22114587344c96460179069a08d7381fbfd6Jake Hamby * not present or not loaded 2782463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @hide 2783463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 2784463f22114587344c96460179069a08d7381fbfd6Jake Hamby public String[] getIsimImpu() { 2785463f22114587344c96460179069a08d7381fbfd6Jake Hamby try { 2786f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 2787f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 2788f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 2789f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimImpu(); 2790463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (RemoteException ex) { 2791463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2792463f22114587344c96460179069a08d7381fbfd6Jake Hamby } catch (NullPointerException ex) { 2793463f22114587344c96460179069a08d7381fbfd6Jake Hamby // This could happen before phone restarts due to crashing 2794463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 2795463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2796463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 2797463f22114587344c96460179069a08d7381fbfd6Jake Hamby 279805e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** 279905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * @hide 280005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville */ 28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IPhoneSubInfo getSubscriberInfo() { 28029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get it each time because that process crashes a lot 28039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return IPhoneSubInfo.Stub.asInterface(ServiceManager.getService("iphonesubinfo")); 28049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Device call state: No activity. */ 28079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CALL_STATE_IDLE = 0; 28089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Device call state: Ringing. A new call arrived and is 2809767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ringing or waiting. In the latter case, another call is 28109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * already active. */ 28119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CALL_STATE_RINGING = 1; 2812767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Device call state: Off-hook. At least one call exists 28139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that is dialing, active, or on hold, and no calls are ringing 28149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or waiting. */ 28159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CALL_STATE_OFFHOOK = 2; 28169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28188c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * Returns one of the following constants that represents the current state of all 28198c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * phone calls. 28208c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * 28218c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * {@link TelephonyManager#CALL_STATE_RINGING} 28228c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * {@link TelephonyManager#CALL_STATE_OFFHOOK} 28238c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon * {@link TelephonyManager#CALL_STATE_IDLE} 28249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getCallState() { 28268c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon try { 28278c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon ITelecomService telecom = getTelecomService(); 28288c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon if (telecom != null) { 28298c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon return telecom.getCallState(); 28308c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon } 28318c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon } catch (RemoteException e) { 28328c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon Log.e(TAG, "Error calling ITelecomService#getCallState", e); 28338c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon } 28348c332b727523ce0dbb9256f0f43a9c655d71a3eaSantos Cordon return CALL_STATE_IDLE; 2835fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 2836fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2837fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 2838fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns a constant indicating the call state (cellular) on the device 2839fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * for a subscription. 2840fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 2841fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId whose call state is returned 28428a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 2843fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 284463f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getCallState(int subId) { 2845dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal int phoneId = SubscriptionManager.getPhoneId(subId); 2846dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return getCallStateForSlot(phoneId); 2847dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal } 2848dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 2849dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal /** 2850dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * See getCallState. 2851dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * 2852dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal * @hide 2853dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal */ 2854dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal public int getCallStateForSlot(int slotId) { 28559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2856f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2857f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 2858f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return CALL_STATE_IDLE; 2859dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal return telephony.getCallStateForSlot(slotId); 28609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 28619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the phone process is restarting. 28629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return CALL_STATE_IDLE; 2863107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang } catch (NullPointerException ex) { 2864107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang // the phone process is restarting. 2865107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang return CALL_STATE_IDLE; 2866dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal } 28679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869dc50a87495c23068b4150a0fc197e51ace2ae47bShishir Agrawal 28709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection activity: No traffic. */ 28719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_ACTIVITY_NONE = 0x00000000; 28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection activity: Currently receiving IP PPP traffic. */ 28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_ACTIVITY_IN = 0x00000001; 28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection activity: Currently sending IP PPP traffic. */ 28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_ACTIVITY_OUT = 0x00000002; 28769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection activity: Currently both sending and receiving 28779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IP PPP traffic. */ 28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_ACTIVITY_INOUT = DATA_ACTIVITY_IN | DATA_ACTIVITY_OUT; 28799bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh /** 28809bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh * Data connection is active, but physical link is down 28819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh */ 2882e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public static final int DATA_ACTIVITY_DORMANT = 0x00000004; 28839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a constant indicating the type of activity on a data connection 28869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (cellular). 28879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_ACTIVITY_NONE 28899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_ACTIVITY_IN 28909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_ACTIVITY_OUT 28919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_ACTIVITY_INOUT 2892e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * @see #DATA_ACTIVITY_DORMANT 28939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDataActivity() { 28959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2896f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2897f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 2898f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return DATA_ACTIVITY_NONE; 2899f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getDataActivity(); 29009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 29019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the phone process is restarting. 29029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return DATA_ACTIVITY_NONE; 2903107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang } catch (NullPointerException ex) { 2904107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang // the phone process is restarting. 2905107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang return DATA_ACTIVITY_NONE; 2906107821369b7af3b739a0b5617fb34ff19f7ca9b5John Wang } 29079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29098e7e0a9fd5c377294bfe2e09fca9b7551871f3c2Robert Greenwalt /** Data connection state: Unknown. Used before we know the state. 29108e7e0a9fd5c377294bfe2e09fca9b7551871f3c2Robert Greenwalt * @hide 29118e7e0a9fd5c377294bfe2e09fca9b7551871f3c2Robert Greenwalt */ 29128e7e0a9fd5c377294bfe2e09fca9b7551871f3c2Robert Greenwalt public static final int DATA_UNKNOWN = -1; 29139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection state: Disconnected. IP traffic not available. */ 29149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_DISCONNECTED = 0; 29159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection state: Currently setting up a data connection. */ 29169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_CONNECTING = 1; 29179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Data connection state: Connected. IP traffic should be available. */ 29189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_CONNECTED = 2; 2919767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Data connection state: Suspended. The connection is up, but IP 2920767a662ecde33c3979bf02b793d392aca0403162Wink Saville * traffic is temporarily unavailable. For example, in a 2G network, 29219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data activity may be suspended when a voice call arrives. */ 29229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DATA_SUSPENDED = 3; 29239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2925767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns a constant indicating the current data connection state 29269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (cellular). 29279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_DISCONNECTED 29299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_CONNECTING 29309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_CONNECTED 29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DATA_SUSPENDED 29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDataState() { 29349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2935f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 2936f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 2937f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return DATA_DISCONNECTED; 2938f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getDataState(); 29399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 29409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the phone process is restarting. 29419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return DATA_DISCONNECTED; 29425f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 29435f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return DATA_DISCONNECTED; 29449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 294705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** 294805e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * @hide 294905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville */ 29509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ITelephony getITelephony() { 29519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE)); 29529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 295405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** 295505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * @hide 295605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville */ 29576c8d6d74c0ee12e6d57bfaede3f7a713bf82f025Tyler Gunn private ITelecomService getTelecomService() { 2958ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn return ITelecomService.Stub.asInterface(ServiceManager.getService(Context.TELECOM_SERVICE)); 29596848f72a49f05509e6bc95a8a73c9dcd629af62cSantos Cordon } 29606848f72a49f05509e6bc95a8a73c9dcd629af62cSantos Cordon 29619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 29629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 29639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // PhoneStateListener 29649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 29659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 29669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2968767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Registers a listener object to receive notification of changes 2969767a662ecde33c3979bf02b793d392aca0403162Wink Saville * in specified telephony states. 29709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 29719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To register a listener, pass a {@link PhoneStateListener} 2972767a662ecde33c3979bf02b793d392aca0403162Wink Saville * and specify at least one telephony state of interest in 2973767a662ecde33c3979bf02b793d392aca0403162Wink Saville * the events argument. 2974767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * At registration, and when a specified telephony state 2976767a662ecde33c3979bf02b793d392aca0403162Wink Saville * changes, the telephony manager invokes the appropriate 2977767a662ecde33c3979bf02b793d392aca0403162Wink Saville * callback method on the listener object and passes the 29788f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * current (updated) values. 29799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 29809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To unregister a listener, pass the listener object and set the 2981767a662ecde33c3979bf02b793d392aca0403162Wink Saville * events argument to 29829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PhoneStateListener#LISTEN_NONE LISTEN_NONE} (0). 2983767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param listener The {@link PhoneStateListener} object to register 29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (or unregister) 29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param events The telephony state(s) of interest to the listener, 2987767a662ecde33c3979bf02b793d392aca0403162Wink Saville * as a bitwise-OR combination of {@link PhoneStateListener} 29889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * LISTEN_ flags. 29899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void listen(PhoneStateListener listener, int events) { 2991774afb9a8e9f8f5a4d31d0573d94efeb3e5c3655Svet Ganov if (mContext == null) return; 29929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2993fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville Boolean notifyNow = (getITelephony() != null); 29944e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov sRegistry.listenForSubscriber(listener.mSubId, getOpPackageName(), 2995774afb9a8e9f8f5a4d31d0573d94efeb3e5c3655Svet Ganov listener.callback, events, notifyNow); 29969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 29979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // system process dead 29985f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 29995f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang // system process dead 30009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3002e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 3003e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 3004e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon index to display 3005e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 30069bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30079bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30089bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 3009e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * @hide 3010e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 3011e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconIndex() { 30128a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCdmaEriIconIndex(getSubId()); 3013fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3014fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3015fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3016fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the CDMA ERI icon index to display for a subscription 30179bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30189bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30199bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 30208a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 3021fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 302263f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getCdmaEriIconIndex(int subId) { 3023e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville try { 3024f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3025f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 3026f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return -1; 30276e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getCdmaEriIconIndexForSubscriber(subId, getOpPackageName()); 3028e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } catch (RemoteException ex) { 3029e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // the phone process is restarting. 3030e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return -1; 30315f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 30325f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return -1; 3033e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3034e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3035e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 3036e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 3037e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon mode, 3038e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 0 - ON 3039e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 1 - FLASHING 3040e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 30419bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30429bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30439bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 3044e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * @hide 3045e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 3046e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconMode() { 30478a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCdmaEriIconMode(getSubId()); 3048fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3049fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3050fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3051fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the CDMA ERI icon mode for a subscription. 3052fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 0 - ON 3053fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 1 - FLASHING 30549bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * 30559bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30569bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30579bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 30588a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 3059fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 306063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public int getCdmaEriIconMode(int subId) { 3061e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville try { 3062f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3063f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 3064f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return -1; 30656e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getCdmaEriIconModeForSubscriber(subId, getOpPackageName()); 3066e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } catch (RemoteException ex) { 3067e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // the phone process is restarting. 3068e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return -1; 30695f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 30705f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return -1; 3071e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3072e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3073e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 3074e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 3075e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI text, 3076e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 30779bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30789bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30799bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 3080e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * @hide 3081e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 3082e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public String getCdmaEriText() { 30838a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCdmaEriText(getSubId()); 3084fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3085fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3086fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3087fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the CDMA ERI text, of a subscription 3088fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 30899bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * <p> 30909bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * Requires Permission: 30919bc8299ca0b2e8396b9f2f027c440cda164ba75eRobert Greenwalt * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} 30928a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 3093fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 309463f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getCdmaEriText(int subId) { 3095e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville try { 3096f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3097f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 3098f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 30996e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.getCdmaEriTextForSubscriber(subId, getOpPackageName()); 3100e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } catch (RemoteException ex) { 3101e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // the phone process is restarting. 3102e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return null; 31035f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang } catch (NullPointerException ex) { 31045f1f26a7ffb3e1130108bc670960cb5368038a1bjohnwang return null; 3105e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3106e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 3107ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown 3108ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown /** 3109ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * @return true if the current device is "voice capable". 3110ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * <p> 3111ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * "Voice capable" means that this device supports circuit-switched 3112ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * (i.e. voice) phone calls over the telephony network, and is allowed 3113ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * to display the in-call UI while a cellular voice call is active. 3114ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * This will be false on "data only" devices which can't make voice 3115ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * calls and don't support any in-call UI. 3116ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * <p> 3117ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * Note: the meaning of this flag is subtly different from the 3118ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * PackageManager.FEATURE_TELEPHONY system feature, which is available 3119ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * on any device with a telephony radio, even if the device is 3120ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown * data-only. 3121ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown */ 3122ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown public boolean isVoiceCapable() { 3123f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn if (mContext == null) return true; 3124f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn return mContext.getResources().getBoolean( 3125ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown com.android.internal.R.bool.config_voice_capable); 3126ae3efa53a9bd52c6eddde2a8e4bb1ae4d86a9c21David Brown } 3127c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang 3128c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang /** 3129c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * @return true if the current device supports sms service. 3130c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * <p> 3131c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * If true, this means that the device supports both sending and 3132c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * receiving sms via the telephony network. 3133c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * <p> 3134c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * Note: Voicemail waiting sms, cell broadcasting sms, and MMS are 3135c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang * disabled when device doesn't support sms. 3136c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang */ 3137c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang public boolean isSmsCapable() { 3138f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn if (mContext == null) return true; 3139f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn return mContext.getResources().getBoolean( 3140c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang com.android.internal.R.bool.config_sms_capable); 3141c049f9ad5b4f5bc32f368646e624aef7707b7252John Wang } 3142963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 3143963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 3144ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * Returns all observed cell information from all radios on the 3145682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * device including the primary and neighboring cells. Calling this method does 3146682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * not trigger a call to {@link android.telephony.PhoneStateListener#onCellInfoChanged 3147682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * onCellInfoChanged()}, or change the rate at which 3148682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.telephony.PhoneStateListener#onCellInfoChanged 3149682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * onCellInfoChanged()} is called. 3150682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * 3151ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 3152682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * The list can include one or more {@link android.telephony.CellInfoGsm CellInfoGsm}, 3153ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville * {@link android.telephony.CellInfoCdma CellInfoCdma}, 3154682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.telephony.CellInfoLte CellInfoLte}, and 3155682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.telephony.CellInfoWcdma CellInfoWcdma} objects, in any combination. 3156682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * On devices with multiple radios it is typical to see instances of 3157682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * one or more of any these in the list. In addition, zero, one, or more 3158682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * of the returned objects may be considered registered; that is, their 3159682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.telephony.CellInfo#isRegistered CellInfo.isRegistered()} 3160682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * methods may return true. 3161682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * 3162682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * <p>This method returns valid data for registered cells on devices with 3163682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.content.pm.PackageManager#FEATURE_TELEPHONY}. 3164682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * 31650dccd128001ceff9437f736bd70dfd1986e315d5Nathan Harold *<p> 3166682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * This method is preferred over using {@link 3167682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * android.telephony.TelephonyManager#getCellLocation getCellLocation()}. 3168682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * However, for older devices, <code>getAllCellInfo()</code> may return 3169682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * null. In these cases, you should call {@link 3170682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * android.telephony.TelephonyManager#getCellLocation getCellLocation()} 3171682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * instead. 3172682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * 3173682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * <p>Requires permission: 3174682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} 3175682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * 3176682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * @return List of {@link android.telephony.CellInfo}; null if cell 3177682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns * information is unavailable. 3178963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * 3179963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 3180963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public List<CellInfo> getAllCellInfo() { 3181963db55d59a170f4b17ff907c96615a19ef6fe17John Wang try { 3182f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3183f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 3184f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 31854e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return telephony.getAllCellInfo(getOpPackageName()); 3186963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } catch (RemoteException ex) { 3187963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return null; 3188963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } catch (NullPointerException ex) { 3189963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return null; 3190963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 3191963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 3192094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville 3193094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville /** 3194094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged 3195094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * PhoneStateListener.onCellInfoChanged} will be invoked. 3196ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 3197094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * The default, 0, means invoke onCellInfoChanged when any of the reported 3198094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * information changes. Setting the value to INT_MAX(0x7fffffff) means never issue 3199094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * A onCellInfoChanged. 3200ca3597d4369b308c7c4d3553abfcc5788d10414aWink Saville *<p> 3201094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * @param rateInMillis the rate 3202094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * 3203094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville * @hide 3204094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville */ 3205094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville public void setCellInfoListRate(int rateInMillis) { 3206094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville try { 3207f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3208f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3209f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.setCellInfoListRate(rateInMillis); 3210094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville } catch (RemoteException ex) { 3211094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville } catch (NullPointerException ex) { 3212094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville } 3213094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville } 3214d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng 3215d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng /** 3216d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng * Returns the MMS user agent. 3217d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng */ 3218d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng public String getMmsUserAgent() { 3219d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng if (mContext == null) return null; 3220d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng return mContext.getResources().getString( 3221d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng com.android.internal.R.string.config_mms_user_agent); 3222d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng } 3223d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng 3224d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng /** 3225d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng * Returns the MMS user agent profile URL. 3226d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng */ 3227d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng public String getMmsUAProfUrl() { 3228d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng if (mContext == null) return null; 3229d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng return mContext.getResources().getString( 3230d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng com.android.internal.R.string.config_mms_user_agent_profile_url); 3231d2078bc8c927af17c367bc53b198ad3787b2ff72Yuhao Zheng } 323257f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal 323357f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal /** 323457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Opens a logical channel to the ICC card. 323557f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 323657f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Input parameters equivalent to TS 27.007 AT+CCHO command. 323757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 3238210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * <p>Requires Permission: 3239b708ce5f1a30a63ed79a86a23ead4e5ad972a48aShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3240f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3241210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * 324257f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param AID Application id. See ETSI 102.221 and 101.220. 3243a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @return an IccOpenLogicalChannelResponse object. 324457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal */ 3245a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID) { 32468a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return iccOpenLogicalChannel(getSubId(), AID); 324752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 324852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 324952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 325052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Opens a logical channel to the ICC card. 325152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 325252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Input parameters equivalent to TS 27.007 AT+CCHO command. 325352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 325452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 325552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 325652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 325752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 325852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 325952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param AID Application id. See ETSI 102.221 and 101.220. 326052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return an IccOpenLogicalChannelResponse object. 32618a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 326252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 326352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID) { 326457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal try { 3265f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3266f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 326752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.iccOpenLogicalChannel(subId, AID); 326857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (RemoteException ex) { 326957f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (NullPointerException ex) { 327057f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 3271a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal return null; 327257f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 327357f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal 327457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal /** 327557f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Closes a previously opened logical channel to the ICC card. 327657f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 327757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Input parameters equivalent to TS 27.007 AT+CCHC command. 327857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 3279210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * <p>Requires Permission: 3280b708ce5f1a30a63ed79a86a23ead4e5ad972a48aShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3281f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3282210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * 328357f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param channel is the channel id to be closed as retruned by a successful 328457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * iccOpenLogicalChannel. 328557f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @return true if the channel was closed successfully. 328657f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal */ 328757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal public boolean iccCloseLogicalChannel(int channel) { 32888a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return iccCloseLogicalChannel(getSubId(), channel); 328952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 329052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 329152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 329252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Closes a previously opened logical channel to the ICC card. 329352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 329452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Input parameters equivalent to TS 27.007 AT+CCHC command. 329552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 329652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 329752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 329852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 329952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 330052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 330152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param channel is the channel id to be closed as retruned by a successful 330252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * iccOpenLogicalChannel. 330352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return true if the channel was closed successfully. 33048a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 330552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 330652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public boolean iccCloseLogicalChannel(int subId, int channel) { 330757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal try { 3308f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3309f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 331052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.iccCloseLogicalChannel(subId, channel); 331157f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (RemoteException ex) { 331257f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (NullPointerException ex) { 331357f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 331457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal return false; 331557f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 331657f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal 331757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal /** 331857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Transmit an APDU to the ICC card over a logical channel. 331957f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 332057f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * Input parameters equivalent to TS 27.007 AT+CGLA command. 332157f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * 3322210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * <p>Requires Permission: 3323b708ce5f1a30a63ed79a86a23ead4e5ad972a48aShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3324f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3325210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * 33268f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @param channel is the channel id to be closed as returned by a successful 332757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * iccOpenLogicalChannel. 332857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param cla Class of the APDU command. 332957f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param instruction Instruction of the APDU command. 333057f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param p1 P1 value of the APDU command. 333157f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param p2 P2 value of the APDU command. 333257f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU 333357f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * is sent to the SIM. 333457f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @param data Data to be sent with the APDU. 333557f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal * @return The APDU response from the ICC card with the status appended at 333643d94347a6feb14870a4ffd7682a816210e5e676Shishir Agrawal * the end. 333757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal */ 333857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal public String iccTransmitApduLogicalChannel(int channel, int cla, 3339375890841df7aad36a042861f6a70f11e1f32766Shishir Agrawal int instruction, int p1, int p2, int p3, String data) { 33408a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return iccTransmitApduLogicalChannel(getSubId(), channel, cla, 334152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal instruction, p1, p2, p3, data); 334252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 334352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 334452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 334552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Transmit an APDU to the ICC card over a logical channel. 334652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 334752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Input parameters equivalent to TS 27.007 AT+CGLA command. 334852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 334952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 335052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 335152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 335252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 335352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 335452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param channel is the channel id to be closed as returned by a successful 335552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * iccOpenLogicalChannel. 335652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param cla Class of the APDU command. 335752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param instruction Instruction of the APDU command. 335852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p1 P1 value of the APDU command. 335952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p2 P2 value of the APDU command. 336052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU 336152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * is sent to the SIM. 336252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param data Data to be sent with the APDU. 336352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return The APDU response from the ICC card with the status appended at 336452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * the end. 33658a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 336652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 336752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public String iccTransmitApduLogicalChannel(int subId, int channel, int cla, 336852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal int instruction, int p1, int p2, int p3, String data) { 336957f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal try { 3370f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3371f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 337252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.iccTransmitApduLogicalChannel(subId, channel, cla, 3373210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton instruction, p1, p2, p3, data); 3374210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton } catch (RemoteException ex) { 3375210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton } catch (NullPointerException ex) { 3376210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton } 3377210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton return ""; 3378210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton } 3379210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton 3380210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton /** 3381a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Transmit an APDU to the ICC card over the basic channel. 3382a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * 3383a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Input parameters equivalent to TS 27.007 AT+CSIM command. 3384a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * 3385a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * <p>Requires Permission: 3386a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3387f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3388a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * 3389a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param cla Class of the APDU command. 3390a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param instruction Instruction of the APDU command. 3391a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p1 P1 value of the APDU command. 3392a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p2 P2 value of the APDU command. 3393a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU 3394a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * is sent to the SIM. 3395a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param data Data to be sent with the APDU. 3396a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @return The APDU response from the ICC card with the status appended at 339743d94347a6feb14870a4ffd7682a816210e5e676Shishir Agrawal * the end. 3398a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal */ 3399a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal public String iccTransmitApduBasicChannel(int cla, 3400a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal int instruction, int p1, int p2, int p3, String data) { 34018a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return iccTransmitApduBasicChannel(getSubId(), cla, 340252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal instruction, p1, p2, p3, data); 340352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 340452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 340552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 340652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Transmit an APDU to the ICC card over the basic channel. 340752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 340852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Input parameters equivalent to TS 27.007 AT+CSIM command. 340952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 341052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 341152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 341252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 341352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 341452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 341552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param cla Class of the APDU command. 341652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param instruction Instruction of the APDU command. 341752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p1 P1 value of the APDU command. 341852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p2 P2 value of the APDU command. 341952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU 342052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * is sent to the SIM. 342152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param data Data to be sent with the APDU. 342252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return The APDU response from the ICC card with the status appended at 342352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * the end. 34248a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 342552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 342652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public String iccTransmitApduBasicChannel(int subId, int cla, 342752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal int instruction, int p1, int p2, int p3, String data) { 3428a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal try { 3429f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3430f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 343152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.iccTransmitApduBasicChannel(subId, cla, 3432a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal instruction, p1, p2, p3, data); 3433a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } catch (RemoteException ex) { 3434a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } catch (NullPointerException ex) { 3435a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } 3436a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal return ""; 3437a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } 3438a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal 3439a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal /** 3440a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Returns the response APDU for a command APDU sent through SIM_IO. 3441a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * 3442a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * <p>Requires Permission: 3443a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3444f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3445a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * 3446a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param fileID 3447a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param command 3448a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p1 P1 value of the APDU command. 3449a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p2 P2 value of the APDU command. 3450a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param p3 P3 value of the APDU command. 3451a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @param filePath 3452a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * @return The APDU response. 3453a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal */ 345464820af4e56cd5d6a6afcfde93d94427257a7677Shishir Agrawal public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3, 3455a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal String filePath) { 34568a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return iccExchangeSimIO(getSubId(), fileID, command, p1, p2, p3, filePath); 345752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 345852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 345952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 346052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Returns the response APDU for a command APDU sent through SIM_IO. 346152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 346252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 346352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 346452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 346552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 346652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 346752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param fileID 346852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param command 346952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p1 P1 value of the APDU command. 347052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p2 P2 value of the APDU command. 347152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param p3 P3 value of the APDU command. 347252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param filePath 347352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return The APDU response. 34748a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 347552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 347652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public byte[] iccExchangeSimIO(int subId, int fileID, int command, int p1, int p2, 347752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal int p3, String filePath) { 3478a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal try { 3479f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3480f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 348152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.iccExchangeSimIO(subId, fileID, command, p1, p2, p3, filePath); 3482a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } catch (RemoteException ex) { 3483a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } catch (NullPointerException ex) { 3484a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } 3485a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal return null; 3486a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal } 3487a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal 3488a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal /** 3489b8894ab1aec9c9ffa749f9369e412a51b942de27Evan Charlton * Send ENVELOPE to the SIM and return the response. 3490210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * 3491210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * <p>Requires Permission: 3492b708ce5f1a30a63ed79a86a23ead4e5ad972a48aShishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 3493f52ac900caa94236c2cc6da94fb09be22db58e03Junda Liu * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 3494210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * 3495210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * @param content String containing SAT/USAT response in hexadecimal 3496210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * format starting with command tag. See TS 102 223 for 3497210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton * details. 34981eda68766be31fdf4a0c038ed6a459b3df0311feDerek Tan * @return The APDU response from the ICC card in hexadecimal format 34991eda68766be31fdf4a0c038ed6a459b3df0311feDerek Tan * with the last 4 bytes being the status word. If the command fails, 35001eda68766be31fdf4a0c038ed6a459b3df0311feDerek Tan * returns an empty string. 3501210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton */ 3502b8894ab1aec9c9ffa749f9369e412a51b942de27Evan Charlton public String sendEnvelopeWithStatus(String content) { 35038a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return sendEnvelopeWithStatus(getSubId(), content); 350452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 350552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 350652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 350752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Send ENVELOPE to the SIM and return the response. 350852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 350952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires Permission: 351052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 351152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 351252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 351352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 351452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param content String containing SAT/USAT response in hexadecimal 351552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * format starting with command tag. See TS 102 223 for 351652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * details. 351752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return The APDU response from the ICC card in hexadecimal format 351852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * with the last 4 bytes being the status word. If the command fails, 351952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * returns an empty string. 35208a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 352152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 352252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public String sendEnvelopeWithStatus(int subId, String content) { 3523210889e91cb2da74e0323292ca156d17df03fe08Evan Charlton try { 3524f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3525f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 352652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.sendEnvelopeWithStatus(subId, content); 352757f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (RemoteException ex) { 352857f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } catch (NullPointerException ex) { 352957f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 353057f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal return ""; 353157f656b9f6271cf857b5ecec5f8c7eacb321ec0bShishir Agrawal } 35328f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby 35338f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby /** 353406b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Read one of the NV items defined in com.android.internal.telephony.RadioNVItems. 35358f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * Used for device configuration by some CDMA operators. 353606b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 353706b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 353806b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 353906b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 35408f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * 35418f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @param itemID the ID of the item to read. 35428f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @return the NV item as a String, or null on any failure. 354306b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * 35448f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @hide 35458f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby */ 35468f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby public String nvReadItem(int itemID) { 35478f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby try { 3548f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3549f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3550f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.nvReadItem(itemID); 35518f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (RemoteException ex) { 35528f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvReadItem RemoteException", ex); 35538f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (NullPointerException ex) { 35548f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvReadItem NPE", ex); 35558f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 35568f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby return ""; 35578f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 35588f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby 35598f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby /** 356006b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Write one of the NV items defined in com.android.internal.telephony.RadioNVItems. 35618f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * Used for device configuration by some CDMA operators. 356206b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 356306b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 356406b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 356506b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 35668f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * 35678f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @param itemID the ID of the item to read. 35688f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @param itemValue the value to write, as a String. 35698f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @return true on success; false on any failure. 357006b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * 35718f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @hide 35728f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby */ 35738f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby public boolean nvWriteItem(int itemID, String itemValue) { 35748f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby try { 3575f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3576f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3577f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.nvWriteItem(itemID, itemValue); 35788f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (RemoteException ex) { 35798f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvWriteItem RemoteException", ex); 35808f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (NullPointerException ex) { 35818f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvWriteItem NPE", ex); 35828f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 35838f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby return false; 35848f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 35858f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby 35868f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby /** 35878f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage. 35888f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * Used for device configuration by some CDMA operators. 358906b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 359006b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 359106b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 359206b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 35938f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * 35948f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @param preferredRoamingList byte array containing the new PRL. 35958f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @return true on success; false on any failure. 359606b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * 35978f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @hide 35988f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby */ 35998f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby public boolean nvWriteCdmaPrl(byte[] preferredRoamingList) { 36008f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby try { 3601f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3602f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3603f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.nvWriteCdmaPrl(preferredRoamingList); 36048f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (RemoteException ex) { 36058f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvWriteCdmaPrl RemoteException", ex); 36068f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (NullPointerException ex) { 36078f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvWriteCdmaPrl NPE", ex); 36088f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 36098f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby return false; 36108f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 36118f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby 36128f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby /** 3613786e71ab11f2d89afffc9db7473f16206395c813Jake Hamby * Perform the specified type of NV config reset. The radio will be taken offline 3614786e71ab11f2d89afffc9db7473f16206395c813Jake Hamby * and the device must be rebooted after the operation. Used for device 3615786e71ab11f2d89afffc9db7473f16206395c813Jake Hamby * configuration by some CDMA operators. 361606b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 361706b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 361806b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 361906b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 36208f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * 3621786e71ab11f2d89afffc9db7473f16206395c813Jake Hamby * @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset 36228f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @return true on success; false on any failure. 362306b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * 36248f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby * @hide 36258f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby */ 36268f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby public boolean nvResetConfig(int resetType) { 36278f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby try { 3628f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3629f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3630f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.nvResetConfig(resetType); 36318f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (RemoteException ex) { 36328f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvResetConfig RemoteException", ex); 36338f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } catch (NullPointerException ex) { 36348f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby Rlog.e(TAG, "nvResetConfig NPE", ex); 36358f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 36368f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby return false; 36378f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby } 36388f9b33e77686de8e917ba61c5e2f2e31a1e0e49bJake Hamby 36394a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby /** 36408a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * Return an appropriate subscription ID for any situation. 36418a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * 36428a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * If this object has been created with {@link #createForSubscriptionId}, then the provided 36438a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * subId is returned. Otherwise, the default subId will be returned. 36448a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri */ 36458a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri private int getSubId() { 36468a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri if (mSubId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) { 36478a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getDefaultSubscription(); 36488a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri } 36498a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return mSubId; 36508a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri } 36518a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri 36528a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri /** 3653fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns Default subscription. 3654fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 365563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville private static int getDefaultSubscription() { 36567ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return SubscriptionManager.getDefaultSubscriptionId(); 3657fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3658fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 365905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville /** 366005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville * Returns Default phone. 366105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville */ 366205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville private static int getDefaultPhone() { 36637ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return SubscriptionManager.getPhoneId(SubscriptionManager.getDefaultSubscriptionId()); 366405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville } 366505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville 3666fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** {@hide} */ 3667fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public int getDefaultSim() { 36687ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return SubscriptionManager.getSlotId(SubscriptionManager.getDefaultSubscriptionId()); 3669fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3670fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3671fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3672fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Sets the telephony property with the value specified. 3673fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3674fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3675fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 367605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville public static void setTelephonyProperty(int phoneId, String property, String value) { 3677fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String propVal = ""; 3678fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String p[] = null; 3679fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String prop = SystemProperties.get(property); 3680fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3681fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (value == null) { 3682fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville value = ""; 3683fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3684fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3685fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (prop != null) { 3686fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville p = prop.split(","); 3687fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3688fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 368905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville if (!SubscriptionManager.isValidPhoneId(phoneId)) { 369047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville Rlog.d(TAG, "setTelephonyProperty: invalid phoneId=" + phoneId + 369147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville " property=" + property + " value: " + value + " prop=" + prop); 369205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return; 369305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville } 3694fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3695fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville for (int i = 0; i < phoneId; i++) { 3696fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String str = ""; 3697fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if ((p != null) && (i < p.length)) { 3698fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville str = p[i]; 3699fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3700fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville propVal = propVal + str + ","; 3701fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3702fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3703fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville propVal = propVal + value; 3704fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (p != null) { 3705fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville for (int i = phoneId + 1; i < p.length; i++) { 3706fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville propVal = propVal + "," + p[i]; 3707fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3708fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3709fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 371047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville if (property.length() > SystemProperties.PROP_NAME_MAX 371147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville || propVal.length() > SystemProperties.PROP_VALUE_MAX) { 371247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville Rlog.d(TAG, "setTelephonyProperty: property to long phoneId=" + phoneId + 371347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville " property=" + property + " value: " + value + " propVal=" + propVal); 3714fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return; 3715fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3716fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 371747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville Rlog.d(TAG, "setTelephonyProperty: success phoneId=" + phoneId + 371847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville " property=" + property + " value: " + value + " propVal=" + propVal); 3719fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville SystemProperties.set(property, propVal); 3720fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3721fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3722fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3723fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Convenience function for retrieving a value from the secure settings 3724fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * value list as an integer. Note that internally setting values are 3725fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * always stored as strings; this function converts the string to an 3726fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * integer for you. 3727fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <p> 3728fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * This version does not take a default value. If the setting has not 3729fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * been set, or the string value is not a number, 3730fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * it throws {@link SettingNotFoundException}. 3731fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3732fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param cr The ContentResolver to access. 3733fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param name The name of the setting to retrieve. 3734fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param index The index of the list 3735fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3736fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @throws SettingNotFoundException Thrown if a setting by the given 3737fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * name can't be found or the setting value is not an integer. 3738fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3739fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return The value at the given index of settings. 3740fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3741fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3742fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static int getIntAtIndex(android.content.ContentResolver cr, 3743fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String name, int index) 3744fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville throws android.provider.Settings.SettingNotFoundException { 3745fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String v = android.provider.Settings.Global.getString(cr, name); 3746fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (v != null) { 3747fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String valArray[] = v.split(","); 3748fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if ((index >= 0) && (index < valArray.length) && (valArray[index] != null)) { 3749fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3750fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return Integer.parseInt(valArray[index]); 3751fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NumberFormatException e) { 3752fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville //Log.e(TAG, "Exception while parsing Integer: ", e); 3753fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3754fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3755fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3756fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville throw new android.provider.Settings.SettingNotFoundException(name); 3757fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3758fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3759fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3760fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Convenience function for updating settings value as coma separated 3761fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * integer values. This will either create a new entry in the table if the 3762fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * given name does not exist, or modify the value of the existing row 3763fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * with that name. Note that internally setting values are always 3764fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * stored as strings, so this function converts the given value to a 3765fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * string before storing it. 3766fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3767fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param cr The ContentResolver to access. 3768fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param name The name of the setting to modify. 3769fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param index The index of the list 3770fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param value The new value for the setting to be added to the list. 3771fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return true if the value was set, false on database errors 3772fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3773fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3774fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static boolean putIntAtIndex(android.content.ContentResolver cr, 3775fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String name, int index, int value) { 3776fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String data = ""; 3777fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String valArray[] = null; 3778fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String v = android.provider.Settings.Global.getString(cr, name); 3779fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 378005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville if (index == Integer.MAX_VALUE) { 378105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville throw new RuntimeException("putIntAtIndex index == MAX_VALUE index=" + index); 378205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville } 378305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville if (index < 0) { 378405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville throw new RuntimeException("putIntAtIndex index < 0 index=" + index); 378505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville } 3786fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (v != null) { 3787fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville valArray = v.split(","); 3788fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3789fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3790fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // Copy the elements from valArray till index 3791fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville for (int i = 0; i < index; i++) { 3792fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String str = ""; 3793fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if ((valArray != null) && (i < valArray.length)) { 3794fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville str = valArray[i]; 3795fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3796fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville data = data + str + ","; 3797fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3798fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3799fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville data = data + value; 3800fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3801fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // Copy the remaining elements from valArray if any. 3802fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (valArray != null) { 3803fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville for (int i = index+1; i < valArray.length; i++) { 3804fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville data = data + "," + valArray[i]; 3805fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3806fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3807fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return android.provider.Settings.Global.putString(cr, name, data); 3808fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3809fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3810fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3811fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Gets the telephony property. 3812fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3813fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3814fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 381505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville public static String getTelephonyProperty(int phoneId, String property, String defaultVal) { 3816fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String propVal = null; 3817fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String prop = SystemProperties.get(property); 3818fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if ((prop != null) && (prop.length() > 0)) { 3819fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville String values[] = prop.split(","); 3820fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if ((phoneId >= 0) && (phoneId < values.length) && (values[phoneId] != null)) { 3821fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville propVal = values[phoneId]; 3822fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3823fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3824fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return propVal == null ? defaultVal : propVal; 3825fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3826fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3827fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** @hide */ 3828fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public int getSimCount() { 382947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville // FIXME Need to get it from Telephony Dev Controller when that gets implemented! 383047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville // and then this method shouldn't be used at all! 3831fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if(isMultiSimEnabled()) { 3832fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return 2; 3833fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else { 383405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville return 1; 3835fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3836fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3837fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3838fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3839fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the IMS Service Table (IST) that was loaded from the ISIM. 3840fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return IMS Service Table or null if not present or not loaded 3841fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3842fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3843fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public String getIsimIst() { 3844fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3845f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 3846f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 3847f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 3848f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimIst(); 3849fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 3850fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3851fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 3852fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone restarts due to crashing 3853fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3854fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3855fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3856fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3857fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3858fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the IMS Proxy Call Session Control Function(PCSCF) that were loaded from the ISIM. 3859fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return an array of PCSCF strings with one PCSCF per string, or null if 3860fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * not present or not loaded 3861fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3862fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3863fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public String[] getIsimPcscf() { 3864fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3865f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 3866f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 3867f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 3868f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimPcscf(); 3869fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 3870fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3871fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 3872fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone restarts due to crashing 3873fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3874fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3875fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3876fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3877fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3878fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns the response of ISIM Authetification through RIL. 3879fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Returns null if the Authentification hasn't been successed or isn't present iphonesubinfo. 3880fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the response of ISIM Authetification, or null if not available 3881fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3882fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @deprecated 388319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @see getIccAuthentication with appType=PhoneConstants.APPTYPE_ISIM 3884fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3885fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public String getIsimChallengeResponse(String nonce){ 3886fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3887f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 3888f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 3889f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 3890f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return info.getIsimChallengeResponse(nonce); 3891fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 3892fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3893fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 3894fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone restarts due to crashing 3895fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3896fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3897fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3898fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 389919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu // ICC SIM Application Types 3900c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** UICC application type is SIM */ 390119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int APPTYPE_SIM = PhoneConstants.APPTYPE_SIM; 3902c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** UICC application type is USIM */ 390319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int APPTYPE_USIM = PhoneConstants.APPTYPE_USIM; 3904c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** UICC application type is RUIM */ 390519fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int APPTYPE_RUIM = PhoneConstants.APPTYPE_RUIM; 3906c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** UICC application type is CSIM */ 390719fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int APPTYPE_CSIM = PhoneConstants.APPTYPE_CSIM; 3908c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** UICC application type is ISIM */ 390919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int APPTYPE_ISIM = PhoneConstants.APPTYPE_ISIM; 3910c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu // authContext (parameter P2) when doing UICC challenge, 391119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu // per 3GPP TS 31.102 (Section 7.1.2) 3912c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** Authentication type for UICC challenge is EAP SIM. See RFC 4186 for details. */ 391319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int AUTHTYPE_EAP_SIM = PhoneConstants.AUTH_CONTEXT_EAP_SIM; 3914c7004f564872e3018e515c6aab3210e2eec70ebfJunda Liu /** Authentication type for UICC challenge is EAP AKA. See RFC 4187 for details. */ 391519fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public static final int AUTHTYPE_EAP_AKA = PhoneConstants.AUTH_CONTEXT_EAP_AKA; 391619fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu 3917fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 391819fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * Returns the response of authentication for the default subscription. 391919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * Returns null if the authentication hasn't been successful 392019fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 392119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * <p>Requires that the calling app has carrier privileges or READ_PRIVILEGED_PHONE_STATE 392219fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * permission. 392319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 392419fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param appType the icc application type, like {@link #APPTYPE_USIM} 392519fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param authType the authentication type, {@link #AUTHTYPE_EAP_AKA} or 392619fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * {@link #AUTHTYPE_EAP_SIM} 392719fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param data authentication challenge data, base64 encoded. 392819fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * See 3GPP TS 31.102 7.1.2 for more details. 392919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @return the response of authentication, or null if not available 393019fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 393119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @see #hasCarrierPrivileges 3932fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 393319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public String getIccAuthentication(int appType, int authType, String data) { 39348a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getIccAuthentication(getSubId(), appType, authType, data); 393519fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu } 393619fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu 393719fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu /** 393819fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * Returns the response of USIM Authentication for specified subId. 393919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * Returns null if the authentication hasn't been successful 394019fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 394119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * <p>Requires that the calling app has carrier privileges. 394219fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 394319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param subId subscription ID used for authentication 394419fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param appType the icc application type, like {@link #APPTYPE_USIM} 394519fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param authType the authentication type, {@link #AUTHTYPE_EAP_AKA} or 394619fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * {@link #AUTHTYPE_EAP_SIM} 394719fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @param data authentication challenge data, base64 encoded. 394819fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * See 3GPP TS 31.102 7.1.2 for more details. 394919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @return the response of authentication, or null if not available 395019fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * 395119fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu * @see #hasCarrierPrivileges 39528a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 395319fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu */ 395419fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu public String getIccAuthentication(int subId, int appType, int authType, String data) { 3955fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3956f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro IPhoneSubInfo info = getSubscriberInfo(); 3957f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (info == null) 3958f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 395919fab789264a2d2d314d212c9a5c44eeb11fa590Junda Liu return info.getIccSimChallengeResponse(subId, appType, authType, data); 3960fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 3961fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3962fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (NullPointerException ex) { 3963fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // This could happen before phone starts 3964fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 3965fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3966fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3967fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3968fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3969fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Get P-CSCF address from PCO after data connection is established or modified. 3970e647099e14114475e9a2827a10dab2d2e36308c4ram * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN 3971fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return array of P-CSCF address 3972fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3973fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3974e647099e14114475e9a2827a10dab2d2e36308c4ram public String[] getPcscfAddress(String apnType) { 3975fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3976f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3977f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 3978f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return new String[0]; 39794e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return telephony.getPcscfAddress(apnType, getOpPackageName()); 3980fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException e) { 3981fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return new String[0]; 3982fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3983fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3984fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 3985fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 3986fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Set IMS registration state 3987fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * 3988fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param Registration state 3989fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide 3990fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 3991fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public void setImsRegistrationState(boolean registered) { 3992fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 3993f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 3994f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 3995f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.setImsRegistrationState(registered); 3996fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException e) { 3997fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3998fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 3999fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 4000fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 40014a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * Get the preferred network type. 40024a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * Used for device configuration by some CDMA operators. 400306b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 400406b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 400506b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 400606b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 40074a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * 40084a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * @return the preferred network type, defined in RILConstants.java. 400954e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * @hide 40104a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby */ 4011984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott public int getPreferredNetworkType(int subId) { 40124a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby try { 4013f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4014f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4015984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott return telephony.getPreferredNetworkType(subId); 40164a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } catch (RemoteException ex) { 40174a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby Rlog.e(TAG, "getPreferredNetworkType RemoteException", ex); 40184a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } catch (NullPointerException ex) { 40194a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby Rlog.e(TAG, "getPreferredNetworkType NPE", ex); 40204a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } 40214a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby return -1; 40224a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } 40234a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby 40244a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby /** 4025984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * Sets the network selection mode to automatic. 4026984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * <p> 4027984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * Requires Permission: 4028984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 4029984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 4030984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * 4031984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * @hide 40328a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * TODO: Add an overload that takes no args. 4033984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott */ 4034984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott public void setNetworkSelectionModeAutomatic(int subId) { 4035984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott try { 4036984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott ITelephony telephony = getITelephony(); 4037984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott if (telephony != null) 4038984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott telephony.setNetworkSelectionModeAutomatic(subId); 4039984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } catch (RemoteException ex) { 4040984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott Rlog.e(TAG, "setNetworkSelectionModeAutomatic RemoteException", ex); 4041984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } catch (NullPointerException ex) { 4042984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott Rlog.e(TAG, "setNetworkSelectionModeAutomatic NPE", ex); 4043984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } 4044984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } 4045984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott 4046984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott /** 4047d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Perform a radio scan and return the list of avialble networks. 4048d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * 4049d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * The return value is a list of the OperatorInfo of the networks found. Note that this 4050d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * scan can take a long time (sometimes minutes) to happen. 4051d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * 4052d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * <p> 4053d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Requires Permission: 4054d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 4055d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 4056d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * 4057d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * @hide 40588a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * TODO: Add an overload that takes no args. 4059d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal */ 4060d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal public CellNetworkScanResult getCellNetworkScanResults(int subId) { 4061d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal try { 4062d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal ITelephony telephony = getITelephony(); 4063d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal if (telephony != null) 4064d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal return telephony.getCellNetworkScanResults(subId); 4065d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } catch (RemoteException ex) { 4066d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal Rlog.e(TAG, "getCellNetworkScanResults RemoteException", ex); 4067d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } catch (NullPointerException ex) { 4068d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal Rlog.e(TAG, "getCellNetworkScanResults NPE", ex); 4069d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } 4070d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal return null; 4071d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } 4072d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal 4073d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal /** 4074d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Ask the radio to connect to the input network and change selection mode to manual. 4075d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * 4076d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * <p> 4077d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Requires Permission: 4078d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 4079d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 4080d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * 4081d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal * @hide 40828a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * TODO: Add an overload that takes no args. 4083d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal */ 4084e25bd01ad662d1a5b19592c98fac0a3035081375Shishir Agrawal public boolean setNetworkSelectionModeManual(int subId, OperatorInfo operator, 4085e25bd01ad662d1a5b19592c98fac0a3035081375Shishir Agrawal boolean persistSelection) { 4086d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal try { 4087d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal ITelephony telephony = getITelephony(); 4088d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal if (telephony != null) 4089e25bd01ad662d1a5b19592c98fac0a3035081375Shishir Agrawal return telephony.setNetworkSelectionModeManual(subId, operator, persistSelection); 4090d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } catch (RemoteException ex) { 4091d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal Rlog.e(TAG, "setNetworkSelectionModeManual RemoteException", ex); 4092d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } catch (NullPointerException ex) { 4093d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal Rlog.e(TAG, "setNetworkSelectionModeManual NPE", ex); 4094d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } 4095d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal return false; 4096d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal } 4097d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal 4098d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal /** 40994a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * Set the preferred network type. 41004a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * Used for device configuration by some CDMA operators. 410106b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * <p> 410206b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Requires Permission: 410306b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 410406b41ea23f3fb6be2f483e1e051ff42a2591a208Derek Tan * Or the calling app has carrier privileges. @see #hasCarrierPrivileges 41054a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * 4106984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * @param subId the id of the subscription to set the preferred network type for. 41074a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * @param networkType the preferred network type, defined in RILConstants.java. 41084a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby * @return true on success; false on any failure. 410954e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * @hide 41104a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby */ 4111984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott public boolean setPreferredNetworkType(int subId, int networkType) { 41124a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby try { 4113f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4114f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4115984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott return telephony.setPreferredNetworkType(subId, networkType); 41164a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } catch (RemoteException ex) { 41174a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby Rlog.e(TAG, "setPreferredNetworkType RemoteException", ex); 41184a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } catch (NullPointerException ex) { 41194a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby Rlog.e(TAG, "setPreferredNetworkType NPE", ex); 41204a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } 41214a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby return false; 41224a2fa35a6ad03d5ee1cd03ae94b4e7d70b50811cJake Hamby } 4123f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 4124f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal /** 412554e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * Set the preferred network type to global mode which includes LTE, CDMA, EvDo and GSM/WCDMA. 412654e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * 412754e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * <p> 4128ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * Requires that the calling app has carrier privileges. 4129ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 413054e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * 413154e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan * @return true on success; false on any failure. 413254e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan */ 41333fb3abd10a5980a0a5afe7f0e54f736eff84b5a5Junda Liu public boolean setPreferredNetworkTypeToGlobal() { 41348a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return setPreferredNetworkTypeToGlobal(getSubId()); 413552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 413652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 413752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 413852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Set the preferred network type to global mode which includes LTE, CDMA, EvDo and GSM/WCDMA. 413952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 414052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p> 414152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Requires that the calling app has carrier privileges. 414252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @see #hasCarrierPrivileges 414352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 414452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return true on success; false on any failure. 41458a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 414652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 414752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public boolean setPreferredNetworkTypeToGlobal(int subId) { 414852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return setPreferredNetworkType(subId, RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); 414954e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan } 415054e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan 415154e883bedc8a2402a8b13d27bc055c5ed1a70015Derek Tan /** 415238531581fc19f9172fabe56047b326e5dab88625Junda Liu * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning 415338531581fc19f9172fabe56047b326e5dab88625Junda Liu * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for 415438531581fc19f9172fabe56047b326e5dab88625Junda Liu * tethering. 415538531581fc19f9172fabe56047b326e5dab88625Junda Liu * 415638531581fc19f9172fabe56047b326e5dab88625Junda Liu * @return 0: Not required. 1: required. 2: Not set. 415738531581fc19f9172fabe56047b326e5dab88625Junda Liu * @hide 415838531581fc19f9172fabe56047b326e5dab88625Junda Liu */ 415938531581fc19f9172fabe56047b326e5dab88625Junda Liu public int getTetherApnRequired() { 416038531581fc19f9172fabe56047b326e5dab88625Junda Liu try { 4161f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4162f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4163f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getTetherApnRequired(); 416438531581fc19f9172fabe56047b326e5dab88625Junda Liu } catch (RemoteException ex) { 416538531581fc19f9172fabe56047b326e5dab88625Junda Liu Rlog.e(TAG, "hasMatchedTetherApnSetting RemoteException", ex); 416638531581fc19f9172fabe56047b326e5dab88625Junda Liu } catch (NullPointerException ex) { 416738531581fc19f9172fabe56047b326e5dab88625Junda Liu Rlog.e(TAG, "hasMatchedTetherApnSetting NPE", ex); 416838531581fc19f9172fabe56047b326e5dab88625Junda Liu } 416938531581fc19f9172fabe56047b326e5dab88625Junda Liu return 2; 417038531581fc19f9172fabe56047b326e5dab88625Junda Liu } 417138531581fc19f9172fabe56047b326e5dab88625Junda Liu 417238531581fc19f9172fabe56047b326e5dab88625Junda Liu 417338531581fc19f9172fabe56047b326e5dab88625Junda Liu /** 4174762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * Values used to return status for hasCarrierPrivileges call. 4175762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal */ 41760cf20cdf81c1d8b553f7b3f8179048fe1d5b4d59Jeff Davidson /** @hide */ @SystemApi 4177762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal public static final int CARRIER_PRIVILEGE_STATUS_HAS_ACCESS = 1; 41780cf20cdf81c1d8b553f7b3f8179048fe1d5b4d59Jeff Davidson /** @hide */ @SystemApi 4179762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal public static final int CARRIER_PRIVILEGE_STATUS_NO_ACCESS = 0; 41800cf20cdf81c1d8b553f7b3f8179048fe1d5b4d59Jeff Davidson /** @hide */ @SystemApi 4181762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; 41820cf20cdf81c1d8b553f7b3f8179048fe1d5b4d59Jeff Davidson /** @hide */ @SystemApi 4183762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal public static final int CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES = -2; 4184762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal 4185762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal /** 4186762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * Has the calling application been granted carrier privileges by the carrier. 4187762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * 4188762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * If any of the packages in the calling UID has carrier privileges, the 4189762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * call will return true. This access is granted by the owner of the UICC 4190762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * card and does not depend on the registered carrier. 4191762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal * 4192ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @return true if the app has carrier privileges. 4193762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal */ 4194ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal public boolean hasCarrierPrivileges() { 41958a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return hasCarrierPrivileges(getSubId()); 419652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 419752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 419852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 419952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Has the calling application been granted carrier privileges by the carrier. 420052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 420152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * If any of the packages in the calling UID has carrier privileges, the 420252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * call will return true. This access is granted by the owner of the UICC 420352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * card and does not depend on the registered carrier. 420452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 420552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 420652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return true if the app has carrier privileges. 42078a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 420852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 420952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public boolean hasCarrierPrivileges(int subId) { 4210762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal try { 4211f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 421252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal if (telephony != null) { 42138a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return telephony.getCarrierPrivilegeStatus(mSubId) == 421452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; 421552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 4216762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal } catch (RemoteException ex) { 4217762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal Rlog.e(TAG, "hasCarrierPrivileges RemoteException", ex); 4218762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal } catch (NullPointerException ex) { 4219762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal Rlog.e(TAG, "hasCarrierPrivileges NPE", ex); 4220762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal } 4221ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal return false; 4222762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal } 4223762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal 4224762d5a091f5e19b568bb0ff81a2cb6785b69075fShishir Agrawal /** 4225d2cfa92146ecfa5e00d4a3ce8e63b1a588845fe2Shishir Agrawal * Override the branding for the current ICCID. 422686578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * 4227d2cfa92146ecfa5e00d4a3ce8e63b1a588845fe2Shishir Agrawal * Once set, whenever the SIM is present in the device, the service 422886578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * provider name (SPN) and the operator name will both be replaced by the 422986578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * brand value input. To unset the value, the same function should be 423086578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * called with a null brand value. 423186578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * 4232ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * <p>Requires that the calling app has carrier privileges. 4233ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal * @see #hasCarrierPrivileges 423486578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * 423586578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * @param brand The brand name to display/set. 423686578cca383562c72751d747905280afdeb2bdfbShishir Agrawal * @return true if the operation was executed correctly. 423786578cca383562c72751d747905280afdeb2bdfbShishir Agrawal */ 4238d2cfa92146ecfa5e00d4a3ce8e63b1a588845fe2Shishir Agrawal public boolean setOperatorBrandOverride(String brand) { 42398a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return setOperatorBrandOverride(getSubId(), brand); 424052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 424152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 424252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 424352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Override the branding for the current ICCID. 424452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 424552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Once set, whenever the SIM is present in the device, the service 424652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * provider name (SPN) and the operator name will both be replaced by the 424752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * brand value input. To unset the value, the same function should be 424852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * called with a null brand value. 424952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 425052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires that the calling app has carrier privileges. 425152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @see #hasCarrierPrivileges 425252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 425352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId The subscription to use. 425452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param brand The brand name to display/set. 425552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return true if the operation was executed correctly. 42568a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 425752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 425852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public boolean setOperatorBrandOverride(int subId, String brand) { 425986578cca383562c72751d747905280afdeb2bdfbShishir Agrawal try { 4260f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4261f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 426252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.setOperatorBrandOverride(subId, brand); 426386578cca383562c72751d747905280afdeb2bdfbShishir Agrawal } catch (RemoteException ex) { 426486578cca383562c72751d747905280afdeb2bdfbShishir Agrawal Rlog.e(TAG, "setOperatorBrandOverride RemoteException", ex); 426586578cca383562c72751d747905280afdeb2bdfbShishir Agrawal } catch (NullPointerException ex) { 426686578cca383562c72751d747905280afdeb2bdfbShishir Agrawal Rlog.e(TAG, "setOperatorBrandOverride NPE", ex); 426786578cca383562c72751d747905280afdeb2bdfbShishir Agrawal } 426886578cca383562c72751d747905280afdeb2bdfbShishir Agrawal return false; 426986578cca383562c72751d747905280afdeb2bdfbShishir Agrawal } 427086578cca383562c72751d747905280afdeb2bdfbShishir Agrawal 427186578cca383562c72751d747905280afdeb2bdfbShishir Agrawal /** 42725fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * Override the roaming preference for the current ICCID. 42735fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * 42745fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * Using this call, the carrier app (see #hasCarrierPrivileges) can override 42755fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * the platform's notion of a network operator being considered roaming or not. 42765fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * The change only affects the ICCID that was active when this call was made. 42775fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * 42785fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * If null is passed as any of the input, the corresponding value is deleted. 42795fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * 42805fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * <p>Requires that the caller have carrier privilege. See #hasCarrierPrivileges. 42815fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * 42825fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @param gsmRoamingList - List of MCCMNCs to be considered roaming for 3GPP RATs. 42835fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @param gsmNonRoamingList - List of MCCMNCs to be considered not roaming for 3GPP RATs. 42845fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @param cdmaRoamingList - List of SIDs to be considered roaming for 3GPP2 RATs. 42855fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @param cdmaNonRoamingList - List of SIDs to be considered not roaming for 3GPP2 RATs. 42865fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @return true if the operation was executed correctly. 42875fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * 42885fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal * @hide 42895fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal */ 42905fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal public boolean setRoamingOverride(List<String> gsmRoamingList, 42915fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal List<String> gsmNonRoamingList, List<String> cdmaRoamingList, 42925fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal List<String> cdmaNonRoamingList) { 42938a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return setRoamingOverride(getSubId(), gsmRoamingList, gsmNonRoamingList, 429452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal cdmaRoamingList, cdmaNonRoamingList); 429552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal } 429652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal 429752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal /** 429852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Override the roaming preference for the current ICCID. 429952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 430052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * Using this call, the carrier app (see #hasCarrierPrivileges) can override 430152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * the platform's notion of a network operator being considered roaming or not. 430252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * The change only affects the ICCID that was active when this call was made. 430352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 430452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * If null is passed as any of the input, the corresponding value is deleted. 430552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 430652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * <p>Requires that the caller have carrier privilege. See #hasCarrierPrivileges. 430752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 430852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param subId for which the roaming overrides apply. 430952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param gsmRoamingList - List of MCCMNCs to be considered roaming for 3GPP RATs. 431052103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param gsmNonRoamingList - List of MCCMNCs to be considered not roaming for 3GPP RATs. 431152103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param cdmaRoamingList - List of SIDs to be considered roaming for 3GPP2 RATs. 431252103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @param cdmaNonRoamingList - List of SIDs to be considered not roaming for 3GPP2 RATs. 431352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @return true if the operation was executed correctly. 431452103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * 431552103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal * @hide 431652103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal */ 431752103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal public boolean setRoamingOverride(int subId, List<String> gsmRoamingList, 431852103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal List<String> gsmNonRoamingList, List<String> cdmaRoamingList, 431952103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal List<String> cdmaNonRoamingList) { 43205fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal try { 4321f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4322f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 432352103938915205cfd1febe09e2cae58060a8ef74Shishir Agrawal return telephony.setRoamingOverride(subId, gsmRoamingList, gsmNonRoamingList, 4324f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro cdmaRoamingList, cdmaNonRoamingList); 43255fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal } catch (RemoteException ex) { 43265fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal Rlog.e(TAG, "setRoamingOverride RemoteException", ex); 43275fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal } catch (NullPointerException ex) { 43285fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal Rlog.e(TAG, "setRoamingOverride NPE", ex); 43295fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal } 43305fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal return false; 43315fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal } 43325fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal 43335fb1118d8c8a19bbbf4abc679b55f08cdfb79ba8Shishir Agrawal /** 4334d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown * Expose the rest of ITelephony to @SystemApi 4335f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal */ 4336f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 43378b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4338d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 43392b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu public String getCdmaMdn() { 43408a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCdmaMdn(getSubId()); 43412b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43422b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu 43432b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu /** @hide */ 43442b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu @SystemApi 434563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getCdmaMdn(int subId) { 43462b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu try { 4347f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4348f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 4349f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 4350f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getCdmaMdn(subId); 43512b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } catch (RemoteException ex) { 43522b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu return null; 43532b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } catch (NullPointerException ex) { 43542b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu return null; 43552b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43562b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43572b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu 43582b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu /** @hide */ 43592b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu @SystemApi 43602b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu public String getCdmaMin() { 43618a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri return getCdmaMin(getSubId()); 43622b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43632b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu 43642b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu /** @hide */ 43652b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu @SystemApi 436663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public String getCdmaMin(int subId) { 43672b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu try { 4368f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4369f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 4370f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return null; 4371f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.getCdmaMin(subId); 43722b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } catch (RemoteException ex) { 43732b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu return null; 43742b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } catch (NullPointerException ex) { 43752b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu return null; 43762b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43772b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu } 43782b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu 43792b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu /** @hide */ 43802b2469b07d6ea9410bdb8d1234aa2320b02bdaa9Junda Liu @SystemApi 4381b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson public int checkCarrierPrivilegesForPackage(String pkgName) { 4382142529702dad9a6612271f487d500db80173ba7bJunda Liu try { 4383f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4384f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4385b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson return telephony.checkCarrierPrivilegesForPackage(pkgName); 4386142529702dad9a6612271f487d500db80173ba7bJunda Liu } catch (RemoteException ex) { 4387ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal Rlog.e(TAG, "checkCarrierPrivilegesForPackage RemoteException", ex); 4388142529702dad9a6612271f487d500db80173ba7bJunda Liu } catch (NullPointerException ex) { 4389ab57c29092eb9185375de86d82ff32e6079f5cecShishir Agrawal Rlog.e(TAG, "checkCarrierPrivilegesForPackage NPE", ex); 4390142529702dad9a6612271f487d500db80173ba7bJunda Liu } 4391142529702dad9a6612271f487d500db80173ba7bJunda Liu return CARRIER_PRIVILEGE_STATUS_NO_ACCESS; 4392142529702dad9a6612271f487d500db80173ba7bJunda Liu } 4393142529702dad9a6612271f487d500db80173ba7bJunda Liu 439456be215bcc5df95447c49d99915c299965b44207Shishir Agrawal /** @hide */ 4395142529702dad9a6612271f487d500db80173ba7bJunda Liu @SystemApi 4396b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson public int checkCarrierPrivilegesForPackageAnyPhone(String pkgName) { 4397b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson try { 4398b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson ITelephony telephony = getITelephony(); 4399b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson if (telephony != null) 4400b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson return telephony.checkCarrierPrivilegesForPackageAnyPhone(pkgName); 4401b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson } catch (RemoteException ex) { 4402b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson Rlog.e(TAG, "checkCarrierPrivilegesForPackageAnyPhone RemoteException", ex); 4403b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson } catch (NullPointerException ex) { 4404b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson Rlog.e(TAG, "checkCarrierPrivilegesForPackageAnyPhone NPE", ex); 4405b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson } 4406b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson return CARRIER_PRIVILEGE_STATUS_NO_ACCESS; 4407b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson } 4408b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson 4409b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson /** @hide */ 4410b4b9ca7580c75f07330e5222cbd9ccc93b12935eZach Johnson @SystemApi 44113892fc0349a91097f53152eaf2801dfebb2066caDiego Pontoriero public List<String> getCarrierPackageNamesForIntent(Intent intent) { 4412f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu return getCarrierPackageNamesForIntentAndPhone(intent, getDefaultPhone()); 4413f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu } 4414f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu 4415f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu /** @hide */ 4416f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu @SystemApi 4417f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu public List<String> getCarrierPackageNamesForIntentAndPhone(Intent intent, int phoneId) { 441863c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal try { 4419f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4420f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4421f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu return telephony.getCarrierPackageNamesForIntentAndPhone(intent, phoneId); 442263c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal } catch (RemoteException ex) { 4423f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu Rlog.e(TAG, "getCarrierPackageNamesForIntentAndPhone RemoteException", ex); 442463c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal } catch (NullPointerException ex) { 4425f3c7bf432dc5c21fdecbb44865c037313d21b4cfJunda Liu Rlog.e(TAG, "getCarrierPackageNamesForIntentAndPhone NPE", ex); 442663c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal } 442763c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal return null; 442863c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal } 442963c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal 443063c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal /** @hide */ 44314ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani public List<String> getPackagesWithCarrierPrivileges() { 44324ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani try { 44334ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani ITelephony telephony = getITelephony(); 44344ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani if (telephony != null) { 44354ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani return telephony.getPackagesWithCarrierPrivileges(); 44364ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani } 44374ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani } catch (RemoteException ex) { 44384ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani Rlog.e(TAG, "getPackagesWithCarrierPrivileges RemoteException", ex); 44394ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani } catch (NullPointerException ex) { 44404ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani Rlog.e(TAG, "getPackagesWithCarrierPrivileges NPE", ex); 44414ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani } 44424ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani return Collections.EMPTY_LIST; 44434ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani } 44444ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani 44454ec6368f13a53906757283d50a17ed3ed43eccc4Amith Yamasani /** @hide */ 444663c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal @SystemApi 4447f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void dial(String number) { 4448f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4449f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4450f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4451f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.dial(number); 4452f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 44538b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#dial", e); 4454f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4455f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4456f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 44578b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4458d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4459f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void call(String callingPackage, String number) { 4460f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4461f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4462f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4463f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.call(callingPackage, number); 4464f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 44658b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#call", e); 4466f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4467f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4468f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 44698b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4470d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4471f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean endCall() { 4472f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4473f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4474f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4475f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.endCall(); 4476f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 44778b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#endCall", e); 4478f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4479f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4480f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4481f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 44828b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4483d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4484f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void answerRingingCall() { 4485f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4486f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4487f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4488f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.answerRingingCall(); 4489f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 44908b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#answerRingingCall", e); 4491f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4492f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4493f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 44948b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4495d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4496f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void silenceRinger() { 4497f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 44984e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov getTelecomService().silenceRinger(getOpPackageName()); 4499f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 4500ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn Log.e(TAG, "Error calling ITelecomService#silenceRinger", e); 4501f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4502f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4503f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45048b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4505d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4506f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean isOffhook() { 4507f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4508f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4509f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 45106e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.isOffhook(getOpPackageName()); 4511f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45128b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#isOffhook", e); 4513f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4514f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4515f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4516f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45178b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4518d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4519f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean isRinging() { 4520f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4521f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4522f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 45236e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.isRinging(getOpPackageName()); 4524f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45258b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#isRinging", e); 4526f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4527f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4528f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4529f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45308b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4531d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4532f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean isIdle() { 4533f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4534f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4535f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 45366e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.isIdle(getOpPackageName()); 4537f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45388b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#isIdle", e); 4539f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4540f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return true; 4541f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4542f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45438b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4544d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4545f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean isRadioOn() { 4546f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4547f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4548f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 45496e4a98f8707f759fa9f47a458683a3627e42b0b6Robert Greenwalt return telephony.isRadioOn(getOpPackageName()); 4550f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45518b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#isRadioOn", e); 4552f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4553f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4554f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4555f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45568b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4557d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4558f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean supplyPin(String pin) { 4559f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4560f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4561f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4562f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.supplyPin(pin); 4563f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45648b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#supplyPin", e); 4565f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4566f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4567f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4568f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45698b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4570d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4571f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean supplyPuk(String puk, String pin) { 4572f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4573f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4574f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4575f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.supplyPuk(puk, pin); 4576f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45778b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#supplyPuk", e); 4578f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4579f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4580f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4581f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45828b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4583d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4584f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public int[] supplyPinReportResult(String pin) { 4585f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4586f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4587f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4588f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.supplyPinReportResult(pin); 4589f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 45908b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#supplyPinReportResult", e); 4591f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4592f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return new int[0]; 4593f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4594f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 45958b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4596d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4597f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public int[] supplyPukReportResult(String puk, String pin) { 4598f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4599f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4600f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4601f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.supplyPukReportResult(puk, pin); 4602f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46038b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#]", e); 4604f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4605f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return new int[0]; 4606f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4607f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46088b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4609d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4610f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean handlePinMmi(String dialString) { 4611f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4612f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4613f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4614f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.handlePinMmi(dialString); 4615f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46168b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#handlePinMmi", e); 4617f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4618f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4619f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4620f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46218b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4622d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 462395e8a679335648388988337fcf08eac325768318Nancy Chen public boolean handlePinMmiForSubscriber(int subId, String dialString) { 462495e8a679335648388988337fcf08eac325768318Nancy Chen try { 4625f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4626f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4627f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.handlePinMmiForSubscriber(subId, dialString); 462895e8a679335648388988337fcf08eac325768318Nancy Chen } catch (RemoteException e) { 462995e8a679335648388988337fcf08eac325768318Nancy Chen Log.e(TAG, "Error calling ITelephony#handlePinMmi", e); 463095e8a679335648388988337fcf08eac325768318Nancy Chen } 463195e8a679335648388988337fcf08eac325768318Nancy Chen return false; 463295e8a679335648388988337fcf08eac325768318Nancy Chen } 463395e8a679335648388988337fcf08eac325768318Nancy Chen 463495e8a679335648388988337fcf08eac325768318Nancy Chen /** @hide */ 463595e8a679335648388988337fcf08eac325768318Nancy Chen @SystemApi 4636f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void toggleRadioOnOff() { 4637f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4638f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4639f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4640f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.toggleRadioOnOff(); 4641f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46428b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#toggleRadioOnOff", e); 4643f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4644f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4645f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46468b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4647d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4648f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean setRadio(boolean turnOn) { 4649f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4650f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4651f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4652f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.setRadio(turnOn); 4653f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46548b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#setRadio", e); 4655f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4656f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4657f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4658f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46598b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4660d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4661f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean setRadioPower(boolean turnOn) { 4662f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4663f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4664f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4665f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.setRadioPower(turnOn); 4666f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46678b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#setRadioPower", e); 4668f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4669f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4670f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4671f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46728b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4673d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4674f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public void updateServiceLocation() { 4675f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4676f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4677f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4678f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.updateServiceLocation(); 4679f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46808b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#updateServiceLocation", e); 4681f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4682f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4683f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46848b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4685d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4686f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean enableDataConnectivity() { 4687f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4688f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4689f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4690f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.enableDataConnectivity(); 4691f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 46928b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#enableDataConnectivity", e); 4693f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4694f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4695f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4696f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 46978b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4698d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4699f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean disableDataConnectivity() { 4700f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4701f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4702f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4703f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.disableDataConnectivity(); 4704f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 47058b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#disableDataConnectivity", e); 4706f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4707f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4708f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4709f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 47108b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4711d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4712f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean isDataConnectivityPossible() { 4713f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4714f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4715f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4716f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.isDataConnectivityPossible(); 4717f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 47188b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#isDataConnectivityPossible", e); 4719f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4720f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4721f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4722f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal 47238b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal /** @hide */ 4724d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 4725f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal public boolean needsOtaServiceProvisioning() { 4726f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal try { 4727f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4728f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4729f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.needsOtaServiceProvisioning(); 4730f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } catch (RemoteException e) { 47318b5f2b080d841fa44d970058dfb7d5c653c6deb6Gabriel Peal Log.e(TAG, "Error calling ITelephony#needsOtaServiceProvisioning", e); 4732f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 4733f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal return false; 4734f1e1e7714375b3b83f2cc3956b112293face56a1Gabriel Peal } 473547eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt 473647eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt /** @hide */ 4737d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 473847eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt public void setDataEnabled(boolean enable) { 47397ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal setDataEnabled(SubscriptionManager.getDefaultDataSubscriptionId(), enable); 474036ffb0494dd1045c164b7479b68165e206f8c759Wink Saville } 474136ffb0494dd1045c164b7479b68165e206f8c759Wink Saville 474236ffb0494dd1045c164b7479b68165e206f8c759Wink Saville /** @hide */ 474336ffb0494dd1045c164b7479b68165e206f8c759Wink Saville @SystemApi 474436ffb0494dd1045c164b7479b68165e206f8c759Wink Saville public void setDataEnabled(int subId, boolean enable) { 474547eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt try { 474636ffb0494dd1045c164b7479b68165e206f8c759Wink Saville Log.d(TAG, "setDataEnabled: enabled=" + enable); 4747f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4748f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4749f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.setDataEnabled(subId, enable); 475047eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } catch (RemoteException e) { 475147eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt Log.e(TAG, "Error calling ITelephony#setDataEnabled", e); 475247eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } 475347eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } 475447eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt 475547eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt /** @hide */ 4756d5a5b5a547462f3e7c6315a501909bce2418ba86Jeff Brown @SystemApi 475747eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt public boolean getDataEnabled() { 47587ea3e8bf8954343d7b243b6a23bcb8339921f3c8Shishir Agrawal return getDataEnabled(SubscriptionManager.getDefaultDataSubscriptionId()); 475936ffb0494dd1045c164b7479b68165e206f8c759Wink Saville } 476036ffb0494dd1045c164b7479b68165e206f8c759Wink Saville 476136ffb0494dd1045c164b7479b68165e206f8c759Wink Saville /** @hide */ 476236ffb0494dd1045c164b7479b68165e206f8c759Wink Saville @SystemApi 476336ffb0494dd1045c164b7479b68165e206f8c759Wink Saville public boolean getDataEnabled(int subId) { 476464ce5f8fab077e4792737f86502d0e77ad6cbb0bShishir Agrawal boolean retVal = false; 476547eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt try { 4766f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4767f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4768f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro retVal = telephony.getDataEnabled(subId); 476947eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } catch (RemoteException e) { 477047eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt Log.e(TAG, "Error calling ITelephony#getDataEnabled", e); 477164ce5f8fab077e4792737f86502d0e77ad6cbb0bShishir Agrawal } catch (NullPointerException e) { 477247eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } 477336ffb0494dd1045c164b7479b68165e206f8c759Wink Saville return retVal; 477447eecf03307acfb1bc7d4ad51311beb4eeb99366Robert Greenwalt } 4775c35ad0252d1ad9ae50e2dadd670783d4a6259df6Ihab Awad 4776c35ad0252d1ad9ae50e2dadd670783d4a6259df6Ihab Awad /** 47773099c831441e861328cd4965011c854e060ce56aSteven Liu * Returns the result and response from RIL for oem request 47783099c831441e861328cd4965011c854e060ce56aSteven Liu * 47793099c831441e861328cd4965011c854e060ce56aSteven Liu * @param oemReq the data is sent to ril. 47803099c831441e861328cd4965011c854e060ce56aSteven Liu * @param oemResp the respose data from RIL. 47813099c831441e861328cd4965011c854e060ce56aSteven Liu * @return negative value request was not handled or get error 47823099c831441e861328cd4965011c854e060ce56aSteven Liu * 0 request was handled succesfully, but no response data 47833099c831441e861328cd4965011c854e060ce56aSteven Liu * positive value success, data length of response 47843099c831441e861328cd4965011c854e060ce56aSteven Liu * @hide 47853099c831441e861328cd4965011c854e060ce56aSteven Liu */ 47863099c831441e861328cd4965011c854e060ce56aSteven Liu public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) { 47873099c831441e861328cd4965011c854e060ce56aSteven Liu try { 4788f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4789f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4790f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.invokeOemRilRequestRaw(oemReq, oemResp); 47913099c831441e861328cd4965011c854e060ce56aSteven Liu } catch (RemoteException ex) { 47923099c831441e861328cd4965011c854e060ce56aSteven Liu } catch (NullPointerException ex) { 47933099c831441e861328cd4965011c854e060ce56aSteven Liu } 47943099c831441e861328cd4965011c854e060ce56aSteven Liu return -1; 47953099c831441e861328cd4965011c854e060ce56aSteven Liu } 47964a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee 47974a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee /** @hide */ 47984a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee @SystemApi 47994a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee public void enableVideoCalling(boolean enable) { 48004a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee try { 4801f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4802f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 4803f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro telephony.enableVideoCalling(enable); 48044a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } catch (RemoteException e) { 48054a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee Log.e(TAG, "Error calling ITelephony#enableVideoCalling", e); 48064a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } 48074a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } 48084a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee 48094a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee /** @hide */ 48104a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee @SystemApi 48114a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee public boolean isVideoCallingEnabled() { 48124a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee try { 4813f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4814f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony != null) 48154e792cbe7530b78b9f83907b19e45bfefc363423Svet Ganov return telephony.isVideoCallingEnabled(getOpPackageName()); 48164a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } catch (RemoteException e) { 48174a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee Log.e(TAG, "Error calling ITelephony#isVideoCallingEnabled", e); 48184a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } 48194a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee return false; 48204a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee } 4821421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan 4822421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan /** 482367fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * Whether the device supports configuring the DTMF tone length. 482467fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * 482567fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * @return {@code true} if the DTMF tone length can be changed, and {@code false} otherwise. 482667fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee */ 482767fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee public boolean canChangeDtmfToneLength() { 482867fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee try { 4829896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee ITelephony telephony = getITelephony(); 4830896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee if (telephony != null) { 4831896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee return telephony.canChangeDtmfToneLength(); 4832896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee } 483367fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } catch (RemoteException e) { 483467fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee Log.e(TAG, "Error calling ITelephony#canChangeDtmfToneLength", e); 48356ce5d68a58f10a3eb0caa64a1c37b09ba012e6b6Jay Shrauner } catch (SecurityException e) { 48367e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius Log.e(TAG, "Permission error calling ITelephony#canChangeDtmfToneLength", e); 483767fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } 483867fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee return false; 483967fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } 484067fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee 484167fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee /** 484267fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * Whether the device is a world phone. 484367fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * 484467fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee * @return {@code true} if the device is a world phone, and {@code false} otherwise. 484567fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee */ 484667fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee public boolean isWorldPhone() { 484767fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee try { 4848896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee ITelephony telephony = getITelephony(); 4849896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee if (telephony != null) { 4850896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee return telephony.isWorldPhone(); 4851896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee } 485267fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } catch (RemoteException e) { 485367fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee Log.e(TAG, "Error calling ITelephony#isWorldPhone", e); 48547e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius } catch (SecurityException e) { 48557e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius Log.e(TAG, "Permission error calling ITelephony#isWorldPhone", e); 485667fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } 485767fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee return false; 485867fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee } 485967fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee 486067fc92bd444e4d8eee0aa7703980aff9185ea1bdAndrew Lee /** 4861f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * Whether the phone supports TTY mode. 4862421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * 4863f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * @return {@code true} if the device supports TTY mode, and {@code false} otherwise. 4864f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee */ 4865f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee public boolean isTtyModeSupported() { 4866f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee try { 4867896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee ITelephony telephony = getITelephony(); 4868896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee if (telephony != null) { 4869896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee return telephony.isTtyModeSupported(); 4870896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee } 4871f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee } catch (RemoteException e) { 4872f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee Log.e(TAG, "Error calling ITelephony#isTtyModeSupported", e); 48737e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius } catch (SecurityException e) { 48747e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius Log.e(TAG, "Permission error calling ITelephony#isTtyModeSupported", e); 4875f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee } 4876f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee return false; 4877f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee } 4878f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee 4879f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee /** 4880f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * Whether the phone supports hearing aid compatibility. 4881f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * 4882f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * @return {@code true} if the device supports hearing aid compatibility, and {@code false} 4883f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee * otherwise. 4884f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee */ 4885f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee public boolean isHearingAidCompatibilitySupported() { 4886f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee try { 4887896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee ITelephony telephony = getITelephony(); 4888896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee if (telephony != null) { 4889896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee return telephony.isHearingAidCompatibilitySupported(); 4890896a1e650cf69f8dea1ef588c0089aaaf3d12e08Andrew Lee } 4891f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee } catch (RemoteException e) { 4892f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee Log.e(TAG, "Error calling ITelephony#isHearingAidCompatibilitySupported", e); 48937e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius } catch (SecurityException e) { 48947e9cb0d094043bd8bdb7544c2356abd5479b7aeeRoshan Pius Log.e(TAG, "Permission error calling ITelephony#isHearingAidCompatibilitySupported", e); 4895f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee } 4896f3c10020e2b76f20adb90d250ab4ed4e20e348d2Andrew Lee return false; 4897421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 4898421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan 4899421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan /** 4900421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * This function retrieves value for setting "name+subId", and if that is not found 4901421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * retrieves value for setting "name", and if that is not found throws 4902421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * SettingNotFoundException 4903421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * 49048a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri * @hide 49058a6561d177aad392dddb5e24bc44688334474fd0Jonathan Basseri */ 4906421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan public static int getIntWithSubId(ContentResolver cr, String name, int subId) 4907421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan throws SettingNotFoundException { 4908421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan try { 4909421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan return Settings.Global.getInt(cr, name + subId); 4910421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } catch (SettingNotFoundException e) { 4911421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan try { 4912421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan int val = Settings.Global.getInt(cr, name); 49132a65688d40dd4f82b217b53eabc63ca41b7ad73cAmit Mahajan Settings.Global.putInt(cr, name + subId, val); 49142a65688d40dd4f82b217b53eabc63ca41b7ad73cAmit Mahajan 4915421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan /* We are now moving from 'setting' to 'setting+subId', and using the value stored 4916421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * for 'setting' as default. Reset the default (since it may have a user set 4917421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan * value). */ 4918421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan int default_val = val; 4919421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan if (name.equals(Settings.Global.MOBILE_DATA)) { 4920421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan default_val = "true".equalsIgnoreCase( 4921421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan SystemProperties.get("ro.com.android.mobiledata", "true")) ? 1 : 0; 49225ed82c8ca040a7afd0bc4497b85584c163d6bb8dAmit Mahajan } else if (name.equals(Settings.Global.DATA_ROAMING)) { 49235ed82c8ca040a7afd0bc4497b85584c163d6bb8dAmit Mahajan default_val = "true".equalsIgnoreCase( 49245ed82c8ca040a7afd0bc4497b85584c163d6bb8dAmit Mahajan SystemProperties.get("ro.com.android.dataroaming", "false")) ? 1 : 0; 4925421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 4926421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan 4927421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan if (default_val != val) { 4928421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan Settings.Global.putInt(cr, name, default_val); 4929421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 4930421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan 4931421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan return val; 4932421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } catch (SettingNotFoundException exc) { 4933421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan throw new SettingNotFoundException(name); 4934421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 4935421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 4936421a53900dbdfabb5ab7b6cf6da798ac64bbaa87Amit Mahajan } 49370303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com 49380303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com /** 49390303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com * Returns the IMS Registration Status 4940ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon * @hide 49410303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com */ 49420303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com public boolean isImsRegistered() { 49430303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com try { 4944f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro ITelephony telephony = getITelephony(); 4945f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro if (telephony == null) 4946f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return false; 4947f257469c08f06e40f47f0b884cb0737d1316cc2cNick Vaccaro return telephony.isImsRegistered(); 49480303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com } catch (RemoteException ex) { 49490303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com return false; 49500303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com } catch (NullPointerException ex) { 49510303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com return false; 49520303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com } 49530303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com } 495485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 4955b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen /** 4956b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * Returns the Status of Volte 4957b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * @hide 4958b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen */ 4959b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen public boolean isVolteAvailable() { 496042eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold try { 4961b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen return getITelephony().isVolteAvailable(); 496242eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } catch (RemoteException ex) { 496342eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold return false; 496442eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } catch (NullPointerException ex) { 496542eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold return false; 496642eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } 496742eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } 496842eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold 4969b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen /** 4970b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * Returns the Status of video telephony (VT) 4971b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * @hide 4972b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen */ 4973b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen public boolean isVideoTelephonyAvailable() { 4974b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen try { 4975b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen return getITelephony().isVideoTelephonyAvailable(); 4976b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen } catch (RemoteException ex) { 4977b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen return false; 4978b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen } catch (NullPointerException ex) { 4979b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen return false; 4980b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen } 4981b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen } 4982b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen 4983b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen /** 4984b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * Returns the Status of Wi-Fi Calling 4985b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen * @hide 4986b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen */ 4987b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen public boolean isWifiCallingAvailable() { 498842eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold try { 4989b304fc0aafe067e422ce219ba5edb4bc7a68924cEtan Cohen return getITelephony().isWifiCallingAvailable(); 499042eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } catch (RemoteException ex) { 499142eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold return false; 499242eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } catch (NullPointerException ex) { 499342eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold return false; 499442eadcdf3432e9fd6662ee07316db7726c1eabbfNathan Harold } 49950303be4a8ac109e52b2581b7c6a94b27c581f84fLibin.Tang@motorola.com } 499685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 499785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 499885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the default phone. 499985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 500085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 500185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 500285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimOperatorNumeric(String numeric) { 500385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 500485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setSimOperatorNumericForPhone(phoneId, numeric); 500585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 500685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 500785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 500885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the given phone. 500985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 501085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 501185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 501285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimOperatorNumericForPhone(int phoneId, String numeric) { 501385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 501485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, numeric); 501585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 501685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 501785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 501885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the default phone. 501985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 502085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 502185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 502285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimOperatorName(String name) { 502385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 502485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setSimOperatorNameForPhone(phoneId, name); 502585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 502685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 502785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 502885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the given phone. 502985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 503085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 503185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 503285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimOperatorNameForPhone(int phoneId, String name) { 503385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 503485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA, name); 503585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 503685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 503785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 503885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY for the default phone. 503985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 504085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 504185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 504285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimCountryIso(String iso) { 504385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 504485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setSimCountryIsoForPhone(phoneId, iso); 504585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 504685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 504785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 504885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY for the given phone. 504985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 505085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 505185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 505285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimCountryIsoForPhone(int phoneId, String iso) { 505385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 505485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 505585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 505685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 505785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 505885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_SIM_STATE for the default phone. 505985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 506085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 506185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 506285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimState(String state) { 506385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 506485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setSimStateForPhone(phoneId, state); 506585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 506685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 506785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 506885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set TelephonyProperties.PROPERTY_SIM_STATE for the given phone. 506985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 507085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 507185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 507285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setSimStateForPhone(int phoneId, String state) { 507385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 507485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_SIM_STATE, state); 507585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 507685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 507785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 507885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set baseband version for the default phone. 507985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 508085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param version baseband version 508185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 508285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 508385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setBasebandVersion(String version) { 508485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 508585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setBasebandVersionForPhone(phoneId, version); 508685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 508785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 508885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 508985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set baseband version by phone id. 509085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 509185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which baseband version is set 509285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param version baseband version 509385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 509485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 509585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setBasebandVersionForPhone(int phoneId, String version) { 509685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 509785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu String prop = TelephonyProperties.PROPERTY_BASEBAND_VERSION + 509885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu ((phoneId == 0) ? "" : Integer.toString(phoneId)); 509985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu SystemProperties.set(prop, version); 510085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 510185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 510285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 510385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 510485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set phone type for the default phone. 510585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 510685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param type phone type 510785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 510885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 510985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 511085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setPhoneType(int type) { 511185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 511285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setPhoneType(phoneId, type); 511385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 511485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 511585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 511685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set phone type by phone id. 511785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 511885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which phone type is set 511985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param type phone type 512085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 512185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 512285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 512385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setPhoneType(int phoneId, int type) { 512485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 512585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyManager.setTelephonyProperty(phoneId, 512685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.CURRENT_ACTIVE_PHONE, String.valueOf(type)); 512785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 512885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 512985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 513085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 513185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get OTASP number schema for the default phone. 513285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 513385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 513485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return OTA SP number schema 513585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 513685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 513785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 513885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getOtaSpNumberSchema(String defaultValue) { 513985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 514085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getOtaSpNumberSchemaForPhone(phoneId, defaultValue); 514185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 514285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 514385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 514485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get OTASP number schema by phone id. 514585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 514685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which OTA SP number schema is get 514785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 514885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return OTA SP number schema 514985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 515085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 515185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 515285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public String getOtaSpNumberSchemaForPhone(int phoneId, String defaultValue) { 515385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 515485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return TelephonyManager.getTelephonyProperty(phoneId, 515585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA, defaultValue); 515685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 515785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 515885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return defaultValue; 515985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 516085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 516185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 516285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get SMS receive capable from system property for the default phone. 516385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 516485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 516585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return SMS receive capable 516685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 516785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 516885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 516985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public boolean getSmsReceiveCapable(boolean defaultValue) { 517085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 517185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSmsReceiveCapableForPhone(phoneId, defaultValue); 517285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 517385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 517485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 517585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get SMS receive capable from system property by phone id. 517685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 517785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which SMS receive capable is get 517885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 517985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return SMS receive capable 518085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 518185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 518285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 518385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public boolean getSmsReceiveCapableForPhone(int phoneId, boolean defaultValue) { 518485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 518585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return Boolean.valueOf(TelephonyManager.getTelephonyProperty(phoneId, 518685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_SMS_RECEIVE, String.valueOf(defaultValue))); 518785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 518885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 518985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return defaultValue; 519085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 519185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 519285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 519385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get SMS send capable from system property for the default phone. 519485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 519585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 519685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return SMS send capable 519785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 519885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 519985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 520085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public boolean getSmsSendCapable(boolean defaultValue) { 520185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 520285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return getSmsSendCapableForPhone(phoneId, defaultValue); 520385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 520485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 520585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 520685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Get SMS send capable from system property by phone id. 520785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 520885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which SMS send capable is get 520985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param defaultValue default value 521085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @return SMS send capable 521185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * 521285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 521385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 521485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public boolean getSmsSendCapableForPhone(int phoneId, boolean defaultValue) { 521585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 521685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return Boolean.valueOf(TelephonyManager.getTelephonyProperty(phoneId, 521785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_SMS_SEND, String.valueOf(defaultValue))); 521885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 521985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 522085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return defaultValue; 522185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 522285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 522385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 522485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the alphabetic name of current registered operator. 522585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param name the alphabetic name of current registered operator. 522685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 522785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 522885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkOperatorName(String name) { 522985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 523085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setNetworkOperatorNameForPhone(phoneId, name); 523185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 523285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 523385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 523485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the alphabetic name of current registered operator. 523585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId which phone you want to set 523685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param name the alphabetic name of current registered operator. 523785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 523885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 523985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkOperatorNameForPhone(int phoneId, String name) { 524085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 524185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ALPHA, name); 524285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 524385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 524485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 524585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 524685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the numeric name (MCC+MNC) of current registered operator. 524785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param operator the numeric name (MCC+MNC) of current registered operator 524885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 524985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 525085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkOperatorNumeric(String numeric) { 525185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 525285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setNetworkOperatorNumericForPhone(phoneId, numeric); 525385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 525485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 525585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 525685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the numeric name (MCC+MNC) of current registered operator. 525785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId for which phone type is set 525885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param operator the numeric name (MCC+MNC) of current registered operator 525985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 526085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 526185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkOperatorNumericForPhone(int phoneId, String numeric) { 526285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, numeric); 526385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 526485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 526585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 526685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set roaming state of the current network, for GSM purposes. 526785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param isRoaming is network in romaing state or not 526885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 526985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 527085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkRoaming(boolean isRoaming) { 527185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 527285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setNetworkRoamingForPhone(phoneId, isRoaming); 527385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 527485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 527585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 527685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set roaming state of the current network, for GSM purposes. 527785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId which phone you want to set 527885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param isRoaming is network in romaing state or not 527985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 528085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 528185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkRoamingForPhone(int phoneId, boolean isRoaming) { 528285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 528385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_ISROAMING, 528485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu isRoaming ? "true" : "false"); 528585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 528685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 528785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 528885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 528985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the ISO country code equivalent of the current registered 529085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * operator's MCC (Mobile Country Code). 529185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param iso the ISO country code equivalent of the current registered 529285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 529385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 529485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkCountryIso(String iso) { 529585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 529685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setNetworkCountryIsoForPhone(phoneId, iso); 529785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 529885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 529985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 530085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the ISO country code equivalent of the current registered 530185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * operator's MCC (Mobile Country Code). 530285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId which phone you want to set 530385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param iso the ISO country code equivalent of the current registered 530485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 530585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 530685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setNetworkCountryIsoForPhone(int phoneId, String iso) { 530785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 530885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 530985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, iso); 531085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 531185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 531285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 531385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 531485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the network type currently in use on the device for data transmission. 531585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param type the network type currently in use on the device for data transmission 531685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 531785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 531885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setDataNetworkType(int type) { 531985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu int phoneId = getDefaultPhone(); 532085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setDataNetworkTypeForPhone(phoneId, type); 532185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 532285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu 532385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu /** 532485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * Set the network type currently in use on the device for data transmission. 532585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param phoneId which phone you want to set 532685973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @param type the network type currently in use on the device for data transmission 532785973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu * @hide 532885973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu */ 532985973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu public void setDataNetworkTypeForPhone(int phoneId, int type) { 533085973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu if (SubscriptionManager.isValidPhoneId(phoneId)) { 533185973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu setTelephonyProperty(phoneId, 533285973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, 533385973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu ServiceState.rilRadioTechnologyToString(type)); 533485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 533585973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu } 5336ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon 5337ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon /** 5338ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon * Returns the subscription ID for the given phone account. 5339ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon * @hide 5340ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon */ 5341ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon public int getSubIdForPhoneAccount(PhoneAccount phoneAccount) { 5342ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon int retval = SubscriptionManager.INVALID_SUBSCRIPTION_ID; 5343ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon try { 5344ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon ITelephony service = getITelephony(); 5345ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon if (service != null) { 5346ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon retval = service.getSubIdForPhoneAccount(phoneAccount); 5347ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon } 5348ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon } catch (RemoteException e) { 5349ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon } 5350ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon 5351ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon return retval; 5352ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon } 5353984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott 5354984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott /** 5355984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * Resets telephony manager settings back to factory defaults. 5356984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * 5357984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott * @hide 5358984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott */ 5359984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott public void factoryReset(int subId) { 5360f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott try { 5361f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott Log.d(TAG, "factoryReset: subId=" + subId); 5362f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott ITelephony telephony = getITelephony(); 5363f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott if (telephony != null) 5364f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott telephony.factoryReset(subId); 5365f1fb39763d87dabe254b6ed64ac8f20145035bc0Stuart Scott } catch (RemoteException e) { 5366984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } 5367984dc850b4caeb4470e52bce773935be5305cf8eStuart Scott } 53687ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath 53697ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath 53707ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath /** @hide */ 53717ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath public String getLocaleFromDefaultSim() { 53727ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath try { 53737ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath final ITelephony telephony = getITelephony(); 53747ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath if (telephony != null) { 53757ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath return telephony.getLocaleFromDefaultSim(); 53767ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath } 53777ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath } catch (RemoteException ex) { 53787ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath } 53793d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham return null; 53803d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham } 53817ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath 53823d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham /** 5383010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * Requests the modem activity info. The recipient will place the result 5384010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * in `result`. 5385010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * @param result The object on which the recipient will send the resulting 5386010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski * {@link android.telephony.ModemActivityInfo} object. 53873d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham * @hide 53883d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham */ 5389010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski public void requestModemActivityInfo(ResultReceiver result) { 53903d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham try { 53913d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham ITelephony service = getITelephony(); 53923d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham if (service != null) { 5393010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski service.requestModemActivityInfo(result); 5394010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski return; 53953d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham } 53963d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham } catch (RemoteException e) { 53973d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham Log.e(TAG, "Error calling ITelephony#getModemActivityInfo", e); 53983d0f09433a6a26e5d47bd567cac2ce69d1e7eb0cPrerepa Viswanadham } 5399010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski result.send(0, null); 54007ff76d637f5ad49838e9d4a1570c762a187ed4d1Narayan Kamath } 540139daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu 540239daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu /** 540339daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu * Returns the service state information on specified subscription. Callers require 540439daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu * either READ_PRIVILEGED_PHONE_STATE or READ_PHONE_STATE to retrieve the information. 540539daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu * @hide 540639daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu */ 540739daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu public ServiceState getServiceStateForSubscriber(int subId) { 540839daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu try { 540939daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu ITelephony service = getITelephony(); 541039daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu if (service != null) { 541139daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu return service.getServiceStateForSubscriber(subId, getOpPackageName()); 541239daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu } 541339daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu } catch (RemoteException e) { 541439daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu Log.e(TAG, "Error calling ITelephony#getServiceStateForSubscriber", e); 541539daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu } 541639daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu return null; 541739daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu } 5418740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen 5419740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen /** 5420740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * Returns the URI for the per-account voicemail ringtone set in Phone settings. 5421740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * 5422740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * @param accountHandle The handle for the {@link PhoneAccount} for which to retrieve the 5423740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * voicemail ringtone. 5424740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * @return The URI for the ringtone to play when receiving a voicemail from a specific 5425740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * PhoneAccount. 5426740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen */ 5427740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen public Uri getVoicemailRingtoneUri(PhoneAccountHandle accountHandle) { 5428740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen try { 5429740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen ITelephony service = getITelephony(); 5430740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen if (service != null) { 5431740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen return service.getVoicemailRingtoneUri(accountHandle); 5432740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 5433740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } catch (RemoteException e) { 5434740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen Log.e(TAG, "Error calling ITelephony#getVoicemailRingtoneUri", e); 5435740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 5436740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen return null; 5437740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 5438740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen 5439740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen /** 5440740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * Returns whether vibration is set for voicemail notification in Phone settings. 5441740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * 5442740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * @param accountHandle The handle for the {@link PhoneAccount} for which to retrieve the 5443740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * voicemail vibration setting. 5444740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise. 5445740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen */ 5446740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen public boolean isVoicemailVibrationEnabled(PhoneAccountHandle accountHandle) { 5447740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen try { 5448740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen ITelephony service = getITelephony(); 5449740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen if (service != null) { 5450740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen return service.isVoicemailVibrationEnabled(accountHandle); 5451740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 5452740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } catch (RemoteException e) { 5453740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen Log.e(TAG, "Error calling ITelephony#isVoicemailVibrationEnabled", e); 5454740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 5455740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen return false; 5456740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen } 54572da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang 54582da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang /** 54592da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * Return the application ID for the app type like {@link APPTYPE_CSIM}. 54602da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * 54612da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 54622da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * 54632da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @param appType the uicc app type like {@link APPTYPE_CSIM} 54642da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @return Application ID for specificied app type or null if no uicc or error. 54652da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @hide 54662da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang */ 54672da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang public String getAidForAppType(int appType) { 54682da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang return getAidForAppType(getDefaultSubscription(), appType); 54692da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang } 54702da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang 54712da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang /** 54722da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * Return the application ID for the app type like {@link APPTYPE_CSIM}. 54732da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * 54742da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 54752da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * 54762da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @param subId the subscription ID that this request applies to. 54772da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @param appType the uicc app type, like {@link APPTYPE_CSIM} 54782da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @return Application ID for specificied app type or null if no uicc or error. 54792da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang * @hide 54802da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang */ 54812da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang public String getAidForAppType(int subId, int appType) { 54822da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang try { 54832da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang ITelephony service = getITelephony(); 54842da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang if (service != null) { 54852da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang return service.getAidForAppType(subId, appType); 54862da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang } 54872da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang } catch (RemoteException e) { 54882da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang Log.e(TAG, "Error calling ITelephony#getAidForAppType", e); 54892da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang } 54902da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang return null; 54912da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang } 54922da9b2b8bfb01744d53c14a65a80035d3c8d7b2fYouhan Wang 54937717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang /** 54947717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * Return the Electronic Serial Number. 54957717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * 54967717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 54977717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * 54987717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * @return ESN or null if error. 54997717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * @hide 55007717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang */ 55017717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang public String getEsn() { 55027717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang return getEsn(getDefaultSubscription()); 55037717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang } 55047717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang 55057717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang /** 55067717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * Return the Electronic Serial Number. 55077717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * 55087717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 55097717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * 55107717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * @param subId the subscription ID that this request applies to. 55117717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * @return ESN or null if error. 55127717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang * @hide 55137717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang */ 55147717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang public String getEsn(int subId) { 55157717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang try { 55167717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang ITelephony service = getITelephony(); 55177717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang if (service != null) { 55187717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang return service.getEsn(subId); 55197717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang } 55207717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang } catch (RemoteException e) { 55217717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang Log.e(TAG, "Error calling ITelephony#getEsn", e); 55227717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang } 55237717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang return null; 55247717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang } 55257717acd174795936756226a4bc367fdcb7b49c5dYouhan Wang 55267f89016579567b40705f3821c3b57518ea4a421dSanket Padawe /** 55274eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * Return the Preferred Roaming List Version 55284eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * 55294eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 55304eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * 55314eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * @return PRLVersion or null if error. 55324eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * @hide 55334eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang */ 55344eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang public String getCdmaPrlVersion() { 55354eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang return getCdmaPrlVersion(getDefaultSubscription()); 55364eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang } 55374eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang 55384eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang /** 55394eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * Return the Preferred Roaming List Version 55404eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * 55414eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission 55424eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * 55434eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * @param subId the subscription ID that this request applies to. 55444eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * @return PRLVersion or null if error. 55454eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang * @hide 55464eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang */ 55474eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang public String getCdmaPrlVersion(int subId) { 55484eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang try { 55494eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang ITelephony service = getITelephony(); 55504eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang if (service != null) { 55514eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang return service.getCdmaPrlVersion(subId); 55524eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang } 55534eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang } catch (RemoteException e) { 55544eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang Log.e(TAG, "Error calling ITelephony#getCdmaPrlVersion", e); 55554eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang } 55564eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang return null; 55574eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang } 55584eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang 55594eb5678ed8a0704fe1e4f5e7a3a3156f69b6884fYouhan Wang /** 556006e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * Get snapshot of Telephony histograms 556106e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * @return List of Telephony histograms 556206e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * Requires Permission: 556306e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} 556406e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * Or the calling app has carrier privileges. 556506e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe * @hide 556606e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe */ 556706e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe @SystemApi 556806e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe public List<TelephonyHistogram> getTelephonyHistograms() { 556906e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe try { 557006e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe ITelephony service = getITelephony(); 557106e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe if (service != null) { 557206e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe return service.getTelephonyHistograms(); 557306e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe } 557406e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe } catch (RemoteException e) { 557506e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe Log.e(TAG, "Error calling ITelephony#getTelephonyHistograms", e); 557606e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe } 557706e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe return null; 557806e1ae1a51b9fb8c65e610c22f86380c60a803a0Sanket Padawe } 557964997623bfa04e80064b6056fab0fb23144acb44Meng Wang 558064997623bfa04e80064b6056fab0fb23144acb44Meng Wang /** 558164997623bfa04e80064b6056fab0fb23144acb44Meng Wang * Set the allowed carrier list for slotId 558264997623bfa04e80064b6056fab0fb23144acb44Meng Wang * Require system privileges. In the future we may add this to carrier APIs. 558364997623bfa04e80064b6056fab0fb23144acb44Meng Wang * 558464997623bfa04e80064b6056fab0fb23144acb44Meng Wang * @return The number of carriers set successfully. Should be length of 558564997623bfa04e80064b6056fab0fb23144acb44Meng Wang * carrierList on success; -1 on error. 558664997623bfa04e80064b6056fab0fb23144acb44Meng Wang * @hide 558764997623bfa04e80064b6056fab0fb23144acb44Meng Wang */ 558864997623bfa04e80064b6056fab0fb23144acb44Meng Wang public int setAllowedCarriers(int slotId, List<CarrierIdentifier> carriers) { 558964997623bfa04e80064b6056fab0fb23144acb44Meng Wang try { 559064997623bfa04e80064b6056fab0fb23144acb44Meng Wang ITelephony service = getITelephony(); 559164997623bfa04e80064b6056fab0fb23144acb44Meng Wang if (service != null) { 559264997623bfa04e80064b6056fab0fb23144acb44Meng Wang return service.setAllowedCarriers(slotId, carriers); 559364997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 559464997623bfa04e80064b6056fab0fb23144acb44Meng Wang } catch (RemoteException e) { 559564997623bfa04e80064b6056fab0fb23144acb44Meng Wang Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e); 559664997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 559764997623bfa04e80064b6056fab0fb23144acb44Meng Wang return -1; 559864997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 559964997623bfa04e80064b6056fab0fb23144acb44Meng Wang 560064997623bfa04e80064b6056fab0fb23144acb44Meng Wang /** 560164997623bfa04e80064b6056fab0fb23144acb44Meng Wang * Get the allowed carrier list for slotId. 560264997623bfa04e80064b6056fab0fb23144acb44Meng Wang * Require system privileges. In the future we may add this to carrier APIs. 560364997623bfa04e80064b6056fab0fb23144acb44Meng Wang * 560464997623bfa04e80064b6056fab0fb23144acb44Meng Wang * @return List of {@link android.telephony.CarrierIdentifier}; empty list 560564997623bfa04e80064b6056fab0fb23144acb44Meng Wang * means all carriers are allowed. 560664997623bfa04e80064b6056fab0fb23144acb44Meng Wang * @hide 560764997623bfa04e80064b6056fab0fb23144acb44Meng Wang */ 560864997623bfa04e80064b6056fab0fb23144acb44Meng Wang public List<CarrierIdentifier> getAllowedCarriers(int slotId) { 560964997623bfa04e80064b6056fab0fb23144acb44Meng Wang try { 561064997623bfa04e80064b6056fab0fb23144acb44Meng Wang ITelephony service = getITelephony(); 561164997623bfa04e80064b6056fab0fb23144acb44Meng Wang if (service != null) { 561264997623bfa04e80064b6056fab0fb23144acb44Meng Wang return service.getAllowedCarriers(slotId); 561364997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 561464997623bfa04e80064b6056fab0fb23144acb44Meng Wang } catch (RemoteException e) { 561564997623bfa04e80064b6056fab0fb23144acb44Meng Wang Log.e(TAG, "Error calling ITelephony#getAllowedCarriers", e); 561664997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 561764997623bfa04e80064b6056fab0fb23144acb44Meng Wang return new ArrayList<CarrierIdentifier>(0); 561864997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 56191bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu 56201bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu /** 56211bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * Action set from carrier signalling broadcast receivers to enable/disable metered apns 56221bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required 56231bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @param subId the subscription ID that this action applies to. 56241bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @param enabled control enable or disable metered apns. 56251bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @hide 56261bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu */ 56271bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu public void carrierActionSetMeteredApnsEnabled(int subId, boolean enabled) { 56281bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu try { 56291bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu ITelephony service = getITelephony(); 56301bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu if (service != null) { 56311bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu service.carrierActionSetMeteredApnsEnabled(subId, enabled); 56321bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 56331bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } catch (RemoteException e) { 56341bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu Log.e(TAG, "Error calling ITelephony#carrierActionSetMeteredApnsEnabled", e); 56351bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 56361bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 56371bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu 56381bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu /** 56391bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * Action set from carrier signalling broadcast receivers to enable/disable radio 56401bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required 56411bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @param subId the subscription ID that this action applies to. 56421bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @param enabled control enable or disable radio. 56431bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu * @hide 56441bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu */ 56451bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu public void carrierActionSetRadioEnabled(int subId, boolean enabled) { 56461bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu try { 56471bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu ITelephony service = getITelephony(); 56481bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu if (service != null) { 56491bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu service.carrierActionSetRadioEnabled(subId, enabled); 56501bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 56511bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } catch (RemoteException e) { 56521bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu Log.e(TAG, "Error calling ITelephony#carrierActionSetRadioEnabled", e); 56531bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 56541bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu } 5655b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu 5656b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu /** 5657b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu * Get aggregated video call data usage since boot. 5658b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu * Permissions android.Manifest.permission.READ_NETWORK_USAGE_HISTORY is required. 5659b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu * @return total data usage in bytes 5660b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu * @hide 5661b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu */ 5662b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu public long getVtDataUsage() { 5663b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu 5664b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu try { 5665b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu ITelephony service = getITelephony(); 5666b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu if (service != null) { 5667b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu return service.getVtDataUsage(); 5668b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu } 5669b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu } catch (RemoteException e) { 5670b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu Log.e(TAG, "Error calling getVtDataUsage", e); 5671b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu } 5672b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu return 0; 5673b6587eac06c00c964b6f541e18d307df8c4a9a50Jack Yu } 56748781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu 56758781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu /** 56768781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu * Policy control of data connection. Usually used when data limit is passed. 56778781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu * @param enabled True if enabling the data, otherwise disabling. 56788781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu * @param subId sub id 56798781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu * @hide 56808781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu */ 56818781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu public void setPolicyDataEnabled(boolean enabled, int subId) { 56828781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu try { 56838781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu ITelephony service = getITelephony(); 56848781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu if (service != null) { 56858781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu service.setPolicyDataEnabled(enabled, subId); 56868781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu } 56878781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu } catch (RemoteException e) { 56888781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu Log.e(TAG, "Error calling ITelephony#setPolicyDataEnabled", e); 56898781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu } 56908781b68e2bd6c0080e9c91544557b64783e7dffaJack Yu } 5691afa16001a8b97c298c89a3c9e24cce6608660f83Robert Greenwalt} 56921bf6ec2f868041ba4c3d4c88d3ac482bfd4c52b9fionaxu 5693