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

Commit f3f3ae19 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent multiple calls to queryDisplayStatus"

parents 1ef67f1e a4f1117e
Loading
Loading
Loading
Loading
+27 −13
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -2680,15 +2681,26 @@ public class HdmiControlService extends SystemService {
    private void announceHdmiControlStatusChange(boolean isEnabled) {
        assertRunOnServiceThread();
        synchronized (mLock) {
            List<IHdmiControlStatusChangeListener> listeners = new ArrayList<>(
                    mHdmiControlStatusChangeListenerRecords.size());
            for (HdmiControlStatusChangeListenerRecord record :
                    mHdmiControlStatusChangeListenerRecords) {
                invokeHdmiControlStatusChangeListenerLocked(record.mListener, isEnabled);
                listeners.add(record.mListener);
            }
            invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled);
        }
    }

    private void invokeHdmiControlStatusChangeListenerLocked(
            IHdmiControlStatusChangeListener listener, boolean isEnabled) {
        invokeHdmiControlStatusChangeListenerLocked(Collections.singletonList(listener), isEnabled);
    }

    private void invokeHdmiControlStatusChangeListenerLocked(
            Collection<IHdmiControlStatusChangeListener> listeners, boolean isEnabled) {
        if (listeners.isEmpty()) {
            return;
        }
        if (isEnabled) {
            queryDisplayStatus(new IHdmiControlCallback.Stub() {
                public void onComplete(int status) {
@@ -2698,23 +2710,25 @@ public class HdmiControlService extends SystemService {
                            || status == HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE) {
                        isAvailable = false;
                    }

                    try {
                        listener.onStatusChange(isEnabled, isAvailable);
                    } catch (RemoteException e) {
                        Slog.e(TAG, "Failed to report HdmiControlStatusChange: " + isEnabled
                                + " isAvailable: " + isAvailable, e);
                    }
                    invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, isAvailable);
                }
            });
            return;
        }
        invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, false);
    }

    private void invokeHdmiControlStatusChangeListenerLocked(
            Collection<IHdmiControlStatusChangeListener> listeners, boolean isEnabled,
            boolean isCecAvailable) {
        for (IHdmiControlStatusChangeListener listener : listeners) {
            try {
            listener.onStatusChange(isEnabled, false);
                listener.onStatusChange(isEnabled, isCecAvailable);
            } catch (RemoteException e) {
            Slog.e(TAG, "Failed to report HdmiControlStatusChange: " + isEnabled
                    + " isAvailable: " + false, e);
                Slog.e(TAG,
                        "Failed to report HdmiControlStatusChange: " + isEnabled + " isAvailable: "
                                + isCecAvailable, e);
            }
        }
    }