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

Commit 85fd51dc authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Android (Google) Code Review
Browse files

Merge "Support TS43 enablement based Data Plan type check API" into main

parents e8348c1f 0cf9aa03
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -577,6 +577,9 @@ public class SatelliteController extends Handler {
     * carrierPlmnList. */
    @GuardedBy("mSupportedSatelliteServicesLock")
    private final SparseArray<List<String>> mMergedPlmnListPerCarrier = new SparseArray<>();
    /** Key Subscription ID, value : map to plmn info with related data plan. */
    @GuardedBy("mSupportedSatelliteServicesLock")
    SparseArray<Map<String, Integer>> mEntitlementDataPlanMapPerCarrier = new SparseArray<>();
    private static AtomicLong sNextSatelliteEnableRequestId = new AtomicLong(0);
    // key : subscriberId, value : provisioned or not.
    @GuardedBy("mSatelliteTokenProvisionedLock")
@@ -662,6 +665,10 @@ public class SatelliteController extends Handler {
    @GuardedBy("mSatelliteModemStateLock")
    @SatelliteManager.SatelliteModemState
    private int mSatelliteModemState = SatelliteManager.SATELLITE_MODEM_STATE_UNKNOWN;

    // Data Plan types at entitlement for the plmn allowed
    public static final int SATELLITE_DATA_PLAN_METERED = 0;
    public static final int SATELLITE_DATA_PLAN_UNMETERED = 1;
    private BroadcastReceiver
            mDefaultSmsSubscriptionChangedBroadcastReceiver = new BroadcastReceiver() {
                @Override
@@ -4202,6 +4209,7 @@ public class SatelliteController extends Handler {
     */
    public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled,
            @Nullable List<String> allowedPlmnList, @Nullable List<String> barredPlmnList,
            @Nullable Map<String,Integer> plmnDataPlanMap,
            @Nullable IIntegerConsumer callback) {
        if (!mFeatureFlags.carrierEnabledSatelliteFlag()) {
            logd("onSatelliteEntitlementStatusUpdated: carrierEnabledSatelliteFlag is not enabled");
@@ -4222,6 +4230,9 @@ public class SatelliteController extends Handler {
        if (barredPlmnList == null) {
            barredPlmnList = new ArrayList<>();
        }
        if (plmnDataPlanMap == null) {
            plmnDataPlanMap = new HashMap<>();
        }
        logd("onSatelliteEntitlementStatusUpdated subId=" + subId + ", entitlementEnabled="
                + entitlementEnabled + ", allowedPlmnList=["
                + String.join(",", allowedPlmnList) + "]" + ", barredPlmnList=["
@@ -4250,6 +4261,7 @@ public class SatelliteController extends Handler {
                mMergedPlmnListPerCarrier.remove(subId);
                mEntitlementPlmnListPerCarrier.put(subId, allowedPlmnList);
                mEntitlementBarredPlmnListPerCarrier.put(subId, barredPlmnList);
                mEntitlementDataPlanMapPerCarrier.put(subId, plmnDataPlanMap);
                updatePlmnListPerCarrier(subId);
                configureSatellitePlmnForCarrier(subId);
                mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList);
@@ -8278,4 +8290,28 @@ public class SatelliteController extends Handler {
            return mWifiStateEnabled;
        }
    }

    /**
     * Method to return the current data plan for the registered plmn based on entitlement
     * provisioning information. Note: If no information at
     * provisioning is supported this is overridden with operator carrier config information.
     *
     * @param subId current subscription id
     * @param plmn current registered plmn information
     *
     * @return Data supported modes {@link SatelliteController#SATELLITE_DATA_PLAN_METERED}
     */
    public int getSatelliteDataPlanForPlmn(int subId, String plmn) {
        if (plmn != null) {
            synchronized (mSupportedSatelliteServicesLock) {
                Map<String, Integer> dataplanMap = mEntitlementDataPlanMapPerCarrier.get(subId);
                logd("data plan available for sub id:" + dataplanMap);
                if (dataplanMap != null && dataplanMap.containsKey(plmn)) {
                    return dataplanMap.get(plmn);
                }
            }
        }
        // TODO (Override with carrier config value when configuration defined)
        return SATELLITE_DATA_PLAN_METERED;
    }
}
+73 −11
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SERV
import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS;

import static com.android.internal.telephony.satellite.SatelliteController.DEFAULT_CARRIER_EMERGENCY_CALL_WAIT_FOR_CONNECTION_TIMEOUT_MILLIS;
import static com.android.internal.telephony.satellite.SatelliteController.SATELLITE_DATA_PLAN_METERED;
import static com.android.internal.telephony.satellite.SatelliteController.SATELLITE_DATA_PLAN_UNMETERED;
import static com.android.internal.telephony.satellite.SatelliteController.SATELLITE_MODE_ENABLED_FALSE;
import static com.android.internal.telephony.satellite.SatelliteController.SATELLITE_MODE_ENABLED_TRUE;

@@ -3167,7 +3169,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        // Verify call the requestSetSatelliteEnabledForCarrier to enable the satellite when
        // satellite service is enabled by entitlement server.
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, true, new ArrayList<>(),
                new ArrayList<>(), mIIntegerConsumer);
                new ArrayList<>(), new HashMap<>(), mIIntegerConsumer);
        processAllMessages();

        assertTrue(waitForIIntegerConsumerResult(1));
@@ -3187,7 +3189,7 @@ public class SatelliteControllerTest extends TelephonyTest {
                .when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForRequestSetSatelliteEnabledForCarrier(false, SATELLITE_RESULT_SUCCESS);
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, new ArrayList<>(),
                new ArrayList<>(), mIIntegerConsumer);
                new ArrayList<>(), new HashMap<>(), mIIntegerConsumer);
        processAllMessages();

        assertTrue(waitForIIntegerConsumerResult(1));
@@ -3218,7 +3220,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        List<String> entitlementPlmnList = new ArrayList<>();
        List<String> barredPlmnList = new ArrayList<>();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

@@ -3276,7 +3278,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", ""}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

@@ -3284,7 +3286,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "123456789"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

@@ -3292,7 +3294,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "12"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

@@ -3300,7 +3302,7 @@ public class SatelliteControllerTest extends TelephonyTest {
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "1234"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));
    }
