Determine carrier roaming ntn eligibility only based on
selectedSatelliteSubId.
Bug: 388061432
Test: 388108484
Flag: EXEMPT bugfix
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:ae5a4ca421eba8bd3421d1372ea5f65551ff97e2)
Merged-In: I5b3e4921a028f368dd9c430c063a9e070f48f17b
Change-Id: I5b3e4921a028f368dd9c430c063a9e070f48f17b
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 5a0b35f..c32db3d 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -2993,14 +2993,11 @@
String satellitePlmn = null;
SatelliteModemStateListener satelliteModemStateListener = getSatelliteModemStateListener();
- if (combinedRegState == ServiceState.STATE_OUT_OF_SERVICE
- && satelliteModemStateListener != null
+ if (satelliteModemStateListener != null
&& satelliteModemStateListener.isInConnectedState()) {
- // If device is connected to the nb-iot satellite,
- // 1) No service but nb-iot satellite is connected ->
- // expected to show "Satellite" for demo mode.
satellitePlmn = getSatelliteDisplayName();
}
+ log("updateCarrierDisplayName: satellitePlmn=" + satellitePlmn);
if (mPhone.isPhoneTypeGsm()) {
// The values of plmn/showPlmn change in different scenarios.
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index e7f6cdf..c87011e 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -614,7 +614,8 @@
new ArrayList<>();
// The ID of the satellite subscription that has highest priority and is provisioned.
@GuardedBy("mSatelliteTokenProvisionedLock")
- private int mSelectedSatelliteSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+ protected int mSelectedSatelliteSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
// The last ICC ID that framework configured to modem.
@GuardedBy("mSatelliteTokenProvisionedLock")
private String mLastConfiguredIccId;
@@ -7426,9 +7427,13 @@
selectedSubId = getNtnOnlySubscriptionId();
}
- synchronized (mSatelliteTokenProvisionedLock) {
- mSelectedSatelliteSubId = selectedSubId;
+ int preSelectedSatelliteSubId = getSelectedSatelliteSubId();
+ setSelectedSatelliteSubId(selectedSubId);
+ if (preSelectedSatelliteSubId != getSelectedSatelliteSubId()) {
+ plogd("selectBindingSatelliteSubscription: SelectedSatelliteSubId changed");
+ evaluateCarrierRoamingNtnEligibilityChange();
}
+
setSatellitePhone(selectedSubId);
if (selectedSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
int carrierId = getSatelliteCarrierId();
@@ -7714,6 +7719,13 @@
}
}
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+ protected void setSelectedSatelliteSubId(int subId) {
+ synchronized (mSatelliteTokenProvisionedLock) {
+ mSelectedSatelliteSubId = subId;
+ }
+ }
+
/** Return the carrier ID of the binding satellite subscription. */
public int getSatelliteCarrierId() {
synchronized (mSatelliteTokenProvisionedLock) {
@@ -7764,7 +7776,7 @@
return false;
}
- int subId = phone.getSubId();
+ int subId = getSelectedSatelliteSubId();
if (!isSatelliteRoamingP2pSmSSupported(subId)) {
plogd("isCarrierRoamingNtnEligible(" + subId + "): doesn't support P2P SMS");
return false;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index 404c1b2..60dd9b7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -3590,6 +3590,34 @@
Bundle b = getExtrasFromLastSpnUpdateIntent();
assertThat(b.getString(TelephonyManager.EXTRA_PLMN)).isEqualTo(SATELLITE_DISPLAY_NAME);
assertThat(b.getBoolean(TelephonyManager.EXTRA_SHOW_PLMN)).isTrue();
+
+ // Override operator name to "Satellite" when registration state is IN_SERVICE.
+ mSimulatedCommands.setVoiceRegState(
+ NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
+ mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
+ mSimulatedCommands.setDataRegState(
+ NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
+ mSimulatedCommands.setDataRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
+ doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getState();
+ doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getDataRegistrationState();
+ doReturn("Skylo Technologies").when(mServiceState).getOperatorAlpha();
+
+ mBundle.putBoolean(
+ CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL, false);
+ mBundle.putBoolean(CarrierConfigManager.KEY_CARRIER_NAME_OVERRIDE_BOOL, true);
+ mBundle.putString(CarrierConfigManager.KEY_CARRIER_NAME_STRING, "");
+ sendCarrierConfigUpdate(PHONE_ID);
+
+ callback.onSatelliteModemStateChanged(
+ SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+
+ // update the spn
+ sst.updateCarrierDisplayName();
+
+ b = getExtrasFromLastSpnUpdateIntent();
+ assertThat(b.getString(TelephonyManager.EXTRA_PLMN)).isEqualTo(SATELLITE_DISPLAY_NAME);
+ assertThat(b.getBoolean(TelephonyManager.EXTRA_SHOW_PLMN)).isTrue();
}
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index a50565c..bd84ce2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -4261,6 +4261,8 @@
);
}
mSatelliteControllerUT.setSatellitePhone(1);
+ mSatelliteControllerUT.setSelectedSatelliteSubId(SUB_ID);
+ mSatelliteControllerUT.isSatelliteProvisioned = true;
mSatelliteControllerUT.setIsSatelliteAllowedState(true);
processAllMessages();
@@ -4327,6 +4329,8 @@
);
}
mSatelliteControllerUT.setSatellitePhone(1);
+ mSatelliteControllerUT.setSelectedSatelliteSubId(SUB_ID);
+ mSatelliteControllerUT.isSatelliteProvisioned = true;
mSatelliteControllerUT.isSatelliteAllowedCallback = null;
setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
mSatelliteControllerUT.setIsSatelliteAllowedState(true);
@@ -6169,6 +6173,8 @@
public String packageName = "com.example.app";
public boolean isSatelliteBeingDisabled = false;
public boolean mIsApplicationSupportsP2P = false;
+ public int selectedSatelliteSubId = -1;
+ public boolean isSatelliteProvisioned;
TestSatelliteController(
Context context, Looper looper, @NonNull FeatureFlags featureFlags) {
@@ -6231,13 +6237,16 @@
}
@Override
- protected boolean isSubscriptionProvisioned(int subId) {
- synchronized (mSatellitePhoneLock) {
- if (mSatellitePhone.getSubId() == subId) {
- return true;
- }
+ protected void setSelectedSatelliteSubId(int subId) {
+ logd("setSelectedSatelliteSubId: subId=" + subId);
+ synchronized (mSatelliteTokenProvisionedLock) {
+ mSelectedSatelliteSubId = subId;
}
- return false;
+ }
+
+ @Override
+ protected boolean isSubscriptionProvisioned(int subId) {
+ return isSatelliteProvisioned;
}
@Override