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

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

Merge "CEC: Add @CallbackExecutor to HdmiControlManager Listener methods"

parents 9ca23bba eacebb90
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2525,6 +2525,7 @@ package android.hardware.hdmi {
  public final class HdmiControlManager {
    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
    method @Nullable public android.hardware.hdmi.HdmiClient getClient(int);
    method @NonNull public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevices();
    method public int getPhysicalAddress();
+56 −6
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.util.ArrayMap;
import android.util.Log;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ConcurrentUtils;

import java.util.ArrayList;
import java.util.List;
@@ -891,6 +892,11 @@ public final class HdmiControlManager {
     * <p>To stop getting the notification,
     * use {@link #removeHotplugEventListener(HotplugEventListener)}.
     *
     * Note that each invocation of the callback will be executed on an arbitrary
     * Binder thread. This means that all callback implementations must be
     * thread safe. To specify the execution thread, use
     * {@link addHotplugEventListener(Executor, HotplugEventListener)}.
     *
     * @param listener {@link HotplugEventListener} instance
     * @see HdmiControlManager#removeHotplugEventListener(HotplugEventListener)
     *
@@ -899,6 +905,24 @@ public final class HdmiControlManager {
    @SystemApi
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public void addHotplugEventListener(HotplugEventListener listener) {
        addHotplugEventListener(ConcurrentUtils.DIRECT_EXECUTOR, listener);
    }

    /**
     * Adds a listener to get informed of {@link HdmiHotplugEvent}.
     *
     * <p>To stop getting the notification,
     * use {@link #removeHotplugEventListener(HotplugEventListener)}.
     *
     * @param listener {@link HotplugEventListener} instance
     * @see HdmiControlManager#removeHotplugEventListener(HotplugEventListener)
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public void addHotplugEventListener(@NonNull @CallbackExecutor Executor executor,
            @NonNull HotplugEventListener listener) {
        if (mService == null) {
            Log.e(TAG, "HdmiControlService is not available");
            return;
@@ -907,7 +931,8 @@ public final class HdmiControlManager {
            Log.e(TAG, "listener is already registered");
            return;
        }
        IHdmiHotplugEventListener wrappedListener = getHotplugEventListenerWrapper(listener);
        IHdmiHotplugEventListener wrappedListener =
                getHotplugEventListenerWrapper(executor, listener);
        mHotplugEventListeners.put(listener, wrappedListener);
        try {
            mService.addHotplugEventListener(wrappedListener);
@@ -943,11 +968,12 @@ public final class HdmiControlManager {
    }

    private IHdmiHotplugEventListener getHotplugEventListenerWrapper(
            final HotplugEventListener listener) {
            Executor executor, final HotplugEventListener listener) {
        return new IHdmiHotplugEventListener.Stub() {
            @Override
            public void onReceived(HdmiHotplugEvent event) {
                listener.onReceived(event);;
                Binder.clearCallingIdentity();
                executor.execute(() -> listener.onReceived(event));
            }
        };
    }
@@ -958,6 +984,11 @@ public final class HdmiControlManager {
     * <p>To stop getting the notification,
     * use {@link #removeHdmiControlStatusChangeListener(HdmiControlStatusChangeListener)}.
     *
     * Note that each invocation of the callback will be executed on an arbitrary
     * Binder thread. This means that all callback implementations must be
     * thread safe. To specify the execution thread, use
     * {@link addHdmiControlStatusChangeListener(Executor, HdmiControlStatusChangeListener)}.
     *
     * @param listener {@link HdmiControlStatusChangeListener} instance
     * @see HdmiControlManager#removeHdmiControlStatusChangeListener(
     * HdmiControlStatusChangeListener)
@@ -966,6 +997,24 @@ public final class HdmiControlManager {
     */
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public void addHdmiControlStatusChangeListener(HdmiControlStatusChangeListener listener) {
        addHdmiControlStatusChangeListener(ConcurrentUtils.DIRECT_EXECUTOR, listener);
    }

    /**
     * Adds a listener to get informed of {@link HdmiControlStatusChange}.
     *
     * <p>To stop getting the notification,
     * use {@link #removeHdmiControlStatusChangeListener(HdmiControlStatusChangeListener)}.
     *
     * @param listener {@link HdmiControlStatusChangeListener} instance
     * @see HdmiControlManager#removeHdmiControlStatusChangeListener(
     * HdmiControlStatusChangeListener)
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public void addHdmiControlStatusChangeListener(@NonNull @CallbackExecutor Executor executor,
            @NonNull HdmiControlStatusChangeListener listener) {
        if (mService == null) {
            Log.e(TAG, "HdmiControlService is not available");
            return;
@@ -975,7 +1024,7 @@ public final class HdmiControlManager {
            return;
        }
        IHdmiControlStatusChangeListener wrappedListener =
                getHdmiControlStatusChangeListenerWrapper(listener);
                getHdmiControlStatusChangeListenerWrapper(executor, listener);
        mHdmiControlStatusChangeListeners.put(listener, wrappedListener);
        try {
            mService.addHdmiControlStatusChangeListener(wrappedListener);
@@ -1011,11 +1060,12 @@ public final class HdmiControlManager {
    }

    private IHdmiControlStatusChangeListener getHdmiControlStatusChangeListenerWrapper(
            final HdmiControlStatusChangeListener listener) {
            Executor executor, final HdmiControlStatusChangeListener listener) {
        return new IHdmiControlStatusChangeListener.Stub() {
            @Override
            public void onStatusChange(boolean isCecEnabled, boolean isCecAvailable) {
                listener.onStatusChange(isCecEnabled, isCecAvailable);
                Binder.clearCallingIdentity();
                executor.execute(() -> listener.onStatusChange(isCecEnabled, isCecAvailable));
            }
        };
    }
+1 −0
Original line number Diff line number Diff line
@@ -2465,6 +2465,7 @@ package android.hardware.hdmi {
  public final class HdmiControlManager {
    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
    method @Nullable public android.hardware.hdmi.HdmiClient getClient(int);
    method @NonNull public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevices();
    method public int getPhysicalAddress();