1fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville/* 2f5bca080a231e45e1694651c012c74ba52436635Wink Saville * Copyright (C) 2014 The Android Open Source Project 3f5bca080a231e45e1694651c012c74ba52436635Wink Saville * 4f5bca080a231e45e1694651c012c74ba52436635Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5f5bca080a231e45e1694651c012c74ba52436635Wink Saville * you may not use this file except in compliance with the License. 6f5bca080a231e45e1694651c012c74ba52436635Wink Saville * You may obtain a copy of the License at 7f5bca080a231e45e1694651c012c74ba52436635Wink Saville * 8f5bca080a231e45e1694651c012c74ba52436635Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9f5bca080a231e45e1694651c012c74ba52436635Wink Saville * 10f5bca080a231e45e1694651c012c74ba52436635Wink Saville * Unless required by applicable law or agreed to in writing, software 11f5bca080a231e45e1694651c012c74ba52436635Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12f5bca080a231e45e1694651c012c74ba52436635Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f5bca080a231e45e1694651c012c74ba52436635Wink Saville * See the License for the specific language governing permissions and 14f5bca080a231e45e1694651c012c74ba52436635Wink Saville * limitations under the License. 15f5bca080a231e45e1694651c012c74ba52436635Wink Saville */ 16fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 17fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savillepackage android.telephony; 18fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 193256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkeyimport android.annotation.NonNull; 20c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Savilleimport android.annotation.SdkConstant; 21c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Savilleimport android.annotation.SdkConstant.SdkConstantType; 22a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Savilleimport android.content.Context; 23fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.content.Intent; 24fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.net.Uri; 25fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.telephony.Rlog; 26d09c4cad65c708f2c4810d24295456708a2000d2Wink Savilleimport android.os.Handler; 27d09c4cad65c708f2c4810d24295456708a2000d2Wink Savilleimport android.os.Message; 28fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.os.ServiceManager; 29fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.os.RemoteException; 30fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 31fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport com.android.internal.telephony.ISub; 32d09c4cad65c708f2c4810d24295456708a2000d2Wink Savilleimport com.android.internal.telephony.IOnSubscriptionsChangedListener; 33a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Savilleimport com.android.internal.telephony.ITelephonyRegistry; 34fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport com.android.internal.telephony.PhoneConstants; 35d09c4cad65c708f2c4810d24295456708a2000d2Wink Savilleimport com.android.internal.telephony.TelephonyProperties; 367a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor 37905bb54108d380555dbec1c9961a675740fe6e96Wink Savilleimport java.util.ArrayList; 38fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport java.util.List; 39fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 40fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville/** 41f5bca080a231e45e1694651c012c74ba52436635Wink Saville * SubscriptionManager is the application interface to SubscriptionController 42f5bca080a231e45e1694651c012c74ba52436635Wink Saville * and provides information about the current Telephony Subscriptions. 43d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * * <p> 44d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * You do not instantiate this class directly; instead, you retrieve 45d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * a reference to an instance through {@link #from}. 46d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <p> 47d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * All SDK public methods require android.Manifest.permission.READ_PHONE_STATE. 48fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 49d09c4cad65c708f2c4810d24295456708a2000d2Wink Savillepublic class SubscriptionManager { 50d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private static final String LOG_TAG = "SubscriptionManager"; 51d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private static final boolean DBG = false; 52fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville private static final boolean VDBG = false; 53fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 54a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** An invalid subscription identifier */ 5598513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville /** @hide */ 56d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int INVALID_SUBSCRIPTION_ID = -1; 57d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 58d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** Base value for Dummy SUBSCRIPTION_ID's. */ 59d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** FIXME: Remove DummySubId's, but for now have them map just below INVALID_SUBSCRIPTION_ID 60d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** @hide */ 61d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int DUMMY_SUBSCRIPTION_ID_BASE = INVALID_SUBSCRIPTION_ID - 1; 62a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville 63905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** An invalid phone identifier */ 64a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** @hide */ 65d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int INVALID_PHONE_INDEX = -1; 66a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville 67a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** An invalid slot identifier */ 68a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** @hide */ 69d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int INVALID_SIM_SLOT_INDEX = -1; 70a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville 71a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** Indicates the caller wants the default sub id. */ 72a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** @hide */ 73d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int DEFAULT_SUBSCRIPTION_ID = Integer.MAX_VALUE; 74c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 75d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 76d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Indicates the caller wants the default phone id. 77d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Used in SubscriptionController and PhoneBase but do we really need it??? 78d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @hide 79d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 80d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int DEFAULT_PHONE_INDEX = Integer.MAX_VALUE; 81c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 82d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** Indicates the caller wants the default slot id. NOT used remove? */ 83f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 84d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int DEFAULT_SIM_SLOT_INDEX = Integer.MAX_VALUE; 85c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 868eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville /** Minimum possible subid that represents a subscription */ 878eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville /** @hide */ 88d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int MIN_SUBSCRIPTION_ID_VALUE = 0; 898eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville 908eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville /** Maximum possible subid that represents a subscription */ 918eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville /** @hide */ 92d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final int MAX_SUBSCRIPTION_ID_VALUE = DEFAULT_SUBSCRIPTION_ID - 1; 93fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 94baf21da1e17ef358632c078128d381b3be218a08Wink Saville /** @hide */ 952d1ee982276f5dbd0e035778b731b48e4ef34515Wink Saville public static final Uri CONTENT_URI = Uri.parse("content://telephony/siminfo"); 96baf21da1e17ef358632c078128d381b3be218a08Wink Saville 97baf21da1e17ef358632c078128d381b3be218a08Wink Saville /** 98d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * TelephonyProvider unique key column name is the subscription id. 99d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <P>Type: TEXT (String)</P> 100d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 101d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** @hide */ 102d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final String UNIQUE_KEY_SUBSCRIPTION_ID = "_id"; 103d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 104d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 105d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * TelephonyProvider column name for SIM ICC Identifier 106fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: TEXT (String)</P> 107fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 108f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 109fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String ICC_ID = "icc_id"; 110fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 111fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 112d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * TelephonyProvider column name for user SIM_SlOT_INDEX 113fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: INTEGER (int)</P> 114fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 115f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 116d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final String SIM_SLOT_INDEX = "sim_id"; 117905bb54108d380555dbec1c9961a675740fe6e96Wink Saville 118905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** SIM is not inserted */ 119a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** @hide */ 120fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int SIM_NOT_INSERTED = -1; 121fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 122fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 123905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for user displayed name. 124fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: TEXT (String)</P> 125fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 126f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 127fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String DISPLAY_NAME = "display_name"; 128fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 129905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 130e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe * TelephonyProvider column name for the service provider name for the SIM. 131e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe * <P>Type: TEXT (String)</P> 132e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe */ 133e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe /** @hide */ 134e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe public static final String CARRIER_NAME = "carrier_name"; 135e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe 136e1013f964dc4eeb28521ed860005e1e21907b0ffSanket Padawe /** 137905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * Default name resource 138905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 139905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 140fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DEFAULT_NAME_RES = com.android.internal.R.string.unknownName; 141fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 142fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 143905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for source of the user displayed name. 144905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * <P>Type: INT (int)</P> with one of the NAME_SOURCE_XXXX values below 145905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * 146905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 147fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 148fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String NAME_SOURCE = "name_source"; 149fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 150905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 151905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * The name_source is undefined 152905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 153905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 154c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final int NAME_SOURCE_UNDEFINDED = -1; 155c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 156905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 157905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * The name_source is the default 158905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 159905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 160c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final int NAME_SOURCE_DEFAULT_SOURCE = 0; 161fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 162905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 163905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * The name_source is from the SIM 164905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 165905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 166c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final int NAME_SOURCE_SIM_SOURCE = 1; 167fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 168905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 169905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * The name_source is from the user 170905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @hide 171905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 172c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final int NAME_SOURCE_USER_INPUT = 2; 173fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 174fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 175905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for the color of a SIM. 176fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: INTEGER (int)</P> 177fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 178f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 179fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String COLOR = "color"; 180fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 181f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 182fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int COLOR_1 = 0; 183fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 184f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 185fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int COLOR_2 = 1; 186fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 187f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 188fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int COLOR_3 = 2; 189fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 190f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 191fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int COLOR_4 = 3; 192fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 193f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 194fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int COLOR_DEFAULT = COLOR_1; 195fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 196fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 197905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for the phone number of a SIM. 198fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: TEXT (String)</P> 199fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 200f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 201fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String NUMBER = "number"; 202fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 203fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 204905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for the number display format of a SIM. 205fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: INTEGER (int)</P> 206fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 207f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 208fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String DISPLAY_NUMBER_FORMAT = "display_number_format"; 209fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 210f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 211c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final int DISPLAY_NUMBER_NONE = 0; 212fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 213f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 214fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DISPLAY_NUMBER_FIRST = 1; 215fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 216f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 217fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DISPLAY_NUMBER_LAST = 2; 218fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 219f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 22095fc99b33418f228aa0390032ad466814d33b164Stuart Scott public static final int DISPLAY_NUMBER_DEFAULT = DISPLAY_NUMBER_FIRST; 221fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 222fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 223905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for permission for data roaming of a SIM. 224fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * <P>Type: INTEGER (int)</P> 225fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 226f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 227fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final String DATA_ROAMING = "data_roaming"; 228fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 229400a3f6df20b92e639f20956301a36beb67b511bStuart Scott /** Indicates that data roaming is enabled for a subscription */ 230fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DATA_ROAMING_ENABLE = 1; 231fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 232400a3f6df20b92e639f20956301a36beb67b511bStuart Scott /** Indicates that data roaming is disabled for a subscription */ 233fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DATA_ROAMING_DISABLE = 0; 234fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 235f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 236fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static final int DATA_ROAMING_DEFAULT = DATA_ROAMING_DISABLE; 237fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 2387a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor /** 239905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for the MCC associated with a SIM. 2407a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor * <P>Type: INTEGER (int)</P> 241a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @hide 2427a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor */ 2437a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor public static final String MCC = "mcc"; 2447a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor 2457a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor /** 246905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * TelephonyProvider column name for the MNC associated with a SIM. 2477a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor * <P>Type: INTEGER (int)</P> 248a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @hide 2497a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor */ 2507a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor public static final String MNC = "mnc"; 2517a96207e2ba549843e9fcbbc7f2fde7ed96ada84Tom Taylor 252c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville /** 253c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * Broadcast Action: The user has changed one of the default subs related to 254c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * data, phone calls, or sms</p> 255d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * 256d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * TODO: Change to a listener 257f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 258c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville */ 259c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 260c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static final String SUB_DEFAULT_CHANGED_ACTION = 261c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville "android.intent.action.SUB_DEFAULT_CHANGED"; 262fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 263d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private final Context mContext; 264d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 265d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 266d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * A listener class for monitoring changes to {@link SubscriptionInfo} records. 267d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <p> 268d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Override the onSubscriptionsChanged method in the object that extends this 269071743f0cbbfab36150db6ec945452579d02e8ddWink Saville * class and pass it to {@link #addOnSubscriptionsChangedListener(OnSubscriptionsChangedListener)} 270d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * to register your listener and to unregister invoke 271071743f0cbbfab36150db6ec945452579d02e8ddWink Saville * {@link #removeOnSubscriptionsChangedListener(OnSubscriptionsChangedListener)} 272d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <p> 273d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Permissions android.Manifest.permission.READ_PHONE_STATE is required 274d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * for #onSubscriptionsChanged to be invoked. 275d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 276d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static class OnSubscriptionsChangedListener { 277d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** @hide */ 278d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static final String PERMISSION_ON_SUBSCRIPTIONS_CHANGED = 279d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville android.Manifest.permission.READ_PHONE_STATE; 280d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 281d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private final Handler mHandler = new Handler() { 282d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville @Override 283d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void handleMessage(Message msg) { 284d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (DBG) { 285d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville log("handleMessage: invoke the overriden onSubscriptionsChanged()"); 286d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 287d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville OnSubscriptionsChangedListener.this.onSubscriptionsChanged(); 288d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 289d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville }; 290d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 291d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 292d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Callback invoked when there is any change to any SubscriptionInfo. Typically 293d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * this method would invoke {@link #getActiveSubscriptionInfoList} 294d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 295d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void onSubscriptionsChanged() { 296d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (DBG) log("onSubscriptionsChanged: NOT OVERRIDDEN"); 297d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 298d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 299d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 300d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * The callback methods need to be called on the handler thread where 301d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * this object was created. If the binder did that for us it'd be nice. 302d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 303d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville IOnSubscriptionsChangedListener callback = new IOnSubscriptionsChangedListener.Stub() { 304d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville @Override 305d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void onSubscriptionsChanged() { 306d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (DBG) log("callback: received, sendEmptyMessage(0) to handler"); 307d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville mHandler.sendEmptyMessage(0); 308d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 309d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville }; 310d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 311d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville private void log(String s) { 312d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville Rlog.d(LOG_TAG, s); 313d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 314d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 315d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 316f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 317d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionManager(Context context) { 318fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (DBG) logd("SubscriptionManager created"); 319d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville mContext = context; 320d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 321d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 322d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 323d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Get an instance of the SubscriptionManager from the Context. 324d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * This invokes {@link android.content.Context#getSystemService 325d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)}. 326d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * 327d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param context to use. 328d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return SubscriptionManager instance 329d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 330d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public static SubscriptionManager from(Context context) { 331d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return (SubscriptionManager) context.getSystemService( 332d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville Context.TELEPHONY_SUBSCRIPTION_SERVICE); 333fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 334fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 335fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 336d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Register for changes to the list of active {@link SubscriptionInfo} records or to the 337d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * individual records themselves. When a change occurs the onSubscriptionsChanged method of 338d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * the listener will be invoked immediately if there has been a notification. 339a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * 340d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param listener an instance of {@link OnSubscriptionsChangedListener} with 341d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * onSubscriptionsChanged overridden. 342a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville */ 343071743f0cbbfab36150db6ec945452579d02e8ddWink Saville public void addOnSubscriptionsChangedListener(OnSubscriptionsChangedListener listener) { 344d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>"; 345a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (DBG) { 346d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville logd("register OnSubscriptionsChangedListener pkgForDebug=" + pkgForDebug 347d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville + " listener=" + listener); 348a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 349a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville try { 350d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville // We use the TelephonyRegistry as it runs in the system and thus is always 351d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville // available. Where as SubscriptionController could crash and not be available 352a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService( 353a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville "telephony.registry")); 354a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (tr != null) { 355071743f0cbbfab36150db6ec945452579d02e8ddWink Saville tr.addOnSubscriptionsChangedListener(pkgForDebug, listener.callback); 356a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 357a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } catch (RemoteException ex) { 358a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville // Should not happen 359a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 360a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 361a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville 362a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** 363d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Unregister the {@link OnSubscriptionsChangedListener}. This is not strictly necessary 364d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * as the listener will automatically be unregistered if an attempt to invoke the listener 365d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * fails. 366a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * 367d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param listener that is to be unregistered. 368fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 369071743f0cbbfab36150db6ec945452579d02e8ddWink Saville public void removeOnSubscriptionsChangedListener(OnSubscriptionsChangedListener listener) { 370d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>"; 371a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (DBG) { 372d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville logd("unregister OnSubscriptionsChangedListener pkgForDebug=" + pkgForDebug 373a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville + " listener=" + listener); 374a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 375a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville try { 376a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville // We use the TelephonyRegistry as its runs in the system and thus is always 377a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville // available where as SubscriptionController could crash and not be available 378a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService( 379a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville "telephony.registry")); 380a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (tr != null) { 381071743f0cbbfab36150db6ec945452579d02e8ddWink Saville tr.removeOnSubscriptionsChangedListener(pkgForDebug, listener.callback); 382a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 383a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } catch (RemoteException ex) { 384a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville // Should not happen 385a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 386a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville } 387a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville 388a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville /** 389d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Get the active SubscriptionInfo with the subId key 390d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param subId The unique SubscriptionInfo key in database 391d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return SubscriptionInfo, maybe null if its not active. 392a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville */ 393d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getActiveSubscriptionInfo(int subId) { 394d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (VDBG) logd("[getActiveSubscriptionInfo]+ subId=" + subId); 395a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(subId)) { 396d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville logd("[getActiveSubscriptionInfo]- invalid subId"); 397fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 398fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 399fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 400a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville SubscriptionInfo subInfo = null; 401fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 402fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 403fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 404fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 405d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville subInfo = iSub.getActiveSubscriptionInfo(subId); 406fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 407fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 408fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 409fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 410fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 411fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return subInfo; 412fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 413fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 414fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 415fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 416d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Get the active SubscriptionInfo associated with the iccId 417fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param iccId the IccId of SIM card 418d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return SubscriptionInfo, maybe null if its not active 419f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 420fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 421d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getActiveSubscriptionInfoForIccIndex(String iccId) { 422d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (VDBG) logd("[getActiveSubscriptionInfoForIccIndex]+ iccId=" + iccId); 423fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iccId == null) { 424d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville logd("[getActiveSubscriptionInfoForIccIndex]- null iccid"); 425fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 426fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 427fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 428d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville SubscriptionInfo result = null; 429fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 430fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 431fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 432fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 433d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville result = iSub.getActiveSubscriptionInfoForIccId(iccId); 434fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 435fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 436fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 437fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 438fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 439fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 440fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 441fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 442fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 443d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Get the active SubscriptionInfo associated with the slotIdx 444d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param slotIdx the slot which the subscription is inserted 445d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return SubscriptionInfo, maybe null if its not active 446fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 447d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int slotIdx) { 448d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (VDBG) logd("[getActiveSubscriptionInfoForSimSlotIndex]+ slotIdx=" + slotIdx); 449d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (!isValidSlotId(slotIdx)) { 450d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville logd("[getActiveSubscriptionInfoForSimSlotIndex]- invalid slotIdx"); 451fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 452fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 453fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 454d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville SubscriptionInfo result = null; 455fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 456fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 457fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 458fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 459d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville result = iSub.getActiveSubscriptionInfoForSimSlotIndex(slotIdx); 460fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 461fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 462fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 463fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 464fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 465fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 466fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 467fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 468fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 469d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return List of all SubscriptionInfo records in database, 470d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * include those that were inserted before, maybe empty but not null. 471f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 472fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 473d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public List<SubscriptionInfo> getAllSubscriptionInfoList() { 474a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (VDBG) logd("[getAllSubscriptionInfoList]+"); 475fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 476a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville List<SubscriptionInfo> result = null; 477fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 478fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 479fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 480fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 481fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.getAllSubInfoList(); 482fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 483fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 484fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 485fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 486fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 487905bb54108d380555dbec1c9961a675740fe6e96Wink Saville if (result == null) { 488a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville result = new ArrayList<SubscriptionInfo>(); 489905bb54108d380555dbec1c9961a675740fe6e96Wink Saville } 490fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 491fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 492fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 493fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 494d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Get the SubscriptionInfo(s) of the currently inserted SIM(s). The records will be sorted 495d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * by {@link SubscriptionInfo#getSimSlotIndex} then by {@link SubscriptionInfo#getSubscriptionId}. 496d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * 497d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return Sorted list of the currently {@link SubscriptionInfo} records available on the device. 498d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <ul> 499d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <li> 500d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * If null is returned the current state is unknown but if a {@link OnSubscriptionsChangedListener} 501d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * has been registered {@link OnSubscriptionsChangedListener#onSubscriptionsChanged} will be 502d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * invoked in the future. 503d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * </li> 504d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <li> 505d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * If the list is empty then there are no {@link SubscriptionInfo} records currently available. 506d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * </li> 507d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <li> 508d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * if the list is non-empty the list is sorted by {@link SubscriptionInfo#getSimSlotIndex} 509d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * then by {@link SubscriptionInfo#getSubscriptionId}. 510d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * </li> 511d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * </ul> 512fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 513d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public List<SubscriptionInfo> getActiveSubscriptionInfoList() { 514a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville List<SubscriptionInfo> result = null; 515fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 516fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 517fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 518fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 519d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville result = iSub.getActiveSubscriptionInfoList(); 520fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 521fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 522fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 523fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 524fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 525fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 526fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 527fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 528d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return the count of all subscriptions in the database, this includes 529d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * all subscriptions that have been seen. 530f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 531fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 532d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int getAllSubscriptionInfoCount() { 533a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (VDBG) logd("[getAllSubscriptionInfoCount]+"); 534fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 535fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int result = 0; 536fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 537fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 538fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 539fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 540fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.getAllSubInfoCount(); 541fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 542fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 543fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 544fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 545fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 546fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 547fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 548fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 549fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 550d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return the current number of active subscriptions. There is no guarantee the value 551d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * returned by this method will be the same as the length of the list returned by 552d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * {@link #getActiveSubscriptionInfoList}. 553c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville */ 554d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int getActiveSubscriptionInfoCount() { 555c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville int result = 0; 556c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 557c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville try { 558c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 559c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (iSub != null) { 5608a38a203a9754be85e12484adff69f7577fa4fadWink Saville result = iSub.getActiveSubInfoCount(); 561c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 562c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } catch (RemoteException ex) { 563c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 564c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 565c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 566c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return result; 567c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 568c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 569c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville /** 570d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return the maximum number of active subscriptions that will be returned by 571d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * {@link #getActiveSubscriptionInfoList} and the value returned by 572d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * {@link #getActiveSubscriptionInfoCount}. 573d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 574d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int getActiveSubscriptionInfoCountMax() { 575d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int result = 0; 576d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 577d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville try { 578d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 579d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (iSub != null) { 580d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville result = iSub.getActiveSubInfoCountMax(); 581d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 582d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } catch (RemoteException ex) { 583d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville // ignore it 584d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 585d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 586d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return result; 587d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 588d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 589d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 590d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Add a new SubscriptionInfo to SubscriptionInfo database if needed 591fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param iccId the IccId of the SIM card 592fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param slotId the slot which the SIM is inserted 593fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the URL of the newly created row or the updated row 594f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 595fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 596d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public Uri addSubscriptionInfoRecord(String iccId, int slotId) { 597a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville if (VDBG) logd("[addSubscriptionInfoRecord]+ iccId:" + iccId + " slotId:" + slotId); 598fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iccId == null) { 599a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville logd("[addSubscriptionInfoRecord]- null iccId"); 600fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 601c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (!isValidSlotId(slotId)) { 602a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville logd("[addSubscriptionInfoRecord]- invalid slotId"); 603c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 604fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 605fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 606fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 607fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 608fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // FIXME: This returns 1 on success, 0 on error should should we return it? 609fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville iSub.addSubInfoRecord(iccId, slotId); 610fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 611fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 612fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 613fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 614fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 615fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // FIXME: Always returns null? 616fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return null; 617fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 618fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 619fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 620fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 621ab45ec177a787fee046f6a9c4d1098d529aff7bbStuart Scott * Set SIM icon tint color by simInfo index 622d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param tint the RGB value of icon tint color of the SIM 623fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param subId the unique SubInfoRecord index in database 624fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the number of records updated 625f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 626fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 627d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int setIconTint(int tint, int subId) { 628ab45ec177a787fee046f6a9c4d1098d529aff7bbStuart Scott if (VDBG) logd("[setIconTint]+ tint:" + tint + " subId:" + subId); 629a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(subId)) { 630ab45ec177a787fee046f6a9c4d1098d529aff7bbStuart Scott logd("[setIconTint]- fail"); 631fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return -1; 632fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 633fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 634fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int result = 0; 635fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 636fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 637fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 638fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 639ab45ec177a787fee046f6a9c4d1098d529aff7bbStuart Scott result = iSub.setIconTint(tint, subId); 640fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 641fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 642fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 643fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 644fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 645fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 646fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 647fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 648fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 649fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 650fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Set display name by simInfo index 651fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param displayName the display name of SIM card 652a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @param subId the unique SubscriptionInfo index in database 653fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the number of records updated 654f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 655fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 656d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int setDisplayName(String displayName, int subId) { 657c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return setDisplayName(displayName, subId, NAME_SOURCE_UNDEFINDED); 658fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 659fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 660fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 661fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Set display name by simInfo index with name source 662fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param displayName the display name of SIM card 663a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @param subId the unique SubscriptionInfo index in database 664c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * @param nameSource 0: NAME_SOURCE_DEFAULT_SOURCE, 1: NAME_SOURCE_SIM_SOURCE, 665c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * 2: NAME_SOURCE_USER_INPUT, -1 NAME_SOURCE_UNDEFINED 66698513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville * @return the number of records updated or < 0 if invalid subId 667f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 668fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 669d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int setDisplayName(String displayName, int subId, long nameSource) { 670c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) { 671c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville logd("[setDisplayName]+ displayName:" + displayName + " subId:" + subId 672c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville + " nameSource:" + nameSource); 673c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 674a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(subId)) { 675fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville logd("[setDisplayName]- fail"); 676fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return -1; 677fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 678fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 679fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int result = 0; 680fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 681fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 682fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 683fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 684fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.setDisplayNameUsingSrc(displayName, subId, nameSource); 685fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 686fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 687fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 688fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 689fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 690fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 691fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 692fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 693fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 694fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 695fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Set phone number by subId 696fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param number the phone number of the SIM 697a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @param subId the unique SubscriptionInfo index in database 698fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the number of records updated 699f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 700fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 701d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int setDisplayNumber(String number, int subId) { 702a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (number == null || !isValidSubscriptionId(subId)) { 703c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville logd("[setDisplayNumber]- fail"); 704fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return -1; 705fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 706fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 707fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int result = 0; 708fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 709fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 710fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 711fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 712c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville result = iSub.setDisplayNumber(number, subId); 713fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 714fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 715fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 716fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 717fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 718fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 719fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 720fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 721fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 722fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 723fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Set data roaming by simInfo index 724fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @param roaming 0:Don't allow data when roaming, 1:Allow data when roaming 725a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @param subId the unique SubscriptionInfo index in database 726fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the number of records updated 727f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 728fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 729d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int setDataRoaming(int roaming, int subId) { 730fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (VDBG) logd("[setDataRoaming]+ roaming:" + roaming + " subId:" + subId); 731a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (roaming < 0 || !isValidSubscriptionId(subId)) { 732fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville logd("[setDataRoaming]- fail"); 733fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return -1; 734fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 735fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 736fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville int result = 0; 737fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 738fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 739fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 740fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 741fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.setDataRoaming(roaming, subId); 742fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 743fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 744fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 745fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 746fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 747fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 748fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 749fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 750905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 751905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * Get slotId associated with the subscription. 752905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @return slotId as a positive integer or a negative value if an error either 75398513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville * SIM_NOT_INSERTED or < 0 if an invalid slot index 754a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @hide 755905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 75663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getSlotId(int subId) { 757a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(subId)) { 758c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville logd("[getSlotId]- fail"); 759c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 760fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 761d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int result = INVALID_SIM_SLOT_INDEX; 762fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 763fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 764fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 765fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 766fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.getSlotId(subId); 767fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 768fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 769fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 770fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 771fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 772fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 773fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 774fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 775fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 776f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 77763f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int[] getSubId(int slotId) { 778c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (!isValidSlotId(slotId)) { 779c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville logd("[getSubId]- fail"); 780c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return null; 781c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 782fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 78363f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville int[] subId = null; 784fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 785fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 786fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 787fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 788fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville subId = iSub.getSubId(slotId); 789fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 790fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 791fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 792fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 793fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 794fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return subId; 795fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 796fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 797f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 79863f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getPhoneId(int subId) { 799a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(subId)) { 800c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville logd("[getPhoneId]- fail"); 801d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return INVALID_PHONE_INDEX; 802c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 803fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 804d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int result = INVALID_PHONE_INDEX; 805fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 806fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 807fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 808fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 809fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville result = iSub.getPhoneId(subId); 810fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 811fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 812fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 813fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 814fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 815c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("[getPhoneId]- phoneId=" + result); 816fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return result; 817fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 818fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 819fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 820fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville private static void logd(String msg) { 821d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville Rlog.d(LOG_TAG, msg); 822fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 823fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 824fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville /** 825fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @return the "system" defaultSubId on a voice capable device this 826fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * will be getDefaultVoiceSubId() and on a data only device it will be 827fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * getDefaultDataSubId(). 828f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 829fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */ 83063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getDefaultSubId() { 831d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int subId = INVALID_SUBSCRIPTION_ID; 832fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 833fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 834fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 835fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 836fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville subId = iSub.getDefaultSubId(); 837fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 838fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 839fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 840fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 841fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 842fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (VDBG) logd("getDefaultSubId=" + subId); 843fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return subId; 844fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 845fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 846f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 84763f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getDefaultVoiceSubId() { 848d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int subId = INVALID_SUBSCRIPTION_ID; 849fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 850fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 851fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 852fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 853fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville subId = iSub.getDefaultVoiceSubId(); 854fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 855fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 856fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 857fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 858fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 859c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("getDefaultVoiceSubId, sub id = " + subId); 860fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return subId; 861fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 862fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 863f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 864d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void setDefaultVoiceSubId(int subId) { 865fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (VDBG) logd("setDefaultVoiceSubId sub id = " + subId); 866fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 867fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 868fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 869fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville iSub.setDefaultVoiceSubId(subId); 870fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 871fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 872c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 873c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 874c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 875c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 876f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 877d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getDefaultVoiceSubscriptionInfo() { 878d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return getActiveSubscriptionInfo(getDefaultVoiceSubId()); 879c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 880c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 881f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 882c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static int getDefaultVoicePhoneId() { 883c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return getPhoneId(getDefaultVoiceSubId()); 884c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 885c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 886905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 887d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return subId of the DefaultSms subscription or 88898513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville * a value < 0 if an error. 889d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * 890a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @hide 891905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 89263f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getDefaultSmsSubId() { 893d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int subId = INVALID_SUBSCRIPTION_ID; 894c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 895c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville try { 896c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 897c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (iSub != null) { 898c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville subId = iSub.getDefaultSmsSubId(); 899c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 900c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } catch (RemoteException ex) { 901c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 902c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 903c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 904c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("getDefaultSmsSubId, sub id = " + subId); 905c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return subId; 906c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 907c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 908f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 909d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void setDefaultSmsSubId(int subId) { 910c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("setDefaultSmsSubId sub id = " + subId); 911c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville try { 912c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 913c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (iSub != null) { 914c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville iSub.setDefaultSmsSubId(subId); 915c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 916c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } catch (RemoteException ex) { 917c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 918fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 919fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 920fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 921f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 922d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getDefaultSmsSubscriptionInfo() { 923d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return getActiveSubscriptionInfo(getDefaultSmsSubId()); 924fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 925fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 926f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 927d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int getDefaultSmsPhoneId() { 928c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return getPhoneId(getDefaultSmsSubId()); 929fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 930fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 931f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 93263f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static int getDefaultDataSubId() { 933d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville int subId = INVALID_SUBSCRIPTION_ID; 934fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 935fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 936fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 937fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 938c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville subId = iSub.getDefaultDataSubId(); 939fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 940fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 941c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 942fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 943c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 944c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("getDefaultDataSubId, sub id = " + subId); 945c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return subId; 946fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 947fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 948f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 949d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void setDefaultDataSubId(int subId) { 950fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (VDBG) logd("setDataSubscription sub id = " + subId); 951fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 952fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 953fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 954fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville iSub.setDefaultDataSubId(subId); 955fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 956fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 957c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 958fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 959fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 960fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 961f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 962d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public SubscriptionInfo getDefaultDataSubscriptionInfo() { 963d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return getActiveSubscriptionInfo(getDefaultDataSubId()); 964c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 965fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 966f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 967d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public int getDefaultDataPhoneId() { 968c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return getPhoneId(getDefaultDataSubId()); 969c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 970c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 971f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 972d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void clearSubscriptionInfo() { 973fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville try { 974fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 975fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville if (iSub != null) { 976fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville iSub.clearSubInfo(); 977fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 978fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } catch (RemoteException ex) { 979fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville // ignore it 980fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 981fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 982fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville return; 983fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 984fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 985c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville //FIXME this is vulnerable to race conditions 986f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 987d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public boolean allDefaultsSelected() { 988a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(getDefaultDataSubId())) { 989c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return false; 990c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 991a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(getDefaultSmsSubId())) { 992c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return false; 993c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 994a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (!isValidSubscriptionId(getDefaultVoiceSubId())) { 995c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return false; 996c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 997c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return true; 998c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 999c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1000c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville /** 1001c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * If a default is set to subscription which is not active, this will reset that default back to 100298513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville * an invalid subscription id, i.e. < 0. 1003f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 1004c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville */ 1005d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public void clearDefaultsForInactiveSubIds() { 1006c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (VDBG) logd("clearDefaultsForInactiveSubIds"); 1007c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville try { 1008c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 1009c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (iSub != null) { 1010c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville iSub.clearDefaultsForInactiveSubIds(); 1011c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1012c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } catch (RemoteException ex) { 1013c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 1014c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1015c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1016c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1017905bb54108d380555dbec1c9961a675740fe6e96Wink Saville /** 1018905bb54108d380555dbec1c9961a675740fe6e96Wink Saville * @return true if a valid subId else false 1019a374c3d03b28f135cdfba2cadf6fe6f03ac010bdWink Saville * @hide 1020905bb54108d380555dbec1c9961a675740fe6e96Wink Saville */ 1021a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville public static boolean isValidSubscriptionId(int subId) { 1022d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return subId > INVALID_SUBSCRIPTION_ID ; 1023c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1024c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 10258eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville /** 10268eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville * @return true if subId is an usable subId value else false. A 102798513d7bd44fe9ce14733c8162544c2114f8f21bWink Saville * usable subId means its neither a INVALID_SUBSCRIPTION_ID nor a DEFAULT_SUB_ID. 10288eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville * @hide 10298eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville */ 103063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static boolean isUsableSubIdValue(int subId) { 1031d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return subId >= MIN_SUBSCRIPTION_ID_VALUE && subId <= MAX_SUBSCRIPTION_ID_VALUE; 10328eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville } 10338eab2b6bdffc3a5934796d074f541f1020b26f30Wink Saville 1034f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 1035c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static boolean isValidSlotId(int slotId) { 1036d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return slotId >= 0 && slotId < TelephonyManager.getDefault().getSimCount(); 1037c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1038c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1039f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 1040c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville public static boolean isValidPhoneId(int phoneId) { 1041d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return phoneId >= 0 && phoneId < TelephonyManager.getDefault().getPhoneCount(); 1042c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1043c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1044f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 1045fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville public static void putPhoneIdAndSubIdExtra(Intent intent, int phoneId) { 104663f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville int[] subIds = SubscriptionManager.getSubId(phoneId); 1047c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (subIds != null && subIds.length > 0) { 1048c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville putPhoneIdAndSubIdExtra(intent, phoneId, subIds[0]); 1049fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } else { 1050fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville logd("putPhoneIdAndSubIdExtra: no valid subs"); 1051fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1052fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville } 1053eeacf9374748a5f7fc96a1beaf18c353d473d752Wink Saville 1054f5bca080a231e45e1694651c012c74ba52436635Wink Saville /** @hide */ 105563f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville public static void putPhoneIdAndSubIdExtra(Intent intent, int phoneId, int subId) { 1056eeacf9374748a5f7fc96a1beaf18c353d473d752Wink Saville if (VDBG) logd("putPhoneIdAndSubIdExtra: phoneId=" + phoneId + " subId=" + subId); 1057eeacf9374748a5f7fc96a1beaf18c353d473d752Wink Saville intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId); 1058c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville intent.putExtra(PhoneConstants.PHONE_KEY, phoneId); 1059c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville //FIXME this is using phoneId and slotId interchangeably 1060c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville //Eventually, this should be removed as it is not the slot id 1061c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville intent.putExtra(PhoneConstants.SLOT_KEY, phoneId); 1062c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1063c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1064c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville /** 10658a38a203a9754be85e12484adff69f7577fa4fadWink Saville * @return the list of subId's that are active, 1066c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville * is never null but the length maybe 0. 1067f5bca080a231e45e1694651c012c74ba52436635Wink Saville * @hide 1068c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville */ 10693256601f5e4d94713f59e97b9d4912875c1bdcafJeff Sharkey public @NonNull int[] getActiveSubscriptionIdList() { 107063f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville int[] subId = null; 1071c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1072c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville try { 1073c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 1074c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (iSub != null) { 10758a38a203a9754be85e12484adff69f7577fa4fadWink Saville subId = iSub.getActiveSubIdList(); 1076c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1077c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } catch (RemoteException ex) { 1078c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville // ignore it 1079c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1080c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1081c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville if (subId == null) { 108263f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville subId = new int[0]; 1083c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville } 1084c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville 1085c650e0b12a656060de767d91d99f6b33e51c6ab2Wink Saville return subId; 10862d1ee982276f5dbd0e035778b731b48e4ef34515Wink Saville 1087eeacf9374748a5f7fc96a1beaf18c353d473d752Wink Saville } 1088d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville 1089d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville /** 1090d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Returns true if the device is considered roaming on the current 1091d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * network for a subscription. 1092d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * <p> 1093d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * Availability: Only when user registered to a network. 1094d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * 1095d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @param subId The subscription ID 1096d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville * @return true if the network for the subscription is roaming, false otherwise 1097d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville */ 1098d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville public boolean isNetworkRoaming(int subId) { 1099d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville final int phoneId = getPhoneId(subId); 1100d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville if (phoneId < 0) { 1101d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville // What else can we do? 1102d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville return false; 1103d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 110485973dcf8cd7d7a964ba746875a0c572685d1807Legler Wu return TelephonyManager.getDefault().isNetworkRoaming(subId); 1105d09c4cad65c708f2c4810d24295456708a2000d2Wink Saville } 110647920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville 110747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville /** 110847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * Returns a constant indicating the state of sim for the subscription. 110947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * 111047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * @param subId 111147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * 111247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_UNKNOWN} 111347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_ABSENT} 111447920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_PIN_REQUIRED} 111547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_PUK_REQUIRED} 111647920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_NETWORK_LOCKED} 111747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_READY} 111847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_NOT_READY} 111947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_PERM_DISABLED} 112047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@See TelephonyManager#SIM_STATE_CARD_IO_ERROR} 112147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * 112247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville * {@hide} 112347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville */ 112447920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville public static int getSimStateForSubscriber(int subId) { 112547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville int simState; 112647920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville 112747920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville try { 112847920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); 112947920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville simState = iSub.getSimStateForSubscriber(subId); 113047920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville } catch (RemoteException ex) { 113147920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville simState = TelephonyManager.SIM_STATE_UNKNOWN; 113247920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville } 113347920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville logd("getSimStateForSubscriber: simState=" + simState + " subId=" + subId); 113447920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville return simState; 113547920fac33efb7ce4bf33a5691e4af1b67ab6019Wink Saville } 1136fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville} 1137fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville 1138