Update "useEmergencyPdn" flag for emergency SMS
This flag was introduced to check whether IMS PDN should be used for PS
emergency services. If IMS PDN is used for an emergency SMS, the domain
selection should not try to change the preferred transport type for
emergency service.
EmergencySmsDomainSelector sets this value based on the carrier
configuration according to whether the carrier supports the emergency
PDN or not when domain selection completes.
Bug: 270333880
Test: atest SmsDomainSelectorTest, EmergencySmsDomainSelectorTest
Test: manual (verify normal/emergency SMS on device)
Change-Id: Iea83306e26ec613e25ecaf3cccafb3d2b461fbcd
diff --git a/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelector.java
index cd588e1..aef193b 100644
--- a/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelector.java
@@ -111,7 +111,7 @@
* when {@link CarrierConfigManager#KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL} is set
* to true.
*/
- if (isEmergencySmsOverImsSupportedByConfig()) {
+ if (isEmergencySmsOverImsSupportedIfLteLimitedOrInService()) {
/**
* Emergency SMS should be supported via emergency PDN.
* If this condition is false, then need to fallback to CS network
@@ -142,22 +142,30 @@
logi("selectDomain: " + mImsStateTracker.imsStateToString());
if (isSmsOverImsAvailable()) {
- if (mImsStateTracker.isImsRegisteredOverWlan()) {
- if (!isEmergencySmsOverImsSupportedByConfig()) {
- notifyWlanSelected();
- return;
- }
+ boolean isEmergencySmsOverImsSupportedIfLteLimitedOrInService =
+ isEmergencySmsOverImsSupportedIfLteLimitedOrInService();
+ if (mImsStateTracker.isImsRegisteredOverWlan()) {
/**
* When {@link CarrierConfigManager#KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL}
* is set to true, the emergency SMS supports on the LTE network using the
- * emergency PDN. So, considering EUTRAN only at this point.
+ * emergency PDN. As of now, since the emergency SMS doesn't use the emergency PDN
+ * over WLAN, the domain selector reports the domain as WLAN only if
+ * {@code isEmergencySmsOverImsSupportedIfLteLimitedOrInService} is set to false
+ * and IMS is registered over WLAN.
+ * Otherwise, the domain selector reports the domain as WWAN.
*/
+ if (!isEmergencySmsOverImsSupportedIfLteLimitedOrInService) {
+ notifyWlanSelected(false);
+ return;
+ }
+
logi("DomainSelected: WLAN >> WWAN");
}
- notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_PS);
+ notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_PS,
+ isEmergencySmsOverImsSupportedIfLteLimitedOrInService);
} else {
- notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_CS);
+ notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_CS, false);
}
}
@@ -166,15 +174,16 @@
* configuration and the current network states.
*/
private boolean isImsEmergencySmsAvailable() {
- boolean emergencySmsOverImsSupportedByConfig = isEmergencySmsOverImsSupportedByConfig();
+ boolean isEmergencySmsOverImsSupportedIfLteLimitedOrInService =
+ isEmergencySmsOverImsSupportedIfLteLimitedOrInService();
boolean networkAvailable = isNetworkAvailableForImsEmergencySms();
logi("isImsEmergencySmsAvailable: "
- + "emergencySmsOverIms=" + emergencySmsOverImsSupportedByConfig
+ + "emergencySmsOverIms=" + isEmergencySmsOverImsSupportedIfLteLimitedOrInService
+ ", mmTelFeatureAvailable=" + mImsStateTracker.isMmTelFeatureAvailable()
+ ", networkAvailable=" + networkAvailable);
- return emergencySmsOverImsSupportedByConfig
+ return isEmergencySmsOverImsSupportedIfLteLimitedOrInService
&& mImsStateTracker.isMmTelFeatureAvailable()
&& networkAvailable;
}
@@ -183,7 +192,7 @@
* Checks if sending emergency SMS messages over IMS is supported when in LTE/limited LTE
* (Emergency only) service mode from the carrier configuration.
*/
- private boolean isEmergencySmsOverImsSupportedByConfig() {
+ private boolean isEmergencySmsOverImsSupportedIfLteLimitedOrInService() {
if (mEmergencySmsOverImsSupportedByConfig == null) {
CarrierConfigManager ccm = mContext.getSystemService(CarrierConfigManager.class);
diff --git a/src/com/android/services/telephony/domainselection/SmsDomainSelector.java b/src/com/android/services/telephony/domainselection/SmsDomainSelector.java
index 6930b13..95b04e2 100644
--- a/src/com/android/services/telephony/domainselection/SmsDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/SmsDomainSelector.java
@@ -147,12 +147,12 @@
if (isSmsOverImsAvailable()) {
if (mImsStateTracker.isImsRegisteredOverWlan()) {
- notifyWlanSelected();
+ notifyWlanSelected(false);
return;
}
- notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_PS);
+ notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_PS, false);
} else {
- notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_CS);
+ notifyWwanSelected(NetworkRegistrationInfo.DOMAIN_CS, false);
}
}
@@ -176,30 +176,33 @@
}
}
- protected void notifyWlanSelected() {
- logi("DomainSelected: WLAN");
- mTransportSelectorCallback.onWlanSelected(false);
+ protected void notifyWlanSelected(boolean useEmergencyPdn) {
+ logi("DomainSelected: WLAN, E-PDN=" + useEmergencyPdn);
+ mTransportSelectorCallback.onWlanSelected(useEmergencyPdn);
setDomainSelectionRequested(false);
}
- protected void notifyWwanSelected(@NetworkRegistrationInfo.Domain int domain) {
+ protected void notifyWwanSelected(@NetworkRegistrationInfo.Domain int domain,
+ boolean useEmergencyPdn) {
if (mWwanSelectorCallback == null) {
mTransportSelectorCallback.onWwanSelected((callback) -> {
mWwanSelectorCallback = callback;
- notifyWwanSelectedInternal(domain);
+ notifyWwanSelectedInternal(domain, useEmergencyPdn);
});
} else {
- notifyWwanSelectedInternal(domain);
+ notifyWwanSelectedInternal(domain, useEmergencyPdn);
}
setDomainSelectionRequested(false);
}
- protected void notifyWwanSelectedInternal(@NetworkRegistrationInfo.Domain int domain) {
- logi("DomainSelected: WWAN/" + DomainSelectionService.getDomainName(domain));
+ protected void notifyWwanSelectedInternal(@NetworkRegistrationInfo.Domain int domain,
+ boolean useEmergencyPdn) {
+ logi("DomainSelected: WWAN/" + DomainSelectionService.getDomainName(domain)
+ + ", E-PDN=" + useEmergencyPdn);
if (mWwanSelectorCallback != null) {
- mWwanSelectorCallback.onDomainSelected(domain, false);
+ mWwanSelectorCallback.onDomainSelected(domain, useEmergencyPdn);
} else {
mTransportSelectorCallback.onSelectionTerminated(DisconnectCause.LOCAL);
}
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelectorTest.java
index 1d89071..ed064cb 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencySmsDomainSelectorTest.java
@@ -89,7 +89,6 @@
private NetworkRegistrationInfo mNetworkRegistrationInfo;
private boolean mCarrierConfigManagerNullTest = false;
private BarringInfo mBarringInfo = new BarringInfo();
- private ImsStateTracker.ImsStateListener mImsStateListener;
private ImsStateTracker.BarringInfoListener mBarringInfoListener;
private ImsStateTracker.ServiceStateListener mServiceStateListener;
private EmergencySmsDomainSelector mDomainSelector;
@@ -415,7 +414,7 @@
// onDomainSelected will be invoked only once
// even though the domain selection was requested twice.
verify(mWwanSelectorCallback).onDomainSelected(eq(NetworkRegistrationInfo.DOMAIN_PS),
- eq(false));
+ eq(true));
assertFalse(mDomainSelector.isDomainSelectionRequested());
}
@@ -484,7 +483,7 @@
// Expected: PS network
verify(mWwanSelectorCallback).onDomainSelected(eq(NetworkRegistrationInfo.DOMAIN_PS),
- eq(false));
+ eq(true));
}
@Test
@@ -535,7 +534,7 @@
// Expected: PS network
verify(mWwanSelectorCallback).onDomainSelected(eq(NetworkRegistrationInfo.DOMAIN_PS),
- eq(false));
+ eq(true));
}
@Test
@@ -586,7 +585,7 @@
// Expected: PS network
verify(mWwanSelectorCallback).onDomainSelected(eq(NetworkRegistrationInfo.DOMAIN_PS),
- eq(false));
+ eq(true));
}
@Test
@@ -673,7 +672,7 @@
// Expected: PS network
verify(mWwanSelectorCallback).onDomainSelected(eq(NetworkRegistrationInfo.DOMAIN_PS),
- eq(false));
+ eq(true));
}
private void setUpCarrierConfig(boolean supported) {
diff --git a/tests/src/com/android/services/telephony/domainselection/SmsDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/SmsDomainSelectorTest.java
index 785127c..8f78a58 100644
--- a/tests/src/com/android/services/telephony/domainselection/SmsDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/SmsDomainSelectorTest.java
@@ -58,10 +58,8 @@
*/
@RunWith(AndroidJUnit4.class)
public class SmsDomainSelectorTest {
- private static final String LOG_TAG = "DomainSelector-SMS";
private static final int SLOT_0 = 0;
private static final int SUB_1 = 1;
- private static final int SUB_2 = 2;
@Mock private TransportSelectorCallback mTransportSelectorCallback;
@Mock private WwanSelectorCallback mWwanSelectorCallback;