Move PhoneFactory/PhoneGlobals static mocking to TelephonyTestBase

This primarily fixes omissions when initializing different static fields
of these classes, but also:
- not always calling super.setUp()
- unnecessary Looper creation (handled in setUp)
- unnecessary initMocks (handled by RunWith)

Bug: 365800992
Test: com.android.phone.PhoneUtilsTest
Test: com.android.phone.CarrierConfigLoaderTest
Test: com.android.phone.ImsStateCallbackControllerTest
Test: com.android.phone.NotificationMgrTest
Test: com.android.phone.PhoneGlobalsTest
Test: com.android.phone.satellite.entitlement.SatelliteEntitlementControllerTest
Test: com.android.services.telephony.DisconnectCauseUtilTest
Test: com.android.services.telephony.TelecomAccountRegistryTest
Test: com.android.phone.PhoneInterfaceManagerTest
Flag: TEST_ONLY
Change-Id: I2ec8186ece803a0fe163f9cd45c4afbad996675f
diff --git a/tests/src/com/android/TelephonyTestBase.java b/tests/src/com/android/TelephonyTestBase.java
index 2bc7bb9..3e74eb7 100644
--- a/tests/src/com/android/TelephonyTestBase.java
+++ b/tests/src/com/android/TelephonyTestBase.java
@@ -16,21 +16,38 @@
 
 package com.android;
 
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.doReturn;
 
+import android.content.ContextWrapper;
+import android.content.res.Resources;
 import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
 
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.telephony.GsmCdmaPhone;
+import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConfigurationManager;
+import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.data.DataConfigManager;
+import com.android.internal.telephony.data.DataNetworkController;
+import com.android.phone.PhoneGlobals;
+import com.android.phone.PhoneInterfaceManager;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
+import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
 import java.lang.reflect.Field;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -39,12 +56,15 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Helper class to load Mockito Resources into a test.
+ * Helper class to load Mockito Resources into Telephony unit tests.
  */
 public class TelephonyTestBase {
     @Rule public final MockitoRule mocks = MockitoJUnit.rule();
 
     protected TestContext mContext;
+    @Mock protected PhoneGlobals mPhoneGlobals;
+    @Mock protected GsmCdmaPhone mPhone;
+    @Mock protected DataNetworkController mDataNetworkController;
 
     private final HashMap<InstanceKey, Object> mOldInstances = new HashMap<>();
     private final LinkedList<InstanceKey> mInstanceKeys = new LinkedList<>();
@@ -55,7 +75,31 @@
             Looper.prepare();
         }
 
+        doCallRealMethod().when(mPhoneGlobals).getBaseContext();
+        doCallRealMethod().when(mPhoneGlobals).getResources();
+        doCallRealMethod().when(mPhone).getServiceState();
+
         mContext = spy(new TestContext());
+        doReturn(mContext).when(mPhone).getContext();
+        replaceInstance(ContextWrapper.class, "mBase", mPhoneGlobals, mContext);
+
+        Resources resources = InstrumentationRegistry.getTargetContext().getResources();
+        assertNotNull(resources);
+        doReturn(resources).when(mContext).getResources();
+
+        replaceInstance(Handler.class, "mLooper", mPhone, Looper.myLooper());
+        replaceInstance(PhoneFactory.class, "sMadeDefaults", null, true);
+        replaceInstance(PhoneFactory.class, "sPhone", null, mPhone);
+        replaceInstance(PhoneFactory.class, "sPhones", null, new Phone[] {mPhone});
+        replaceInstance(PhoneGlobals.class, "sMe", null, mPhoneGlobals);
+
+        doReturn(mDataNetworkController).when(mPhone).getDataNetworkController();
+        doReturn(Collections.emptyList()).when(mDataNetworkController)
+                .getInternetDataDisallowedReasons();
+        doReturn(Mockito.mock(DataConfigManager.class)).when(mDataNetworkController)
+                .getDataConfigManager();
+
+        mPhoneGlobals.phoneMgr = Mockito.mock(PhoneInterfaceManager.class);
     }
 
     @After
diff --git a/tests/src/com/android/phone/CarrierConfigLoaderTest.java b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
index 99064dd..b670de5 100644
--- a/tests/src/com/android/phone/CarrierConfigLoaderTest.java
+++ b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
@@ -57,10 +57,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.TelephonyTestBase;
-import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.subscription.SubscriptionManagerService;
 
