Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3976f6b authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Fix stringIndexOutOfBoundException in getPhoneNumberBasedCarrier" into main

parents db3015f1 c63e08ec
Loading
Loading
Loading
Loading
+34 −6
Original line number Diff line number Diff line
@@ -7259,22 +7259,50 @@ public class SatelliteController extends Handler {
        return new Pair<>(subscriberId, subscriberIdType);
    }

    private String getPhoneNumberBasedCarrier(int subId) {
    /** Get subscriberId from phone number and carrier information. */
    @VisibleForTesting(visibility =  VisibleForTesting.Visibility.PRIVATE)
    public String getPhoneNumberBasedCarrier(int subId) {
        String subscriberId = "";
        SubscriptionInfoInternal internal = mSubscriptionManagerService.getSubscriptionInfoInternal(
                subId);
        if (internal == null) {
            plogd("getPhoneNumberBasedCarrier: subscriptionInfoInternal is null.");
            return subscriberId;
        }

        SubscriptionManager subscriptionManager = mContext.getSystemService(
                SubscriptionManager.class);
        if (mInjectSubscriptionManager != null) {
            logd("getPhoneNumberBasedCarrier: InjectSubscriptionManager");
            plogd("getPhoneNumberBasedCarrier: InjectSubscriptionManager");
            subscriptionManager = mInjectSubscriptionManager;
        }

        if (subscriptionManager == null) {
            plogd("getPhoneNumberBasedCarrier: subscriptionManager is null");
            return subscriberId;
        }

        String phoneNumber = subscriptionManager.getPhoneNumber(subId);
        if (phoneNumber == null) {
            logd("getPhoneNumberBasedCarrier: phoneNumber null");
            return "";
        if (TextUtils.isEmpty(phoneNumber)) {
            plogd("getPhoneNumberBasedCarrier: phoneNumber is empty.");
            return subscriberId;
        }

        String imsi = internal.getImsi();
        if (TextUtils.isEmpty(imsi)) {
            plogd("getPhoneNumberBasedCarrier: imsi is empty");
            return subscriberId;
        }
        return internal.getImsi() == null ? "" : internal.getImsi().substring(0, 6)

        if (imsi.length() < 6) {
            plogd("getPhoneNumberBasedCarrier: imsi length is less than 6");
            return subscriberId;
        }

        subscriberId = internal.getImsi().substring(0, 6)
                + phoneNumber.replaceFirst("^\\+", "");
        plogd("getPhoneNumberBasedCarrier: subscriberId=" + subscriberId);
        return subscriberId;
    }

    private boolean isPriorityChanged(Map<Integer, List<SubscriptionInfo>> currentMap,
+41 −0
Original line number Diff line number Diff line
@@ -6836,4 +6836,45 @@ public class SatelliteControllerTest extends TelephonyTest {
        verify(mPhone, times(2)).notifyCarrierRoamingNtnAvailableServicesChanged(
                (int[]) ArgumentMatchers.any());
    }

    @Test
    public void testGetPhoneNumberBasedCarrier() throws Exception {
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(-1));

        int carrierId_subID = 0;
        SubscriptionInfoInternal subInfoInternal =
                new SubscriptionInfoInternal.Builder().setCarrierId(
                        carrierId_subID).setImsi("").setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));

        // subscriptionManager is null
        Field field = SatelliteController.class.getDeclaredField("mInjectSubscriptionManager");
        field.setAccessible(true);
        field.set(mSatelliteControllerUT, null);
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // phoneNumber is empty
        field.set(mSatelliteControllerUT, mSubscriptionManager);
        doReturn("").when(mSubscriptionManager).getPhoneNumber(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // IMSI is empty
        doReturn(mMsisdn).when(mSubscriptionManager).getPhoneNumber(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // IMSI length is less than 6
        subInfoInternal = new SubscriptionInfoInternal.Builder().setCarrierId(
                        carrierId_subID).setImsi("12345").setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        subInfoInternal = new SubscriptionInfoInternal.Builder().setCarrierId(
                carrierId_subID).setImsi(mImsi).setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));
        String expectedResult = "123456" + "0987654321";
        assertEquals(expectedResult, mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));
    }
}