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

Commit 0cf9aa03 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju
Browse files

Support TS43 enablement based Data Plan type check API

Flag:com.android.internal.telephony.flags.carrier_enabled_satellite_flag
Bug: 376877718
Test: m and atest
Test: Device test for regression at b/381033899 and b/377063214
Change-Id: I88b89bc00b6d0ad3b6f3e92806f5745420f1257b
parent 12b6dddf
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);
@@ -8263,4 +8275,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
@@ -81,6 +81,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;

@@ -3166,7 +3168,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));
@@ -3186,7 +3188,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));
@@ -3217,7 +3219,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));

@@ -3275,7 +3277,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));

@@ -3283,7 +3285,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));

@@ -3291,7 +3293,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));

@@ -3299,7 +3301,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));
    }
@@ -3308,7 +3310,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);
@@ -3530,21 +3532,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));
@@ -6352,4 +6354,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);
    }
}