@@ -75,7 +72,6 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -107,7 +103,6 @@
     @Mock SharedPreferences mSharedPreferences;
     @Mock TelephonyRegistryManager mTelephonyRegistryManager;
     @Mock FeatureFlags mFeatureFlags;
-    @Mock GsmCdmaPhone mMockPhone;
 
     private TelephonyManager mTelephonyManager;
     private CarrierConfigLoader mCarrierConfigLoader;
@@ -121,10 +116,6 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        MockitoAnnotations.initMocks(this);
-        Phone[] mPhones = new Phone[]{mMockPhone};
-        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
-        replaceInstance(PhoneFactory.class, "sMadeDefaults", null, true);
         doReturn(Context.PERMISSION_ENFORCER_SERVICE).when(mContext).getSystemServiceName(
                 eq(PermissionEnforcer.class));
         doReturn(mFakePermissionEnforcer).when(mContext).getSystemService(
diff --git a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
index 0e902a8..5521ac0 100644
--- a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
+++ b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
@@ -46,7 +46,6 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
-import android.os.Looper;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyRegistryManager;
 import android.testing.TestableLooper;
@@ -70,7 +69,6 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -110,7 +108,6 @@
     @Captor ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListenerSlot1;
     @Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot0;
     @Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot1;
-    @Mock private PhoneGlobals mPhone;
     @Mock ImsStateCallbackController.PhoneFactoryProxy mPhoneFactoryProxy;
     @Mock Phone mPhoneSlot0;
     @Mock Phone mPhoneSlot1;
@@ -134,16 +131,16 @@
 
     @Before
     public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
+        super.setUp();
 
-        when(mPhone.getMainExecutor()).thenReturn(mExecutor);
-        when(mPhone.getSystemServiceName(eq(SubscriptionManager.class)))
+        when(mPhoneGlobals.getMainExecutor()).thenReturn(mExecutor);
+        when(mPhoneGlobals.getSystemServiceName(eq(SubscriptionManager.class)))
                 .thenReturn(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        when(mPhone.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
+        when(mPhoneGlobals.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
                 .thenReturn(mSubscriptionManager);
-        when(mPhone.getSystemServiceName(eq(TelephonyRegistryManager.class)))
+        when(mPhoneGlobals.getSystemServiceName(eq(TelephonyRegistryManager.class)))
                 .thenReturn(Context.TELEPHONY_REGISTRY_SERVICE);
-        when(mPhone.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
+        when(mPhoneGlobals.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
                 .thenReturn(mTelephonyRegistryManager);
         when(mPhoneFactoryProxy.getPhone(eq(0))).thenReturn(mPhoneSlot0);
         when(mPhoneFactoryProxy.getPhone(eq(1))).thenReturn(mPhoneSlot1);
@@ -937,9 +934,6 @@
     }
 
     private void createController(int slotCount) throws Exception {
-        if (Looper.myLooper() == null) {
-            Looper.prepare();
-        }
         makeFakeActiveSubIds(slotCount);
 
         when(mMmTelFeatureFactory
@@ -956,7 +950,7 @@
                 .thenReturn(mRcsFeatureConnectorSlot1);
 
         mImsStateCallbackController =
-                new ImsStateCallbackController(mPhone, mHandlerThread.getLooper(),
+                new ImsStateCallbackController(mPhoneGlobals, mHandlerThread.getLooper(),
                         slotCount, mMmTelFeatureFactory, mRcsFeatureFactory, mImsResolver,
                         mFeatureFlags);
 
diff --git a/tests/src/com/android/phone/NotificationMgrTest.java b/tests/src/com/android/phone/NotificationMgrTest.java
index 2b0ff94..0c1f8a3 100644
--- a/tests/src/com/android/phone/NotificationMgrTest.java
+++ b/tests/src/com/android/phone/NotificationMgrTest.java
@@ -77,11 +77,8 @@
 import com.android.TelephonyTestBase;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.ServiceStateTracker;
 import com.android.internal.telephony.SignalStrengthController;
-import com.android.internal.telephony.data.DataConfigManager;
-import com.android.internal.telephony.data.DataNetworkController;
 import com.android.internal.telephony.data.DataSettingsManager;
 import com.android.internal.telephony.util.NotificationChannelController;
 
@@ -90,9 +87,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
 
-import java.util.Collections;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -111,13 +106,12 @@
     private static final String MOBILE_NETWORK_SELECTION_CLASS = ".testClass";
     private static final String CARRIER_NAME = "CoolCarrier";
 
-    @Mock PhoneGlobals mApp;
+    PhoneGlobals mApp; // mPhoneGlobals alias
     @Mock StatusBarManager mStatusBarManager;
     @Mock UserManager mUserManager;
     @Mock SubscriptionManager mSubscriptionManager;
     @Mock TelecomManager mTelecomManager;
     @Mock TelephonyManager mTelephonyManager;
-    @Mock Phone mPhone;
     @Mock SharedPreferences mSharedPreferences;
     @Mock NotificationManager mNotificationManager;
     @Mock SubscriptionInfo mSubscriptionInfo;
@@ -126,20 +120,16 @@
     @Mock ServiceStateTracker mServiceStateTracker;
     @Mock ServiceState mServiceState;
     @Mock CarrierConfigManager mCarrierConfigManager;
-    @Mock DataNetworkController mDataNetworkController;
     @Mock DataSettingsManager mDataSettingsManager;
-    @Mock DataConfigManager mDataConfigManager;
     @Mock SignalStrengthController mSignalStrengthController;
 
-    private Phone[] mPhones;
     private NotificationMgr mNotificationMgr;
     private TestableLooper mTestableLooper;
 
     @Before
     public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        mPhones = new Phone[]{mPhone};
-        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
+        super.setUp();
+        mApp = mPhoneGlobals;
         when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
         when(mPhone.getContext()).thenReturn(mMockedContext);
         when(mMockedContext.getResources()).thenReturn(mResources);
@@ -152,10 +142,6 @@
         when(mPhone.getServiceStateTracker()).thenReturn(mServiceStateTracker);
         mServiceStateTracker.mSS = mServiceState;
         when(mPhone.getSignalStrengthController()).thenReturn(mSignalStrengthController);
-        when(mPhone.getDataNetworkController()).thenReturn(mDataNetworkController);
-        when(mDataNetworkController.getInternetDataDisallowedReasons()).thenReturn(
-                Collections.emptyList());
-        when(mDataNetworkController.getDataConfigManager()).thenReturn(mDataConfigManager);
         when(mPhone.getDataSettingsManager()).thenReturn(mDataSettingsManager);
         when(mDataSettingsManager.isDataEnabledForReason(anyInt())).thenReturn(true);
         when(mApp.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
diff --git a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
index 5ecf111..086412c 100644
--- a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
+++ b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
@@ -90,8 +90,6 @@
             PhoneInterfaceManagerTest.class.getPackageName();
 
     @Mock
-    PhoneGlobals mPhoneGlobals;
-    @Mock
     Phone mPhone;
     @Mock
     FeatureFlags mFeatureFlags;
diff --git a/tests/src/com/android/phone/PhoneUtilsTest.java b/tests/src/com/android/phone/PhoneUtilsTest.java
index 3d7815c..2d3d065 100644
--- a/tests/src/com/android/phone/PhoneUtilsTest.java
+++ b/tests/src/com/android/phone/PhoneUtilsTest.java
@@ -30,15 +30,11 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.TelephonyTestBase;
-import com.android.internal.telephony.GsmCdmaPhone;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
 
 @RunWith(AndroidJUnit4.class)
 public class PhoneUtilsTest extends TelephonyTestBase {
@@ -46,8 +42,6 @@
     private SubscriptionManager mMockSubscriptionManager;
     @Mock
     private SubscriptionInfo mMockSubscriptionInfo;
-    @Mock
-    private GsmCdmaPhone mMockPhone;
 
     private final int mPhoneAccountHandleIdInteger = 123;
     private final String mPhoneAccountHandleIdString = "123";
@@ -58,12 +52,10 @@
 
     @Before
     public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
+        super.setUp();
         when(mMockSubscriptionManager.getActiveSubscriptionInfo(
                 eq(mPhoneAccountHandleIdInteger))).thenReturn(mMockSubscriptionInfo);
-        when(mMockPhone.getSubId()).thenReturn(mPhoneAccountHandleIdInteger);
-        Phone[] mPhones = new Phone[] {mMockPhone};
-        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
+        when(mPhone.getSubId()).thenReturn(mPhoneAccountHandleIdInteger);
     }
 
     @Test
@@ -74,7 +66,7 @@
 
     @Test
     public void testGetPhoneForPhoneAccountHandle() throws Exception {
-        assertEquals(mMockPhone, PhoneUtils.getPhoneForPhoneAccountHandle(
+        assertEquals(mPhone, PhoneUtils.getPhoneForPhoneAccountHandle(
                 mPhoneAccountHandleTest));
     }
 
diff --git a/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java b/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
index 11f982e..aa6e29c 100644
--- a/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
+++ b/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
@@ -74,7 +74,6 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -121,7 +120,6 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        MockitoAnnotations.initMocks(this);
 
         replaceInstance(SubscriptionManagerService.class, "sInstance", null,
                 mMockSubscriptionManagerService);
diff --git a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
index 71a23e6..fe6d6f7 100644
--- a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
+++ b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
@@ -22,7 +22,6 @@
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.TestCase.assertEquals;
 
-import static org.mockito.Mockito.mock;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
@@ -38,15 +37,11 @@
 
 import com.android.TelephonyTestBase;
 import com.android.internal.telephony.CallFailCause;
-import com.android.internal.telephony.GsmCdmaPhone;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
 import com.android.phone.R;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mock;
 
 import java.util.Locale;
 
@@ -57,13 +52,6 @@
     public static final int PHONE_ID = 123;
     public static final String EMPTY_STRING = "";
 
-    // dynamic
-    private Context mContext;
-
-    //Mocks
-    @Mock
-    private GsmCdmaPhone mMockPhone;
-
     private final FlagsAdapter mFeatureFlags = new FlagsAdapter(){
         @Override
         public boolean doNotOverridePreciseLabel() {
@@ -74,11 +62,6 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        // objects that call static getInstance()
-        mMockPhone = mock(GsmCdmaPhone.class);
-        mContext = InstrumentationRegistry.getTargetContext();
-        // set mocks
-        setSinglePhone();
     }
 
     /**
@@ -253,11 +236,6 @@
         return config;
     }
 
-    private void setSinglePhone() throws Exception {
-        Phone[] mPhones = new Phone[]{mMockPhone};
-        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
-    }
-
     private Resources getResourcesForLocale(Context context, Locale locale) {
         Configuration config = new Configuration();
         config.setToDefaults();
@@ -268,7 +246,7 @@
 
     private void safeAssertLabel(Integer resourceId,
             android.telecom.DisconnectCause disconnectCause) {
-        Resources r = getResourcesForLocale(mContext, Locale.US);
+        Resources r = getResourcesForLocale(InstrumentationRegistry.getTargetContext(), Locale.US);
         if (resourceId == null || r == null) {
             return;
         }
diff --git a/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java b/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
index a8a54f8..d0fc69d 100644
--- a/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
+++ b/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
@@ -50,10 +50,8 @@
 import com.android.TelephonyTestBase;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.SimultaneousCallingTracker;
 import com.android.internal.telephony.flags.Flags;
-import com.android.phone.PhoneGlobals;
 import com.android.phone.PhoneInterfaceManager;
 import com.android.phone.R;
 
@@ -65,7 +63,6 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
 
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -85,7 +82,6 @@
     @Mock ImsManager mImsManager;
     @Mock SubscriptionManager mSubscriptionManager;
     @Mock ContentProvider mContentProvider;
-    @Mock PhoneGlobals mPhoneGlobals;
     @Mock Phone mPhone;
     @Mock Resources mResources;
     @Mock Drawable mDrawable;
@@ -98,18 +94,13 @@
     private BroadcastReceiver mUserSwitchedAndConfigChangedReceiver;
     private BroadcastReceiver mLocaleChangedBroadcastReceiver;
     private ContentResolver mContentResolver;
-    private Phone[] mPhones;
     private TestableLooper mTestableLooper;
 
     @Before
     public void setUp() throws Exception {
         super.setUp();
         mSetFlagsRule.disableFlags(Flags.FLAG_DELAY_PHONE_ACCOUNT_REGISTRATION);
-        MockitoAnnotations.initMocks(this);
 
-        mPhones = new Phone[]{mPhone};
-        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
-        replaceInstance(PhoneGlobals.class, "sMe", null, mPhoneGlobals);
         replaceInstance(PhoneInterfaceManager.class, "sInstance", null, mPhoneInterfaceManager);
         when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
         when(mPhone.getContext()).thenReturn(mMockedContext);