Fix test not willing to retrieve bluetooth name

Test: atest 'com.android.providers.telephony.SmsProviderTest#testRawTableDelete' 'com.android.providers.telephony.SmsProviderTest#testRawTableInsert'
Bug: 226403247
Change-Id: I69de49f092ed3f0d6e61cbefa5b057a114d468bf
diff --git a/tests/src/com/android/providers/telephony/SmsProviderTest.java b/tests/src/com/android/providers/telephony/SmsProviderTest.java
index 2bc5f0f..e4dec77 100644
--- a/tests/src/com/android/providers/telephony/SmsProviderTest.java
+++ b/tests/src/com/android/providers/telephony/SmsProviderTest.java
@@ -16,6 +16,11 @@
 
 package com.android.providers.telephony;
 
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 import android.app.AppOpsManager;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -26,6 +31,8 @@
 import android.database.ContentObserver;
 import android.database.Cursor;
 import android.net.Uri;
+import android.os.Build;
+import android.os.Process;
 import android.provider.Telephony;
 import android.telephony.TelephonyManager;
 import android.test.mock.MockContentResolver;
@@ -33,11 +40,14 @@
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.Log;
 
+import androidx.test.InstrumentationRegistry;
+
 import junit.framework.TestCase;
 
 import org.junit.Test;
+import org.mockito.Mock;
 import org.mockito.Mockito;
-
+import org.mockito.MockitoAnnotations;
 
 /**
  * Tests for testing CRUD operations of SmsProvider.
@@ -54,9 +64,11 @@
 public class SmsProviderTest extends TestCase {
     private static final String TAG = "SmsProviderTest";
 
-    private MockContextWithProvider mContext;
+    @Mock private Context mContext;
     private MockContentResolver mContentResolver;
     private SmsProviderTestable mSmsProviderTestable;
+    @Mock private PackageManager mPackageManager;
+    @Mock private Resources mMockResources;
 
     private int notifyChangeCount;
 
@@ -75,79 +87,55 @@
     private final Uri mRawUriPermanentDelete =
             Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw/permanentDelete");
 
-    /**
-     * This is used to give the SmsProviderTest a mocked context which takes a
-     * SmsProvider and attaches it to the ContentResolver with telephony authority.
-     * The mocked context also gives WRITE_APN_SETTINGS permissions
-     */
-    private class MockContextWithProvider extends MockContext {
-        private final MockContentResolver mResolver;
-
-        public MockContextWithProvider(SmsProvider smsProvider) {
-            mResolver = new MockContentResolver() {
-                @Override
-                public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork,
-                        int userHandle) {
-                    notifyChangeCount++;
-                }
-            };
-
-            // Add authority="sms" to given smsProvider
-            ProviderInfo providerInfo = new ProviderInfo();
-            providerInfo.authority = "sms";
-
-            // Add context to given smsProvider
-            smsProvider.attachInfoForTesting(this, providerInfo);
-            Log.d(TAG, "MockContextWithProvider: smsProvider.getContext(): "
-                    + smsProvider.getContext());
-
-            // Add given SmsProvider to mResolver with authority="sms" so that
-            // mResolver can send queries to mSmsProvider
-            mResolver.addProvider("sms", smsProvider);
-            Log.d(TAG, "MockContextWithProvider: Add SmsProvider to mResolver");
-        }
-
-        @Override
-        public Object getSystemService(String name) {
-            Log.d(TAG, "getSystemService: returning null");
-            switch (name) {
-                case Context.APP_OPS_SERVICE:
-                    return Mockito.mock(AppOpsManager.class);
-                case Context.TELEPHONY_SERVICE:
-                    return Mockito.mock(TelephonyManager.class);
-                default:
-                    return null;
-            }
-        }
-
-        @Override
-        public Resources getResources() {
-            Log.d(TAG, "getResources: returning null");
-            return null;
-        }
-
-        @Override
-        public int getUserId() {
-            return 0;
-        }
-
-        @Override
-        public MockContentResolver getContentResolver() {
-            return mResolver;
-        }
-
-        @Override
-        public int checkCallingOrSelfPermission(String permission) {
-            return PackageManager.PERMISSION_GRANTED;
-        }
-    }
-
     @Override
     protected void setUp() throws Exception {
         super.setUp();
+        MockitoAnnotations.initMocks(this);
         mSmsProviderTestable = new SmsProviderTestable();
-        mContext = new MockContextWithProvider(mSmsProviderTestable);
-        mContentResolver = mContext.getContentResolver();
+
+        when(mContext.getSystemService(eq(Context.APP_OPS_SERVICE)))
+                .thenReturn(mock(AppOpsManager.class));
+        when(mContext.getSystemService(eq(Context.TELEPHONY_SERVICE)))
+                .thenReturn(mock(TelephonyManager.class));
+
+        when(mContext.checkCallingOrSelfPermission(anyString()))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+
+        when(mMockResources
+                        .getString(eq(com.android.internal.R.string.config_systemBluetoothStack)))
+                .thenReturn("com.android.bluetooth.services");
+        when(mContext.getResources()).thenReturn(mMockResources);
+        when(mContext.getUserId()).thenReturn(0);
+
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+
+        /**
+         * This is used to give the SmsProviderTest a mocked context which takes a
+         * SmsProvider and attaches it to the ContentResolver with telephony authority.
+         * The mocked context also gives WRITE_APN_SETTINGS permissions
+         */
+        mContentResolver = new MockContentResolver() {
+            @Override
+            public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork,
+                    int userHandle) {
+                notifyChangeCount++;
+            }
+        };
+        when(mContext.getContentResolver()).thenReturn(mContentResolver);
+
+        // Add authority="sms" to given smsProvider
+        ProviderInfo providerInfo = new ProviderInfo();
+        providerInfo.authority = "sms";
+
+        // Add context to given smsProvider
+        mSmsProviderTestable.attachInfoForTesting(mContext, providerInfo);
+        Log.d(TAG, "MockContextWithProvider: smsProvider.getContext(): "
+                + mSmsProviderTestable.getContext());
+
+        // Add given SmsProvider to mResolver with authority="sms" so that
+        // mResolver can send queries to mSmsProvider
+        mContentResolver.addProvider("sms", mSmsProviderTestable);
+        Log.d(TAG, "MockContextWithProvider: Add SmsProvider to mResolver");
         notifyChangeCount = 0;
     }