1655bae990bdd7e4584491def4d30692e6173779cfionaxu/* 2655bae990bdd7e4584491def4d30692e6173779cfionaxu * Copyright (C) 2016 The Android Open Source Project 3655bae990bdd7e4584491def4d30692e6173779cfionaxu * 4655bae990bdd7e4584491def4d30692e6173779cfionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 5655bae990bdd7e4584491def4d30692e6173779cfionaxu * you may not use this file except in compliance with the License. 6655bae990bdd7e4584491def4d30692e6173779cfionaxu * You may obtain a copy of the License at 7655bae990bdd7e4584491def4d30692e6173779cfionaxu * 8655bae990bdd7e4584491def4d30692e6173779cfionaxu * http://www.apache.org/licenses/LICENSE-2.0 9655bae990bdd7e4584491def4d30692e6173779cfionaxu * 10655bae990bdd7e4584491def4d30692e6173779cfionaxu * Unless required by applicable law or agreed to in writing, software 11655bae990bdd7e4584491def4d30692e6173779cfionaxu * distributed under the License is distributed on an "AS IS" BASIS, 12655bae990bdd7e4584491def4d30692e6173779cfionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13655bae990bdd7e4584491def4d30692e6173779cfionaxu * See the License for the specific language governing permissions and 14655bae990bdd7e4584491def4d30692e6173779cfionaxu * limitations under the License. 15655bae990bdd7e4584491def4d30692e6173779cfionaxu */ 16655bae990bdd7e4584491def4d30692e6173779cfionaxupackage com.android.internal.telephony; 17655bae990bdd7e4584491def4d30692e6173779cfionaxu 18655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.app.AppOpsManager; 19655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.content.ContentValues; 20655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.content.Intent; 21655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.database.Cursor; 22655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.database.MatrixCursor; 23655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.net.Uri; 24655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.os.Bundle; 250979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yuimport android.os.UserHandle; 26a03e5552830cfb4214095fd473243bb3f12284aefionaxuimport android.provider.Settings; 27655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.test.mock.MockContentProvider; 28655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.test.mock.MockContentResolver; 29655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.test.suitebuilder.annotation.SmallTest; 30655bae990bdd7e4584491def4d30692e6173779cfionaxuimport static org.junit.Assert.*; 31655bae990bdd7e4584491def4d30692e6173779cfionaxuimport static org.mockito.Mockito.*; 32655bae990bdd7e4584491def4d30692e6173779cfionaxuimport org.junit.After; 33655bae990bdd7e4584491def4d30692e6173779cfionaxuimport org.junit.Before; 34655bae990bdd7e4584491def4d30692e6173779cfionaxuimport org.junit.Test; 35655bae990bdd7e4584491def4d30692e6173779cfionaxuimport org.mockito.ArgumentCaptor; 36655bae990bdd7e4584491def4d30692e6173779cfionaxuimport org.mockito.Mock; 37655bae990bdd7e4584491def4d30692e6173779cfionaxu 38655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.telephony.SubscriptionInfo; 39655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.telephony.SubscriptionManager; 40655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.util.Log; 41655bae990bdd7e4584491def4d30692e6173779cfionaxu 42655bae990bdd7e4584491def4d30692e6173779cfionaxuimport java.util.ArrayList; 43655bae990bdd7e4584491def4d30692e6173779cfionaxuimport java.util.List; 44655bae990bdd7e4584491def4d30692e6173779cfionaxu 45655bae990bdd7e4584491def4d30692e6173779cfionaxupublic class SubscriptionControllerTest extends TelephonyTest { 46655bae990bdd7e4584491def4d30692e6173779cfionaxu 47655bae990bdd7e4584491def4d30692e6173779cfionaxu private static final int SINGLE_SIM = 1; 48655bae990bdd7e4584491def4d30692e6173779cfionaxu private String mCallingPackage; 49655bae990bdd7e4584491def4d30692e6173779cfionaxu private SubscriptionController mSubscriptionControllerUT; 50655bae990bdd7e4584491def4d30692e6173779cfionaxu private MockContentResolver mMockContentResolver; 51655bae990bdd7e4584491def4d30692e6173779cfionaxu 52655bae990bdd7e4584491def4d30692e6173779cfionaxu @Mock private List<SubscriptionInfo> mSubList; 53655bae990bdd7e4584491def4d30692e6173779cfionaxu @Mock private AppOpsManager mAppOps; 54655bae990bdd7e4584491def4d30692e6173779cfionaxu 55655bae990bdd7e4584491def4d30692e6173779cfionaxu public class FakeSubscriptionContentProvider extends MockContentProvider { 56655bae990bdd7e4584491def4d30692e6173779cfionaxu 57655bae990bdd7e4584491def4d30692e6173779cfionaxu private ArrayList<ContentValues> mSubscriptionArray = 58655bae990bdd7e4584491def4d30692e6173779cfionaxu new ArrayList<ContentValues>(); 59655bae990bdd7e4584491def4d30692e6173779cfionaxu 60655bae990bdd7e4584491def4d30692e6173779cfionaxu private String[] mKeyMappingSet = new String[]{ 61655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, 62655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.ICC_ID, SubscriptionManager.SIM_SLOT_INDEX, 63655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.DISPLAY_NAME, SubscriptionManager.CARRIER_NAME, 64655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.NAME_SOURCE, SubscriptionManager.COLOR, 65655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.NUMBER, SubscriptionManager.DISPLAY_NUMBER_FORMAT, 66655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.DATA_ROAMING, SubscriptionManager.MCC, 67655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.MNC, SubscriptionManager.CB_EXTREME_THREAT_ALERT, 68655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.CB_SEVERE_THREAT_ALERT, SubscriptionManager.CB_AMBER_ALERT, 69655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.CB_ALERT_SOUND_DURATION, 70655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.CB_ALERT_REMINDER_INTERVAL, 71655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.CB_ALERT_VIBRATE, SubscriptionManager.CB_ALERT_SPEECH, 72655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionManager.CB_ETWS_TEST_ALERT, SubscriptionManager.CB_CHANNEL_50_ALERT, 73fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu SubscriptionManager.CB_CMAS_TEST_ALERT, SubscriptionManager.CB_OPT_OUT_DIALOG, 74fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu SubscriptionManager.SIM_PROVISIONING_STATUS}; 75655bae990bdd7e4584491def4d30692e6173779cfionaxu 76655bae990bdd7e4584491def4d30692e6173779cfionaxu /* internal util function */ 77655bae990bdd7e4584491def4d30692e6173779cfionaxu private MatrixCursor convertFromContentToCursor(ContentValues initialValues) { 78655bae990bdd7e4584491def4d30692e6173779cfionaxu MatrixCursor cursor = null; 79655bae990bdd7e4584491def4d30692e6173779cfionaxu ArrayList<Object> values = new ArrayList<Object>(); 80655bae990bdd7e4584491def4d30692e6173779cfionaxu 81655bae990bdd7e4584491def4d30692e6173779cfionaxu if (initialValues != null && mKeyMappingSet.length != 0) { 82655bae990bdd7e4584491def4d30692e6173779cfionaxu cursor = new MatrixCursor(mKeyMappingSet); 83655bae990bdd7e4584491def4d30692e6173779cfionaxu /* push value from contentValues to matrixCursors */ 84655bae990bdd7e4584491def4d30692e6173779cfionaxu for (String key : mKeyMappingSet) { 85655bae990bdd7e4584491def4d30692e6173779cfionaxu if (initialValues.containsKey(key)) { 86655bae990bdd7e4584491def4d30692e6173779cfionaxu values.add(initialValues.get(key)); 87655bae990bdd7e4584491def4d30692e6173779cfionaxu } else { 88655bae990bdd7e4584491def4d30692e6173779cfionaxu values.add(null); 89655bae990bdd7e4584491def4d30692e6173779cfionaxu } 90655bae990bdd7e4584491def4d30692e6173779cfionaxu } 91655bae990bdd7e4584491def4d30692e6173779cfionaxu cursor.addRow(values.toArray()); 92655bae990bdd7e4584491def4d30692e6173779cfionaxu } 93655bae990bdd7e4584491def4d30692e6173779cfionaxu return cursor; 94655bae990bdd7e4584491def4d30692e6173779cfionaxu } 95655bae990bdd7e4584491def4d30692e6173779cfionaxu 96655bae990bdd7e4584491def4d30692e6173779cfionaxu @Override 97655bae990bdd7e4584491def4d30692e6173779cfionaxu public int delete(Uri uri, String selection, String[] selectionArgs) { 98655bae990bdd7e4584491def4d30692e6173779cfionaxu if (mSubscriptionArray.size() > 0) { 99655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionArray.remove(0); 100655bae990bdd7e4584491def4d30692e6173779cfionaxu return 1; 101655bae990bdd7e4584491def4d30692e6173779cfionaxu } 102655bae990bdd7e4584491def4d30692e6173779cfionaxu return -1; 103655bae990bdd7e4584491def4d30692e6173779cfionaxu } 104655bae990bdd7e4584491def4d30692e6173779cfionaxu 105655bae990bdd7e4584491def4d30692e6173779cfionaxu @Override 106655bae990bdd7e4584491def4d30692e6173779cfionaxu public Uri insert(Uri uri, ContentValues values) { 107655bae990bdd7e4584491def4d30692e6173779cfionaxu values.put(SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, 0); 108655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionArray.add(values); 109655bae990bdd7e4584491def4d30692e6173779cfionaxu return uri; 110655bae990bdd7e4584491def4d30692e6173779cfionaxu } 111655bae990bdd7e4584491def4d30692e6173779cfionaxu 112655bae990bdd7e4584491def4d30692e6173779cfionaxu @Override 113655bae990bdd7e4584491def4d30692e6173779cfionaxu public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 114655bae990bdd7e4584491def4d30692e6173779cfionaxu String sortOrder) { 115655bae990bdd7e4584491def4d30692e6173779cfionaxu if (mSubscriptionArray.size() > 0) { 116655bae990bdd7e4584491def4d30692e6173779cfionaxu return convertFromContentToCursor(mSubscriptionArray.get(0)); 117655bae990bdd7e4584491def4d30692e6173779cfionaxu } 118655bae990bdd7e4584491def4d30692e6173779cfionaxu return null; 119655bae990bdd7e4584491def4d30692e6173779cfionaxu } 120655bae990bdd7e4584491def4d30692e6173779cfionaxu 121655bae990bdd7e4584491def4d30692e6173779cfionaxu @Override 122655bae990bdd7e4584491def4d30692e6173779cfionaxu public Bundle call(String method, String request, Bundle args) { 123655bae990bdd7e4584491def4d30692e6173779cfionaxu return null; 124655bae990bdd7e4584491def4d30692e6173779cfionaxu } 125655bae990bdd7e4584491def4d30692e6173779cfionaxu 126655bae990bdd7e4584491def4d30692e6173779cfionaxu @Override 127655bae990bdd7e4584491def4d30692e6173779cfionaxu public int update(android.net.Uri uri, android.content.ContentValues values, 128655bae990bdd7e4584491def4d30692e6173779cfionaxu java.lang.String selection, java.lang.String[] selectionArgs) { 129655bae990bdd7e4584491def4d30692e6173779cfionaxu if (mSubscriptionArray.size() > 0) { 130655bae990bdd7e4584491def4d30692e6173779cfionaxu ContentValues val = mSubscriptionArray.get(0); 131655bae990bdd7e4584491def4d30692e6173779cfionaxu for (String key : values.keySet()) { 132655bae990bdd7e4584491def4d30692e6173779cfionaxu val.put(key, values.getAsString(key)); 133655bae990bdd7e4584491def4d30692e6173779cfionaxu Log.d(TAG, "update the values..." + key + "..." + values.getAsString(key)); 134655bae990bdd7e4584491def4d30692e6173779cfionaxu } 135655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionArray.set(0, val); 136655bae990bdd7e4584491def4d30692e6173779cfionaxu return 1; 137655bae990bdd7e4584491def4d30692e6173779cfionaxu } 138655bae990bdd7e4584491def4d30692e6173779cfionaxu return -1; 139655bae990bdd7e4584491def4d30692e6173779cfionaxu } 140655bae990bdd7e4584491def4d30692e6173779cfionaxu } 141655bae990bdd7e4584491def4d30692e6173779cfionaxu 142655bae990bdd7e4584491def4d30692e6173779cfionaxu @Before 143655bae990bdd7e4584491def4d30692e6173779cfionaxu public void setUp() throws Exception { 144655bae990bdd7e4584491def4d30692e6173779cfionaxu super.setUp("SubscriptionControllerTest"); 145655bae990bdd7e4584491def4d30692e6173779cfionaxu 146655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(SINGLE_SIM).when(mTelephonyManager).getSimCount(); 147655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(SINGLE_SIM).when(mTelephonyManager).getPhoneCount(); 148655bae990bdd7e4584491def4d30692e6173779cfionaxu 149655bae990bdd7e4584491def4d30692e6173779cfionaxu replaceInstance(SubscriptionController.class, "sInstance", null, null); 150655bae990bdd7e4584491def4d30692e6173779cfionaxu 151655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionController.init(mContext, null); 152655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT = SubscriptionController.getInstance(); 153655bae990bdd7e4584491def4d30692e6173779cfionaxu mCallingPackage = mContext.getOpPackageName(); 154655bae990bdd7e4584491def4d30692e6173779cfionaxu 155655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(1).when(mProxyController).getMaxRafSupported(); 156655bae990bdd7e4584491def4d30692e6173779cfionaxu mContextFixture.putIntArrayResource(com.android.internal.R.array.sim_colors, new int[]{5}); 157655bae990bdd7e4584491def4d30692e6173779cfionaxu 158655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getInstance().updatePhonesAvailability(new Phone[]{mPhone}); 159655bae990bdd7e4584491def4d30692e6173779cfionaxu mMockContentResolver = (MockContentResolver) mContext.getContentResolver(); 160655bae990bdd7e4584491def4d30692e6173779cfionaxu mMockContentResolver.addProvider(SubscriptionManager.CONTENT_URI.getAuthority(), 161655bae990bdd7e4584491def4d30692e6173779cfionaxu new FakeSubscriptionContentProvider()); 162655bae990bdd7e4584491def4d30692e6173779cfionaxu } 163655bae990bdd7e4584491def4d30692e6173779cfionaxu 164655bae990bdd7e4584491def4d30692e6173779cfionaxu @After 165655bae990bdd7e4584491def4d30692e6173779cfionaxu public void tearDown() throws Exception { 166655bae990bdd7e4584491def4d30692e6173779cfionaxu /* should clear fake content provider and resolver here */ 167655bae990bdd7e4584491def4d30692e6173779cfionaxu mContext.getContentResolver().delete(SubscriptionManager.CONTENT_URI, null, null); 168a03e5552830cfb4214095fd473243bb3f12284aefionaxu 169a03e5552830cfb4214095fd473243bb3f12284aefionaxu /* clear settings for default voice/data/sms sub ID */ 170a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.putInt(mContext.getContentResolver(), 171a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, 172a03e5552830cfb4214095fd473243bb3f12284aefionaxu SubscriptionManager.INVALID_SUBSCRIPTION_ID); 173a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.putInt(mContext.getContentResolver(), 174a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, 175a03e5552830cfb4214095fd473243bb3f12284aefionaxu SubscriptionManager.INVALID_SUBSCRIPTION_ID); 176a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.putInt(mContext.getContentResolver(), 177a03e5552830cfb4214095fd473243bb3f12284aefionaxu Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION, 178a03e5552830cfb4214095fd473243bb3f12284aefionaxu SubscriptionManager.INVALID_SUBSCRIPTION_ID); 179a03e5552830cfb4214095fd473243bb3f12284aefionaxu 180655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT = null; 181655bae990bdd7e4584491def4d30692e6173779cfionaxu super.tearDown(); 182655bae990bdd7e4584491def4d30692e6173779cfionaxu } 183655bae990bdd7e4584491def4d30692e6173779cfionaxu 184655bae990bdd7e4584491def4d30692e6173779cfionaxu @Test @SmallTest 185655bae990bdd7e4584491def4d30692e6173779cfionaxu public void testInsertSim() { 186655bae990bdd7e4584491def4d30692e6173779cfionaxu int slotID = mSubscriptionControllerUT.getAllSubInfoCount(mCallingPackage); 187655bae990bdd7e4584491def4d30692e6173779cfionaxu 188655bae990bdd7e4584491def4d30692e6173779cfionaxu //verify there is no sim inserted in the SubscriptionManager 189655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, slotID); 190655bae990bdd7e4584491def4d30692e6173779cfionaxu 191655bae990bdd7e4584491def4d30692e6173779cfionaxu //insert one Subscription Info 192655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.addSubInfoRecord("test", slotID); 193655bae990bdd7e4584491def4d30692e6173779cfionaxu 194655bae990bdd7e4584491def4d30692e6173779cfionaxu //verify there is one sim 195655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mSubscriptionControllerUT.getAllSubInfoCount(mCallingPackage)); 196655bae990bdd7e4584491def4d30692e6173779cfionaxu 197655bae990bdd7e4584491def4d30692e6173779cfionaxu //sanity for slot id and sub id 198655bae990bdd7e4584491def4d30692e6173779cfionaxu List<SubscriptionInfo> mSubList = mSubscriptionControllerUT 199655bae990bdd7e4584491def4d30692e6173779cfionaxu .getActiveSubscriptionInfoList(mCallingPackage); 200655bae990bdd7e4584491def4d30692e6173779cfionaxu assertTrue(mSubList != null && mSubList.size() > 0); 201655bae990bdd7e4584491def4d30692e6173779cfionaxu for (int i = 0; i < mSubList.size(); i++) { 202655bae990bdd7e4584491def4d30692e6173779cfionaxu assertTrue(SubscriptionManager.isValidSubscriptionId( 203655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubList.get(i).getSubscriptionId())); 20482e8da62fe3f83f29d834636b8da5ce6803204e3Sanket Padawe assertTrue(SubscriptionManager.isValidSlotIndex(mSubList.get(i).getSimSlotIndex())); 205655bae990bdd7e4584491def4d30692e6173779cfionaxu } 206655bae990bdd7e4584491def4d30692e6173779cfionaxu } 207655bae990bdd7e4584491def4d30692e6173779cfionaxu 208655bae990bdd7e4584491def4d30692e6173779cfionaxu @Test @SmallTest 209655bae990bdd7e4584491def4d30692e6173779cfionaxu public void testChangeSIMProperty() { 210655bae990bdd7e4584491def4d30692e6173779cfionaxu int dataRoaming = 1; 211655bae990bdd7e4584491def4d30692e6173779cfionaxu int iconTint = 1; 212655bae990bdd7e4584491def4d30692e6173779cfionaxu String disName = "TESTING"; 213655bae990bdd7e4584491def4d30692e6173779cfionaxu String disNum = "12345"; 214655bae990bdd7e4584491def4d30692e6173779cfionaxu 215655bae990bdd7e4584491def4d30692e6173779cfionaxu testInsertSim(); 216655bae990bdd7e4584491def4d30692e6173779cfionaxu /* Get SUB ID */ 217655bae990bdd7e4584491def4d30692e6173779cfionaxu int[] subIds = mSubscriptionControllerUT.getActiveSubIdList(); 218655bae990bdd7e4584491def4d30692e6173779cfionaxu assertTrue(subIds != null && subIds.length != 0); 219655bae990bdd7e4584491def4d30692e6173779cfionaxu int subID = subIds[0]; 220655bae990bdd7e4584491def4d30692e6173779cfionaxu 221655bae990bdd7e4584491def4d30692e6173779cfionaxu /* Setting */ 222655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.setDisplayName(disName, subID); 223655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.setDataRoaming(dataRoaming, subID); 224655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.setDisplayNumber(disNum, subID); 225655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.setIconTint(iconTint, subID); 226655bae990bdd7e4584491def4d30692e6173779cfionaxu 227655bae990bdd7e4584491def4d30692e6173779cfionaxu /* Getting, there is no direct getter function for each fields of property */ 228655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionInfo subInfo = mSubscriptionControllerUT 229655bae990bdd7e4584491def4d30692e6173779cfionaxu .getActiveSubscriptionInfo(subID, mCallingPackage); 230655bae990bdd7e4584491def4d30692e6173779cfionaxu assertNotNull(subInfo); 231655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(dataRoaming, subInfo.getDataRoaming()); 232655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(disName, subInfo.getDisplayName()); 233655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(iconTint, subInfo.getIconTint()); 234655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(disNum, subInfo.getNumber()); 235655bae990bdd7e4584491def4d30692e6173779cfionaxu 236655bae990bdd7e4584491def4d30692e6173779cfionaxu /* verify broadcast intent */ 2370979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); 2380979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mContext, atLeast(1)).sendBroadcast(captorIntent.capture()); 239655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED, 2400979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu captorIntent.getValue().getAction()); 241655bae990bdd7e4584491def4d30692e6173779cfionaxu } 242655bae990bdd7e4584491def4d30692e6173779cfionaxu 243655bae990bdd7e4584491def4d30692e6173779cfionaxu @Test @SmallTest 244655bae990bdd7e4584491def4d30692e6173779cfionaxu public void testCleanUpSIM() { 245655bae990bdd7e4584491def4d30692e6173779cfionaxu testInsertSim(); 246655bae990bdd7e4584491def4d30692e6173779cfionaxu assertFalse(mSubscriptionControllerUT.isActiveSubId(1)); 247655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.clearSubInfo(); 248655bae990bdd7e4584491def4d30692e6173779cfionaxu assertFalse(mSubscriptionControllerUT.isActiveSubId(0)); 249655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(SubscriptionManager.SIM_NOT_INSERTED, 25082e8da62fe3f83f29d834636b8da5ce6803204e3Sanket Padawe mSubscriptionControllerUT.getSlotIndex(0)); 251655bae990bdd7e4584491def4d30692e6173779cfionaxu } 252655bae990bdd7e4584491def4d30692e6173779cfionaxu 253655bae990bdd7e4584491def4d30692e6173779cfionaxu @Test @SmallTest 254655bae990bdd7e4584491def4d30692e6173779cfionaxu public void testDefaultSubID() { 255655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 256655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getDefaultDataSubId()); 257655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 258655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getDefaultSmsSubId()); 259655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 260655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getDefaultSmsSubId()); 261655bae990bdd7e4584491def4d30692e6173779cfionaxu /* insert one sim */ 262655bae990bdd7e4584491def4d30692e6173779cfionaxu testInsertSim(); 263655bae990bdd7e4584491def4d30692e6173779cfionaxu // if support single sim, sms/data/voice default sub should be the same 264655bae990bdd7e4584491def4d30692e6173779cfionaxu assertNotSame(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 265655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getDefaultSubId()); 266655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(mSubscriptionControllerUT.getDefaultDataSubId(), 267a03e5552830cfb4214095fd473243bb3f12284aefionaxu mSubscriptionControllerUT.getDefaultSmsSubId()); 268a03e5552830cfb4214095fd473243bb3f12284aefionaxu assertEquals(mSubscriptionControllerUT.getDefaultDataSubId(), 269655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.getDefaultVoiceSubId()); 270655bae990bdd7e4584491def4d30692e6173779cfionaxu } 271655bae990bdd7e4584491def4d30692e6173779cfionaxu 272655bae990bdd7e4584491def4d30692e6173779cfionaxu @Test @SmallTest 273655bae990bdd7e4584491def4d30692e6173779cfionaxu public void testSetGetMCCMNC() { 274655bae990bdd7e4584491def4d30692e6173779cfionaxu testInsertSim(); 275655bae990bdd7e4584491def4d30692e6173779cfionaxu String mCcMncVERIZON = "310004"; 276655bae990bdd7e4584491def4d30692e6173779cfionaxu mSubscriptionControllerUT.setMccMnc(mCcMncVERIZON, 0); 277655bae990bdd7e4584491def4d30692e6173779cfionaxu 278655bae990bdd7e4584491def4d30692e6173779cfionaxu SubscriptionInfo subInfo = mSubscriptionControllerUT 279655bae990bdd7e4584491def4d30692e6173779cfionaxu .getActiveSubscriptionInfo(0, mCallingPackage); 280655bae990bdd7e4584491def4d30692e6173779cfionaxu assertNotNull(subInfo); 281655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(Integer.parseInt(mCcMncVERIZON.substring(0, 3)), subInfo.getMcc()); 282655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(Integer.parseInt(mCcMncVERIZON.substring(3)), subInfo.getMnc()); 283655bae990bdd7e4584491def4d30692e6173779cfionaxu 284655bae990bdd7e4584491def4d30692e6173779cfionaxu /* verify broadcast intent */ 2850979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); 2860979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mContext, atLeast(1)).sendBroadcast(captorIntent.capture()); 287655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED, 2880979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu captorIntent.getValue().getAction()); 2890979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu } 2900979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 2910979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @Test 2920979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @SmallTest 2930979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu public void testSetDefaultDataSubId() throws Exception { 2940979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu doReturn(1).when(mPhone).getSubId(); 2950979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 2960979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mSubscriptionControllerUT.setDefaultDataSubId(1); 2970979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 2980979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mPhone, times(1)).updateDataConnectionTracker(); 2990979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); 3000979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mContext, times(1)).sendStickyBroadcastAsUser( 3010979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu captorIntent.capture(), eq(UserHandle.ALL)); 3020979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 3030979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu Intent intent = captorIntent.getValue(); 3040979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertEquals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED, intent.getAction()); 3050979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 3060979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu Bundle b = intent.getExtras(); 3070979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 3080979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertTrue(b.containsKey(PhoneConstants.SUBSCRIPTION_KEY)); 3090979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertEquals(1, b.getInt(PhoneConstants.SUBSCRIPTION_KEY)); 310655bae990bdd7e4584491def4d30692e6173779cfionaxu } 311655bae990bdd7e4584491def4d30692e6173779cfionaxu} 312