Cleaned up the deprecated APIs

Bug: 270094276
Test: Basic phone funcationality tests
Test: atest CellBroadcastServicetest

Change-Id: Id557941ac9c1e909cba626a473217506d7c39f84
diff --git a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
index d02b1b3..550bd73 100644
--- a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
+++ b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
@@ -700,20 +700,24 @@
     }
 
     /**
-     * Get the subscription ID for a phone ID, or INVALID_SUBSCRIPTION_ID if the phone does not
-     * have an active sub
-     * @param phoneId the phoneId to use
-     * @return the associated sub id
+     * Get the subscription id from the phone id.
+     *
+     * @param phoneId the phone id (i.e. logical SIM slot index)
+     *
+     * @return The associated subscription id. {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID}
+     * if the phone does not have an active sub or when {@code phoneId} is not valid.
      */
-    protected static int getSubIdForPhone(Context context, int phoneId) {
-        SubscriptionManager subMan =
-                (SubscriptionManager) context.getSystemService(
-                        Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        int[] subIds = subMan.getSubscriptionIds(phoneId);
-        if (subIds != null) {
-            return subIds[0];
+    public static int getSubIdForPhone(Context context, int phoneId) {
+        if (SdkLevel.isAtLeastU()) {
+            return SubscriptionManager.getSubscriptionId(phoneId);
         } else {
-            return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+            SubscriptionManager subMan = context.getSystemService(SubscriptionManager.class);
+            int[] subIds = subMan.getSubscriptionIds(phoneId);
+            if (subIds != null) {
+                return subIds[0];
+            } else {
+                return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+            }
         }
     }
 
diff --git a/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java b/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
index fb7a2d3..96c42f3 100644
--- a/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
+++ b/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
@@ -83,18 +83,14 @@
     public void onCdmaCellBroadcastSms(int slotIndex, byte[] bearerData, int serviceCategory) {
         Log.d(TAG, "onCdmaCellBroadcastSms received message on slotId=" + slotIndex);
 
-        int[] subIds =
-                ((SubscriptionManager) getSystemService(
-                        Context.TELEPHONY_SUBSCRIPTION_SERVICE)).getSubscriptionIds(slotIndex);
-        String plmn;
-        if (subIds != null && subIds.length > 0) {
-            int subId = subIds[0];
-            plmn = ((TelephonyManager) getSystemService(
-                    Context.TELEPHONY_SERVICE)).createForSubscriptionId(
-                    subId).getNetworkOperator();
-        } else {
-            plmn = "";
+        int subId = CellBroadcastHandler.getSubIdForPhone(getApplicationContext(), slotIndex);
+
+        String plmn = "";
+        if (SubscriptionManager.isValidSubscriptionId(subId)) {
+            plmn = getSystemService(TelephonyManager.class)
+                    .createForSubscriptionId(subId).getNetworkOperator();
         }
+
         SmsCbMessage message = parseCdmaBroadcastSms(getApplicationContext(), slotIndex, plmn,
                 bearerData, serviceCategory);
         if (message != null) {
@@ -143,12 +139,9 @@
         Log.d(TAG, "MT raw BearerData = " + toHexString(bearerData, 0, bearerData.length));
         SmsCbLocation location = new SmsCbLocation(plmn, -1, -1);
 
-        SubscriptionManager sm = (SubscriptionManager) context.getSystemService(
-                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        int subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
-        int[] subIds = sm.getSubscriptionIds(slotIndex);
-        if (subIds != null && subIds.length > 0) {
-            subId = subIds[0];
+        int subId = CellBroadcastHandler.getSubIdForPhone(context, slotIndex);
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+            subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
         }
 
         return new SmsCbMessage(SmsCbMessage.MESSAGE_FORMAT_3GPP2,
diff --git a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
index a64e409..5e0ab21 100644
--- a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
+++ b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
@@ -292,10 +292,10 @@
 
     private Resources getResourcesForSlot(int slotIndex) {
         SubscriptionManager subMgr = mContext.getSystemService(SubscriptionManager.class);
-        int[] subIds = subMgr.getSubscriptionIds(slotIndex);
+        int subId = getSubIdForPhone(mContext, slotIndex);
         Resources res;
-        if (subIds != null) {
-            res = getResources(subIds[0]);
+        if (SubscriptionManager.isValidSubscriptionId(subId)) {
+            res = getResources(subId);
         } else {
             res = getResources(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
         }
diff --git a/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java b/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
index e8fe367..1213b62 100644
--- a/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
+++ b/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
@@ -97,12 +97,9 @@
     public static SmsCbMessage createSmsCbMessage(Context context, SmsCbHeader header,
             SmsCbLocation location, byte[][] pdus, int slotIndex)
             throws IllegalArgumentException {
-        SubscriptionManager sm = (SubscriptionManager) context.getSystemService(
-                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        int subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
-        int[] subIds = sm.getSubscriptionIds(slotIndex);
-        if (subIds != null && subIds.length > 0) {
-            subId = subIds[0];
+        int subId = CellBroadcastHandler.getSubIdForPhone(context, slotIndex);
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+            subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
         }
 
         long receivedTimeMillis = System.currentTimeMillis();
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 2f53d68..2235eed 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -27,5 +27,5 @@
         android:targetPackage="com.android.cellbroadcastservice.tests"
         android:label="Tests for CellBroadcastService">
     </instrumentation>
-    <uses-sdk android:minSdkVersion="30" android:targetSdkVersion="33" />
+    <uses-sdk android:minSdkVersion="30" android:targetSdkVersion="34" />
 </manifest>
diff --git a/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastHandlerTest.java b/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastHandlerTest.java
index 94bf60a..bf8b661 100644
--- a/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastHandlerTest.java
+++ b/tests/src/com/android/cellbroadcastservice/tests/CellBroadcastHandlerTest.java
@@ -18,7 +18,9 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
@@ -27,13 +29,19 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
+import android.app.ActivityManager;
+import android.app.IActivityManager;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.IIntentSender;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.database.MatrixCursor;
 import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.provider.Telephony;
 import android.telephony.CbGeoUtils;
@@ -41,6 +49,7 @@
 import android.telephony.SmsCbLocation;
 import android.telephony.SmsCbMessage;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
 import android.test.mock.MockContentProvider;
 import android.test.mock.MockContentResolver;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -48,6 +57,7 @@
 import android.testing.TestableLooper;
 import android.text.format.DateUtils;
 import android.util.Pair;
+import android.util.Singleton;
 
 import androidx.annotation.NonNull;
 
@@ -55,6 +65,7 @@
 import com.android.cellbroadcastservice.CellBroadcastHandler;
 import com.android.cellbroadcastservice.CellBroadcastProvider;
 import com.android.cellbroadcastservice.SmsCbConstants;
+import com.android.internal.telephony.ISub;
 import com.android.modules.utils.build.SdkLevel;
 
 import org.junit.After;
@@ -66,6 +77,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -84,6 +96,23 @@
 
     private CellBroadcastHandler.HandlerHelper mHandlerHelper;
 
+    protected HashMap<String, IBinder> mServiceManagerMockedServices = new HashMap<>();
+
+    @Mock
+    private IBinder mIBinder;
+
+    @Mock
+    private IActivityManager mIActivityManager;
+
+    @Mock
+    private IIntentSender mIIntentSender;
+
+    @Mock
+    private Singleton<IActivityManager> mIActivityManagerSingleton;
+
+    @Mock
+    private ISub mISub;
+
     private class CellBroadcastContentProvider extends MockContentProvider {
         @Override
         public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
@@ -164,6 +193,23 @@
                 (int) DateUtils.DAY_IN_MILLIS);
         putResources(com.android.cellbroadcastservice.R.bool.duplicate_compare_service_category,
                 true);
+
+        replaceInstance(ActivityManager.class, "IActivityManagerSingleton", null,
+                mIActivityManagerSingleton);
+
+        replaceInstance(Singleton.class, "mInstance", mIActivityManagerSingleton,
+                mIActivityManager);
+        replaceInstance(ServiceManager.class, "sCache", null, mServiceManagerMockedServices);
+
+        doReturn(mIIntentSender).when(mIActivityManager).getIntentSenderWithFeature(anyInt(),
+                nullable(String.class), nullable(String.class), nullable(IBinder.class),
+                nullable(String.class), anyInt(), nullable(Intent[].class),
+                nullable(String[].class), anyInt(), nullable(Bundle.class), anyInt());
+        doReturn(mIBinder).when(mIIntentSender).asBinder();
+        doReturn(mISub).when(mIBinder).queryLocalInterface(anyString());
+        mServiceManagerMockedServices.put("isub", mIBinder);
+        TelephonyManager.disableServiceHandleCaching();
+        SubscriptionManager.disableCaching();
     }
 
     @After
@@ -244,28 +290,34 @@
     public void testPutPhoneIdAndSubIdExtra() throws Exception {
         Intent intent = new Intent();
         int phoneId = 0;
+        if (SdkLevel.isAtLeastU()) {
+            doReturn(FAKE_SUBID).when(mISub).getSubId(phoneId);
+        }
         CellBroadcastHandler.putPhoneIdAndSubIdExtra(mMockedContext, intent, phoneId);
-        assertTrue(intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, FAKE_SUBID + 1)
-                == FAKE_SUBID);
-        assertTrue(intent.getIntExtra("subscription", FAKE_SUBID + 1)
-                == FAKE_SUBID);
-        assertTrue(intent.getIntExtra(SubscriptionManager.EXTRA_SLOT_INDEX, phoneId + 1)
-                == phoneId);
-        assertTrue(intent.getIntExtra("phone", phoneId + 1)
-                == phoneId);
+        assertEquals(FAKE_SUBID, intent.getIntExtra(
+                SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, FAKE_SUBID + 1));
+        assertEquals(FAKE_SUBID, intent.getIntExtra(
+                "subscription", FAKE_SUBID + 1));
+        assertEquals(phoneId, intent.getIntExtra(
+                SubscriptionManager.EXTRA_SLOT_INDEX, phoneId + 1));
+        assertEquals(phoneId, intent.getIntExtra("phone", phoneId + 1));
 
         // if subId is not available, subscription extras should not be added
         Intent intentNoSubId = new Intent();
-        doReturn(null).when(mMockedSubscriptionManager).getSubscriptionIds(anyInt());
+        if (SdkLevel.isAtLeastU()) {
+            doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID).when(mISub).getSubId(phoneId);
+        } else {
+            doReturn(null).when(mMockedSubscriptionManager).getSubscriptionIds(anyInt());
+        }
         CellBroadcastHandler.putPhoneIdAndSubIdExtra(mMockedContext, intentNoSubId, phoneId);
-        assertTrue(intentNoSubId.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
-                FAKE_SUBID + 1) == FAKE_SUBID + 1);
-        assertTrue(intentNoSubId.getIntExtra("subscription", FAKE_SUBID + 1)
-                == FAKE_SUBID + 1);
-        assertTrue(intentNoSubId.getIntExtra(SubscriptionManager.EXTRA_SLOT_INDEX, phoneId + 1)
-                == phoneId);
-        assertTrue(intentNoSubId.getIntExtra("phone", phoneId + 1)
-                == phoneId);
+        assertEquals(FAKE_SUBID + 1, intentNoSubId.getIntExtra(
+                SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, FAKE_SUBID + 1));
+        assertEquals(FAKE_SUBID + 1, intentNoSubId.getIntExtra(
+                "subscription", FAKE_SUBID + 1));
+        assertEquals(phoneId, intentNoSubId.getIntExtra(
+                SubscriptionManager.EXTRA_SLOT_INDEX, phoneId + 1));
+        assertEquals(phoneId, intentNoSubId.getIntExtra(
+                "phone", phoneId + 1));
     }
 
     @Test