Merge "SetIsNonTerrestrialNetwork only if network is in service." into main
diff --git a/src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java b/src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java
index 65a25ea..dfc7919 100644
--- a/src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java
+++ b/src/java/com/android/internal/telephony/satellite/NtnCapabilityResolver.java
@@ -47,7 +47,8 @@
SatelliteController satelliteController = SatelliteController.getInstance();
List<String> satellitePlmnList = satelliteController.getSatellitePlmnsForCarrier(subId);
for (String satellitePlmn : satellitePlmnList) {
- if (TextUtils.equals(satellitePlmn, registeredPlmn)) {
+ if (TextUtils.equals(satellitePlmn, registeredPlmn)
+ && networkRegistrationInfo.isInService()) {
logd("Registered to satellite PLMN " + satellitePlmn);
networkRegistrationInfo.setIsNonTerrestrialNetwork(true);
networkRegistrationInfo.setAvailableServices(
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
index 242bc47..bc6a79c 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
@@ -43,7 +43,9 @@
import android.os.SystemProperties;
import android.provider.DeviceConfig;
import android.telecom.Connection;
+import android.telephony.AccessNetworkConstants;
import android.telephony.DropBoxManagerLoggerBackend;
+import android.telephony.NetworkRegistrationInfo;
import android.telephony.PersistentLogger;
import android.telephony.Rlog;
import android.telephony.ServiceState;
@@ -68,6 +70,7 @@
import com.android.internal.telephony.SmsApplication;
import com.android.internal.telephony.metrics.SatelliteStats;
+import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -450,7 +453,7 @@
int state = serviceState.getState();
if ((state == STATE_IN_SERVICE || state == STATE_EMERGENCY_ONLY
|| serviceState.isEmergencyOnly())
- && !serviceState.isUsingNonTerrestrialNetwork()) {
+ && !isSatellitePlmn(phone.getSubId(), serviceState)) {
logv("isCellularAvailable true");
return true;
}
@@ -460,6 +463,34 @@
return false;
}
+ private boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) {
+ List<String> satellitePlmnList =
+ mSatelliteController.getSatellitePlmnsForCarrier(subId);
+ if (satellitePlmnList.isEmpty()) {
+ logv("isSatellitePlmn: satellitePlmnList is empty");
+ return false;
+ }
+
+ for (NetworkRegistrationInfo nri :
+ serviceState.getNetworkRegistrationInfoListForTransportType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) {
+ String registeredPlmn = nri.getRegisteredPlmn();
+ String mccmnc = nri.getCellIdentity().getMccString()
+ + nri.getCellIdentity().getMncString();
+ for (String satellitePlmn : satellitePlmnList) {
+ if (TextUtils.equals(satellitePlmn, registeredPlmn)
+ || TextUtils.equals(satellitePlmn, mccmnc)) {
+ logv("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn
+ + " registeredPlmn:" + registeredPlmn + " mccmnc:" + mccmnc);
+ return true;
+ }
+ }
+ }
+
+ logv("isSatellitePlmn: return false");
+ return false;
+ }
+
/**
* @return {@link ServiceState#STATE_IN_SERVICE} if any subscription is in this state; else
* {@link ServiceState#STATE_EMERGENCY_ONLY} if any subscription is in this state; else
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index fd99ad0..e3da458 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -3471,9 +3471,12 @@
AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
assertEquals(2, nriList.size());
for (NetworkRegistrationInfo nri : nriList) {
- assertTrue(Arrays.equals(satelliteSupportedServices, nri.getAvailableServices().stream()
- .mapToInt(Integer::intValue)
- .toArray()));
+ if (nri.isInService()) {
+ assertTrue(Arrays.equals(satelliteSupportedServices,
+ nri.getAvailableServices().stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+ }
}
}
}