Merge "Fix domain selection while in ECBM on PS cellular" into main
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 05ae1f0..b790e8a 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -657,6 +657,13 @@
private void selectDomainFromInitialState() {
if (mDestroyed) return;
+ if (isInEmergencyCallbackModeOnPsWwan()) {
+ logi("selectDomain PS cellular connected in ECBM");
+ mPsNetworkType = EUTRAN;
+ onWwanNetworkTypeSelected(mPsNetworkType);
+ return;
+ }
+
boolean csInService = isCsInService();
boolean psInService = isPsInService();
@@ -1604,6 +1611,12 @@
&& mEcbmHelper.getDataConnectionState(getSlotId()) == DATA_CONNECTED;
}
+ private boolean isInEmergencyCallbackModeOnPsWwan() {
+ return mEcbmHelper.isInEmergencyCallbackMode(getSlotId())
+ && mEcbmHelper.getTransportType(getSlotId()) == TRANSPORT_TYPE_WWAN
+ && mEcbmHelper.getDataConnectionState(getSlotId()) == DATA_CONNECTED;
+ }
+
@Override
protected void logi(String msg) {
super.logi(msg);
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallbackModeHelper.java b/src/com/android/services/telephony/domainselection/EmergencyCallbackModeHelper.java
index e42dfe7..cdf2225 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallbackModeHelper.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallbackModeHelper.java
@@ -68,7 +68,7 @@
@NonNull PreciseDataConnectionState dataConnectionState) {
ApnSetting apnSetting = dataConnectionState.getApnSetting();
if ((apnSetting == null)
- || ((apnSetting.getApnTypeBitmask() | ApnSetting.TYPE_EMERGENCY) == 0)) {
+ || ((apnSetting.getApnTypeBitmask() & ApnSetting.TYPE_EMERGENCY) == 0)) {
return;
}
mTransportType = dataConnectionState.getTransportType();
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index b8b3359..39f01a2 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -2877,6 +2877,16 @@
doReturn(TRANSPORT_TYPE_WWAN).when(mEcbmHelper).getTransportType(anyInt());
doReturn(DATA_CONNECTED).when(mEcbmHelper).getDataConnectionState(anyInt());
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ Consumer<WwanSelectorCallback> consumer =
+ (Consumer<WwanSelectorCallback>) invocation.getArguments()[0];
+ consumer.accept(mWwanSelectorCallback);
+ return null;
+ }
+ }).when(mTransportSelectorCallback).onWwanSelected(any());
+
EmergencyRegistrationResult regResult = getEmergencyRegResult(UNKNOWN,
REGISTRATION_STATE_UNKNOWN,
0, false, false, 0, 0, "", "");
@@ -2889,6 +2899,7 @@
verify(mTransportSelectorCallback, never()).onWlanSelected(anyBoolean());
verify(mTransportSelectorCallback).onWwanSelected(any());
+ verify(mWwanSelectorCallback).onDomainSelected(eq(DOMAIN_PS), eq(true));
}
@Test
@@ -2959,6 +2970,42 @@
verify(mTransportSelectorCallback).onWwanSelected(any());
}
+ @Test
+ public void testNotInEcbmOnWwanConnected() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ doReturn(false).when(mEcbmHelper).isInEmergencyCallbackMode(anyInt());
+ doReturn(TRANSPORT_TYPE_WLAN).when(mEcbmHelper).getTransportType(anyInt());
+ doReturn(DATA_CONNECTED).when(mEcbmHelper).getDataConnectionState(anyInt());
+
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ Consumer<WwanSelectorCallback> consumer =
+ (Consumer<WwanSelectorCallback>) invocation.getArguments()[0];
+ consumer.accept(mWwanSelectorCallback);
+ return null;
+ }
+ }).when(mTransportSelectorCallback).onWwanSelected(any());
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(UNKNOWN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+ processAllMessages();
+
+ verify(mTransportSelectorCallback, never()).onWlanSelected(anyBoolean());
+ verify(mTransportSelectorCallback).onWwanSelected(any());
+ verify(mWwanSelectorCallback, never()).onDomainSelected(anyInt(), anyBoolean());
+ verify(mWwanSelectorCallback).onRequestEmergencyNetworkScan(
+ any(), anyInt(), anyBoolean(), any(), any());
+ }
+
private void setupForScanListTest(PersistableBundle bundle) throws Exception {
setupForScanListTest(bundle, false);
}