Map new WFC related ImsReasonInfo codes to disconnect causes.
Map CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE and
CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION to the corresponding
disconnect cause in Telephony.
Make reason string matching case insensitive.
Bug: 128993720
Test: Unit tests added to confirm remapping.
Change-Id: I2ae48a78c10ed6ade2117c89d9298f479c548bd4
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 9fbef9c..ec50981 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -1948,6 +1948,9 @@
*/
@VisibleForTesting
public void addReasonCodeRemapping(Integer fromCode, String message, Integer toCode) {
+ if (message != null) {
+ message = message.toLowerCase();
+ }
mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode);
}
@@ -1966,6 +1969,8 @@
String reason = reasonInfo.getExtraMessage();
if (reason == null) {
reason = "";
+ } else {
+ reason = reason.toLowerCase();
}
log("maybeRemapReasonCode : fromCode = " + reasonInfo.getCode() + " ; message = "
+ reason);
@@ -2038,6 +2043,12 @@
case ImsReasonInfo.CODE_SIP_GLOBAL_ERROR:
return DisconnectCause.SERVER_ERROR;
+ case ImsReasonInfo.CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE:
+ return DisconnectCause.EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE;
+
+ case ImsReasonInfo.CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION:
+ return DisconnectCause.WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION;
+
case ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE:
case ImsReasonInfo.CODE_SIP_SERVER_ERROR:
return DisconnectCause.SERVER_UNREACHABLE;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
index 76fbdd6..f128404 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
@@ -119,6 +119,12 @@
ImsReasonInfo.CODE_ANSWERED_ELSEWHERE);
mCTUT.addReasonCodeRemapping(ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE, "",
ImsReasonInfo.CODE_SIP_FORBIDDEN);
+ mCTUT.addReasonCodeRemapping(ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE,
+ "emergency calls over wifi not allowed in this location",
+ ImsReasonInfo.CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE);
+ mCTUT.addReasonCodeRemapping(ImsReasonInfo.CODE_SIP_FORBIDDEN,
+ "service not allowed in this location",
+ ImsReasonInfo.CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION);
mCTUT.setDataEnabled(true);
mCTHander = new Handler(mCTUT.getLooper());
setReady(true);
@@ -621,7 +627,11 @@
assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE,
mCTUT.maybeRemapReasonCode(new ImsReasonInfo(501, 1, "Call answered elsewhere.")));
assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE,
+ mCTUT.maybeRemapReasonCode(new ImsReasonInfo(501, 1, "CALL answered elsewhere.")));
+ assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE,
mCTUT.maybeRemapReasonCode(new ImsReasonInfo(510, 1, "Call answered elsewhere.")));
+ assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE,
+ mCTUT.maybeRemapReasonCode(new ImsReasonInfo(510, 1, "CALL ANswered elsewhere.")));
assertEquals(90210, mCTUT.maybeRemapReasonCode(new ImsReasonInfo(90210, 1,
"Call answered elsewhere.")));
}
@@ -917,6 +927,38 @@
new ImsReasonInfo(ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE, 0, "")));
}
+ @Test
+ @SmallTest
+ public void testRemapEmergencyCallsOverWfc() {
+ assertEquals(ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE, 0)));
+ assertEquals(ImsReasonInfo.CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE, 0,
+ "emergency calls over wifi not allowed in this location")));
+ assertEquals(ImsReasonInfo.CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_SERVICE_UNAVAILABLE, 0,
+ "EMERGENCY calls over wifi not allowed in this location")));
+ }
+
+ @Test
+ @SmallTest
+ public void testRemapWfcNotAvailable() {
+ assertEquals(ImsReasonInfo.CODE_SIP_FORBIDDEN,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_FORBIDDEN, 0)));
+ assertEquals(ImsReasonInfo.CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_FORBIDDEN, 0,
+ "Service not allowed in this location")));
+ assertEquals(ImsReasonInfo.CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION,
+ mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(ImsReasonInfo.CODE_SIP_FORBIDDEN, 0,
+ "SERVICE not allowed in this location")));
+ }
+
private void placeCallAndMakeActive() {
try {
doAnswer(new Answer<ImsCall>() {