Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +36 −5 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ import com.android.ims.ImsSuppServiceNotification; import com.android.ims.ImsUtInterface; import com.android.ims.internal.IImsVideoCallProvider; import com.android.ims.internal.ImsVideoCallProviderWrapper; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CallTracker; Loading Loading @@ -582,12 +583,18 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } try { int fromCode = Integer.parseInt(values[0]); Integer fromCode; if (values[0].equals("*")) { fromCode = null; } else { fromCode = Integer.parseInt(values[0]); } String message = values[1]; int toCode = Integer.parseInt(values[2]); mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode); log("Loaded ImsReasonInfo mapping : fromCode = " + fromCode + " ; message = " + addReasonCodeRemapping(fromCode, message, toCode); log("Loaded ImsReasonInfo mapping : fromCode = " + fromCode == null ? "any" : fromCode + " ; message = " + message + " ; toCode = " + toCode); } catch (NumberFormatException nfe) { loge("Invalid ImsReasonInfo mapping found: " + mapping); Loading Loading @@ -1321,6 +1328,18 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } } /** * Adds a reason code remapping, for test purposes. * * @param fromCode The from code, or {@code null} if all. * @param message The message to map. * @param toCode The code to remap to. */ @VisibleForTesting public void addReasonCodeRemapping(Integer fromCode, String message, Integer toCode) { mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode); } /** * Returns the {@link ImsReasonInfo#getCode()}, potentially remapping to a new value based on * the {@link ImsReasonInfo#getCode()} and {@link ImsReasonInfo#getExtraMessage()}. Loading @@ -1330,17 +1349,26 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { * @param reasonInfo The {@link ImsReasonInfo}. * @return The remapped code. */ private int maybeRemapReasonCode(ImsReasonInfo reasonInfo) { @VisibleForTesting public int maybeRemapReasonCode(ImsReasonInfo reasonInfo) { int code = reasonInfo.getCode(); Pair<Integer, String> toCheck = new Pair<>(code, reasonInfo.getExtraMessage()); Pair<Integer, String> wildcardToCheck = new Pair<>(null, reasonInfo.getExtraMessage()); if (mImsReasonCodeMap.containsKey(toCheck)) { int toCode = mImsReasonCodeMap.get(toCheck); log("maybeRemapReasonCode : fromCode = " + reasonInfo.getCode() + " ; message = " + reasonInfo.getExtraMessage() + " ; toCode = " + toCode); return toCode; } else if (mImsReasonCodeMap.containsKey(wildcardToCheck)) { // Handle the case where a wildcard is specified for the fromCode; in this case we will // match without caring about the fromCode. int toCode = mImsReasonCodeMap.get(wildcardToCheck); log("maybeRemapReasonCode : fromCode(wildcard) = " + reasonInfo.getCode() + " ; message = " + reasonInfo.getExtraMessage() + " ; toCode = " + toCode); return toCode; } return code; } Loading Loading @@ -1422,6 +1450,9 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { case ImsReasonInfo.CODE_DATA_LIMIT_REACHED: return DisconnectCause.DATA_LIMIT_REACHED; case ImsReasonInfo.CODE_WIFI_LOST: return DisconnectCause.WIFI_LOST; default: } Loading tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; Loading Loading @@ -79,6 +80,11 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { @Override public void onLooperPrepared() { mCTUT = new ImsPhoneCallTracker(mImsPhone); mCTUT.addReasonCodeRemapping(null, "Wifi signal lost.", ImsReasonInfo.CODE_WIFI_LOST); mCTUT.addReasonCodeRemapping(501, "Call answered elsewhere.", ImsReasonInfo.CODE_ANSWERED_ELSEWHERE); mCTUT.addReasonCodeRemapping(510, "Call answered elsewhere.", ImsReasonInfo.CODE_ANSWERED_ELSEWHERE); setReady(true); } } Loading Loading @@ -412,4 +418,19 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { //verify trigger sendDtmf to mImsSecondCall verify(mSecondImsCall, times(1)).sendDtmf(eq(PhoneNumberUtils.WAIT), (Message) isNull()); } @Test @SmallTest public void testReasonCodeRemap() { assertEquals(ImsReasonInfo.CODE_WIFI_LOST, mCTUT.maybeRemapReasonCode( new ImsReasonInfo(1, 1, "Wifi signal lost."))); assertEquals(ImsReasonInfo.CODE_WIFI_LOST, mCTUT.maybeRemapReasonCode( new ImsReasonInfo(200, 1, "Wifi signal lost."))); 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(90210, mCTUT.maybeRemapReasonCode(new ImsReasonInfo(90210, 1, "Call answered elsewhere."))); } } Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +36 −5 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ import com.android.ims.ImsSuppServiceNotification; import com.android.ims.ImsUtInterface; import com.android.ims.internal.IImsVideoCallProvider; import com.android.ims.internal.ImsVideoCallProviderWrapper; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CallTracker; Loading Loading @@ -582,12 +583,18 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } try { int fromCode = Integer.parseInt(values[0]); Integer fromCode; if (values[0].equals("*")) { fromCode = null; } else { fromCode = Integer.parseInt(values[0]); } String message = values[1]; int toCode = Integer.parseInt(values[2]); mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode); log("Loaded ImsReasonInfo mapping : fromCode = " + fromCode + " ; message = " + addReasonCodeRemapping(fromCode, message, toCode); log("Loaded ImsReasonInfo mapping : fromCode = " + fromCode == null ? "any" : fromCode + " ; message = " + message + " ; toCode = " + toCode); } catch (NumberFormatException nfe) { loge("Invalid ImsReasonInfo mapping found: " + mapping); Loading Loading @@ -1321,6 +1328,18 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } } /** * Adds a reason code remapping, for test purposes. * * @param fromCode The from code, or {@code null} if all. * @param message The message to map. * @param toCode The code to remap to. */ @VisibleForTesting public void addReasonCodeRemapping(Integer fromCode, String message, Integer toCode) { mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode); } /** * Returns the {@link ImsReasonInfo#getCode()}, potentially remapping to a new value based on * the {@link ImsReasonInfo#getCode()} and {@link ImsReasonInfo#getExtraMessage()}. Loading @@ -1330,17 +1349,26 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { * @param reasonInfo The {@link ImsReasonInfo}. * @return The remapped code. */ private int maybeRemapReasonCode(ImsReasonInfo reasonInfo) { @VisibleForTesting public int maybeRemapReasonCode(ImsReasonInfo reasonInfo) { int code = reasonInfo.getCode(); Pair<Integer, String> toCheck = new Pair<>(code, reasonInfo.getExtraMessage()); Pair<Integer, String> wildcardToCheck = new Pair<>(null, reasonInfo.getExtraMessage()); if (mImsReasonCodeMap.containsKey(toCheck)) { int toCode = mImsReasonCodeMap.get(toCheck); log("maybeRemapReasonCode : fromCode = " + reasonInfo.getCode() + " ; message = " + reasonInfo.getExtraMessage() + " ; toCode = " + toCode); return toCode; } else if (mImsReasonCodeMap.containsKey(wildcardToCheck)) { // Handle the case where a wildcard is specified for the fromCode; in this case we will // match without caring about the fromCode. int toCode = mImsReasonCodeMap.get(wildcardToCheck); log("maybeRemapReasonCode : fromCode(wildcard) = " + reasonInfo.getCode() + " ; message = " + reasonInfo.getExtraMessage() + " ; toCode = " + toCode); return toCode; } return code; } Loading Loading @@ -1422,6 +1450,9 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { case ImsReasonInfo.CODE_DATA_LIMIT_REACHED: return DisconnectCause.DATA_LIMIT_REACHED; case ImsReasonInfo.CODE_WIFI_LOST: return DisconnectCause.WIFI_LOST; default: } Loading
tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; Loading Loading @@ -79,6 +80,11 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { @Override public void onLooperPrepared() { mCTUT = new ImsPhoneCallTracker(mImsPhone); mCTUT.addReasonCodeRemapping(null, "Wifi signal lost.", ImsReasonInfo.CODE_WIFI_LOST); mCTUT.addReasonCodeRemapping(501, "Call answered elsewhere.", ImsReasonInfo.CODE_ANSWERED_ELSEWHERE); mCTUT.addReasonCodeRemapping(510, "Call answered elsewhere.", ImsReasonInfo.CODE_ANSWERED_ELSEWHERE); setReady(true); } } Loading Loading @@ -412,4 +418,19 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { //verify trigger sendDtmf to mImsSecondCall verify(mSecondImsCall, times(1)).sendDtmf(eq(PhoneNumberUtils.WAIT), (Message) isNull()); } @Test @SmallTest public void testReasonCodeRemap() { assertEquals(ImsReasonInfo.CODE_WIFI_LOST, mCTUT.maybeRemapReasonCode( new ImsReasonInfo(1, 1, "Wifi signal lost."))); assertEquals(ImsReasonInfo.CODE_WIFI_LOST, mCTUT.maybeRemapReasonCode( new ImsReasonInfo(200, 1, "Wifi signal lost."))); 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(90210, mCTUT.maybeRemapReasonCode(new ImsReasonInfo(90210, 1, "Call answered elsewhere."))); } }