Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 185c7165 authored by radhika's avatar radhika
Browse files

Report missed incoming calls which are auto

rejected by the modem

Test: builds
Bug: b/145827366
Change-Id: Id3fed506f5de94bceb2f71f41fbeab95d55bd15d
parent 03a25ab3
Loading
Loading
Loading
Loading
+35 −2
Original line number Diff line number Diff line
@@ -219,6 +219,28 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                }
                conn.setAllowAddCallDuringVideoCall(mAllowAddCallDuringVideoCall);
                conn.setAllowHoldingVideoCall(mAllowHoldingVideoCall);

                if ((c != null) && (c.getCallProfile() != null)
                        && (c.getCallProfile().getCallExtras() != null)
                        && (c.getCallProfile().getCallExtras()
                          .containsKey(ImsCallProfile.EXTRA_CALL_DISCONNECT_CAUSE))) {
                    String error = c.getCallProfile()
                            .getCallExtra(ImsCallProfile.EXTRA_CALL_DISCONNECT_CAUSE, null);
                    if (error != null) {
                        try {
                            int cause = getDisconnectCauseFromReasonInfo(
                                        new ImsReasonInfo(Integer.parseInt(error), 0, null),
                                    conn.getState());
                            if (cause == DisconnectCause.INCOMING_AUTO_REJECTED) {
                                conn.setDisconnectCause(cause);
                                if (DBG) log("onIncomingCall : incoming call auto rejected");
                            }
                        } catch (NumberFormatException e) {
                            Rlog.e(LOG_TAG, "Exception in parsing Integer Data: " + e);
                        }
                    }
                }

                addConnection(conn);

                setVideoCallProvider(conn, imsCall);
@@ -2144,7 +2166,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                return DisconnectCause.SERVER_ERROR;

            case ImsReasonInfo.CODE_SIP_REDIRECTED:
            case ImsReasonInfo.CODE_SIP_BAD_REQUEST:
            case ImsReasonInfo.CODE_SIP_NOT_ACCEPTABLE:
            case ImsReasonInfo.CODE_SIP_GLOBAL_ERROR:
                return DisconnectCause.SERVER_ERROR;
@@ -2269,6 +2290,17 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                }
                break;

            case ImsReasonInfo.CODE_SIP_BAD_REQUEST:
            case ImsReasonInfo.CODE_REJECT_CALL_ON_OTHER_SUB:
            case ImsReasonInfo.CODE_REJECT_ONGOING_E911_CALL:
            case ImsReasonInfo.CODE_REJECT_ONGOING_CALL_SETUP:
            case ImsReasonInfo.CODE_REJECT_MAX_CALL_LIMIT_REACHED:
            case ImsReasonInfo.CODE_REJECT_ONGOING_CALL_TRANSFER:
            case ImsReasonInfo.CODE_REJECT_ONGOING_CONFERENCE_CALL:
            case ImsReasonInfo.CODE_REJECT_ONGOING_HANDOVER:
            case ImsReasonInfo.CODE_REJECT_ONGOING_CALL_UPGRADE:
                return DisconnectCause.INCOMING_AUTO_REJECTED;

            default:
        }

@@ -2457,7 +2489,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                } else if (conn.isIncoming() && conn.getConnectTime() == 0
                        && cause != DisconnectCause.ANSWERED_ELSEWHERE) {
                    // Missed
                    if (cause == DisconnectCause.NORMAL) {
                    if (cause == DisconnectCause.NORMAL
                            || cause == DisconnectCause.INCOMING_AUTO_REJECTED) {
                        cause = DisconnectCause.INCOMING_MISSED;
                    } else {
                        cause = DisconnectCause.INCOMING_REJECTED;
+11 −0
Original line number Diff line number Diff line
@@ -341,9 +341,20 @@ public class ImsPhoneConnection extends Connection implements
    }

    public void setDisconnectCause(int cause) {
        Rlog.d(LOG_TAG, "setDisconnectCause: cause=" + cause);
        mCause = cause;
    }

    /** Get the disconnect cause for connection*/
    public int getDisconnectCause() {
        Rlog.d(LOG_TAG, "getDisconnectCause: cause=" + mCause);
        return mCause;
    }

    public boolean isIncomingCallAutoRejected() {
        return mCause == DisconnectCause.INCOMING_AUTO_REJECTED ? true : false;
    }

    @Override
    public String getVendorDisconnectCause() {
      return mVendorCause;