132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan/* 22f2dba9413a3f14da0bcf45031986eb78f007dd8fionaxu * Copyright (C) 2016 The Android Open Source Project 332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * 432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * you may not use this file except in compliance with the License. 632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * You may obtain a copy of the License at 732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * 832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * 1032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * Unless required by applicable law or agreed to in writing, software 1132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 1232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * See the License for the specific language governing permissions and 1432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan * limitations under the License. 1532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan */ 1632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 1732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanpackage com.android.internal.telephony; 1832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 195eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastryimport static org.junit.Assert.fail; 20e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Matchers.anyBoolean; 21e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Matchers.anyLong; 22e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Matchers.anyString; 23e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Mockito.any; 24e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Mockito.anyInt; 25e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Mockito.doAnswer; 26e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Mockito.doReturn; 27e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport static org.mockito.Mockito.eq; 28e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry 29655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.app.ActivityManagerNative; 30655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.app.IActivityManager; 3132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.content.Context; 321bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yuimport android.content.IIntentSender; 331bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yuimport android.content.Intent; 34153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajanimport android.content.SharedPreferences; 356ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxuimport android.content.pm.PackageInfo; 366ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxuimport android.content.pm.PackageManager; 37871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajanimport android.database.Cursor; 38e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport android.os.Bundle; 39b9d551db1795b30598e2ce98cfae7106788c12d6fionaxuimport android.os.Handler; 401bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yuimport android.os.IBinder; 4132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.os.IDeviceIdleController; 4232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.os.RegistrantList; 43ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxuimport android.os.ServiceManager; 44e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport android.provider.BlockedNumberContract; 4532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.telephony.ServiceState; 461fe1dbf473755c4e812a1218f331759eccacb447Jack Yuimport android.telephony.TelephonyManager; 474c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport android.telephony.SubscriptionManager; 48e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport android.test.mock.MockContentProvider; 49e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport android.test.mock.MockContentResolver; 5032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.util.Log; 51655bae990bdd7e4584491def4d30692e6173779cfionaxuimport android.util.Singleton; 52f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajanimport android.util.SparseArray; 5332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 54f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport com.android.ims.ImsCall; 55f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport com.android.ims.ImsCallProfile; 5675ba09a17a669f4906268088a769836aa87d8241fionaxuimport com.android.ims.ImsEcbm; 5732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.ims.ImsManager; 5832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; 59dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport com.android.internal.telephony.cdma.EriManager; 6032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.dataconnection.DcTracker; 61e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajanimport com.android.internal.telephony.imsphone.ImsExternalCallTracker; 62f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport com.android.internal.telephony.imsphone.ImsPhone; 63f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport com.android.internal.telephony.imsphone.ImsPhoneCallTracker; 64ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxuimport com.android.internal.telephony.mocks.TelephonyRegistryMock; 6532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommands; 6632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommandsVerifier; 6732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.uicc.IccCardProxy; 68655bae990bdd7e4584491def4d30692e6173779cfionaxuimport com.android.internal.telephony.uicc.IccRecords; 69e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport com.android.internal.telephony.uicc.IsimUiccRecords; 70153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajanimport com.android.internal.telephony.uicc.RuimRecords; 71153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajanimport com.android.internal.telephony.uicc.SIMRecords; 7278867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajanimport com.android.internal.telephony.uicc.UiccCardApplication; 7332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport com.android.internal.telephony.uicc.UiccController; 7432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 7532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport org.mockito.Mock; 7632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport org.mockito.MockitoAnnotations; 77e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport org.mockito.invocation.InvocationOnMock; 78e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport org.mockito.stubbing.Answer; 7932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 8032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport java.lang.reflect.Field; 8132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport java.util.HashMap; 82e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport java.util.HashSet; 839c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport java.util.Iterator; 849c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport java.util.LinkedList; 85e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastryimport java.util.Set; 8632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 8732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanpublic abstract class TelephonyTest { 8832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected static String TAG; 8932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 9032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 91f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan protected GsmCdmaPhone mPhone; 9232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 93f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu protected ImsPhone mImsPhone; 94f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 9532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected ServiceStateTracker mSST; 9632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 9732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected GsmCdmaCallTracker mCT; 9832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 99f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu protected ImsPhoneCallTracker mImsCT; 100f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 10132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected UiccController mUiccController; 10232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 10332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected IccCardProxy mIccCardProxy; 10432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 10532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected CallManager mCallManager; 10632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 10732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected PhoneNotifier mNotifier; 10832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 10932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected TelephonyComponentFactory mTelephonyComponentFactory; 11032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 11132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected CdmaSubscriptionSourceManager mCdmaSSM; 11232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 11332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected RegistrantList mRegistrantList; 11432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 11532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected IccPhoneBookInterfaceManager mIccPhoneBookIntManager; 11632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 11775ba09a17a669f4906268088a769836aa87d8241fionaxu protected ImsManager mImsManager; 11832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 11932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected DcTracker mDcTracker; 12032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 1214a9f066fbcbd20e2ea3ca3cbc914f81b230e3825fionaxu protected GsmCdmaCall mGsmCdmaCall; 1224a9f066fbcbd20e2ea3ca3cbc914f81b230e3825fionaxu @Mock 123f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu protected ImsCall mImsCall; 124f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 125f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu protected ImsCallProfile mImsCallProfile; 126f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 12775ba09a17a669f4906268088a769836aa87d8241fionaxu protected ImsEcbm mImsEcbm; 12875ba09a17a669f4906268088a769836aa87d8241fionaxu @Mock 12932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected SubscriptionController mSubscriptionController; 13032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 13132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected ServiceState mServiceState; 13232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 13332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected SimulatedCommandsVerifier mSimulatedCommandsVerifier; 13432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan @Mock 13532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected IDeviceIdleController mIDeviceIdleController; 13660a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan @Mock 13760a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan protected InboundSmsHandler mInboundSmsHandler; 13860a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan @Mock 13960a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan protected WspTypeDecoder mWspTypeDecoder; 140f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan @Mock 141153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected UiccCardApplication mUiccCardApplication3gpp; 14278867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan @Mock 143153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected UiccCardApplication mUiccCardApplication3gpp2; 144153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Mock 145153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected UiccCardApplication mUiccCardApplicationIms; 146153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Mock 147153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected SIMRecords mSimRecords; 148153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Mock 149153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected RuimRecords mRuimRecords; 150153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Mock 151153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan protected IsimUiccRecords mIsimUiccRecords; 152655bae990bdd7e4584491def4d30692e6173779cfionaxu @Mock 153655bae990bdd7e4584491def4d30692e6173779cfionaxu protected ProxyController mProxyController; 154655bae990bdd7e4584491def4d30692e6173779cfionaxu @Mock 155217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan protected Singleton<IActivityManager> mIActivityManagerSingleton; 156217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan @Mock 157217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan protected IActivityManager mIActivityManager; 15827f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan @Mock 15927f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan protected InboundSmsTracker mInboundSmsTracker; 1601bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu @Mock 1611bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu protected IIntentSender mIIntentSender; 1621bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu @Mock 1631bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu protected IBinder mIBinder; 1646ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu @Mock 1656ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu protected SmsStorageMonitor mSmsStorageMonitor; 1666ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu @Mock 1676ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu protected SmsUsageMonitor mSmsUsageMonitor; 1686ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu @Mock 1696ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu protected PackageInfo mPackageInfo; 170dbe4d7749d5524be575f629486874acdae721138Amit Mahajan @Mock 171dbe4d7749d5524be575f629486874acdae721138Amit Mahajan protected EriManager mEriManager; 1727a1c1b02c8603c2bf2f3b401facb389528180eedPavel Zhamaitsiak @Mock 1737a1c1b02c8603c2bf2f3b401facb389528180eedPavel Zhamaitsiak protected IBinder mConnMetLoggerBinder; 1744c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Mock 1754c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu protected CarrierSignalAgent mCarrierSignalAgent; 176e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan @Mock 177e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan protected ImsExternalCallTracker mImsExternalCallTracker; 17832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 179af59a35e945d60fc9ffb305c494a695b35b8a942fionaxu protected TelephonyManager mTelephonyManager; 1804c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu protected SubscriptionManager mSubscriptionManager; 1814c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu protected PackageManager mPackageManager; 18232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected SimulatedCommands mSimulatedCommands; 18332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected ContextFixture mContextFixture; 184f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan protected Context mContext; 185e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry protected FakeBlockedNumberContentProvider mFakeBlockedNumberContentProvider; 186f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan private Object mLock = new Object(); 187f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan private boolean mReady; 188ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxu protected HashMap<String, IBinder> mServiceManagerMockedServices = new HashMap<>(); 189ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxu 190f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan 19175ba09a17a669f4906268088a769836aa87d8241fionaxu protected HashMap<Integer, ImsManager> mImsManagerInstances = new HashMap<>(); 1929c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu private HashMap<InstanceKey, Object> mOldInstances = new HashMap<InstanceKey, Object>(); 1939c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 1949c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu private LinkedList<InstanceKey> mInstanceKeys = new LinkedList<InstanceKey>(); 1959c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 1969c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu private class InstanceKey { 1979c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public final Class mClass; 1989c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public final String mInstName; 1999c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public final Object mObj; 2009c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu InstanceKey(final Class c, final String instName, final Object obj) { 2019c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mClass = c; 2029c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mInstName = instName; 2039c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mObj = obj; 2049c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2059c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 2069c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu @Override 2079c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public int hashCode() { 2089c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31; 2099c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2109c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 2119c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu @Override 2129c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public boolean equals(Object obj) { 2139c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu if (obj == null || obj.getClass() != getClass()) { 2149c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu return false; 2159c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2169c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 2179c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu InstanceKey other = (InstanceKey) obj; 218655bae990bdd7e4584491def4d30692e6173779cfionaxu return (other.mClass == mClass && other.mInstName.equals(mInstName) 219655bae990bdd7e4584491def4d30692e6173779cfionaxu && other.mObj == mObj); 2209c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2219c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 22232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 22332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected void waitUntilReady() { 224655bae990bdd7e4584491def4d30692e6173779cfionaxu while (true) { 22532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan synchronized (mLock) { 22632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan if (mReady) { 22732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan break; 22832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 22932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 23032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 23132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 23232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 23332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected void setReady(boolean ready) { 23432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan synchronized (mLock) { 23532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mReady = ready; 23632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 23732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 23832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2399c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu protected synchronized void replaceInstance(final Class c, final String instanceName, 2409c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu final Object obj, final Object newValue) 2419c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu throws Exception { 2429c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu Field field = c.getDeclaredField(instanceName); 24321e1b42d578d90611f76c37d58841543821502fdJack Yu field.setAccessible(true); 24432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2459c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu InstanceKey key = new InstanceKey(c, instanceName, obj); 2469c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu if (!mOldInstances.containsKey(key)) { 2479c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mOldInstances.put(key, field.get(obj)); 2489c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mInstanceKeys.add(key); 2499c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2509c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu field.set(obj, newValue); 2519c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 25232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2539c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu protected synchronized void restoreInstance(final Class c, final String instanceName, 2549c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu final Object obj) throws Exception { 2559c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu InstanceKey key = new InstanceKey(c, instanceName, obj); 2569c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu if (mOldInstances.containsKey(key)) { 2579c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu Field field = c.getDeclaredField(instanceName); 2589c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu field.setAccessible(true); 2599c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu field.set(obj, mOldInstances.get(key)); 2609c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mOldInstances.remove(key); 2619c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mInstanceKeys.remove(key); 2629c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 2639c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 26432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2659c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu protected synchronized void restoreInstances() throws Exception { 2669c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu Iterator<InstanceKey> it = mInstanceKeys.descendingIterator(); 26732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2689c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu while (it.hasNext()) { 2699c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu InstanceKey key = it.next(); 2709c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu Field field = key.mClass.getDeclaredField(key.mInstName); 2719c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu field.setAccessible(true); 2729c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu field.set(key.mObj, mOldInstances.get(key)); 2739c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 274f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan 2759c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mInstanceKeys.clear(); 2769c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mOldInstances.clear(); 2779c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 27832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 2799c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu protected void setUp(String tag) throws Exception { 2809c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu TAG = tag; 2819c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu MockitoAnnotations.initMocks(this); 28221e1b42d578d90611f76c37d58841543821502fdJack Yu 2839c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu //Use reflection to mock singletons 2849c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(CallManager.class, "INSTANCE", null, mCallManager); 2859c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(TelephonyComponentFactory.class, "sInstance", null, 2869c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mTelephonyComponentFactory); 2879c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(UiccController.class, "mInstance", null, mUiccController); 2889c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(CdmaSubscriptionSourceManager.class, "sInstance", null, mCdmaSSM); 2899c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(ImsManager.class, "sImsManagerInstances", null, mImsManagerInstances); 2909c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(SubscriptionController.class, "sInstance", null, mSubscriptionController); 291655bae990bdd7e4584491def4d30692e6173779cfionaxu replaceInstance(ProxyController.class, "sProxyController", null, mProxyController); 292217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan replaceInstance(ActivityManagerNative.class, "gDefault", null, mIActivityManagerSingleton); 2939c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(CdmaSubscriptionSourceManager.class, 2949c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu "mCdmaSubscriptionSourceChangedRegistrants", mCdmaSSM, mRegistrantList); 2959c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(SimulatedCommandsVerifier.class, "sInstance", null, 2969c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mSimulatedCommandsVerifier); 297325ea5a0aa71b9ff6134be71a84a7e1a288c70cbJack Yu replaceInstance(Singleton.class, "mInstance", mIActivityManagerSingleton, 298325ea5a0aa71b9ff6134be71a84a7e1a288c70cbJack Yu mIActivityManager); 299ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxu replaceInstance(ServiceManager.class, "sCache", null, mServiceManagerMockedServices); 30032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 30132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mSimulatedCommands = new SimulatedCommands(); 30232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mContextFixture = new ContextFixture(); 303f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan mContext = mContextFixture.getTestDouble(); 304e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry mFakeBlockedNumberContentProvider = new FakeBlockedNumberContentProvider(); 305e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry ((MockContentResolver)mContext.getContentResolver()).addProvider( 306e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry BlockedNumberContract.AUTHORITY, mFakeBlockedNumberContentProvider); 30732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhone.mCi = mSimulatedCommands; 3089c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mCT.mCi = mSimulatedCommands; 309af59a35e945d60fc9ffb305c494a695b35b8a942fionaxu mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 3104c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mSubscriptionManager = (SubscriptionManager) mContext.getSystemService( 3114c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu Context.TELEPHONY_SUBSCRIPTION_SERVICE); 3124c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mPackageManager = mContext.getPackageManager(); 31332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 3149c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(TelephonyManager.class, "sInstance", null, 3159c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mContext.getSystemService(Context.TELEPHONY_SERVICE)); 3161fe1dbf473755c4e812a1218f331759eccacb447Jack Yu 317217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan //mTelephonyComponentFactory 318655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mSST).when(mTelephonyComponentFactory) 319655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeServiceStateTracker(any(GsmCdmaPhone.class), any(CommandsInterface.class)); 320655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mIccCardProxy).when(mTelephonyComponentFactory) 321655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeIccCardProxy(any(Context.class), any(CommandsInterface.class), anyInt()); 322655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mCT).when(mTelephonyComponentFactory) 323655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeGsmCdmaCallTracker(any(GsmCdmaPhone.class)); 324655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mIccPhoneBookIntManager).when(mTelephonyComponentFactory) 325655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeIccPhoneBookInterfaceManager(any(Phone.class)); 326655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mDcTracker).when(mTelephonyComponentFactory) 327655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeDcTracker(any(Phone.class)); 328655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mWspTypeDecoder).when(mTelephonyComponentFactory) 329655bae990bdd7e4584491def4d30692e6173779cfionaxu .makeWspTypeDecoder(any(byte[].class)); 33027f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) 33127f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan .makeInboundSmsTracker(any(byte[].class), anyLong(), anyInt(), anyBoolean(), 3326e4abd849e12860a7459f7ec74496ca02b9d7ee0Amit Mahajan anyBoolean(), anyString(), anyString()); 33327f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) 33427f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan .makeInboundSmsTracker(any(byte[].class), anyLong(), anyInt(), anyBoolean(), 3356e4abd849e12860a7459f7ec74496ca02b9d7ee0Amit Mahajan anyString(), anyInt(), anyInt(), anyInt(), anyBoolean(), anyString()); 336871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) 337871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan .makeInboundSmsTracker(any(Cursor.class), anyBoolean()); 338ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan doReturn(mImsCT).when(mTelephonyComponentFactory) 339ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan .makeImsPhoneCallTracker(any(ImsPhone.class)); 340655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mCdmaSSM).when(mTelephonyComponentFactory) 341655bae990bdd7e4584491def4d30692e6173779cfionaxu .getCdmaSubscriptionSourceManagerInstance(any(Context.class), 342b9d551db1795b30598e2ce98cfae7106788c12d6fionaxu any(CommandsInterface.class), any(Handler.class), 34378867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan anyInt(), any(Object.class)); 34427f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan doReturn(mIDeviceIdleController).when(mTelephonyComponentFactory) 34527f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan .getIDeviceIdleController(); 346e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan doReturn(mImsExternalCallTracker).when(mTelephonyComponentFactory). 347e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan makeImsExternalCallTracker(any(ImsPhone.class)); 34878867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 349217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan //mPhone 35078867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan doReturn(mContext).when(mPhone).getContext(); 351f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(mContext).when(mImsPhone).getContext(); 35278867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan doReturn(true).when(mPhone).getUnitTestMode(); 353217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(mIccCardProxy).when(mPhone).getIccCard(); 354217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(mServiceState).when(mPhone).getServiceState(); 355e415b7b5ae3afec0b7a24d85b930e8cca47499a6fionaxu doReturn(mServiceState).when(mImsPhone).getServiceState(); 356a8f5a859f8e4a15902d729af5d2edc9a9433ba41Jack Yu doReturn(mPhone).when(mImsPhone).getDefaultPhone(); 357217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(true).when(mPhone).isPhoneTypeGsm(); 358217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType(); 35927b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(mCT).when(mPhone).getCallTracker(); 36027b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(mSST).when(mPhone).getServiceStateTracker(); 3614c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doReturn(mCarrierSignalAgent).when(mPhone).getCarrierSignalAgent(); 362dbe4d7749d5524be575f629486874acdae721138Amit Mahajan mPhone.mEriManager = mEriManager; 36332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 364217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan //mUiccController 365153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mUiccCardApplication3gpp).when(mUiccController).getUiccCardApplication(anyInt(), 366153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan eq(UiccController.APP_FAM_3GPP)); 367153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mUiccCardApplication3gpp2).when(mUiccController).getUiccCardApplication(anyInt(), 368153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan eq(UiccController.APP_FAM_3GPP2)); 369153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mUiccCardApplicationIms).when(mUiccController).getUiccCardApplication(anyInt(), 370153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan eq(UiccController.APP_FAM_IMS)); 37178867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 37227b650c406018355a88a41528db7859e232728a0Jack Yu doAnswer(new Answer<IccRecords>() { 37327b650c406018355a88a41528db7859e232728a0Jack Yu public IccRecords answer(InvocationOnMock invocation) { 37427b650c406018355a88a41528db7859e232728a0Jack Yu switch ((Integer) invocation.getArguments()[1]) { 37527b650c406018355a88a41528db7859e232728a0Jack Yu case UiccController.APP_FAM_3GPP: 37627b650c406018355a88a41528db7859e232728a0Jack Yu return mSimRecords; 37727b650c406018355a88a41528db7859e232728a0Jack Yu case UiccController.APP_FAM_3GPP2: 37827b650c406018355a88a41528db7859e232728a0Jack Yu return mRuimRecords; 37927b650c406018355a88a41528db7859e232728a0Jack Yu case UiccController.APP_FAM_IMS: 38027b650c406018355a88a41528db7859e232728a0Jack Yu return mIsimUiccRecords; 38127b650c406018355a88a41528db7859e232728a0Jack Yu default: 38227b650c406018355a88a41528db7859e232728a0Jack Yu logd("Unrecognized family " + invocation.getArguments()[1]); 38327b650c406018355a88a41528db7859e232728a0Jack Yu return null; 38427b650c406018355a88a41528db7859e232728a0Jack Yu } 38527b650c406018355a88a41528db7859e232728a0Jack Yu } 38627b650c406018355a88a41528db7859e232728a0Jack Yu }).when(mUiccController).getIccRecords(anyInt(), anyInt()); 38727b650c406018355a88a41528db7859e232728a0Jack Yu 388217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan //UiccCardApplication 389153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mSimRecords).when(mUiccCardApplication3gpp).getIccRecords(); 390153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mRuimRecords).when(mUiccCardApplication3gpp2).getIccRecords(); 391153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(mIsimUiccRecords).when(mUiccCardApplicationIms).getIccRecords(); 392217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan 393217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan //mIccCardProxy 394655bae990bdd7e4584491def4d30692e6173779cfionaxu doReturn(mSimRecords).when(mIccCardProxy).getIccRecords(); 395655bae990bdd7e4584491def4d30692e6173779cfionaxu doAnswer(new Answer<IccRecords>() { 396655bae990bdd7e4584491def4d30692e6173779cfionaxu public IccRecords answer(InvocationOnMock invocation) { 397655bae990bdd7e4584491def4d30692e6173779cfionaxu return (mPhone.isPhoneTypeGsm()) ? mSimRecords : mRuimRecords; 398655bae990bdd7e4584491def4d30692e6173779cfionaxu } 399655bae990bdd7e4584491def4d30692e6173779cfionaxu }).when(mIccCardProxy).getIccRecords(); 40078867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 4016ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu //SMS 4026ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu doReturn(true).when(mSmsStorageMonitor).isStorageAvailable(); 4036ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu doReturn(true).when(mSmsUsageMonitor).check(anyString(), anyInt()); 4046ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(), anyBoolean()); 4056ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu doReturn(true).when(mTelephonyManager).getSmsSendCapableForPhone( 4066ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu anyInt(), anyBoolean()); 4076ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu 40827b650c406018355a88a41528db7859e232728a0Jack Yu //Misc 40927b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS).when(mServiceState). 41027b650c406018355a88a41528db7859e232728a0Jack Yu getRilDataRadioTechnology(); 411217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(mPhone).when(mCT).getPhone(); 41275ba09a17a669f4906268088a769836aa87d8241fionaxu mImsManagerInstances.put(mPhone.getPhoneId(), null); 41375ba09a17a669f4906268088a769836aa87d8241fionaxu doReturn(mImsEcbm).when(mImsManager).getEcbmInterface(anyInt()); 414217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan doReturn(mPhone).when(mInboundSmsHandler).getPhone(); 415f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(mImsCallProfile).when(mImsCall).getCallProfile(); 4161bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu doReturn(mIBinder).when(mIIntentSender).asBinder(); 4171bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu doReturn(mIIntentSender).when(mIActivityManager).getIntentSender(anyInt(), 4181bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu anyString(), any(IBinder.class), anyString(), anyInt(), any(Intent[].class), 4191bcd7a866ddf8f6f63370c70972f057a4a1ba057Jack Yu any(String[].class), anyInt(), any(Bundle.class), anyInt()); 420ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan mSST.mSS = mServiceState; 4217a1c1b02c8603c2bf2f3b401facb389528180eedPavel Zhamaitsiak mServiceManagerMockedServices.put("connectivity_metrics_logger", mConnMetLoggerBinder); 422217d4d9562a9476cf579dfc409b1278a02b18b87Amit Mahajan 42332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan setReady(false); 42432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 42532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 426f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan protected void tearDown() throws Exception { 427153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 428153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan SharedPreferences sharedPreferences = mContext.getSharedPreferences((String) null, 0); 429153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan sharedPreferences.edit().clear().commit(); 4309c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 4319c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu restoreInstances(); 432f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan } 433f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan 43432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan protected static void logd(String s) { 43532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan Log.d(TAG, s); 43632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 437e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry 438e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry public static class FakeBlockedNumberContentProvider extends MockContentProvider { 439e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry public Set<String> mBlockedNumbers = new HashSet<>(); 4405eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry public int mNumEmergencyContactNotifications = 0; 441e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry 442e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry @Override 443e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry public Bundle call(String method, String arg, Bundle extras) { 4445eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry switch (method) { 4455eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry case BlockedNumberContract.SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER: 4465eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry Bundle bundle = new Bundle(); 4475eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry bundle.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED, 4485eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mBlockedNumbers.contains(arg)); 4495eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry return bundle; 4505eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry case BlockedNumberContract.SystemContract.METHOD_NOTIFY_EMERGENCY_CONTACT: 4515eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry mNumEmergencyContactNotifications++; 4525eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry return new Bundle(); 4535eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry default: 4545eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry fail("Method not expected: " + method); 4555eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry } 4565eccb26b2bcf3a51326596e1b0bb49b073d2f9fcAbhijith Shastry return null; 457e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry } 458e2435e2d37c991bd6209a90cd884b5102939872eAbhijith Shastry } 4596ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu 4606ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu protected void setupMockPackagePermissionChecks() throws Exception { 4614c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doReturn(new String[]{TAG}).when(mPackageManager).getPackagesForUid(anyInt()); 4624c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doReturn(mPackageInfo).when(mPackageManager).getPackageInfo(eq(TAG), anyInt()); 4636ba18ef5f3733709f16ef03b3d2b2de076b63c3efionaxu } 46418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu} 465