Loading services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java +3 −24 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading @@ -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 Loading @@ -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; Loading @@ -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); } } } services/core/java/com/android/server/hdmi/DeviceSelectAction.java +15 −29 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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; Loading @@ -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()); Loading @@ -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; } } Loading Loading @@ -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 Loading @@ -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(); Loading @@ -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); } } } services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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()); Loading Loading @@ -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); } } } services/core/java/com/android/server/hdmi/OneTouchPlayAction.java +3 −24 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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; } Loading @@ -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); } } } services/core/java/com/android/server/hdmi/RoutingControlAction.java +1 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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
services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java +3 −24 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading @@ -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 Loading @@ -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; Loading @@ -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); } } }
services/core/java/com/android/server/hdmi/DeviceSelectAction.java +15 −29 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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; Loading @@ -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()); Loading @@ -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; } } Loading Loading @@ -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 Loading @@ -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(); Loading @@ -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); } } }
services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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()); Loading Loading @@ -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); } } }
services/core/java/com/android/server/hdmi/OneTouchPlayAction.java +3 −24 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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; } Loading @@ -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); } } }
services/core/java/com/android/server/hdmi/RoutingControlAction.java +1 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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. } } }