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()));
204655bae990bdd7e4584491def4d30692e6173779cfionaxu            assertTrue(SubscriptionManager.isValidSlotId(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,
250655bae990bdd7e4584491def4d30692e6173779cfionaxu                mSubscriptionControllerUT.getSlotId(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