diff options
author | 2025-03-17 13:25:58 -0700 | |
---|---|---|
committer | 2025-03-17 13:25:58 -0700 | |
commit | e1db9bd79e67728db50262912b620f9f61c1d125 (patch) | |
tree | 8f74eede560b59bacee91700f25b1f9bd952bb3a /src | |
parent | 73c4f11cb111c4672a8b45e05dfe4988cb9144f1 (diff) | |
parent | a859dce948d18142549a792bd825da200cfeb013 (diff) |
Merge "Send all satellite PLMNs" into main
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/android/internal/telephony/Phone.java | 5 | ||||
-rw-r--r-- | src/java/com/android/internal/telephony/satellite/SatelliteController.java | 215 |
2 files changed, 185 insertions, 35 deletions
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java index a90addac6e..e136e5a0e4 100644 --- a/src/java/com/android/internal/telephony/Phone.java +++ b/src/java/com/android/internal/telephony/Phone.java @@ -5467,6 +5467,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { public void setSatellitePlmn(int simSlot, @NonNull List<String> carrierPlmnList, @NonNull List<String> allSatellitePlmnList, Message result) { + logd("setSatellitePlmn: simSlot=" + simSlot + + " carrierPlmnList=" + carrierPlmnList.toString() + + " allSatellitePlmnList=" + allSatellitePlmnList.toString()); mCi.setSatellitePlmn(simSlot, carrierPlmnList, allSatellitePlmnList, result); } @@ -5480,6 +5483,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { */ public void setSatelliteEnabledForCarrier(int simSlot, boolean satelliteEnabled, Message result) { + logd("setSatelliteEnabledForCarrier: simSlot=" + simSlot + + " satelliteEnabled=" + satelliteEnabled); mCi.setSatelliteEnabledForCarrier(simSlot, satelliteEnabled, result); } diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java index be4308722f..93d222b512 100644 --- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java +++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java @@ -242,6 +242,8 @@ public class SatelliteController extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public static final String NTN_SMS_SUPPORTED_BY_MESSAGES_APP_KEY = "ntn_sms_supported_by_messages_app_key"; + public static final String CARRIER_ROAMING_NTN_ALL_SATELLITE_PLMN_SET_KEY = + "carrier_roaming_ntn_all_satellite_plmn_set_key"; public static final long DEFAULT_CARRIER_EMERGENCY_CALL_WAIT_FOR_CONNECTION_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(30); @@ -319,6 +321,8 @@ public class SatelliteController extends Handler { private static final int CMD_LOCATION_SERVICE_STATE_CHANGED = 62; protected static final int EVENT_WAIT_FOR_UPDATE_SYSTEM_SELECTION_CHANNELS_RESPONSE_TIMED_OUT = 63; + private static final int CMD_GET_SATELLITE_ENABLED_FOR_CARRIER = 64; + private static final int EVENT_GET_SATELLITE_ENABLED_FOR_CARRIER_DONE = 65; @NonNull private static SatelliteController sInstance; @NonNull private final Context mContext; @@ -693,6 +697,10 @@ public class SatelliteController extends Handler { @GuardedBy("mNtnSmsSupportedByMessagesAppLock") private Boolean mNtnSmsSupportedByMessagesApp = null; + private final Object mCarrierRoamingNtnAllSatellitePlmnSetLock = new Object(); + @GuardedBy("mCarrierRoamingNtnAllSatellitePlmnSetLock") + private Set<String> mCarrierRoamingNtnAllSatellitePlmnSet = null; + private final Object mSatelliteModemStateLock = new Object(); @GuardedBy("mSatelliteModemStateLock") @SatelliteManager.SatelliteModemState @@ -979,9 +987,19 @@ public class SatelliteController extends Handler { loadSatelliteSharedPreferences(); if (mSharedPreferences != null) { - synchronized (mNtnSmsSupportedByMessagesAppLock) { - mNtnSmsSupportedByMessagesApp = mSharedPreferences.getBoolean( - NTN_SMS_SUPPORTED_BY_MESSAGES_APP_KEY, false); + try { + synchronized (mNtnSmsSupportedByMessagesAppLock) { + mNtnSmsSupportedByMessagesApp = mSharedPreferences.getBoolean( + NTN_SMS_SUPPORTED_BY_MESSAGES_APP_KEY, false); + } + + synchronized (mCarrierRoamingNtnAllSatellitePlmnSetLock) { + mCarrierRoamingNtnAllSatellitePlmnSet = mSharedPreferences.getStringSet( + CARRIER_ROAMING_NTN_ALL_SATELLITE_PLMN_SET_KEY, new HashSet<>()); + } + } catch (Exception ex) { + plogd("SatelliteController constructor: " + + "cannot get default shared preferences. e" + ex); } } @@ -1012,6 +1030,11 @@ public class SatelliteController extends Handler { mSatelliteOptimizedApplicationsTracker = new SatelliteOptimizedApplicationsTracker( getLooper(), mContext ); + + for (Phone phoneToSendRequest : PhoneFactory.getPhones()) { + sendRequestAsync(CMD_GET_SATELLITE_ENABLED_FOR_CARRIER, null, phoneToSendRequest); + } + logd("Satellite Tracker is created"); } @@ -1895,10 +1918,14 @@ public class SatelliteController extends Handler { int error = SatelliteServiceUtils.getSatelliteError(ar, "requestSetSatelliteEnabledForCarrier"); + plogd("EVENT_EVALUATE_SATELLITE_ATTACH_RESTRICTION_CHANGE_DONE: subId=" + + subId + " error:" + error); synchronized (mIsSatelliteEnabledLock) { if (error == SATELLITE_RESULT_SUCCESS) { boolean enableSatellite = mSatelliteAttachRestrictionForCarrierArray .getOrDefault(argument.subId, Collections.emptySet()).isEmpty(); + plogd("EVENT_EVALUATE_SATELLITE_ATTACH_RESTRICTION_CHANGE_DONE: " + + "satelliteAttachEnabledForCarrier=" + enableSatellite); mIsSatelliteAttachEnabledForCarrierArrayPerSub.put(subId, enableSatellite); } else { mIsSatelliteAttachEnabledForCarrierArrayPerSub.remove(subId); @@ -2253,6 +2280,43 @@ public class SatelliteController extends Handler { break; } + case CMD_GET_SATELLITE_ENABLED_FOR_CARRIER: { + request = (SatelliteControllerHandlerRequest) msg.obj; + Phone phone = request.phone; + int subId = phone.getSubId(); + onCompleted = obtainMessage(EVENT_GET_SATELLITE_ENABLED_FOR_CARRIER_DONE, + subId); + int simSlot = SubscriptionManager.getSlotIndex(subId); + plogd("CMD_GET_SATELLITE_ENABLED_FOR_CARRIER: subId=" + subId); + phone.isSatelliteEnabledForCarrier(simSlot, onCompleted); + break; + } + + case EVENT_GET_SATELLITE_ENABLED_FOR_CARRIER_DONE: { + ar = (AsyncResult) msg.obj; + + if (ar.result == null) { + loge("EVENT_GET_SATELLITE_ENABLED_FOR_CARRIER_DONE: result is null"); + } else { + int subId = (int) ar.userObj; + int error = SatelliteServiceUtils.getSatelliteError( + ar, "isSatelliteEnabledForCarrier"); + boolean satelliteEnabled = (boolean) ar.result; + plogd("EVENT_GET_SATELLITE_ENABLED_FOR_CARRIER_DONE: subId=" + subId + + " error=" + error + " satelliteEnabled=" + satelliteEnabled); + + if (error == SATELLITE_RESULT_SUCCESS) { + synchronized (mIsSatelliteEnabledLock) { + mIsSatelliteAttachEnabledForCarrierArrayPerSub.put( + subId, satelliteEnabled); + } + evaluateEnablingSatelliteForCarrier(subId, + SATELLITE_COMMUNICATION_RESTRICTION_REASON_USER, null); + } + } + break; + } + default: Log.w(TAG, "SatelliteControllerHandler: unexpected message code: " + msg.what); @@ -3836,9 +3900,7 @@ public class SatelliteController extends Handler { return new ArrayList<>(); } - synchronized (mSupportedSatelliteServicesLock) { - return mMergedPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); - } + return getCarrierPlmnList(subId); } /** @@ -4363,10 +4425,14 @@ public class SatelliteController extends Handler { updateAndNotifyChangesInCarrierRoamingNtnAvailableServices(subId, plmnServiceTypeMap); updatePlmnListPerCarrier(subId); + configureSatellitePlmnForCarrier(subId); + evaluateEnablingSatelliteForCarrier(subId, + SATELLITE_COMMUNICATION_RESTRICTION_REASON_USER, null); mSubscriptionManagerService.setSatelliteEntitlementInfo(subId, allowedPlmnList, barredPlmnList, plmnDataPlanMap, plmnServiceTypeMap, plmnDataServicePolicyMap, plmnVoiceServicePolicyMap); + } else { loge("onSatelliteEntitlementStatusUpdated: either invalid allowedPlmnList " + "or invalid barredPlmnList"); @@ -5295,15 +5361,93 @@ public class SatelliteController extends Handler { return; } + List<String> allPlmnList = new ArrayList<>(getAllPlmnSet()); + phone.setSatellitePlmn(phone.getPhoneId(), getCarrierPlmnList(subId), allPlmnList, + obtainMessage(EVENT_SET_SATELLITE_PLMN_INFO_DONE)); + } + + private Set<String> getAllPlmnSet() { + Set<String> allPlmnSetFromSubInfo = new HashSet<>(); + int[] activeSubIdArray = mSubscriptionManagerService.getActiveSubIdList(true); + for (int activeSubId : activeSubIdArray) { + allPlmnSetFromSubInfo.addAll(getCarrierPlmnList(activeSubId)); + allPlmnSetFromSubInfo.addAll(getBarredPlmnList(activeSubId)); + } + allPlmnSetFromSubInfo.addAll(mSatellitePlmnListFromOverlayConfig); + + Set<String> allPlmnListFromStorage = getCarrierRoamingNtnAllSatellitePlmnSetFromStorage(); + if (!allPlmnListFromStorage.containsAll(allPlmnSetFromSubInfo)) { + allPlmnListFromStorage.addAll(allPlmnSetFromSubInfo); + persistCarrierRoamingNtnAllSatellitePlmnSet(allPlmnListFromStorage); + } + + plogd("getAllPlmnList: " + allPlmnListFromStorage); + return allPlmnListFromStorage; + } + + private List<String> getCarrierPlmnList(int subId) { + synchronized (mSupportedSatelliteServicesLock) { + return mMergedPlmnListPerCarrier.get(subId, new ArrayList<>()).stream().toList(); + } + } + + private List<String> getBarredPlmnList(int subId) { 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); - phone.setSatellitePlmn(slotId, carrierPlmnList, SatelliteServiceUtils.mergeStrLists( - carrierPlmnList, mSatellitePlmnListFromOverlayConfig, barredPlmnList), - obtainMessage(EVENT_SET_SATELLITE_PLMN_INFO_DONE)); + return mEntitlementBarredPlmnListPerCarrier.get( + subId, new ArrayList<>()).stream().toList(); + } + } + + private void persistCarrierRoamingNtnAllSatellitePlmnSet(Set<String> allSatellitePlmnSet) { + plogd("persistCarrierRoamingNtnAllSatellitePlmnSet"); + if (!loadSatelliteSharedPreferences()) return; + + if (mSharedPreferences == null) { + ploge("persistCarrierRoamingNtnAllSatellitePlmnSet: mSharedPreferences is null"); + } else { + try { + mSharedPreferences.edit().putStringSet( + CARRIER_ROAMING_NTN_ALL_SATELLITE_PLMN_SET_KEY, allSatellitePlmnSet) + .apply(); + } catch (Exception ex) { + plogd("persistCarrierRoamingNtnAllSatellitePlmnSet: ex=" + ex); + } + + synchronized (mCarrierRoamingNtnAllSatellitePlmnSetLock) { + mCarrierRoamingNtnAllSatellitePlmnSet = allSatellitePlmnSet; + } + } + } + + private Set<String> getCarrierRoamingNtnAllSatellitePlmnSetFromStorage() { + synchronized (mCarrierRoamingNtnAllSatellitePlmnSetLock) { + if (mCarrierRoamingNtnAllSatellitePlmnSet != null) { + plogd("getCarrierRoamingNtnAllSatellitePlmnSetFromStorage: " + + mCarrierRoamingNtnAllSatellitePlmnSet); + return mCarrierRoamingNtnAllSatellitePlmnSet; + } + } + + if (!loadSatelliteSharedPreferences()) return new HashSet<>(); + + if (mSharedPreferences == null) { + ploge("getCarrierRoamingNtnAllSatellitePlmnSetFromStorage: mSharedPreferences is null"); + return new HashSet<>(); + } else { + Set<String> allSatellitePlmnSet = new HashSet<>(); + try { + allSatellitePlmnSet = mSharedPreferences.getStringSet( + CARRIER_ROAMING_NTN_ALL_SATELLITE_PLMN_SET_KEY, new HashSet<>()); + } catch (Exception ex) { + plogd("getCarrierRoamingNtnAllSatellitePlmnSetFromStorage: ex=" + ex); + } + + synchronized (mCarrierRoamingNtnAllSatellitePlmnSetLock) { + mCarrierRoamingNtnAllSatellitePlmnSet = allSatellitePlmnSet; + plogd("getCarrierRoamingNtnAllSatellitePlmnSetFromStorage: " + + mCarrierRoamingNtnAllSatellitePlmnSet); + return mCarrierRoamingNtnAllSatellitePlmnSet; + } } } @@ -5485,6 +5629,7 @@ public class SatelliteController extends Handler { return; } + getSatelliteEnabledForCarrierAtModem(subId); updateCarrierConfig(subId); updateSatelliteESOSSupported(subId); updateSatelliteProvisionedStatePerSubscriberId(); @@ -5498,6 +5643,16 @@ public class SatelliteController extends Handler { updateRegionalSatelliteEarfcns(subId); } + private void getSatelliteEnabledForCarrierAtModem(int subId) { + Phone phone = SatelliteServiceUtils.getPhone(subId); + synchronized (mIsSatelliteEnabledLock) { + if (!mIsSatelliteAttachEnabledForCarrierArrayPerSub.containsKey(subId)) { + // Get enabled status from modem for new subscription + sendRequestAsync(CMD_GET_SATELLITE_ENABLED_FOR_CARRIER, null, phone); + } + } + } + // imsi, msisdn, default sms subId change private void handleSubscriptionsChanged() { sendMessageDelayed(obtainMessage(CMD_EVALUATE_ESOS_PROFILES_PRIORITIZATION), @@ -5505,9 +5660,10 @@ public class SatelliteController extends Handler { } private void processNewCarrierConfigData(int subId) { - configureSatellitePlmnForCarrier(subId); - setSatelliteAttachEnabledForCarrierOnSimLoaded(subId); updateRestrictReasonForEntitlementPerCarrier(subId); + configureSatellitePlmnForCarrier(subId); + evaluateEnablingSatelliteForCarrier(subId, + SATELLITE_COMMUNICATION_RESTRICTION_REASON_USER, null); } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) @@ -5619,23 +5775,6 @@ public class SatelliteController extends Handler { } /** - * When a SIM is loaded, we need to check if users has enabled satellite attach for the carrier - * associated with the SIM, and evaluate if satellite should be enabled for the carrier. - * - * @param subId Subscription ID. - */ - private void setSatelliteAttachEnabledForCarrierOnSimLoaded(int subId) { - synchronized (mIsSatelliteEnabledLock) { - if (isSatelliteAttachEnabledForCarrierByUser(subId) - && !mIsSatelliteAttachEnabledForCarrierArrayPerSub.getOrDefault(subId, - false)) { - evaluateEnablingSatelliteForCarrier(subId, - SATELLITE_COMMUNICATION_RESTRICTION_REASON_USER, null); - } - } - } - - /** * Update the value of SimInfo.COLUMN_SATELLITE_ESOS_SUPPORTED stored in the database based * on the value in the carrier config. */ @@ -5933,7 +6072,7 @@ public class SatelliteController extends Handler { /** * Check whether satellite is enabled for carrier at modem. * - * @param subId Subscription ID to check for. + * @param subId subscription ID * @return {@code true} if satellite modem is enabled, {@code false} otherwise. */ private boolean isSatelliteEnabledForCarrierAtModem(int subId) { @@ -5976,7 +6115,13 @@ public class SatelliteController extends Handler { state and the current state are different. */ boolean isSatelliteExpectedToBeEnabled = !isSatelliteRestrictedForCarrier(subId) && isSatelliteSupportedViaCarrier(subId); - if (isSatelliteExpectedToBeEnabled != isSatelliteEnabledForCarrierAtModem(subId)) { + boolean isSatelliteEnabledForCarrierAtModem = isSatelliteEnabledForCarrierAtModem( + phone.getSubId()); + plogd("evaluateEnablingSatelliteForCarrier: subId=" + subId + " reason=" + reason + + " isSatelliteExpectedToBeEnabled=" + isSatelliteExpectedToBeEnabled + + " isSatelliteEnabledForCarrierAtModem=" + isSatelliteEnabledForCarrierAtModem); + + if (isSatelliteExpectedToBeEnabled != isSatelliteEnabledForCarrierAtModem) { int simSlot = SubscriptionManager.getSlotIndex(subId); RequestHandleSatelliteAttachRestrictionForCarrierArgument argument = new RequestHandleSatelliteAttachRestrictionForCarrierArgument(subId, |