Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +12 −3 Original line number Diff line number Diff line Loading @@ -375,6 +375,9 @@ public class SatelliteController extends Handler { /** Key Subscription ID, value : PLMN allowed list from entitlement. */ @GuardedBy("mSupportedSatelliteServicesLock") private SparseArray<List<String>> mEntitlementPlmnListPerCarrier = new SparseArray<>(); /** Key Subscription ID, value : PLMN barred list from entitlement. */ @GuardedBy("mSupportedSatelliteServicesLock") private SparseArray<List<String>> mEntitlementBarredPlmnListPerCarrier = new SparseArray<>(); /** * Key : Subscription ID, Value : If there is an entitlementPlmnList, use it. Otherwise, use the * carrierPlmnList. */ Loading Loading @@ -2746,10 +2749,12 @@ public class SatelliteController extends Handler { * @param subId subId * @param entitlementEnabled {@code true} Satellite service enabled * @param allowedPlmnList plmn allowed list to use the satellite service * @param barredPlmnList plmn barred list to pass the modem * @param callback callback for accept */ public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled, List<String> allowedPlmnList, @Nullable IIntegerConsumer callback) { List<String> allowedPlmnList, List<String> barredPlmnList, @Nullable IIntegerConsumer callback) { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { return; } Loading @@ -2764,7 +2769,8 @@ public class SatelliteController extends Handler { } logd("onSatelliteEntitlementStatusUpdated subId=" + subId + " , entitlementEnabled=" + entitlementEnabled + ", allowedPlmnList=" + (Objects.equals(null, allowedPlmnList) ? "" : allowedPlmnList + "")); ? "" : allowedPlmnList + ", barredPlmnList=" + (Objects.equals(null, barredPlmnList) ? "" : barredPlmnList + ""))); synchronized (mSupportedSatelliteServicesLock) { if (mSatelliteEntitlementStatusPerCarrier.get(subId, false) != entitlementEnabled) { Loading @@ -2780,6 +2786,7 @@ public class SatelliteController extends Handler { mMergedPlmnListPerCarrier.remove(subId); mEntitlementPlmnListPerCarrier.put(subId, allowedPlmnList); mEntitlementBarredPlmnListPerCarrier.put(subId, barredPlmnList); updatePlmnListPerCarrier(subId); configureSatellitePlmnForCarrier(subId); mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList); Loading Loading @@ -3368,10 +3375,12 @@ public class SatelliteController extends Handler { synchronized (mSupportedSatelliteServicesLock) { List<String> carrierPlmnList = mMergedPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); List<String> barredPlmnList = mEntitlementBarredPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); int slotId = SubscriptionManager.getSlotIndex(subId); mSatelliteModemInterface.setSatellitePlmn(slotId, carrierPlmnList, SatelliteServiceUtils.mergeStrLists( carrierPlmnList, mSatellitePlmnListFromOverlayConfig), carrierPlmnList, mSatellitePlmnListFromOverlayConfig, barredPlmnList), obtainMessage(EVENT_SET_SATELLITE_PLMN_INFO_DONE)); } } Loading src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -330,6 +330,20 @@ public class SatelliteServiceUtils { return mergedStrSet.stream().toList(); } /** * Merge three string lists into one such that the result list does not have any duplicate * items. */ @NonNull public static List<String> mergeStrLists(List<String> strList1, List<String> strList2, List<String> strList3) { Set<String> mergedStrSet = new HashSet<>(); mergedStrSet.addAll(strList1); mergedStrSet.addAll(strList2); mergedStrSet.addAll(strList3); return mergedStrSet.stream().toList(); } private static boolean isServiceTypeValid(int serviceType) { return (serviceType >= FIRST_SERVICE_TYPE && serviceType <= LAST_SERVICE_TYPE); } Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +25 −16 Original line number Diff line number Diff line Loading @@ -2667,7 +2667,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<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); Loading @@ -2687,7 +2687,7 @@ public class SatelliteControllerTest extends TelephonyTest { .when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestSetSatelliteEnabledForCarrier(false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, new ArrayList<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); Loading @@ -2712,17 +2712,18 @@ public class SatelliteControllerTest extends TelephonyTest { mCarrierConfigBundle.putBoolean(CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, true); // If the entitlement plmn list, the carrier plmn list and the overlay config plmn list // are empty verify not passing to the modem. // If the entitlement plmn list, the carrier plmn list, the overlay config plmn list and // the barred plmn list are empty, verify not passing to the modem. reset(mMockSatelliteModemInterface); List<String> entitlementPlmnList = new ArrayList<>(); List<String> barredPlmnList = new ArrayList<>(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, mIIntegerConsumer); entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list and the overlay config plmn list are available and the // carrier plmn list is empty verify passing to the modem. // carrier plmn list and the barred plmn list are empty, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "00103"}).toList(); List<String> mergedPlmnList = entitlementPlmnList; Loading @@ -2731,10 +2732,10 @@ public class SatelliteControllerTest extends TelephonyTest { replaceInstance(SatelliteController.class, "mSatellitePlmnListFromOverlayConfig", mSatelliteControllerUT, overlayConfigPlmnList); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list, the overlay config plmn list and the carrier plmn list // are available, verify passing to the modem. // are available and the barred plmn list is empty, verify passing to the modem. reset(mMockSatelliteModemInterface); Map<Integer, Map<String, Set<Integer>>> satelliteServicesSupportedByCarriers = new HashMap<>(); Loading @@ -2746,7 +2747,7 @@ public class SatelliteControllerTest extends TelephonyTest { replaceInstance(SatelliteController.class, "mSatelliteServicesSupportedByCarriers", mSatelliteControllerUT, satelliteServicesSupportedByCarriers); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is empty and the overlay config plmn list and the carrier // plmn list are available, verify not passing to the modem. Loading @@ -2754,18 +2755,26 @@ public class SatelliteControllerTest extends TelephonyTest { entitlementPlmnList = new ArrayList<>(); mergedPlmnList = carrierConfigPlmnList; verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is empty and the overlay config plmn list, the carrier // plmn list and the barred plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); barredPlmnList = Arrays.stream(new String[]{"00105", "00107"}).toList(); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); } private void verifyPassingToModemAfterQueryCompleted(List<String> entitlementPlmnList, List<String> mergedPlmnList, List<String> overlayConfigPlmnList) { List<String> mergedPlmnList, List<String> overlayConfigPlmnList, List<String> barredPlmnList) { mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, mIIntegerConsumer); entitlementPlmnList, barredPlmnList, mIIntegerConsumer); List<String> plmnListPerCarrier = mSatelliteControllerUT.getSatellitePlmnsForCarrier( SUB_ID); List<String> allSatellitePlmnList = SatelliteServiceUtils.mergeStrLists( plmnListPerCarrier, overlayConfigPlmnList); plmnListPerCarrier, overlayConfigPlmnList, barredPlmnList); assertEquals(mergedPlmnList, plmnListPerCarrier); if (overlayConfigPlmnList.isEmpty()) { Loading Loading @@ -2963,21 +2972,21 @@ public class SatelliteControllerTest extends TelephonyTest { // Change SUB_ID's EntitlementStatus to true mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, true, new ArrayList<>(), mIIntegerConsumer); new ArrayList<>(), 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<>(), mIIntegerConsumer); new ArrayList<>(), 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<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); assertEquals(false, satelliteEnabledPerCarrier.get(SUB_ID)); assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID1)); Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteServiceUtilsTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -105,5 +105,10 @@ public class SatelliteServiceUtilsTest extends TelephonyTest { List<String> expectedMergedList = Arrays.asList("1", "2", "3"); List<String> mergedList = SatelliteServiceUtils.mergeStrLists(l1, l2); assertEquals(expectedMergedList, mergedList); List<String> l3 = Arrays.asList("2", "3", "4"); expectedMergedList = Arrays.asList("1", "2", "3", "4"); mergedList = SatelliteServiceUtils.mergeStrLists(l1, l2, l3); assertEquals(expectedMergedList, mergedList); } } Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +12 −3 Original line number Diff line number Diff line Loading @@ -375,6 +375,9 @@ public class SatelliteController extends Handler { /** Key Subscription ID, value : PLMN allowed list from entitlement. */ @GuardedBy("mSupportedSatelliteServicesLock") private SparseArray<List<String>> mEntitlementPlmnListPerCarrier = new SparseArray<>(); /** Key Subscription ID, value : PLMN barred list from entitlement. */ @GuardedBy("mSupportedSatelliteServicesLock") private SparseArray<List<String>> mEntitlementBarredPlmnListPerCarrier = new SparseArray<>(); /** * Key : Subscription ID, Value : If there is an entitlementPlmnList, use it. Otherwise, use the * carrierPlmnList. */ Loading Loading @@ -2746,10 +2749,12 @@ public class SatelliteController extends Handler { * @param subId subId * @param entitlementEnabled {@code true} Satellite service enabled * @param allowedPlmnList plmn allowed list to use the satellite service * @param barredPlmnList plmn barred list to pass the modem * @param callback callback for accept */ public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled, List<String> allowedPlmnList, @Nullable IIntegerConsumer callback) { List<String> allowedPlmnList, List<String> barredPlmnList, @Nullable IIntegerConsumer callback) { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { return; } Loading @@ -2764,7 +2769,8 @@ public class SatelliteController extends Handler { } logd("onSatelliteEntitlementStatusUpdated subId=" + subId + " , entitlementEnabled=" + entitlementEnabled + ", allowedPlmnList=" + (Objects.equals(null, allowedPlmnList) ? "" : allowedPlmnList + "")); ? "" : allowedPlmnList + ", barredPlmnList=" + (Objects.equals(null, barredPlmnList) ? "" : barredPlmnList + ""))); synchronized (mSupportedSatelliteServicesLock) { if (mSatelliteEntitlementStatusPerCarrier.get(subId, false) != entitlementEnabled) { Loading @@ -2780,6 +2786,7 @@ public class SatelliteController extends Handler { mMergedPlmnListPerCarrier.remove(subId); mEntitlementPlmnListPerCarrier.put(subId, allowedPlmnList); mEntitlementBarredPlmnListPerCarrier.put(subId, barredPlmnList); updatePlmnListPerCarrier(subId); configureSatellitePlmnForCarrier(subId); mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList); Loading Loading @@ -3368,10 +3375,12 @@ public class SatelliteController extends Handler { synchronized (mSupportedSatelliteServicesLock) { List<String> carrierPlmnList = mMergedPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); List<String> barredPlmnList = mEntitlementBarredPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); int slotId = SubscriptionManager.getSlotIndex(subId); mSatelliteModemInterface.setSatellitePlmn(slotId, carrierPlmnList, SatelliteServiceUtils.mergeStrLists( carrierPlmnList, mSatellitePlmnListFromOverlayConfig), carrierPlmnList, mSatellitePlmnListFromOverlayConfig, barredPlmnList), obtainMessage(EVENT_SET_SATELLITE_PLMN_INFO_DONE)); } } Loading
src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -330,6 +330,20 @@ public class SatelliteServiceUtils { return mergedStrSet.stream().toList(); } /** * Merge three string lists into one such that the result list does not have any duplicate * items. */ @NonNull public static List<String> mergeStrLists(List<String> strList1, List<String> strList2, List<String> strList3) { Set<String> mergedStrSet = new HashSet<>(); mergedStrSet.addAll(strList1); mergedStrSet.addAll(strList2); mergedStrSet.addAll(strList3); return mergedStrSet.stream().toList(); } private static boolean isServiceTypeValid(int serviceType) { return (serviceType >= FIRST_SERVICE_TYPE && serviceType <= LAST_SERVICE_TYPE); } Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +25 −16 Original line number Diff line number Diff line Loading @@ -2667,7 +2667,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<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); Loading @@ -2687,7 +2687,7 @@ public class SatelliteControllerTest extends TelephonyTest { .when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestSetSatelliteEnabledForCarrier(false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, new ArrayList<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); Loading @@ -2712,17 +2712,18 @@ public class SatelliteControllerTest extends TelephonyTest { mCarrierConfigBundle.putBoolean(CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, true); // If the entitlement plmn list, the carrier plmn list and the overlay config plmn list // are empty verify not passing to the modem. // If the entitlement plmn list, the carrier plmn list, the overlay config plmn list and // the barred plmn list are empty, verify not passing to the modem. reset(mMockSatelliteModemInterface); List<String> entitlementPlmnList = new ArrayList<>(); List<String> barredPlmnList = new ArrayList<>(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, mIIntegerConsumer); entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list and the overlay config plmn list are available and the // carrier plmn list is empty verify passing to the modem. // carrier plmn list and the barred plmn list are empty, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "00103"}).toList(); List<String> mergedPlmnList = entitlementPlmnList; Loading @@ -2731,10 +2732,10 @@ public class SatelliteControllerTest extends TelephonyTest { replaceInstance(SatelliteController.class, "mSatellitePlmnListFromOverlayConfig", mSatelliteControllerUT, overlayConfigPlmnList); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list, the overlay config plmn list and the carrier plmn list // are available, verify passing to the modem. // are available and the barred plmn list is empty, verify passing to the modem. reset(mMockSatelliteModemInterface); Map<Integer, Map<String, Set<Integer>>> satelliteServicesSupportedByCarriers = new HashMap<>(); Loading @@ -2746,7 +2747,7 @@ public class SatelliteControllerTest extends TelephonyTest { replaceInstance(SatelliteController.class, "mSatelliteServicesSupportedByCarriers", mSatelliteControllerUT, satelliteServicesSupportedByCarriers); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is empty and the overlay config plmn list and the carrier // plmn list are available, verify not passing to the modem. Loading @@ -2754,18 +2755,26 @@ public class SatelliteControllerTest extends TelephonyTest { entitlementPlmnList = new ArrayList<>(); mergedPlmnList = carrierConfigPlmnList; verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList); overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is empty and the overlay config plmn list, the carrier // plmn list and the barred plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); barredPlmnList = Arrays.stream(new String[]{"00105", "00107"}).toList(); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); } private void verifyPassingToModemAfterQueryCompleted(List<String> entitlementPlmnList, List<String> mergedPlmnList, List<String> overlayConfigPlmnList) { List<String> mergedPlmnList, List<String> overlayConfigPlmnList, List<String> barredPlmnList) { mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, mIIntegerConsumer); entitlementPlmnList, barredPlmnList, mIIntegerConsumer); List<String> plmnListPerCarrier = mSatelliteControllerUT.getSatellitePlmnsForCarrier( SUB_ID); List<String> allSatellitePlmnList = SatelliteServiceUtils.mergeStrLists( plmnListPerCarrier, overlayConfigPlmnList); plmnListPerCarrier, overlayConfigPlmnList, barredPlmnList); assertEquals(mergedPlmnList, plmnListPerCarrier); if (overlayConfigPlmnList.isEmpty()) { Loading Loading @@ -2963,21 +2972,21 @@ public class SatelliteControllerTest extends TelephonyTest { // Change SUB_ID's EntitlementStatus to true mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, true, new ArrayList<>(), mIIntegerConsumer); new ArrayList<>(), 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<>(), mIIntegerConsumer); new ArrayList<>(), 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<>(), mIIntegerConsumer); new ArrayList<>(), mIIntegerConsumer); assertEquals(false, satelliteEnabledPerCarrier.get(SUB_ID)); assertEquals(true, satelliteEnabledPerCarrier.get(SUB_ID1)); Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteServiceUtilsTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -105,5 +105,10 @@ public class SatelliteServiceUtilsTest extends TelephonyTest { List<String> expectedMergedList = Arrays.asList("1", "2", "3"); List<String> mergedList = SatelliteServiceUtils.mergeStrLists(l1, l2); assertEquals(expectedMergedList, mergedList); List<String> l3 = Arrays.asList("2", "3", "4"); expectedMergedList = Arrays.asList("1", "2", "3", "4"); mergedList = SatelliteServiceUtils.mergeStrLists(l1, l2, l3); assertEquals(expectedMergedList, mergedList); } }