Loading src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java +5 −1 Original line number Diff line number Diff line Loading @@ -39,9 +39,13 @@ public class NtnCapabilityResolver { */ public static void resolveNtnCapability( @NonNull NetworkRegistrationInfo networkRegistrationInfo, int subId) { String registeredPlmn = networkRegistrationInfo.getRegisteredPlmn(); if (TextUtils.isEmpty(registeredPlmn)) { return; } SatelliteController satelliteController = SatelliteController.getInstance(); List<String> satellitePlmnList = satelliteController.getSatellitePlmnsForCarrier(subId); String registeredPlmn = networkRegistrationInfo.getRegisteredPlmn(); for (String satellitePlmn : satellitePlmnList) { if (TextUtils.equals(satellitePlmn, registeredPlmn)) { logd("Registered to satellite PLMN " + satellitePlmn); Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +49 −18 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats; import com.android.internal.telephony.satellite.metrics.ProvisionMetricsStats; import com.android.internal.telephony.satellite.metrics.SessionMetricsStats; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.TelephonyUtils; import com.android.internal.util.FunctionalUtils; import java.util.ArrayList; Loading Loading @@ -2756,9 +2757,10 @@ public class SatelliteController extends Handler { * @param callback callback for accept */ public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled, List<String> allowedPlmnList, List<String> barredPlmnList, @Nullable List<String> allowedPlmnList, @Nullable List<String> barredPlmnList, @Nullable IIntegerConsumer callback) { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { logd("onSatelliteEntitlementStatusUpdated: carrierEnabledSatelliteFlag is not enabled"); return; } Loading @@ -2770,10 +2772,16 @@ public class SatelliteController extends Handler { } }; } if (allowedPlmnList == null) { allowedPlmnList = new ArrayList<>(); } if (barredPlmnList == null) { barredPlmnList = new ArrayList<>(); } logd("onSatelliteEntitlementStatusUpdated subId=" + subId + ", entitlementEnabled=" + entitlementEnabled + ", allowedPlmnList=" + (Objects.equals(null, allowedPlmnList) ? "" : allowedPlmnList + ", barredPlmnList=" + (Objects.equals(null, barredPlmnList) ? "" : barredPlmnList + ""))); + entitlementEnabled + ", allowedPlmnList=[" + String.join(",", allowedPlmnList) + "]" + ", barredPlmnList=[" + String.join(",", barredPlmnList) + "]"); synchronized (mSupportedSatelliteServicesLock) { if (mSatelliteEntitlementStatusPerCarrier.get(subId, false) != entitlementEnabled) { Loading @@ -2786,13 +2794,18 @@ public class SatelliteController extends Handler { loge("onSatelliteEntitlementStatusUpdated: setSubscriptionProperty, e=" + e); } } mMergedPlmnListPerCarrier.remove(subId); if (isValidPlmnList(allowedPlmnList) && isValidPlmnList(barredPlmnList)) { mMergedPlmnListPerCarrier.remove(subId); mEntitlementPlmnListPerCarrier.put(subId, allowedPlmnList); mEntitlementBarredPlmnListPerCarrier.put(subId, barredPlmnList); updatePlmnListPerCarrier(subId); configureSatellitePlmnForCarrier(subId); mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList); } else { loge("onSatelliteEntitlementStatusUpdated: either invalid allowedPlmnList " + "or invalid barredPlmnList"); } if (mSatelliteEntitlementStatusPerCarrier.get(subId, false)) { removeAttachRestrictionForCarrier(subId, Loading @@ -2804,6 +2817,20 @@ public class SatelliteController extends Handler { } } /** * A list of PLMNs is considered valid if either the list is empty or all PLMNs in the list * are valid. */ private boolean isValidPlmnList(@NonNull List<String> plmnList) { for (String plmn : plmnList) { if (!TelephonyUtils.isValidPlmn(plmn)) { loge("Invalid PLMN = " + plmn); return false; } } return true; } /** * If we have not successfully queried the satellite modem for its satellite service support, * we will retry the query one more time. Otherwise, we will return the cached result. Loading Loading @@ -3420,17 +3447,19 @@ public class SatelliteController extends Handler { * Otherwise, If the carrierPlmnList exist then used it. */ private void updatePlmnListPerCarrier(int subId) { logd("updatePlmnListPerCarrier: subId=" + subId); synchronized (mSupportedSatelliteServicesLock) { List<String> carrierPlmnList, entitlementPlmnList; if (getConfigForSubId(subId).getBoolean(KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL, false)) { entitlementPlmnList = mEntitlementPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); logd("updatePlmnListPerCarrier: entitlementPlmnList=" + entitlementPlmnList logd("updatePlmnListPerCarrier: entitlementPlmnList=" + String.join(",", entitlementPlmnList) + " size=" + entitlementPlmnList.size()); if (!entitlementPlmnList.isEmpty()) { mMergedPlmnListPerCarrier.put(subId, entitlementPlmnList); logd("update it using entitlementPlmnList=" + entitlementPlmnList); logd("mMergedPlmnListPerCarrier is updated by Entitlement"); return; } } Loading @@ -3441,7 +3470,8 @@ public class SatelliteController extends Handler { int carrierId = tm.createForSubscriptionId(subId).getSimCarrierId(); List<String> plmnList = satelliteConfig.getAllSatellitePlmnsForCarrier(carrierId); if (!plmnList.isEmpty()) { logd("mMergedPlmnListPerCarrier is updated by ConfigUpdater : " + plmnList); logd("mMergedPlmnListPerCarrier is updated by ConfigUpdater : " + String.join(",", plmnList)); mMergedPlmnListPerCarrier.put(subId, plmnList); return; } Loading @@ -3450,12 +3480,13 @@ public class SatelliteController extends Handler { if (mSatelliteServicesSupportedByCarriers.containsKey(subId)) { carrierPlmnList = mSatelliteServicesSupportedByCarriers.get(subId).keySet().stream().toList(); logd("mMergedPlmnListPerCarrier is updated by carrier config"); logd("mMergedPlmnListPerCarrier is updated by carrier config: " + String.join(",", carrierPlmnList)); } else { carrierPlmnList = new ArrayList<>(); logd("Empty mMergedPlmnListPerCarrier"); } mMergedPlmnListPerCarrier.put(subId, carrierPlmnList); logd("update it using carrierPlmnList=" + carrierPlmnList); } } Loading @@ -3473,7 +3504,7 @@ public class SatelliteController extends Handler { if (!supportedServicesPerPlmn.isEmpty()) { mSatelliteServicesSupportedByCarriers.put(subId, supportedServicesPerPlmn); logd("updateSupportedSatelliteServices using ConfigUpdater, " + "supportedServicesPerPlmn = " + supportedServicesPerPlmn); + "supportedServicesPerPlmn = " + supportedServicesPerPlmn.size()); updatePlmnListPerCarrier(subId); return; } else { Loading Loading @@ -3580,7 +3611,7 @@ public class SatelliteController extends Handler { return; } logd("updateEntitlementPlmnListPerCarrier: entitlementPlmnList=" + entitlementPlmnList); + String.join(",", entitlementPlmnList)); mEntitlementPlmnListPerCarrier.put(subId, entitlementPlmnList); } } Loading src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +16 −18 Original line number Diff line number Diff line Loading @@ -16,9 +16,6 @@ package com.android.internal.telephony.satellite; import static android.telephony.NetworkRegistrationInfo.FIRST_SERVICE_TYPE; import static android.telephony.NetworkRegistrationInfo.LAST_SERVICE_TYPE; import static java.util.stream.Collectors.joining; import android.annotation.NonNull; Loading @@ -43,6 +40,7 @@ import android.telephony.satellite.stub.SatelliteResult; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.TelephonyUtils; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -302,9 +300,10 @@ public class SatelliteServiceUtils { } for (String plmn : supportedServicesBundle.keySet()) { if (TelephonyUtils.isValidPlmn(plmn)) { Set<Integer> supportedServicesSet = new HashSet<>(); for (int serviceType : supportedServicesBundle.getIntArray(plmn)) { if (isServiceTypeValid(serviceType)) { if (TelephonyUtils.isValidService(serviceType)) { supportedServicesSet.add(serviceType); } else { loge("parseSupportedSatelliteServices: invalid service type=" + serviceType Loading @@ -315,6 +314,9 @@ public class SatelliteServiceUtils { + supportedServicesSet.stream().map(String::valueOf).collect( joining(","))); supportedServicesMap.put(plmn, supportedServicesSet); } else { loge("parseSupportedSatelliteServices: invalid plmn=" + plmn); } } return supportedServicesMap; } Loading Loading @@ -344,10 +346,6 @@ public class SatelliteServiceUtils { return mergedStrSet.stream().toList(); } private static boolean isServiceTypeValid(int serviceType) { return (serviceType >= FIRST_SERVICE_TYPE && serviceType <= LAST_SERVICE_TYPE); } /** * Return phone associated with phoneId 0. * Loading tests/telephonytests/src/com/android/internal/telephony/satellite/NtnCapabilityResolverTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.annotation.NonNull; import android.telephony.CellIdentity; Loading Loading @@ -100,6 +102,7 @@ public class NtnCapabilityResolverTest extends TelephonyTest { .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(satelliteNri, SUB_ID); verify(mMockSatelliteController).getSatellitePlmnsForCarrier(anyInt()); assertNotEquals(satelliteNri, originalNri); assertTrue(satelliteNri.isNonTerrestrialNetwork()); assertTrue(Arrays.equals(mSatelliteSupportedServices, Loading @@ -118,12 +121,32 @@ public class NtnCapabilityResolverTest extends TelephonyTest { .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(cellularNri, SUB_ID); verify(mMockSatelliteController, times(2)).getSatellitePlmnsForCarrier(anyInt()); assertEquals(cellularNri, originalNri); assertFalse(cellularNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, cellularNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); // Test resolving an empty-PLMN NetworkRegistrationInfo. NetworkRegistrationInfo emptyPlmnNri = createNetworkRegistrationInfo(""); originalNri = new NetworkRegistrationInfo(emptyPlmnNri); assertEquals(emptyPlmnNri, originalNri); assertFalse(emptyPlmnNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, emptyPlmnNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(emptyPlmnNri, SUB_ID); verify(mMockSatelliteController, times(2)).getSatellitePlmnsForCarrier(anyInt()); assertEquals(emptyPlmnNri, originalNri); assertFalse(emptyPlmnNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, emptyPlmnNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); } private NetworkRegistrationInfo createNetworkRegistrationInfo(@NonNull String registeredPlmn) { Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +41 −1 Original line number Diff line number Diff line Loading @@ -2750,7 +2750,7 @@ public class SatelliteControllerTest extends TelephonyTest { 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. // plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = new ArrayList<>(); mergedPlmnList = carrierConfigPlmnList; Loading @@ -2763,6 +2763,46 @@ public class SatelliteControllerTest extends TelephonyTest { barredPlmnList = Arrays.stream(new String[]{"00105", "00107"}).toList(); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is null and the overlay config plmn list and the carrier // plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = null; mergedPlmnList = carrierConfigPlmnList; verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", ""}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "123456789"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "12"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "1234"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); } private void verifyPassingToModemAfterQueryCompleted(List<String> entitlementPlmnList, Loading Loading
src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java +5 −1 Original line number Diff line number Diff line Loading @@ -39,9 +39,13 @@ public class NtnCapabilityResolver { */ public static void resolveNtnCapability( @NonNull NetworkRegistrationInfo networkRegistrationInfo, int subId) { String registeredPlmn = networkRegistrationInfo.getRegisteredPlmn(); if (TextUtils.isEmpty(registeredPlmn)) { return; } SatelliteController satelliteController = SatelliteController.getInstance(); List<String> satellitePlmnList = satelliteController.getSatellitePlmnsForCarrier(subId); String registeredPlmn = networkRegistrationInfo.getRegisteredPlmn(); for (String satellitePlmn : satellitePlmnList) { if (TextUtils.equals(satellitePlmn, registeredPlmn)) { logd("Registered to satellite PLMN " + satellitePlmn); Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +49 −18 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats; import com.android.internal.telephony.satellite.metrics.ProvisionMetricsStats; import com.android.internal.telephony.satellite.metrics.SessionMetricsStats; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.TelephonyUtils; import com.android.internal.util.FunctionalUtils; import java.util.ArrayList; Loading Loading @@ -2756,9 +2757,10 @@ public class SatelliteController extends Handler { * @param callback callback for accept */ public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled, List<String> allowedPlmnList, List<String> barredPlmnList, @Nullable List<String> allowedPlmnList, @Nullable List<String> barredPlmnList, @Nullable IIntegerConsumer callback) { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { logd("onSatelliteEntitlementStatusUpdated: carrierEnabledSatelliteFlag is not enabled"); return; } Loading @@ -2770,10 +2772,16 @@ public class SatelliteController extends Handler { } }; } if (allowedPlmnList == null) { allowedPlmnList = new ArrayList<>(); } if (barredPlmnList == null) { barredPlmnList = new ArrayList<>(); } logd("onSatelliteEntitlementStatusUpdated subId=" + subId + ", entitlementEnabled=" + entitlementEnabled + ", allowedPlmnList=" + (Objects.equals(null, allowedPlmnList) ? "" : allowedPlmnList + ", barredPlmnList=" + (Objects.equals(null, barredPlmnList) ? "" : barredPlmnList + ""))); + entitlementEnabled + ", allowedPlmnList=[" + String.join(",", allowedPlmnList) + "]" + ", barredPlmnList=[" + String.join(",", barredPlmnList) + "]"); synchronized (mSupportedSatelliteServicesLock) { if (mSatelliteEntitlementStatusPerCarrier.get(subId, false) != entitlementEnabled) { Loading @@ -2786,13 +2794,18 @@ public class SatelliteController extends Handler { loge("onSatelliteEntitlementStatusUpdated: setSubscriptionProperty, e=" + e); } } mMergedPlmnListPerCarrier.remove(subId); if (isValidPlmnList(allowedPlmnList) && isValidPlmnList(barredPlmnList)) { mMergedPlmnListPerCarrier.remove(subId); mEntitlementPlmnListPerCarrier.put(subId, allowedPlmnList); mEntitlementBarredPlmnListPerCarrier.put(subId, barredPlmnList); updatePlmnListPerCarrier(subId); configureSatellitePlmnForCarrier(subId); mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList); } else { loge("onSatelliteEntitlementStatusUpdated: either invalid allowedPlmnList " + "or invalid barredPlmnList"); } if (mSatelliteEntitlementStatusPerCarrier.get(subId, false)) { removeAttachRestrictionForCarrier(subId, Loading @@ -2804,6 +2817,20 @@ public class SatelliteController extends Handler { } } /** * A list of PLMNs is considered valid if either the list is empty or all PLMNs in the list * are valid. */ private boolean isValidPlmnList(@NonNull List<String> plmnList) { for (String plmn : plmnList) { if (!TelephonyUtils.isValidPlmn(plmn)) { loge("Invalid PLMN = " + plmn); return false; } } return true; } /** * If we have not successfully queried the satellite modem for its satellite service support, * we will retry the query one more time. Otherwise, we will return the cached result. Loading Loading @@ -3420,17 +3447,19 @@ public class SatelliteController extends Handler { * Otherwise, If the carrierPlmnList exist then used it. */ private void updatePlmnListPerCarrier(int subId) { logd("updatePlmnListPerCarrier: subId=" + subId); synchronized (mSupportedSatelliteServicesLock) { List<String> carrierPlmnList, entitlementPlmnList; if (getConfigForSubId(subId).getBoolean(KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL, false)) { entitlementPlmnList = mEntitlementPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); logd("updatePlmnListPerCarrier: entitlementPlmnList=" + entitlementPlmnList logd("updatePlmnListPerCarrier: entitlementPlmnList=" + String.join(",", entitlementPlmnList) + " size=" + entitlementPlmnList.size()); if (!entitlementPlmnList.isEmpty()) { mMergedPlmnListPerCarrier.put(subId, entitlementPlmnList); logd("update it using entitlementPlmnList=" + entitlementPlmnList); logd("mMergedPlmnListPerCarrier is updated by Entitlement"); return; } } Loading @@ -3441,7 +3470,8 @@ public class SatelliteController extends Handler { int carrierId = tm.createForSubscriptionId(subId).getSimCarrierId(); List<String> plmnList = satelliteConfig.getAllSatellitePlmnsForCarrier(carrierId); if (!plmnList.isEmpty()) { logd("mMergedPlmnListPerCarrier is updated by ConfigUpdater : " + plmnList); logd("mMergedPlmnListPerCarrier is updated by ConfigUpdater : " + String.join(",", plmnList)); mMergedPlmnListPerCarrier.put(subId, plmnList); return; } Loading @@ -3450,12 +3480,13 @@ public class SatelliteController extends Handler { if (mSatelliteServicesSupportedByCarriers.containsKey(subId)) { carrierPlmnList = mSatelliteServicesSupportedByCarriers.get(subId).keySet().stream().toList(); logd("mMergedPlmnListPerCarrier is updated by carrier config"); logd("mMergedPlmnListPerCarrier is updated by carrier config: " + String.join(",", carrierPlmnList)); } else { carrierPlmnList = new ArrayList<>(); logd("Empty mMergedPlmnListPerCarrier"); } mMergedPlmnListPerCarrier.put(subId, carrierPlmnList); logd("update it using carrierPlmnList=" + carrierPlmnList); } } Loading @@ -3473,7 +3504,7 @@ public class SatelliteController extends Handler { if (!supportedServicesPerPlmn.isEmpty()) { mSatelliteServicesSupportedByCarriers.put(subId, supportedServicesPerPlmn); logd("updateSupportedSatelliteServices using ConfigUpdater, " + "supportedServicesPerPlmn = " + supportedServicesPerPlmn); + "supportedServicesPerPlmn = " + supportedServicesPerPlmn.size()); updatePlmnListPerCarrier(subId); return; } else { Loading Loading @@ -3580,7 +3611,7 @@ public class SatelliteController extends Handler { return; } logd("updateEntitlementPlmnListPerCarrier: entitlementPlmnList=" + entitlementPlmnList); + String.join(",", entitlementPlmnList)); mEntitlementPlmnListPerCarrier.put(subId, entitlementPlmnList); } } Loading
src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +16 −18 Original line number Diff line number Diff line Loading @@ -16,9 +16,6 @@ package com.android.internal.telephony.satellite; import static android.telephony.NetworkRegistrationInfo.FIRST_SERVICE_TYPE; import static android.telephony.NetworkRegistrationInfo.LAST_SERVICE_TYPE; import static java.util.stream.Collectors.joining; import android.annotation.NonNull; Loading @@ -43,6 +40,7 @@ import android.telephony.satellite.stub.SatelliteResult; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.TelephonyUtils; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -302,9 +300,10 @@ public class SatelliteServiceUtils { } for (String plmn : supportedServicesBundle.keySet()) { if (TelephonyUtils.isValidPlmn(plmn)) { Set<Integer> supportedServicesSet = new HashSet<>(); for (int serviceType : supportedServicesBundle.getIntArray(plmn)) { if (isServiceTypeValid(serviceType)) { if (TelephonyUtils.isValidService(serviceType)) { supportedServicesSet.add(serviceType); } else { loge("parseSupportedSatelliteServices: invalid service type=" + serviceType Loading @@ -315,6 +314,9 @@ public class SatelliteServiceUtils { + supportedServicesSet.stream().map(String::valueOf).collect( joining(","))); supportedServicesMap.put(plmn, supportedServicesSet); } else { loge("parseSupportedSatelliteServices: invalid plmn=" + plmn); } } return supportedServicesMap; } Loading Loading @@ -344,10 +346,6 @@ public class SatelliteServiceUtils { return mergedStrSet.stream().toList(); } private static boolean isServiceTypeValid(int serviceType) { return (serviceType >= FIRST_SERVICE_TYPE && serviceType <= LAST_SERVICE_TYPE); } /** * Return phone associated with phoneId 0. * Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/NtnCapabilityResolverTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.annotation.NonNull; import android.telephony.CellIdentity; Loading Loading @@ -100,6 +102,7 @@ public class NtnCapabilityResolverTest extends TelephonyTest { .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(satelliteNri, SUB_ID); verify(mMockSatelliteController).getSatellitePlmnsForCarrier(anyInt()); assertNotEquals(satelliteNri, originalNri); assertTrue(satelliteNri.isNonTerrestrialNetwork()); assertTrue(Arrays.equals(mSatelliteSupportedServices, Loading @@ -118,12 +121,32 @@ public class NtnCapabilityResolverTest extends TelephonyTest { .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(cellularNri, SUB_ID); verify(mMockSatelliteController, times(2)).getSatellitePlmnsForCarrier(anyInt()); assertEquals(cellularNri, originalNri); assertFalse(cellularNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, cellularNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); // Test resolving an empty-PLMN NetworkRegistrationInfo. NetworkRegistrationInfo emptyPlmnNri = createNetworkRegistrationInfo(""); originalNri = new NetworkRegistrationInfo(emptyPlmnNri); assertEquals(emptyPlmnNri, originalNri); assertFalse(emptyPlmnNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, emptyPlmnNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); NtnCapabilityResolver.resolveNtnCapability(emptyPlmnNri, SUB_ID); verify(mMockSatelliteController, times(2)).getSatellitePlmnsForCarrier(anyInt()); assertEquals(emptyPlmnNri, originalNri); assertFalse(emptyPlmnNri.isNonTerrestrialNetwork()); assertFalse(Arrays.equals(mSatelliteSupportedServices, emptyPlmnNri.getAvailableServices().stream() .mapToInt(Integer::intValue) .toArray())); } private NetworkRegistrationInfo createNetworkRegistrationInfo(@NonNull String registeredPlmn) { Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +41 −1 Original line number Diff line number Diff line Loading @@ -2750,7 +2750,7 @@ public class SatelliteControllerTest extends TelephonyTest { 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. // plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = new ArrayList<>(); mergedPlmnList = carrierConfigPlmnList; Loading @@ -2763,6 +2763,46 @@ public class SatelliteControllerTest extends TelephonyTest { barredPlmnList = Arrays.stream(new String[]{"00105", "00107"}).toList(); verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is null and the overlay config plmn list and the carrier // plmn list are available, verify passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = null; mergedPlmnList = carrierConfigPlmnList; verifyPassingToModemAfterQueryCompleted(entitlementPlmnList, mergedPlmnList, overlayConfigPlmnList, barredPlmnList); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", ""}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "123456789"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "12"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); // If the entitlement plmn list is invalid, verify not passing to the modem. reset(mMockSatelliteModemInterface); entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "1234"}).toList(); mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false, entitlementPlmnList, barredPlmnList, mIIntegerConsumer); verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(), anyBoolean(), anyBoolean(), any(Message.class)); } private void verifyPassingToModemAfterQueryCompleted(List<String> entitlementPlmnList, Loading