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