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

Commit 26c49045 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "CEC: Move finishWithCallback method to FeatureAction"

parents 85b00aa8 0e9610ad
Loading
Loading
Loading
Loading
+3 −24
Original line number Diff line number Diff line
@@ -20,11 +20,8 @@ import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPlaybackClient;
import android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;

import java.util.ArrayList;
import java.util.List;

/**
 * Feature action that queries the power status of other device. This action is initiated via
@@ -40,7 +37,6 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction {
    private static final int STATE_WAITING_FOR_REPORT_POWER_STATUS = 1;

    private final int mTargetAddress;
    private final List<IHdmiControlCallback> mCallbacks = new ArrayList<>();

    static DevicePowerStatusAction create(HdmiCecLocalDevice source,
            int targetAddress, IHdmiControlCallback callback) {
@@ -53,9 +49,8 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction {

    private DevicePowerStatusAction(HdmiCecLocalDevice localDevice,
            int targetAddress, IHdmiControlCallback callback) {
        super(localDevice);
        super(localDevice, callback);
        mTargetAddress = targetAddress;
        addCallback(callback);
    }

    @Override
@@ -79,8 +74,7 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction {
        }
        if (cmd.getOpcode() == Constants.MESSAGE_REPORT_POWER_STATUS) {
            int status = cmd.getParams()[0];
            invokeCallback(status);
            finish();
            finishWithCallback(status);
            return true;
        }
        return false;
@@ -93,22 +87,7 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction {
        }
        if (state == STATE_WAITING_FOR_REPORT_POWER_STATUS) {
            // Got no response from TV. Report status 'unknown'.
            invokeCallback(HdmiControlManager.POWER_STATUS_UNKNOWN);
            finish();
        }
    }

    public void addCallback(IHdmiControlCallback callback) {
        mCallbacks.add(callback);
    }

    private void invokeCallback(int result) {
        try {
            for (IHdmiControlCallback callback : mCallbacks) {
                callback.onComplete(result);
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Callback failed:" + e);
            finishWithCallback(HdmiControlManager.POWER_STATUS_UNKNOWN);
        }
    }
}
+15 −29
Original line number Diff line number Diff line
@@ -21,8 +21,8 @@ import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiTvClient;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.os.RemoteException;
import android.util.Slog;

import com.android.server.hdmi.HdmiControlService.SendMessageCallback;

/**
@@ -59,7 +59,6 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
    private static final int STATE_WAIT_FOR_DEVICE_POWER_ON = 3;

    private final HdmiDeviceInfo mTarget;
    private final IHdmiControlCallback mCallback;
    private final HdmiCecMessage mGivePowerStatus;

    private int mPowerStatusCounter = 0;
@@ -73,8 +72,7 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
     */
    public DeviceSelectAction(HdmiCecLocalDeviceTv source,
            HdmiDeviceInfo target, IHdmiControlCallback callback) {
        super(source);
        mCallback = callback;
        super(source, callback);
        mTarget = target;
        mGivePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus(
                getSourceAddress(), getTargetAddress());
@@ -92,12 +90,13 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
    }

    private void queryDevicePowerStatus() {
        sendCommand(mGivePowerStatus, new SendMessageCallback() {
        sendCommand(
                mGivePowerStatus,
                new SendMessageCallback() {
                    @Override
                    public void onSendCompleted(int error) {
                        if (error != SendMessageResult.SUCCESS) {
                    invokeCallback(HdmiControlManager.RESULT_COMMUNICATION_FAILED);
                    finish();
                            finishWithCallback(HdmiControlManager.RESULT_COMMUNICATION_FAILED);
                            return;
                        }
                    }
@@ -174,8 +173,7 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
        tv().setActivePath(mTarget.getPhysicalAddress());
        sendCommand(HdmiCecMessageBuilder.buildSetStreamPath(
                getSourceAddress(), mTarget.getPhysicalAddress()));
        invokeCallback(HdmiControlManager.RESULT_SUCCESS);
        finish();
        finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
    }

    @Override
@@ -187,8 +185,7 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
        switch (mState) {
            case STATE_WAIT_FOR_REPORT_POWER_STATUS:
                if (tv().isPowerStandbyOrTransient()) {
                    invokeCallback(HdmiControlManager.RESULT_INCORRECT_MODE);
                    finish();
                    finishWithCallback(HdmiControlManager.RESULT_INCORRECT_MODE);
                    return;
                }
                sendSetStreamPath();
@@ -200,15 +197,4 @@ final class DeviceSelectAction extends HdmiCecFeatureAction {
                break;
        }
    }

    private void invokeCallback(int result) {
        if (mCallback == null) {
            return;
        }
        try {
            mCallback.onComplete(result);
        } catch (RemoteException e) {
            Slog.e(TAG, "Callback failed:" + e);
        }
    }
}
+38 −0
Original line number Diff line number Diff line
@@ -15,9 +15,11 @@
 */
package com.android.server.hdmi;

import android.hardware.hdmi.IHdmiControlCallback;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.Pair;
import android.util.Slog;

@@ -25,6 +27,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.server.hdmi.HdmiControlService.DevicePollingCallback;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
@@ -61,7 +64,20 @@ abstract class HdmiCecFeatureAction {

    private ArrayList<Pair<HdmiCecFeatureAction, Runnable>> mOnFinishedCallbacks;

    final List<IHdmiControlCallback> mCallbacks = new ArrayList<>();

    HdmiCecFeatureAction(HdmiCecLocalDevice source) {
        this(source, new ArrayList<>());
    }

    HdmiCecFeatureAction(HdmiCecLocalDevice source, IHdmiControlCallback callback) {
        this(source, Arrays.asList(callback));
    }

    HdmiCecFeatureAction(HdmiCecLocalDevice source, List<IHdmiControlCallback> callbacks) {
        for (IHdmiControlCallback callback : callbacks) {
            addCallback(callback);
        }
        mSource = source;
        mService = mSource.getService();
        mActionTimer = createActionTimer(mService.getServiceLooper());
@@ -282,4 +298,26 @@ abstract class HdmiCecFeatureAction {
        }
        mOnFinishedCallbacks.add(Pair.create(action, runnable));
    }

    protected void finishWithCallback(int returnCode) {
        invokeCallback(returnCode);
        finish();
    }

    public void addCallback(IHdmiControlCallback callback) {
        mCallbacks.add(callback);
    }

    private void invokeCallback(int result) {
        try {
            for (IHdmiControlCallback callback : mCallbacks) {
                if (callback == null) {
                    continue;
                }
                callback.onComplete(result);
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Callback failed:" + e);
        }
    }
}
+3 −24
Original line number Diff line number Diff line
@@ -18,11 +18,8 @@ package com.android.server.hdmi;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;

import java.util.ArrayList;
import java.util.List;

/**
 * Feature action that performs one touch play against TV/Display device. This action is initiated
@@ -50,7 +47,6 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction {
    private static final int LOOP_COUNTER_MAX = 10;

    private final int mTargetAddress;
    private final List<IHdmiControlCallback> mCallbacks = new ArrayList<>();

    private int mPowerStatusCounter = 0;

@@ -67,9 +63,8 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction {

    private OneTouchPlayAction(HdmiCecLocalDevice localDevice, int targetAddress,
            IHdmiControlCallback callback) {
        super(localDevice);
        super(localDevice, callback);
        mTargetAddress = targetAddress;
        addCallback(callback);
    }

    @Override
@@ -113,8 +108,7 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction {
            int status = cmd.getParams()[0];
            if (status == HdmiControlManager.POWER_STATUS_ON) {
                broadcastActiveSource();
                invokeCallback(HdmiControlManager.RESULT_SUCCESS);
                finish();
                finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
            }
            return true;
        }
@@ -132,23 +126,8 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction {
                addTimer(mState, HdmiConfig.TIMEOUT_MS);
            } else {
                // Couldn't wake up the TV for whatever reason. Report failure.
                invokeCallback(HdmiControlManager.RESULT_TIMEOUT);
                finish();
                finishWithCallback(HdmiControlManager.RESULT_TIMEOUT);
            }
        }
    }

    public void addCallback(IHdmiControlCallback callback) {
        mCallbacks.add(callback);
    }

    private void invokeCallback(int result) {
        try {
            for (IHdmiControlCallback callback : mCallbacks) {
                callback.onComplete(result);
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Callback failed:" + e);
        }
    }
}
+1 −22
Original line number Diff line number Diff line
@@ -16,11 +16,9 @@

package com.android.server.hdmi;

import android.annotation.Nullable;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;

import com.android.server.hdmi.HdmiControlService.SendMessageCallback;
@@ -66,15 +64,12 @@ final class RoutingControlAction extends HdmiCecFeatureAction {
    // <Inactive Source> command.
    private final boolean mNotifyInputChange;

    @Nullable private final IHdmiControlCallback mCallback;

    // The latest routing path. Updated by each <Routing Information> from CEC switches.
    private int mCurrentRoutingPath;

    RoutingControlAction(HdmiCecLocalDevice localDevice, int path, boolean queryDevicePowerStatus,
            IHdmiControlCallback callback) {
        super(localDevice);
        mCallback = callback;
        super(localDevice, callback);
        mCurrentRoutingPath = path;
        mQueryDevicePowerStatus = queryDevicePowerStatus;
        // Callback is non-null when routing control action is brought up by binder API. Use
@@ -147,11 +142,6 @@ final class RoutingControlAction extends HdmiCecFeatureAction {
                mCurrentRoutingPath));
    }

    private void finishWithCallback(int result) {
        invokeCallback(result);
        finish();
    }

    @Override
    public void handleTimerEvent(int timeoutState) {
        if (mState != timeoutState || mState == STATE_NONE) {
@@ -200,15 +190,4 @@ final class RoutingControlAction extends HdmiCecFeatureAction {
            finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
        }
    }

    private void invokeCallback(int result) {
        if (mCallback == null) {
            return;
        }
        try {
            mCallback.onComplete(result);
        } catch (RemoteException e) {
            // Do nothing.
        }
    }
}
Loading