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

Commit 9a4f1624 authored by Suresh Koleti's avatar Suresh Koleti Committed by Steve Kondik
Browse files

IMS: Add support of notifyPreciseCallState for multi sim

Extend notifyPreciseCallState for multi SIM.

Change-Id: I52adcd55462d6ceae5defacbbe2cb057f4484099
CRs-Fixed: 957251
parent 5a9abe4a
Loading
Loading
Loading
Loading
+41 −3
Original line number Diff line number Diff line
@@ -1247,8 +1247,42 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
            handleRemoveListLocked();
        }
        broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState,
                DisconnectCause.NOT_VALID,
                PreciseDisconnectCause.NOT_VALID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
    }

    public void notifyPreciseCallStateForSubscriber(int subId, int ringingCallState,
            int foregroundCallState, int backgroundCallState) {
        if (!checkNotifyPermission("notifyPreciseCallStateForSubscriber()")) {
            return;
        }
        synchronized (mRecords) {
            int phoneId = SubscriptionManager.getPhoneId(subId);
            if (validatePhoneId(phoneId)) {
                mRingingCallState = ringingCallState;
                mForegroundCallState = foregroundCallState;
                mBackgroundCallState = backgroundCallState;
                mPreciseCallState = new PreciseCallState(ringingCallState, foregroundCallState,
                        backgroundCallState,
                        DisconnectCause.NOT_VALID,
                        PreciseDisconnectCause.NOT_VALID);
                for (Record r : mRecords) {
                    if (r.matchPhoneStateListenerEvent(PhoneStateListener.LISTEN_PRECISE_CALL_STATE)
                            && ((r.subId == subId) ||
                            (r.subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID))) {
                        try {
                            r.callback.onPreciseCallStateChanged(mPreciseCallState);
                        } catch (RemoteException ex) {
                            mRemoveList.add(r.binder);
                        }
                    }
                }
            }
            handleRemoveListLocked();
        }
        broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState,
                DisconnectCause.NOT_VALID,
                PreciseDisconnectCause.NOT_VALID, subId);
    }

    public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause) {
@@ -1270,7 +1304,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
            handleRemoveListLocked();
        }
        broadcastPreciseCallStateChanged(mRingingCallState, mForegroundCallState,
                mBackgroundCallState, disconnectCause, preciseDisconnectCause);
                mBackgroundCallState, disconnectCause, preciseDisconnectCause,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
    }

    public void notifyPreciseDataConnectionFailed(String reason, String apnType,
@@ -1510,13 +1545,16 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
    }

    private void broadcastPreciseCallStateChanged(int ringingCallState, int foregroundCallState,
            int backgroundCallState, int disconnectCause, int preciseDisconnectCause) {
            int backgroundCallState, int disconnectCause, int preciseDisconnectCause, int subId) {
        Intent intent = new Intent(TelephonyManager.ACTION_PRECISE_CALL_STATE_CHANGED);
        intent.putExtra(TelephonyManager.EXTRA_RINGING_CALL_STATE, ringingCallState);
        intent.putExtra(TelephonyManager.EXTRA_FOREGROUND_CALL_STATE, foregroundCallState);
        intent.putExtra(TelephonyManager.EXTRA_BACKGROUND_CALL_STATE, backgroundCallState);
        intent.putExtra(TelephonyManager.EXTRA_DISCONNECT_CAUSE, disconnectCause);
        intent.putExtra(TelephonyManager.EXTRA_PRECISE_DISCONNECT_CAUSE, preciseDisconnectCause);
        if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
        }
        mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
                android.Manifest.permission.READ_PRECISE_PHONE_STATE);
    }
+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ interface ITelephonyRegistry {
    void notifyCellInfo(in List<CellInfo> cellInfo);
    void notifyPreciseCallState(int ringingCallState, int foregroundCallState,
            int backgroundCallState);
    void notifyPreciseCallStateForSubscriber(int subId, int ringingCallState,
            int foregroundCallState, int backgroundCallState);
    void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause);
    void notifyPreciseDataConnectionFailed(String reason, String apnType, String apn,
            String failCause);