aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2022-06-17 19:24:25 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-06-17 19:24:25 +0000
commitdf43c8146fc81e61e27541592094eb2d8a2cdc90 (patch)
tree3ca3299a7a168081b15138a1ce998fe31a6f7e70
parent1018e40f2dea81997b3420352d4349b7c78d1696 (diff)
parente4e6b563451037a6e26b96ce239361674ca036bd (diff)
downloadtelephony-df43c8146fc81e61e27541592094eb2d8a2cdc90.tar.gz
Merge "Fix issue where remotely disconnected calls show up as missed." into tm-dev am: e4e6b56345
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/18920326 Change-Id: Iffa1571709ab5f4ecf7376af8f5de04da0b453c2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-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);