aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java14
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java18
2 files changed, 29 insertions, 3 deletions
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index cc8af38cdd..488d98f64f 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -3292,12 +3292,20 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
} else if (conn.isIncoming() && conn.getConnectTime() == 0
&& cause != DisconnectCause.ANSWERED_ELSEWHERE) {
-
- if (conn.getDisconnectCause() == DisconnectCause.LOCAL) {
+ // Two cases where the call is declared as rejected.
+ // 1. The disconnect was initiated by the user. I.e. the connection's
+ // disconnect cause is LOCAL at this point.
+ // 2. The network provided disconnect cause is INCOMING_REJECTED. This will be
+ // the case for ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE and
+ // ImsReasonInfo.CODE_REJECTED_ELSEWHERE.
+ if (conn.getDisconnectCause() == DisconnectCause.LOCAL
+ || cause == DisconnectCause.INCOMING_REJECTED) {
// If the user initiated a disconnect of this connection, then we will treat
// this is a rejected call.
- // Note; the record the fact that this is a local disconnect in
+ // Note; we record the fact that this is a local disconnect in
// ImsPhoneConnection#onHangupLocal
+ // Alternatively, the network can specify INCOMING_REJECTED as a result of
+ // remote reject on another device; we'll still treat as rejected.
cause = DisconnectCause.INCOMING_REJECTED;
} else {
// Otherwise in all other cases consider it missed.
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 95eedc2aed..af3b7466aa 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
@@ -508,6 +508,24 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
assertEquals(DisconnectCause.INCOMING_REJECTED, connection.getDisconnectCause());
}
+ @Test
+ @SmallTest
+ public void testRejectedElsewhereIsRejected() {
+ ImsPhoneConnection connection = setupRingingConnection();
+ mImsCallListener.onCallTerminated(connection.getImsCall(),
+ new ImsReasonInfo(ImsReasonInfo.CODE_REJECTED_ELSEWHERE, 0));
+ assertEquals(DisconnectCause.INCOMING_REJECTED, connection.getDisconnectCause());
+ }
+
+ @Test
+ @SmallTest
+ public void testRemoteCallDeclineIsRejected() {
+ ImsPhoneConnection connection = setupRingingConnection();
+ mImsCallListener.onCallTerminated(connection.getImsCall(),
+ new ImsReasonInfo(ImsReasonInfo.CODE_REMOTE_CALL_DECLINE, 0));
+ assertEquals(DisconnectCause.INCOMING_REJECTED, connection.getDisconnectCause());
+ }
+
private ImsPhoneConnection setupRingingConnection() {
mImsCallProfile.setCallerNumberVerificationStatus(
ImsCallProfile.VERIFICATION_STATUS_PASSED);