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

Commit eeddc694 authored by Brad Ebinger's avatar Brad Ebinger Committed by Automerger Merge Worker
Browse files

Merge "Fix unexpected crashed in IncomingCallNotifier" am: 490401c4 am: 5ee7e936

Original change: https://android-review.googlesource.com/c/platform/packages/services/Telecomm/+/1249930

Change-Id: I1c9c6ff5ada87dd30bd8c388b1442346dd379d3a
parents 0d089fc2 5ee7e936
Loading
Loading
Loading
Loading
+20 −11
Original line number 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.components.TelecomBroadcastReceiver;

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

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

    private final Object mLock = new Object();

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

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

        updateIncomingCall();
    }

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

        }
        updateIncomingCall();
    }

@@ -130,11 +134,16 @@ public class IncomingCallNotifier extends CallsManagerListenerBase {
     * UI.
     */
    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() &&
                            call.getState() == CallState.RINGING &&
                            call.getHandoverState() == HandoverState.HANDOVER_NONE)
                    .findFirst();
        }

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