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

Commit 490401c4 authored by Brad Ebinger's avatar Brad Ebinger Committed by Gerrit Code Review
Browse files

Merge "Fix unexpected crashed in IncomingCallNotifier"

parents f353ef73 64aa50fb
Loading
Loading
Loading
Loading
+20 −11
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.server.telecom.R;
import com.android.server.telecom.TelecomBroadcastIntentProcessor;
import com.android.server.telecom.TelecomBroadcastIntentProcessor;
import com.android.server.telecom.components.TelecomBroadcastReceiver;
import com.android.server.telecom.components.TelecomBroadcastReceiver;


import java.util.Objects;
import java.util.Optional;
import java.util.Optional;
import java.util.Set;
import java.util.Set;


@@ -68,7 +69,7 @@ public class IncomingCallNotifier extends CallsManagerListenerBase {
    public static final int NOTIFICATION_INCOMING_CALL = 1;
    public static final int NOTIFICATION_INCOMING_CALL = 1;
    @VisibleForTesting
    @VisibleForTesting
    public static final String NOTIFICATION_TAG = IncomingCallNotifier.class.getSimpleName();
    public static final String NOTIFICATION_TAG = IncomingCallNotifier.class.getSimpleName();

    private final Object mLock = new Object();


    public final Call.ListenerBase mCallListener = new Call.ListenerBase() {
    public final Call.ListenerBase mCallListener = new Call.ListenerBase() {
        @Override
        @Override
@@ -104,19 +105,22 @@ public class IncomingCallNotifier extends CallsManagerListenerBase {


    @Override
    @Override
    public void onCallAdded(Call call) {
    public void onCallAdded(Call call) {
        synchronized (mLock) {
            if (!mCalls.contains(call)) {
            if (!mCalls.contains(call)) {
                mCalls.add(call);
                mCalls.add(call);
            }
            }
        }


        updateIncomingCall();
        updateIncomingCall();
    }
    }


    @Override
    @Override
    public void onCallRemoved(Call call) {
    public void onCallRemoved(Call call) {
        synchronized (mLock) {
            if (mCalls.contains(call)) {
            if (mCalls.contains(call)) {
                mCalls.remove(call);
                mCalls.remove(call);
            }
            }

        }
        updateIncomingCall();
        updateIncomingCall();
    }
    }


@@ -130,11 +134,16 @@ public class IncomingCallNotifier extends CallsManagerListenerBase {
     * UI.
     * UI.
     */
     */
    private void updateIncomingCall() {
    private void updateIncomingCall() {
        Optional<Call> incomingCallOp = mCalls.stream()
        Optional<Call> incomingCallOp;
        synchronized (mLock) {
            incomingCallOp = mCalls.stream()
                    .filter(Objects::nonNull)
                    .filter(call -> call.isSelfManaged() && call.isIncoming() &&
                    .filter(call -> call.isSelfManaged() && call.isIncoming() &&
                            call.getState() == CallState.RINGING &&
                            call.getState() == CallState.RINGING &&
                            call.getHandoverState() == HandoverState.HANDOVER_NONE)
                            call.getHandoverState() == HandoverState.HANDOVER_NONE)
                    .findFirst();
                    .findFirst();
        }

        Call incomingCall = incomingCallOp.orElse(null);
        Call incomingCall = incomingCallOp.orElse(null);
        if (incomingCall != null && mCallsManagerProxy != null &&
        if (incomingCall != null && mCallsManagerProxy != null &&
                !mCallsManagerProxy.hasUnholdableCallsForOtherConnectionService(
                !mCallsManagerProxy.hasUnholdableCallsForOtherConnectionService(