@@ -3309,7 +3311,7 @@ public class SatelliteControllerTest extends TelephonyTest {
            List<String> mergedPlmnList, List<String> overlayConfigPlmnList,
            List<String> barredPlmnList) {
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
                entitlementPlmnList, barredPlmnList, new HashMap<>(), mIIntegerConsumer);

        List<String> plmnListPerCarrier = mSatelliteControllerUT.getSatellitePlmnsForCarrier(
                SUB_ID);
@@ -3531,21 +3533,21 @@ public class SatelliteControllerTest extends TelephonyTest {

        // Change SUB_ID's EntitlementStatus to true
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, true, new ArrayList<>(),
                new ArrayList<>(), mIIntegerConsumer);
                new ArrayList<>(), new HashMap<>(), mIIntegerConsumer);

        assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID));
        assertEquals(false, satelliteEnabledPerCarrier.get(SUB_ID1));

        // Change SUB_ID1's EntitlementStatus to true
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID1, true, new ArrayList<>(),
                new ArrayList<>(), mIIntegerConsumer);
                new ArrayList<>(), new HashMap<>(), mIIntegerConsumer);

        assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID));
        assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID1));

        // Change SUB_ID's EntitlementStatus to false
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, new ArrayList<>(),
                new ArrayList<>(), mIIntegerConsumer);
                new ArrayList<>(), new HashMap<>(), mIIntegerConsumer);

        assertEquals(false, satelliteEnabledPerCarrier.get(SUB_ID));
        assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID1));
@@ -6363,4 +6365,64 @@ public class SatelliteControllerTest extends TelephonyTest {
            return isProvisioned != null ? isProvisioned : false;
        }
    }

    @Test
    public void testGetSatelliteDataPlanForPlmn_WithEntitlement() throws Exception {
        logd("testGetSatelliteDataPlanForPlmn_WithEntitlement");
        when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);

        replaceInstance(SatelliteController.class, "mMergedPlmnListPerCarrier",
                mSatelliteControllerUT, new SparseArray<>());
        List<String> overlayConfigPlmnList = new ArrayList<>();
        replaceInstance(SatelliteController.class, "mSatellitePlmnListFromOverlayConfig",
                mSatelliteControllerUT, overlayConfigPlmnList);
        mCarrierConfigBundle.putBoolean(
                CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL, true);
        mCarrierConfigBundle.putBoolean(CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
                true);

        List<String> entitlementPlmnList =
                Arrays.stream(new String[]{"00101", "00102", "00103", "00104"})
                        .toList();
        List<String> barredPlmnList = new ArrayList<>();
        Map<String, Integer> dataPlanListMap = Map.of(
                "00101", SATELLITE_DATA_PLAN_METERED,
                "00103", SATELLITE_DATA_PLAN_UNMETERED);
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, dataPlanListMap, mIIntegerConsumer);

        int dataPlanForPlmn;
        dataPlanForPlmn = mSatelliteControllerUT.getSatelliteDataPlanForPlmn(SUB_ID, "00101");
        assertEquals(SATELLITE_DATA_PLAN_METERED, dataPlanForPlmn);

        dataPlanForPlmn = mSatelliteControllerUT.getSatelliteDataPlanForPlmn(SUB_ID, "00103");
        assertEquals(SATELLITE_DATA_PLAN_UNMETERED, dataPlanForPlmn);
    }

    @Test
    public void testGetSatelliteDataPlanForPlmn_WithoutEntitlement() throws Exception {
        logd("testGetSatelliteDataPlanForPlmn_WithoutEntitlement");
        when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);

        replaceInstance(SatelliteController.class, "mMergedPlmnListPerCarrier",
                mSatelliteControllerUT, new SparseArray<>());
        List<String> overlayConfigPlmnList = new ArrayList<>();
        replaceInstance(SatelliteController.class, "mSatellitePlmnListFromOverlayConfig",
                mSatelliteControllerUT, overlayConfigPlmnList);
        mCarrierConfigBundle.putBoolean(
                CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL, true);
        mCarrierConfigBundle.putBoolean(CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
                true);

        List<String> entitlementPlmnList =
                Arrays.stream(new String[]{"00101", "00102", "00103", "00104"})
                        .toList();
        List<String> barredPlmnList = new ArrayList<>();
        Map<String, Integer> dataPlanListMap = new HashMap<>();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, dataPlanListMap, mIIntegerConsumer);

        int dataPlanForPlmn = mSatelliteControllerUT.getSatelliteDataPlanForPlmn(SUB_ID, "00101");
        assertEquals(SATELLITE_DATA_PLAN_METERED, dataPlanForPlmn);
    }
}