Merge "Refactor handling of <Feature Abort> responses" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
699d25c00b
@@ -250,7 +250,19 @@ final class Constants {
|
|||||||
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@IntDef({
|
@IntDef({
|
||||||
ABORT_NO_ERROR,
|
NOT_HANDLED,
|
||||||
|
HANDLED,
|
||||||
|
ABORT_UNRECOGNIZED_OPCODE,
|
||||||
|
ABORT_NOT_IN_CORRECT_MODE,
|
||||||
|
ABORT_CANNOT_PROVIDE_SOURCE,
|
||||||
|
ABORT_INVALID_OPERAND,
|
||||||
|
ABORT_REFUSED,
|
||||||
|
ABORT_UNABLE_TO_DETERMINE,
|
||||||
|
})
|
||||||
|
public @interface HandleMessageResult {}
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef({
|
||||||
ABORT_UNRECOGNIZED_OPCODE,
|
ABORT_UNRECOGNIZED_OPCODE,
|
||||||
ABORT_NOT_IN_CORRECT_MODE,
|
ABORT_NOT_IN_CORRECT_MODE,
|
||||||
ABORT_CANNOT_PROVIDE_SOURCE,
|
ABORT_CANNOT_PROVIDE_SOURCE,
|
||||||
@@ -260,8 +272,11 @@ final class Constants {
|
|||||||
})
|
})
|
||||||
public @interface AbortReason {}
|
public @interface AbortReason {}
|
||||||
|
|
||||||
// Internal abort error code. It's the same as success.
|
// Indicates that a message was not handled, but could be handled by another local device.
|
||||||
static final int ABORT_NO_ERROR = -1;
|
// If no local devices handle the message, we send <Feature Abort>[Unrecognized Opcode].
|
||||||
|
static final int NOT_HANDLED = -2;
|
||||||
|
// Indicates that a message has been handled successfully; no feature abort needed.
|
||||||
|
static final int HANDLED = -1;
|
||||||
// Constants related to operands of HDMI CEC commands.
|
// Constants related to operands of HDMI CEC commands.
|
||||||
// Refer to CEC Table 29 in HDMI Spec v1.4b.
|
// Refer to CEC Table 29 in HDMI Spec v1.4b.
|
||||||
// [Abort Reason]
|
// [Abort Reason]
|
||||||
|
|||||||
@@ -565,19 +565,24 @@ final class HdmiCecController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
private void onReceiveCommand(HdmiCecMessage message) {
|
@VisibleForTesting
|
||||||
|
void onReceiveCommand(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if ((isAcceptableAddress(message.getDestination())
|
if (mService.isAddressAllocated() && !isAcceptableAddress(message.getDestination())) {
|
||||||
|| !mService.isAddressAllocated())
|
|
||||||
&& mService.handleCecCommand(message)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Not handled message, so we will reply it with <Feature Abort>.
|
@Constants.HandleMessageResult int messageState = mService.handleCecCommand(message);
|
||||||
maySendFeatureAbortCommand(message, Constants.ABORT_UNRECOGNIZED_OPCODE);
|
if (messageState == Constants.NOT_HANDLED) {
|
||||||
|
// Message was not handled
|
||||||
|
maySendFeatureAbortCommand(message, Constants.ABORT_UNRECOGNIZED_OPCODE);
|
||||||
|
} else if (messageState != Constants.HANDLED) {
|
||||||
|
// Message handler wants to send a feature abort
|
||||||
|
maySendFeatureAbortCommand(message, messageState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
void maySendFeatureAbortCommand(HdmiCecMessage message, int reason) {
|
void maySendFeatureAbortCommand(HdmiCecMessage message, @Constants.AbortReason int reason) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Swap the source and the destination.
|
// Swap the source and the destination.
|
||||||
int src = message.getDestination();
|
int src = message.getDestination();
|
||||||
|
|||||||
@@ -248,11 +248,13 @@ abstract class HdmiCecLocalDevice {
|
|||||||
* @return true if consumed a message; otherwise, return false.
|
* @return true if consumed a message; otherwise, return false.
|
||||||
*/
|
*/
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
boolean dispatchMessage(HdmiCecMessage message) {
|
@VisibleForTesting
|
||||||
|
@Constants.HandleMessageResult
|
||||||
|
protected int dispatchMessage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int dest = message.getDestination();
|
int dest = message.getDestination();
|
||||||
if (dest != mAddress && dest != Constants.ADDR_BROADCAST) {
|
if (dest != mAddress && dest != Constants.ADDR_BROADCAST) {
|
||||||
return false;
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
// Cache incoming message if it is included in the list of cacheable opcodes.
|
// Cache incoming message if it is included in the list of cacheable opcodes.
|
||||||
mCecMessageCache.cacheMessage(message);
|
mCecMessageCache.cacheMessage(message);
|
||||||
@@ -260,10 +262,11 @@ abstract class HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected final boolean onMessage(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected final int onMessage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (dispatchMessageToAction(message)) {
|
if (dispatchMessageToAction(message)) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
switch (message.getOpcode()) {
|
switch (message.getOpcode()) {
|
||||||
case Constants.MESSAGE_ACTIVE_SOURCE:
|
case Constants.MESSAGE_ACTIVE_SOURCE:
|
||||||
@@ -357,7 +360,7 @@ abstract class HdmiCecLocalDevice {
|
|||||||
case Constants.MESSAGE_GIVE_FEATURES:
|
case Constants.MESSAGE_GIVE_FEATURES:
|
||||||
return handleGiveFeatures(message);
|
return handleGiveFeatures(message);
|
||||||
default:
|
default:
|
||||||
return false;
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,7 +378,8 @@ abstract class HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGivePhysicalAddress(@Nullable SendMessageCallback callback) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGivePhysicalAddress(@Nullable SendMessageCallback callback) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
|
|
||||||
int physicalAddress = mService.getPhysicalAddress();
|
int physicalAddress = mService.getPhysicalAddress();
|
||||||
@@ -383,76 +387,83 @@ abstract class HdmiCecLocalDevice {
|
|||||||
HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
||||||
mAddress, physicalAddress, mDeviceType);
|
mAddress, physicalAddress, mDeviceType);
|
||||||
mService.sendCecCommand(cecMessage, callback);
|
mService.sendCecCommand(cecMessage, callback);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGiveDeviceVendorId(@Nullable SendMessageCallback callback) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveDeviceVendorId(@Nullable SendMessageCallback callback) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int vendorId = mService.getVendorId();
|
int vendorId = mService.getVendorId();
|
||||||
HdmiCecMessage cecMessage =
|
HdmiCecMessage cecMessage =
|
||||||
HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, vendorId);
|
HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, vendorId);
|
||||||
mService.sendCecCommand(cecMessage, callback);
|
mService.sendCecCommand(cecMessage, callback);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGetCecVersion(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGetCecVersion(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int version = mService.getCecVersion();
|
int version = mService.getCecVersion();
|
||||||
HdmiCecMessage cecMessage =
|
HdmiCecMessage cecMessage =
|
||||||
HdmiCecMessageBuilder.buildCecVersion(
|
HdmiCecMessageBuilder.buildCecVersion(
|
||||||
message.getDestination(), message.getSource(), version);
|
message.getDestination(), message.getSource(), version);
|
||||||
mService.sendCecCommand(cecMessage);
|
mService.sendCecCommand(cecMessage);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
private boolean handleCecVersion() {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleCecVersion() {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
|
|
||||||
// Return true to avoid <Feature Abort> responses. Cec Version is tracked in HdmiCecNetwork.
|
// Return true to avoid <Feature Abort> responses. Cec Version is tracked in HdmiCecNetwork.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleActiveSource(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleInactiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleInactiveSource(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRequestActiveSource(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGetMenuLanguage(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGetMenuLanguage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
Slog.w(TAG, "Only TV can handle <Get Menu Language>:" + message.toString());
|
Slog.w(TAG, "Only TV can handle <Get Menu Language>:" + message.toString());
|
||||||
// 'return false' will cause to reply with <Feature Abort>.
|
return Constants.NOT_HANDLED;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSetMenuLanguage(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetMenuLanguage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
Slog.w(TAG, "Only Playback device can handle <Set Menu Language>:" + message.toString());
|
Slog.w(TAG, "Only Playback device can handle <Set Menu Language>:" + message.toString());
|
||||||
// 'return false' will cause to reply with <Feature Abort>.
|
return Constants.NOT_HANDLED;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGiveOsdName(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveOsdName(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Note that since this method is called after logical address allocation is done,
|
// Note that since this method is called after logical address allocation is done,
|
||||||
// mDeviceInfo should not be null.
|
// mDeviceInfo should not be null.
|
||||||
buildAndSendSetOsdName(message.getSource());
|
buildAndSendSetOsdName(message.getSource());
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void buildAndSendSetOsdName(int dest) {
|
protected void buildAndSendSetOsdName(int dest) {
|
||||||
@@ -475,18 +486,21 @@ abstract class HdmiCecLocalDevice {
|
|||||||
|
|
||||||
// Audio System device with no Playback device type
|
// Audio System device with no Playback device type
|
||||||
// needs to refactor this function if it's also a switch
|
// needs to refactor this function if it's also a switch
|
||||||
protected boolean handleRoutingChange(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRoutingChange(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Audio System device with no Playback device type
|
// Audio System device with no Playback device type
|
||||||
// needs to refactor this function if it's also a switch
|
// needs to refactor this function if it's also a switch
|
||||||
protected boolean handleRoutingInformation(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRoutingInformation(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallSuper
|
@CallSuper
|
||||||
protected boolean handleReportPhysicalAddress(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportPhysicalAddress(HdmiCecMessage message) {
|
||||||
// <Report Physical Address> is also handled in HdmiCecNetwork to update the local network
|
// <Report Physical Address> is also handled in HdmiCecNetwork to update the local network
|
||||||
// state
|
// state
|
||||||
|
|
||||||
@@ -495,7 +509,7 @@ abstract class HdmiCecLocalDevice {
|
|||||||
// Ignore if [Device Discovery Action] is going on.
|
// Ignore if [Device Discovery Action] is going on.
|
||||||
if (hasAction(DeviceDiscoveryAction.class)) {
|
if (hasAction(DeviceDiscoveryAction.class)) {
|
||||||
Slog.i(TAG, "Ignored while Device Discovery Action is in progress: " + message);
|
Slog.i(TAG, "Ignored while Device Discovery Action is in progress: " + message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
HdmiDeviceInfo cecDeviceInfo = mService.getHdmiCecNetwork().getCecDeviceInfo(address);
|
HdmiDeviceInfo cecDeviceInfo = mService.getHdmiCecNetwork().getCecDeviceInfo(address);
|
||||||
@@ -506,63 +520,77 @@ abstract class HdmiCecLocalDevice {
|
|||||||
HdmiCecMessageBuilder.buildGiveOsdNameCommand(mAddress, address));
|
HdmiCecMessageBuilder.buildGiveOsdNameCommand(mAddress, address));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleGiveSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleGiveSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleSetSystemAudioMode(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleSetSystemAudioMode(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleSystemAudioModeRequest(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleSystemAudioModeRequest(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleTerminateArc(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleTerminateArc(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleInitiateArc(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleInitiateArc(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleRequestArcInitiate(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRequestArcInitiate(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleRequestArcTermination(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRequestArcTermination(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleReportArcInitiate(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleReportArcInitiate(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleReportArcTermination(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleReportArcTermination(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleReportAudioStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleReportAudioStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleGiveAudioStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleGiveAudioStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleRequestShortAudioDescriptor(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRequestShortAudioDescriptor(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleReportShortAudioDescriptor(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleReportShortAudioDescriptor(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Constants.RcProfile
|
@Constants.RcProfile
|
||||||
@@ -572,13 +600,14 @@ abstract class HdmiCecLocalDevice {
|
|||||||
|
|
||||||
protected abstract List<Integer> getDeviceFeatures();
|
protected abstract List<Integer> getDeviceFeatures();
|
||||||
|
|
||||||
protected boolean handleGiveFeatures(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveFeatures(HdmiCecMessage message) {
|
||||||
if (mService.getCecVersion() < HdmiControlManager.HDMI_CEC_VERSION_2_0) {
|
if (mService.getCecVersion() < HdmiControlManager.HDMI_CEC_VERSION_2_0) {
|
||||||
return false;
|
return Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
reportFeatures();
|
reportFeatures();
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void reportFeatures() {
|
protected void reportFeatures() {
|
||||||
@@ -598,32 +627,34 @@ abstract class HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleStandby(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleStandby(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Seq #12
|
// Seq #12
|
||||||
if (mService.isControlEnabled()
|
if (mService.isControlEnabled()
|
||||||
&& !mService.isProhibitMode()
|
&& !mService.isProhibitMode()
|
||||||
&& mService.isPowerOnOrTransient()) {
|
&& mService.isPowerOnOrTransient()) {
|
||||||
mService.standby();
|
mService.standby();
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
return false;
|
return Constants.ABORT_NOT_IN_CORRECT_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleUserControlPressed(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleUserControlPressed(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
mHandler.removeMessages(MSG_USER_CONTROL_RELEASE_TIMEOUT);
|
mHandler.removeMessages(MSG_USER_CONTROL_RELEASE_TIMEOUT);
|
||||||
if (mService.isPowerOnOrTransient() && isPowerOffOrToggleCommand(message)) {
|
if (mService.isPowerOnOrTransient() && isPowerOffOrToggleCommand(message)) {
|
||||||
mService.standby();
|
mService.standby();
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
} else if (mService.isPowerStandbyOrTransient() && isPowerOnOrToggleCommand(message)) {
|
} else if (mService.isPowerStandbyOrTransient() && isPowerOnOrToggleCommand(message)) {
|
||||||
mService.wakeUp();
|
mService.wakeUp();
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
} else if (mService.getHdmiCecVolumeControl()
|
} else if (mService.getHdmiCecVolumeControl()
|
||||||
== HdmiControlManager.VOLUME_CONTROL_DISABLED && isVolumeOrMuteCommand(
|
== HdmiControlManager.VOLUME_CONTROL_DISABLED && isVolumeOrMuteCommand(
|
||||||
message)) {
|
message)) {
|
||||||
return false;
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPowerOffOrToggleCommand(message) || isPowerOnOrToggleCommand(message)) {
|
if (isPowerOffOrToggleCommand(message) || isPowerOnOrToggleCommand(message)) {
|
||||||
@@ -631,7 +662,7 @@ abstract class HdmiCecLocalDevice {
|
|||||||
// keycode to Android keycode.
|
// keycode to Android keycode.
|
||||||
// Do not <Feature Abort> as the local device should already be in the correct power
|
// Do not <Feature Abort> as the local device should already be in the correct power
|
||||||
// state.
|
// state.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
final long downTime = SystemClock.uptimeMillis();
|
final long downTime = SystemClock.uptimeMillis();
|
||||||
@@ -653,15 +684,15 @@ abstract class HdmiCecLocalDevice {
|
|||||||
mHandler.sendMessageDelayed(
|
mHandler.sendMessageDelayed(
|
||||||
Message.obtain(mHandler, MSG_USER_CONTROL_RELEASE_TIMEOUT),
|
Message.obtain(mHandler, MSG_USER_CONTROL_RELEASE_TIMEOUT),
|
||||||
FOLLOWER_SAFETY_TIMEOUT);
|
FOLLOWER_SAFETY_TIMEOUT);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_INVALID_OPERAND);
|
return Constants.ABORT_INVALID_OPERAND;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleUserControlReleased() {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleUserControlReleased() {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
mHandler.removeMessages(MSG_USER_CONTROL_RELEASE_TIMEOUT);
|
mHandler.removeMessages(MSG_USER_CONTROL_RELEASE_TIMEOUT);
|
||||||
mLastKeyRepeatCount = 0;
|
mLastKeyRepeatCount = 0;
|
||||||
@@ -670,7 +701,7 @@ abstract class HdmiCecLocalDevice {
|
|||||||
injectKeyEvent(upTime, KeyEvent.ACTION_UP, mLastKeycode, 0);
|
injectKeyEvent(upTime, KeyEvent.ACTION_UP, mLastKeycode, 0);
|
||||||
mLastKeycode = HdmiCecKeycode.UNSUPPORTED_KEYCODE;
|
mLastKeycode = HdmiCecKeycode.UNSUPPORTED_KEYCODE;
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void injectKeyEvent(long time, int action, int keycode, int repeat) {
|
static void injectKeyEvent(long time, int action, int keycode, int repeat) {
|
||||||
@@ -717,38 +748,45 @@ abstract class HdmiCecLocalDevice {
|
|||||||
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION);
|
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleTextViewOn(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleTextViewOn(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleImageViewOn(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleImageViewOn(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleSetStreamPath(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleSetStreamPath(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleGiveDevicePowerStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveDevicePowerStatus(HdmiCecMessage message) {
|
||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildReportPowerStatus(
|
HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
mAddress, message.getSource(), mService.getPowerStatus()));
|
mAddress, message.getSource(), mService.getPowerStatus()));
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleMenuRequest(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleMenuRequest(HdmiCecMessage message) {
|
||||||
// Always report menu active to receive Remote Control.
|
// Always report menu active to receive Remote Control.
|
||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildReportMenuStatus(
|
HdmiCecMessageBuilder.buildReportMenuStatus(
|
||||||
mAddress, message.getSource(), Constants.MENU_STATE_ACTIVATED));
|
mAddress, message.getSource(), Constants.MENU_STATE_ACTIVATED));
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleMenuStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleMenuStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleVendorCommand(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleVendorCommand(HdmiCecMessage message) {
|
||||||
if (!mService.invokeVendorCommandListenersOnReceived(
|
if (!mService.invokeVendorCommandListenersOnReceived(
|
||||||
mDeviceType,
|
mDeviceType,
|
||||||
message.getSource(),
|
message.getSource(),
|
||||||
@@ -757,57 +795,64 @@ abstract class HdmiCecLocalDevice {
|
|||||||
false)) {
|
false)) {
|
||||||
// Vendor command listener may not have been registered yet. Respond with
|
// Vendor command listener may not have been registered yet. Respond with
|
||||||
// <Feature Abort> [Refused] so that the sender can try again later.
|
// <Feature Abort> [Refused] so that the sender can try again later.
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleVendorCommandWithId(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleVendorCommandWithId(HdmiCecMessage message) {
|
||||||
byte[] params = message.getParams();
|
byte[] params = message.getParams();
|
||||||
int vendorId = HdmiUtils.threeBytesToInt(params);
|
int vendorId = HdmiUtils.threeBytesToInt(params);
|
||||||
if (vendorId == mService.getVendorId()) {
|
if (vendorId == mService.getVendorId()) {
|
||||||
if (!mService.invokeVendorCommandListenersOnReceived(
|
if (!mService.invokeVendorCommandListenersOnReceived(
|
||||||
mDeviceType, message.getSource(), message.getDestination(), params, true)) {
|
mDeviceType, message.getSource(), message.getDestination(), params, true)) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
} else if (message.getDestination() != Constants.ADDR_BROADCAST
|
} else if (message.getDestination() != Constants.ADDR_BROADCAST
|
||||||
&& message.getSource() != Constants.ADDR_UNREGISTERED) {
|
&& message.getSource() != Constants.ADDR_UNREGISTERED) {
|
||||||
Slog.v(TAG, "Wrong direct vendor command. Replying with <Feature Abort>");
|
Slog.v(TAG, "Wrong direct vendor command. Replying with <Feature Abort>");
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNRECOGNIZED_OPCODE);
|
return Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
} else {
|
} else {
|
||||||
Slog.v(TAG, "Wrong broadcast vendor command. Ignoring");
|
Slog.v(TAG, "Wrong broadcast vendor command. Ignoring");
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void sendStandby(int deviceId) {
|
protected void sendStandby(int deviceId) {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleSetOsdName(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetOsdName(HdmiCecMessage message) {
|
||||||
// <Set OSD name> is also handled in HdmiCecNetwork to update the local network state
|
// <Set OSD name> is also handled in HdmiCecNetwork to update the local network state
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleRecordTvScreen(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRecordTvScreen(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleTimerClearedStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleTimerClearedStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleReportPowerStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportPowerStatus(HdmiCecMessage message) {
|
||||||
// <Report Power Status> is also handled in HdmiCecNetwork to update the local network state
|
// <Report Power Status> is also handled in HdmiCecNetwork to update the local network state
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleTimerStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleTimerStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handleRecordStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
return false;
|
protected int handleRecordStatus(HdmiCecMessage message) {
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
|
|||||||
@@ -316,7 +316,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleActiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int logicalAddress = message.getSource();
|
int logicalAddress = message.getSource();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
@@ -339,52 +340,56 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
mDelayedMessageBuffer.removeActiveSource();
|
mDelayedMessageBuffer.removeActiveSource();
|
||||||
return super.handleActiveSource(message);
|
return super.handleActiveSource(message);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleInitiateArc(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleInitiateArc(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// TODO(amyjojo): implement initiate arc handler
|
// TODO(amyjojo): implement initiate arc handler
|
||||||
HdmiLogger.debug(TAG + "Stub handleInitiateArc");
|
HdmiLogger.debug(TAG + "Stub handleInitiateArc");
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleReportArcInitiate(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportArcInitiate(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// TODO(amyjojo): implement report arc initiate handler
|
// TODO(amyjojo): implement report arc initiate handler
|
||||||
HdmiLogger.debug(TAG + "Stub handleReportArcInitiate");
|
HdmiLogger.debug(TAG + "Stub handleReportArcInitiate");
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleReportArcTermination(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportArcTermination(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// TODO(amyjojo): implement report arc terminate handler
|
// TODO(amyjojo): implement report arc terminate handler
|
||||||
HdmiLogger.debug(TAG + "Stub handleReportArcTermination");
|
HdmiLogger.debug(TAG + "Stub handleReportArcTermination");
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGiveAudioStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveAudioStatus(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (isSystemAudioControlFeatureEnabled() && mService.getHdmiCecVolumeControl()
|
if (isSystemAudioControlFeatureEnabled() && mService.getHdmiCecVolumeControl()
|
||||||
== HdmiControlManager.VOLUME_CONTROL_ENABLED) {
|
== HdmiControlManager.VOLUME_CONTROL_ENABLED) {
|
||||||
reportAudioStatus(message.getSource());
|
reportAudioStatus(message.getSource());
|
||||||
} else {
|
return Constants.HANDLED;
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGiveSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGiveSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// If the audio system is initiating the system audio mode on and TV asks the sam status at
|
// If the audio system is initiating the system audio mode on and TV asks the sam status at
|
||||||
// the same time, respond with true. Since we know TV supports sam in this situation.
|
// the same time, respond with true. Since we know TV supports sam in this situation.
|
||||||
@@ -399,52 +404,53 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildReportSystemAudioMode(
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(
|
||||||
mAddress, message.getSource(), isSystemAudioModeOnOrTurningOn));
|
mAddress, message.getSource(), isSystemAudioModeOnOrTurningOn));
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestArcInitiate(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRequestArcInitiate(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
removeAction(ArcInitiationActionFromAvr.class);
|
removeAction(ArcInitiationActionFromAvr.class);
|
||||||
if (!mService.readBooleanSystemProperty(Constants.PROPERTY_ARC_SUPPORT, true)) {
|
if (!mService.readBooleanSystemProperty(Constants.PROPERTY_ARC_SUPPORT, true)) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNRECOGNIZED_OPCODE);
|
return Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
} else if (!isDirectConnectToTv()) {
|
} else if (!isDirectConnectToTv()) {
|
||||||
HdmiLogger.debug("AVR device is not directly connected with TV");
|
HdmiLogger.debug("AVR device is not directly connected with TV");
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_NOT_IN_CORRECT_MODE);
|
return Constants.ABORT_NOT_IN_CORRECT_MODE;
|
||||||
} else {
|
} else {
|
||||||
addAndStartAction(new ArcInitiationActionFromAvr(this));
|
addAndStartAction(new ArcInitiationActionFromAvr(this));
|
||||||
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestArcTermination(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRequestArcTermination(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)) {
|
if (!SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNRECOGNIZED_OPCODE);
|
return Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
} else if (!isArcEnabled()) {
|
} else if (!isArcEnabled()) {
|
||||||
HdmiLogger.debug("ARC is not established between TV and AVR device");
|
HdmiLogger.debug("ARC is not established between TV and AVR device");
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_NOT_IN_CORRECT_MODE);
|
return Constants.ABORT_NOT_IN_CORRECT_MODE;
|
||||||
} else {
|
} else {
|
||||||
removeAction(ArcTerminationActionFromAvr.class);
|
removeAction(ArcTerminationActionFromAvr.class);
|
||||||
addAndStartAction(new ArcTerminationActionFromAvr(this));
|
addAndStartAction(new ArcTerminationActionFromAvr(this));
|
||||||
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestShortAudioDescriptor(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRequestShortAudioDescriptor(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
HdmiLogger.debug(TAG + "Stub handleRequestShortAudioDescriptor");
|
HdmiLogger.debug(TAG + "Stub handleRequestShortAudioDescriptor");
|
||||||
if (!isSystemAudioControlFeatureEnabled()) {
|
if (!isSystemAudioControlFeatureEnabled()) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
if (!isSystemAudioActivated()) {
|
if (!isSystemAudioActivated()) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_NOT_IN_CORRECT_MODE);
|
return Constants.ABORT_NOT_IN_CORRECT_MODE;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<DeviceConfig> config = null;
|
List<DeviceConfig> config = null;
|
||||||
@@ -468,21 +474,20 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
} else {
|
} else {
|
||||||
AudioDeviceInfo deviceInfo = getSystemAudioDeviceInfo();
|
AudioDeviceInfo deviceInfo = getSystemAudioDeviceInfo();
|
||||||
if (deviceInfo == null) {
|
if (deviceInfo == null) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNABLE_TO_DETERMINE);
|
return Constants.ABORT_UNABLE_TO_DETERMINE;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sadBytes = getSupportedShortAudioDescriptors(deviceInfo, audioFormatCodes);
|
sadBytes = getSupportedShortAudioDescriptors(deviceInfo, audioFormatCodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sadBytes.length == 0) {
|
if (sadBytes.length == 0) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_INVALID_OPERAND);
|
return Constants.ABORT_INVALID_OPERAND;
|
||||||
} else {
|
} else {
|
||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
|
HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
|
||||||
mAddress, message.getSource(), sadBytes));
|
mAddress, message.getSource(), sadBytes));
|
||||||
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] getSupportedShortAudioDescriptors(
|
private byte[] getSupportedShortAudioDescriptors(
|
||||||
@@ -624,7 +629,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSystemAudioModeRequest(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSystemAudioModeRequest(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
boolean systemAudioStatusOn = message.getParams().length != 0;
|
boolean systemAudioStatusOn = message.getParams().length != 0;
|
||||||
// Check if the request comes from a non-TV device.
|
// Check if the request comes from a non-TV device.
|
||||||
@@ -632,8 +638,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
// if non-TV device tries to turn on the feature
|
// if non-TV device tries to turn on the feature
|
||||||
if (message.getSource() != Constants.ADDR_TV) {
|
if (message.getSource() != Constants.ADDR_TV) {
|
||||||
if (systemAudioStatusOn) {
|
if (systemAudioStatusOn) {
|
||||||
handleSystemAudioModeOnFromNonTvDevice(message);
|
return handleSystemAudioModeOnFromNonTvDevice(message);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// If TV request the feature on
|
// If TV request the feature on
|
||||||
@@ -644,8 +649,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
// If TV or Audio System does not support the feature,
|
// If TV or Audio System does not support the feature,
|
||||||
// will send abort command.
|
// will send abort command.
|
||||||
if (!checkSupportAndSetSystemAudioMode(systemAudioStatusOn)) {
|
if (!checkSupportAndSetSystemAudioMode(systemAudioStatusOn)) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
@@ -660,7 +664,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
if (HdmiUtils.getLocalPortFromPhysicalAddress(
|
if (HdmiUtils.getLocalPortFromPhysicalAddress(
|
||||||
sourcePhysicalAddress, getDeviceInfo().getPhysicalAddress())
|
sourcePhysicalAddress, getDeviceInfo().getPhysicalAddress())
|
||||||
!= HdmiUtils.TARGET_NOT_UNDER_LOCAL_DEVICE) {
|
!= HdmiUtils.TARGET_NOT_UNDER_LOCAL_DEVICE) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
HdmiDeviceInfo safeDeviceInfoByPath =
|
HdmiDeviceInfo safeDeviceInfoByPath =
|
||||||
mService.getHdmiCecNetwork().getSafeDeviceInfoByPath(sourcePhysicalAddress);
|
mService.getHdmiCecNetwork().getSafeDeviceInfoByPath(sourcePhysicalAddress);
|
||||||
@@ -668,29 +672,31 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
switchInputOnReceivingNewActivePath(sourcePhysicalAddress);
|
switchInputOnReceivingNewActivePath(sourcePhysicalAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSetSystemAudioMode(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetSystemAudioMode(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!checkSupportAndSetSystemAudioMode(
|
if (!checkSupportAndSetSystemAudioMode(
|
||||||
HdmiUtils.parseCommandParamSystemAudioStatus(message))) {
|
HdmiUtils.parseCommandParamSystemAudioStatus(message))) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!checkSupportAndSetSystemAudioMode(
|
if (!checkSupportAndSetSystemAudioMode(
|
||||||
HdmiUtils.parseCommandParamSystemAudioStatus(message))) {
|
HdmiUtils.parseCommandParamSystemAudioStatus(message))) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
@@ -948,13 +954,13 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
/**
|
/**
|
||||||
* Handler of System Audio Mode Request on from non TV device
|
* Handler of System Audio Mode Request on from non TV device
|
||||||
*/
|
*/
|
||||||
void handleSystemAudioModeOnFromNonTvDevice(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
int handleSystemAudioModeOnFromNonTvDevice(HdmiCecMessage message) {
|
||||||
if (!isSystemAudioControlFeatureEnabled()) {
|
if (!isSystemAudioControlFeatureEnabled()) {
|
||||||
HdmiLogger.debug(
|
HdmiLogger.debug(
|
||||||
"Cannot turn on" + "system audio mode "
|
"Cannot turn on" + "system audio mode "
|
||||||
+ "because the System Audio Control feature is disabled.");
|
+ "because the System Audio Control feature is disabled.");
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Wake up device
|
// Wake up device
|
||||||
mService.wakeUp();
|
mService.wakeUp();
|
||||||
@@ -967,7 +973,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
||||||
mAddress, Constants.ADDR_BROADCAST, true));
|
mAddress, Constants.ADDR_BROADCAST, true));
|
||||||
return;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
// Check if TV supports System Audio Control.
|
// Check if TV supports System Audio Control.
|
||||||
// Handle broadcasting setSystemAudioMode on or aborting message on callback.
|
// Handle broadcasting setSystemAudioMode on or aborting message on callback.
|
||||||
@@ -983,6 +989,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTvSystemAudioModeSupport(boolean supported) {
|
void setTvSystemAudioModeSupport(boolean supported) {
|
||||||
|
|||||||
@@ -251,7 +251,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleUserControlPressed(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleUserControlPressed(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
wakeUpIfActiveSource();
|
wakeUpIfActiveSource();
|
||||||
return super.handleUserControlPressed(message);
|
return super.handleUserControlPressed(message);
|
||||||
@@ -270,10 +271,11 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSetMenuLanguage(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetMenuLanguage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!SET_MENU_LANGUAGE) {
|
if (!SET_MENU_LANGUAGE) {
|
||||||
return false;
|
return Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -283,7 +285,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
// Do not switch language if the new language is the same as the current one.
|
// Do not switch language if the new language is the same as the current one.
|
||||||
// This helps avoid accidental country variant switching from en_US to en_AU
|
// This helps avoid accidental country variant switching from en_US to en_AU
|
||||||
// due to the limitation of CEC. See the warning below.
|
// due to the limitation of CEC. See the warning below.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't use Locale.getAvailableLocales() since it returns a locale
|
// Don't use Locale.getAvailableLocales() since it returns a locale
|
||||||
@@ -298,36 +300,38 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
// will always be mapped to en-AU among other variants like en-US, en-GB,
|
// will always be mapped to en-AU among other variants like en-US, en-GB,
|
||||||
// an en-IN, which may not be the expected one.
|
// an en-IN, which may not be the expected one.
|
||||||
LocalePicker.updateLocale(localeInfo.getLocale());
|
LocalePicker.updateLocale(localeInfo.getLocale());
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Slog.w(TAG, "Can't handle <Set Menu Language> of " + iso3Language);
|
Slog.w(TAG, "Can't handle <Set Menu Language> of " + iso3Language);
|
||||||
return false;
|
return Constants.ABORT_INVALID_OPERAND;
|
||||||
} catch (UnsupportedEncodingException e) {
|
} catch (UnsupportedEncodingException e) {
|
||||||
Slog.w(TAG, "Can't handle <Set Menu Language>", e);
|
Slog.w(TAG, "Can't handle <Set Menu Language>", e);
|
||||||
return false;
|
return Constants.ABORT_INVALID_OPERAND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleSetSystemAudioMode(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetSystemAudioMode(HdmiCecMessage message) {
|
||||||
// System Audio Mode only turns on/off when Audio System broadcasts on/off message.
|
// System Audio Mode only turns on/off when Audio System broadcasts on/off message.
|
||||||
// For device with type 4 and 5, it can set system audio mode on/off
|
// For device with type 4 and 5, it can set system audio mode on/off
|
||||||
// when there is another audio system device connected into the system first.
|
// when there is another audio system device connected into the system first.
|
||||||
if (message.getDestination() != Constants.ADDR_BROADCAST
|
if (message.getDestination() != Constants.ADDR_BROADCAST
|
||||||
|| message.getSource() != Constants.ADDR_AUDIO_SYSTEM
|
|| message.getSource() != Constants.ADDR_AUDIO_SYSTEM
|
||||||
|| mService.audioSystem() != null) {
|
|| mService.audioSystem() != null) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
boolean setSystemAudioModeOn = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
boolean setSystemAudioModeOn = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
||||||
if (mService.isSystemAudioActivated() != setSystemAudioModeOn) {
|
if (mService.isSystemAudioActivated() != setSystemAudioModeOn) {
|
||||||
mService.setSystemAudioActivated(setSystemAudioModeOn);
|
mService.setSystemAudioActivated(setSystemAudioModeOn);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
// Only directly addressed System Audio Mode Status message can change internal
|
// Only directly addressed System Audio Mode Status message can change internal
|
||||||
// system audio mode status.
|
// system audio mode status.
|
||||||
if (message.getDestination() == mAddress
|
if (message.getDestination() == mAddress
|
||||||
@@ -337,25 +341,27 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
mService.setSystemAudioActivated(setSystemAudioModeOn);
|
mService.setSystemAudioActivated(setSystemAudioModeOn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRoutingChange(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRoutingChange(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams(), 2);
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams(), 2);
|
||||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRoutingInformation(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRoutingInformation(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -203,7 +203,8 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleActiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int logicalAddress = message.getSource();
|
int logicalAddress = message.getSource();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
@@ -215,20 +216,22 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
|||||||
if (isRoutingControlFeatureEnabled()) {
|
if (isRoutingControlFeatureEnabled()) {
|
||||||
switchInputOnReceivingNewActivePath(physicalAddress);
|
switchInputOnReceivingNewActivePath(physicalAddress);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRequestActiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
maySendActiveSource(message.getSource());
|
maySendActiveSource(message.getSource());
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSetStreamPath(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetStreamPath(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
// If current device is the target path, set to Active Source.
|
// If current device is the target path, set to Active Source.
|
||||||
@@ -242,12 +245,13 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
|||||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleSetStreamPath()");
|
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleSetStreamPath()");
|
||||||
}
|
}
|
||||||
switchInputOnReceivingNewActivePath(physicalAddress);
|
switchInputOnReceivingNewActivePath(physicalAddress);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRoutingChange(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRoutingChange(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams(), 2);
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams(), 2);
|
||||||
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
||||||
@@ -256,16 +260,16 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
|||||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingChange()");
|
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingChange()");
|
||||||
}
|
}
|
||||||
if (!isRoutingControlFeatureEnabled()) {
|
if (!isRoutingControlFeatureEnabled()) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRoutingInformation(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRoutingInformation(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
||||||
@@ -274,11 +278,10 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
|||||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingInformation()");
|
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingInformation()");
|
||||||
}
|
}
|
||||||
if (!isRoutingControlFeatureEnabled()) {
|
if (!isRoutingControlFeatureEnabled()) {
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Method to switch Input with the new Active Path.
|
// Method to switch Input with the new Active Path.
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import android.util.Slog;
|
|||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
import com.android.internal.util.IndentingPrintWriter;
|
||||||
import com.android.server.hdmi.DeviceDiscoveryAction.DeviceDiscoveryCallback;
|
import com.android.server.hdmi.DeviceDiscoveryAction.DeviceDiscoveryCallback;
|
||||||
import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
|
import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
|
||||||
@@ -210,11 +211,13 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
boolean dispatchMessage(HdmiCecMessage message) {
|
@VisibleForTesting
|
||||||
|
@Constants.HandleMessageResult
|
||||||
|
protected int dispatchMessage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (mService.isPowerStandby() && !mService.isWakeUpMessageReceived()
|
if (mService.isPowerStandby() && !mService.isWakeUpMessageReceived()
|
||||||
&& mStandbyHandler.handleCommand(message)) {
|
&& mStandbyHandler.handleCommand(message)) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
return super.onMessage(message);
|
return super.onMessage(message);
|
||||||
}
|
}
|
||||||
@@ -409,7 +412,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleActiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int logicalAddress = message.getSource();
|
int logicalAddress = message.getSource();
|
||||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
@@ -429,21 +433,22 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
HdmiLogger.debug("Input not ready for device: %X; buffering the command", info.getId());
|
HdmiLogger.debug("Input not ready for device: %X; buffering the command", info.getId());
|
||||||
mDelayedMessageBuffer.add(message);
|
mDelayedMessageBuffer.add(message);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleInactiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleInactiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Seq #10
|
// Seq #10
|
||||||
|
|
||||||
// Ignore <Inactive Source> from non-active source device.
|
// Ignore <Inactive Source> from non-active source device.
|
||||||
if (getActiveSource().logicalAddress != message.getSource()) {
|
if (getActiveSource().logicalAddress != message.getSource()) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
if (isProhibitMode()) {
|
if (isProhibitMode()) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
int portId = getPrevPortId();
|
int portId = getPrevPortId();
|
||||||
if (portId != Constants.INVALID_PORT_ID) {
|
if (portId != Constants.INVALID_PORT_ID) {
|
||||||
@@ -452,10 +457,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
HdmiDeviceInfo inactiveSource = mService.getHdmiCecNetwork().getCecDeviceInfo(
|
HdmiDeviceInfo inactiveSource = mService.getHdmiCecNetwork().getCecDeviceInfo(
|
||||||
message.getSource());
|
message.getSource());
|
||||||
if (inactiveSource == null) {
|
if (inactiveSource == null) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
if (mService.pathToPortId(inactiveSource.getPhysicalAddress()) == portId) {
|
if (mService.pathToPortId(inactiveSource.getPhysicalAddress()) == portId) {
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
// TODO: Switch the TV freeze mode off
|
// TODO: Switch the TV freeze mode off
|
||||||
|
|
||||||
@@ -468,29 +473,31 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
setActivePath(Constants.INVALID_PHYSICAL_ADDRESS);
|
setActivePath(Constants.INVALID_PHYSICAL_ADDRESS);
|
||||||
mService.invokeInputChangeListener(HdmiDeviceInfo.INACTIVE_DEVICE);
|
mService.invokeInputChangeListener(HdmiDeviceInfo.INACTIVE_DEVICE);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRequestActiveSource(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRequestActiveSource(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Seq #19
|
// Seq #19
|
||||||
if (mAddress == getActiveSource().logicalAddress) {
|
if (mAddress == getActiveSource().logicalAddress) {
|
||||||
mService.sendCecCommand(
|
mService.sendCecCommand(
|
||||||
HdmiCecMessageBuilder.buildActiveSource(mAddress, getActivePath()));
|
HdmiCecMessageBuilder.buildActiveSource(mAddress, getActivePath()));
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleGetMenuLanguage(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleGetMenuLanguage(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!broadcastMenuLanguage(mService.getLanguage())) {
|
if (!broadcastMenuLanguage(mService.getLanguage())) {
|
||||||
Slog.w(TAG, "Failed to respond to <Get Menu Language>: " + message.toString());
|
Slog.w(TAG, "Failed to respond to <Get Menu Language>: " + message.toString());
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
@@ -506,7 +513,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleReportPhysicalAddress(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportPhysicalAddress(HdmiCecMessage message) {
|
||||||
super.handleReportPhysicalAddress(message);
|
super.handleReportPhysicalAddress(message);
|
||||||
int path = HdmiUtils.twoBytesToInt(message.getParams());
|
int path = HdmiUtils.twoBytesToInt(message.getParams());
|
||||||
int address = message.getSource();
|
int address = message.getSource();
|
||||||
@@ -516,19 +524,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
handleNewDeviceAtTheTailOfActivePath(path);
|
handleNewDeviceAtTheTailOfActivePath(path);
|
||||||
}
|
}
|
||||||
startNewDeviceAction(ActiveSource.of(address, path), type);
|
startNewDeviceAction(ActiveSource.of(address, path), type);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleTimerStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleTimerStatus(HdmiCecMessage message) {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleRecordStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRecordStatus(HdmiCecMessage message) {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void startNewDeviceAction(ActiveSource activeSource, int deviceType) {
|
void startNewDeviceAction(ActiveSource activeSource, int deviceType) {
|
||||||
@@ -590,7 +600,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRoutingChange(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRoutingChange(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Seq #21
|
// Seq #21
|
||||||
byte[] params = message.getParams();
|
byte[] params = message.getParams();
|
||||||
@@ -601,27 +612,29 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
int newPath = HdmiUtils.twoBytesToInt(params, 2);
|
int newPath = HdmiUtils.twoBytesToInt(params, 2);
|
||||||
addAndStartAction(new RoutingControlAction(this, newPath, true, null));
|
addAndStartAction(new RoutingControlAction(this, newPath, true, null));
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleReportAudioStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleReportAudioStatus(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (mService.getHdmiCecVolumeControl()
|
if (mService.getHdmiCecVolumeControl()
|
||||||
== HdmiControlManager.VOLUME_CONTROL_DISABLED) {
|
== HdmiControlManager.VOLUME_CONTROL_DISABLED) {
|
||||||
return false;
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean mute = HdmiUtils.isAudioStatusMute(message);
|
boolean mute = HdmiUtils.isAudioStatusMute(message);
|
||||||
int volume = HdmiUtils.getAudioStatusVolume(message);
|
int volume = HdmiUtils.getAudioStatusVolume(message);
|
||||||
setAudioStatus(mute, volume);
|
setAudioStatus(mute, volume);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleTextViewOn(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleTextViewOn(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
|
|
||||||
// Note that <Text View On> (and <Image View On>) command won't be handled here in
|
// Note that <Text View On> (and <Image View On>) command won't be handled here in
|
||||||
@@ -634,12 +647,13 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
if (mService.isPowerStandbyOrTransient() && getAutoWakeup()) {
|
if (mService.isPowerStandbyOrTransient() && getAutoWakeup()) {
|
||||||
mService.wakeUp();
|
mService.wakeUp();
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleImageViewOn(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleImageViewOn(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
// Currently, it's the same as <Text View On>.
|
// Currently, it's the same as <Text View On>.
|
||||||
return handleTextViewOn(message);
|
return handleTextViewOn(message);
|
||||||
@@ -977,7 +991,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleInitiateArc(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleInitiateArc(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
|
|
||||||
if (!canStartArcUpdateAction(message.getSource(), true)) {
|
if (!canStartArcUpdateAction(message.getSource(), true)) {
|
||||||
@@ -985,13 +1000,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
if (avrDeviceInfo == null) {
|
if (avrDeviceInfo == null) {
|
||||||
// AVR may not have been discovered yet. Delay the message processing.
|
// AVR may not have been discovered yet. Delay the message processing.
|
||||||
mDelayedMessageBuffer.add(message);
|
mDelayedMessageBuffer.add(message);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
|
||||||
if (!isConnectedToArcPort(avrDeviceInfo.getPhysicalAddress())) {
|
if (!isConnectedToArcPort(avrDeviceInfo.getPhysicalAddress())) {
|
||||||
displayOsd(OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT);
|
displayOsd(OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT);
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In case where <Initiate Arc> is started by <Request ARC Initiation>
|
// In case where <Initiate Arc> is started by <Request ARC Initiation>
|
||||||
@@ -1000,7 +1014,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
SetArcTransmissionStateAction action = new SetArcTransmissionStateAction(this,
|
SetArcTransmissionStateAction action = new SetArcTransmissionStateAction(this,
|
||||||
message.getSource(), true);
|
message.getSource(), true);
|
||||||
addAndStartAction(action);
|
addAndStartAction(action);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canStartArcUpdateAction(int avrAddress, boolean enabled) {
|
private boolean canStartArcUpdateAction(int avrAddress, boolean enabled) {
|
||||||
@@ -1022,11 +1036,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleTerminateArc(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleTerminateArc(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (mService .isPowerStandbyOrTransient()) {
|
if (mService .isPowerStandbyOrTransient()) {
|
||||||
setArcStatus(false);
|
setArcStatus(false);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
// Do not check ARC configuration since the AVR might have been already removed.
|
// Do not check ARC configuration since the AVR might have been already removed.
|
||||||
// Clean up RequestArcTerminationAction in case <Terminate Arc> was started by
|
// Clean up RequestArcTerminationAction in case <Terminate Arc> was started by
|
||||||
@@ -1035,12 +1050,13 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
SetArcTransmissionStateAction action = new SetArcTransmissionStateAction(this,
|
SetArcTransmissionStateAction action = new SetArcTransmissionStateAction(this,
|
||||||
message.getSource(), false);
|
message.getSource(), false);
|
||||||
addAndStartAction(action);
|
addAndStartAction(action);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSetSystemAudioMode(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSetSystemAudioMode(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
boolean systemAudioStatus = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
boolean systemAudioStatus = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
||||||
if (!isMessageForSystemAudio(message)) {
|
if (!isMessageForSystemAudio(message)) {
|
||||||
@@ -1049,30 +1065,29 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
mDelayedMessageBuffer.add(message);
|
mDelayedMessageBuffer.add(message);
|
||||||
} else {
|
} else {
|
||||||
HdmiLogger.warning("Invalid <Set System Audio Mode> message:" + message);
|
HdmiLogger.warning("Invalid <Set System Audio Mode> message:" + message);
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
} else if (systemAudioStatus && !isSystemAudioControlFeatureEnabled()) {
|
} else if (systemAudioStatus && !isSystemAudioControlFeatureEnabled()) {
|
||||||
HdmiLogger.debug("Ignoring <Set System Audio Mode> message "
|
HdmiLogger.debug("Ignoring <Set System Audio Mode> message "
|
||||||
+ "because the System Audio Control feature is disabled: %s", message);
|
+ "because the System Audio Control feature is disabled: %s", message);
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
return Constants.ABORT_REFUSED;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
removeAction(SystemAudioAutoInitiationAction.class);
|
removeAction(SystemAudioAutoInitiationAction.class);
|
||||||
SystemAudioActionFromAvr action = new SystemAudioActionFromAvr(this,
|
SystemAudioActionFromAvr action = new SystemAudioActionFromAvr(this,
|
||||||
message.getSource(), systemAudioStatus, null);
|
message.getSource(), systemAudioStatus, null);
|
||||||
addAndStartAction(action);
|
addAndStartAction(action);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleSystemAudioModeStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleSystemAudioModeStatus(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!isMessageForSystemAudio(message)) {
|
if (!isMessageForSystemAudio(message)) {
|
||||||
HdmiLogger.warning("Invalid <System Audio Mode Status> message:" + message);
|
HdmiLogger.warning("Invalid <System Audio Mode Status> message:" + message);
|
||||||
// Ignore this message.
|
// Ignore this message.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
boolean tvSystemAudioMode = isSystemAudioControlFeatureEnabled();
|
boolean tvSystemAudioMode = isSystemAudioControlFeatureEnabled();
|
||||||
boolean avrSystemAudioMode = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
boolean avrSystemAudioMode = HdmiUtils.parseCommandParamSystemAudioStatus(message);
|
||||||
@@ -1089,13 +1104,14 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
setSystemAudioMode(tvSystemAudioMode);
|
setSystemAudioMode(tvSystemAudioMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seq #53
|
// Seq #53
|
||||||
@Override
|
@Override
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
protected boolean handleRecordTvScreen(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleRecordTvScreen(HdmiCecMessage message) {
|
||||||
List<OneTouchRecordAction> actions = getActions(OneTouchRecordAction.class);
|
List<OneTouchRecordAction> actions = getActions(OneTouchRecordAction.class);
|
||||||
if (!actions.isEmpty()) {
|
if (!actions.isEmpty()) {
|
||||||
// Assumes only one OneTouchRecordAction.
|
// Assumes only one OneTouchRecordAction.
|
||||||
@@ -1107,25 +1123,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
// The default behavior of <Record TV Screen> is replying <Feature Abort> with
|
// The default behavior of <Record TV Screen> is replying <Feature Abort> with
|
||||||
// "Cannot provide source".
|
// "Cannot provide source".
|
||||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_CANNOT_PROVIDE_SOURCE);
|
return Constants.ABORT_CANNOT_PROVIDE_SOURCE;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int recorderAddress = message.getSource();
|
int recorderAddress = message.getSource();
|
||||||
byte[] recordSource = mService.invokeRecordRequestListener(recorderAddress);
|
byte[] recordSource = mService.invokeRecordRequestListener(recorderAddress);
|
||||||
int reason = startOneTouchRecord(recorderAddress, recordSource);
|
return startOneTouchRecord(recorderAddress, recordSource);
|
||||||
if (reason != Constants.ABORT_NO_ERROR) {
|
|
||||||
mService.maySendFeatureAbortCommand(message, reason);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleTimerClearedStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleTimerClearedStatus(HdmiCecMessage message) {
|
||||||
byte[] params = message.getParams();
|
byte[] params = message.getParams();
|
||||||
int timerClearedStatusData = params[0] & 0xFF;
|
int timerClearedStatusData = params[0] & 0xFF;
|
||||||
announceTimerRecordingResult(message.getSource(), timerClearedStatusData);
|
announceTimerRecordingResult(message.getSource(), timerClearedStatusData);
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void announceOneTouchRecordResult(int recorderAddress, int result) {
|
void announceOneTouchRecordResult(int recorderAddress, int result) {
|
||||||
@@ -1337,6 +1349,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
|
|
||||||
// Seq #54 and #55
|
// Seq #54 and #55
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
|
@Constants.HandleMessageResult
|
||||||
int startOneTouchRecord(int recorderAddress, byte[] recordSource) {
|
int startOneTouchRecord(int recorderAddress, byte[] recordSource) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
if (!mService.isControlEnabled()) {
|
if (!mService.isControlEnabled()) {
|
||||||
@@ -1362,7 +1375,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
addAndStartAction(new OneTouchRecordAction(this, recorderAddress, recordSource));
|
addAndStartAction(new OneTouchRecordAction(this, recorderAddress, recordSource));
|
||||||
Slog.i(TAG, "Start new [One Touch Record]-Target:" + recorderAddress + ", recordSource:"
|
Slog.i(TAG, "Start new [One Touch Record]-Target:" + recorderAddress + ", recordSource:"
|
||||||
+ Arrays.toString(recordSource));
|
+ Arrays.toString(recordSource));
|
||||||
return Constants.ABORT_NO_ERROR;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
@@ -1494,9 +1507,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean handleMenuStatus(HdmiCecMessage message) {
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleMenuStatus(HdmiCecMessage message) {
|
||||||
// Do nothing and just return true not to prevent from responding <Feature Abort>.
|
// Do nothing and just return true not to prevent from responding <Feature Abort>.
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Constants.RcProfile
|
@Constants.RcProfile
|
||||||
|
|||||||
@@ -372,8 +372,7 @@ public class HdmiControlService extends SystemService {
|
|||||||
|
|
||||||
private HdmiCecMessageValidator mMessageValidator;
|
private HdmiCecMessageValidator mMessageValidator;
|
||||||
|
|
||||||
private final HdmiCecPowerStatusController mPowerStatusController =
|
private HdmiCecPowerStatusController mPowerStatusController;
|
||||||
new HdmiCecPowerStatusController(this);
|
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
private String mMenuLanguage = localeToMenuLanguage(Locale.getDefault());
|
private String mMenuLanguage = localeToMenuLanguage(Locale.getDefault());
|
||||||
@@ -427,7 +426,7 @@ public class HdmiControlService extends SystemService {
|
|||||||
// Use getAtomWriter() instead of accessing directly, to allow dependency injection for testing.
|
// Use getAtomWriter() instead of accessing directly, to allow dependency injection for testing.
|
||||||
private HdmiCecAtomWriter mAtomWriter = new HdmiCecAtomWriter();
|
private HdmiCecAtomWriter mAtomWriter = new HdmiCecAtomWriter();
|
||||||
|
|
||||||
private CecMessageBuffer mCecMessageBuffer = new CecMessageBuffer(this);
|
private CecMessageBuffer mCecMessageBuffer;
|
||||||
|
|
||||||
private final SelectRequestBuffer mSelectRequestBuffer = new SelectRequestBuffer();
|
private final SelectRequestBuffer mSelectRequestBuffer = new SelectRequestBuffer();
|
||||||
|
|
||||||
@@ -493,6 +492,9 @@ public class HdmiControlService extends SystemService {
|
|||||||
mIoLooper = mIoThread.getLooper();
|
mIoLooper = mIoThread.getLooper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mPowerStatusController == null) {
|
||||||
|
mPowerStatusController = new HdmiCecPowerStatusController(this);
|
||||||
|
}
|
||||||
mPowerStatusController.setPowerStatus(getInitialPowerStatus());
|
mPowerStatusController.setPowerStatus(getInitialPowerStatus());
|
||||||
mProhibitMode = false;
|
mProhibitMode = false;
|
||||||
mHdmiControlEnabled = mHdmiCecConfig.getIntValue(
|
mHdmiControlEnabled = mHdmiCecConfig.getIntValue(
|
||||||
@@ -501,6 +503,9 @@ public class HdmiControlService extends SystemService {
|
|||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE));
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE));
|
||||||
mMhlInputChangeEnabled = readBooleanSetting(Global.MHL_INPUT_SWITCHING_ENABLED, true);
|
mMhlInputChangeEnabled = readBooleanSetting(Global.MHL_INPUT_SWITCHING_ENABLED, true);
|
||||||
|
|
||||||
|
if (mCecMessageBuffer == null) {
|
||||||
|
mCecMessageBuffer = new CecMessageBuffer(this);
|
||||||
|
}
|
||||||
if (mCecController == null) {
|
if (mCecController == null) {
|
||||||
mCecController = HdmiCecController.create(this, getAtomWriter());
|
mCecController = HdmiCecController.create(this, getAtomWriter());
|
||||||
}
|
}
|
||||||
@@ -948,11 +953,10 @@ public class HdmiControlService extends SystemService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns {@link Looper} for IO operation.
|
* Returns {@link Looper} for IO operation.
|
||||||
*
|
|
||||||
* <p>Declared as package-private.
|
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
Looper getIoLooper() {
|
@VisibleForTesting
|
||||||
|
protected Looper getIoLooper() {
|
||||||
return mIoLooper;
|
return mIoLooper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -974,10 +978,9 @@ public class HdmiControlService extends SystemService {
|
|||||||
/**
|
/**
|
||||||
* Returns {@link Looper} of main thread. Use this {@link Looper} instance
|
* Returns {@link Looper} of main thread. Use this {@link Looper} instance
|
||||||
* for tasks that are running on main service thread.
|
* for tasks that are running on main service thread.
|
||||||
*
|
|
||||||
* <p>Declared as package-private.
|
|
||||||
*/
|
*/
|
||||||
Looper getServiceLooper() {
|
@VisibleForTesting
|
||||||
|
protected Looper getServiceLooper() {
|
||||||
return mHandler.getLooper();
|
return mHandler.getLooper();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1015,8 +1018,9 @@ public class HdmiControlService extends SystemService {
|
|||||||
/**
|
/**
|
||||||
* Returns version of CEC.
|
* Returns version of CEC.
|
||||||
*/
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
@HdmiControlManager.HdmiCecVersion
|
@HdmiControlManager.HdmiCecVersion
|
||||||
int getCecVersion() {
|
protected int getCecVersion() {
|
||||||
return mCecVersion;
|
return mCecVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1087,23 +1091,30 @@ public class HdmiControlService extends SystemService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
boolean handleCecCommand(HdmiCecMessage message) {
|
@VisibleForTesting
|
||||||
|
@Constants.HandleMessageResult
|
||||||
|
protected int handleCecCommand(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
int errorCode = mMessageValidator.isValid(message);
|
int errorCode = mMessageValidator.isValid(message);
|
||||||
if (errorCode != HdmiCecMessageValidator.OK) {
|
if (errorCode != HdmiCecMessageValidator.OK) {
|
||||||
// We'll not response on the messages with the invalid source or destination
|
// We'll not response on the messages with the invalid source or destination
|
||||||
// or with parameter length shorter than specified in the standard.
|
// or with parameter length shorter than specified in the standard.
|
||||||
if (errorCode == HdmiCecMessageValidator.ERROR_PARAMETER) {
|
if (errorCode == HdmiCecMessageValidator.ERROR_PARAMETER) {
|
||||||
maySendFeatureAbortCommand(message, Constants.ABORT_INVALID_OPERAND);
|
return Constants.ABORT_INVALID_OPERAND;
|
||||||
}
|
}
|
||||||
return true;
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
getHdmiCecNetwork().handleCecMessage(message);
|
getHdmiCecNetwork().handleCecMessage(message);
|
||||||
if (dispatchMessageToLocalDevice(message)) {
|
|
||||||
return true;
|
@Constants.HandleMessageResult int handleMessageResult =
|
||||||
|
dispatchMessageToLocalDevice(message);
|
||||||
|
if (handleMessageResult == Constants.NOT_HANDLED
|
||||||
|
&& !mAddressAllocated
|
||||||
|
&& mCecMessageBuffer.bufferMessage(message)) {
|
||||||
|
return Constants.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (!mAddressAllocated) ? mCecMessageBuffer.bufferMessage(message) : false;
|
return handleMessageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
void enableAudioReturnChannel(int portId, boolean enabled) {
|
void enableAudioReturnChannel(int portId, boolean enabled) {
|
||||||
@@ -1111,19 +1122,25 @@ public class HdmiControlService extends SystemService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServiceThreadOnly
|
@ServiceThreadOnly
|
||||||
private boolean dispatchMessageToLocalDevice(HdmiCecMessage message) {
|
@VisibleForTesting
|
||||||
|
@Constants.HandleMessageResult
|
||||||
|
protected int dispatchMessageToLocalDevice(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) {
|
for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) {
|
||||||
if (device.dispatchMessage(message)
|
@Constants.HandleMessageResult int messageResult = device.dispatchMessage(message);
|
||||||
|
if (messageResult != Constants.NOT_HANDLED
|
||||||
&& message.getDestination() != Constants.ADDR_BROADCAST) {
|
&& message.getDestination() != Constants.ADDR_BROADCAST) {
|
||||||
return true;
|
return messageResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.getDestination() != Constants.ADDR_BROADCAST) {
|
// We should never respond <Feature Abort> to a broadcast message
|
||||||
|
if (message.getDestination() == Constants.ADDR_BROADCAST) {
|
||||||
|
return Constants.HANDLED;
|
||||||
|
} else {
|
||||||
HdmiLogger.warning("Unhandled cec command:" + message);
|
HdmiLogger.warning("Unhandled cec command:" + message);
|
||||||
|
return Constants.NOT_HANDLED;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2970,7 +2987,7 @@ public class HdmiControlService extends SystemService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean isStandbyMessageReceived() {
|
protected boolean isStandbyMessageReceived() {
|
||||||
return mStandbyMessageReceived;
|
return mStandbyMessageReceived;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class ArcInitiationActionFromAvrTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Looper getServiceLooper() {
|
protected Looper getServiceLooper() {
|
||||||
return mTestLooper.getLooper();
|
return mTestLooper.getLooper();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public class ArcTerminationActionFromAvrTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Looper getServiceLooper() {
|
protected Looper getServiceLooper() {
|
||||||
return mTestLooper.getLooper();
|
return mTestLooper.getLooper();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public class DetectTvSystemAudioModeSupportActionTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Looper getServiceLooper() {
|
protected Looper getServiceLooper() {
|
||||||
return mTestLooper.getLooper();
|
return mTestLooper.getLooper();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,21 +19,35 @@ import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM;
|
|||||||
import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_PLAYBACK;
|
import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_PLAYBACK;
|
||||||
import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV;
|
import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV;
|
||||||
|
|
||||||
|
import static com.android.server.hdmi.Constants.ABORT_REFUSED;
|
||||||
|
import static com.android.server.hdmi.Constants.ABORT_UNRECOGNIZED_OPCODE;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
|
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_BACKUP_1;
|
import static com.android.server.hdmi.Constants.ADDR_BACKUP_1;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_BACKUP_2;
|
import static com.android.server.hdmi.Constants.ADDR_BACKUP_2;
|
||||||
|
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
|
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2;
|
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_3;
|
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_3;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_SPECIFIC_USE;
|
import static com.android.server.hdmi.Constants.ADDR_SPECIFIC_USE;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_TV;
|
import static com.android.server.hdmi.Constants.ADDR_TV;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED;
|
import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED;
|
||||||
|
import static com.android.server.hdmi.Constants.HANDLED;
|
||||||
|
import static com.android.server.hdmi.Constants.MESSAGE_STANDBY;
|
||||||
|
import static com.android.server.hdmi.Constants.NOT_HANDLED;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
import static junit.framework.Assert.assertFalse;
|
import static junit.framework.Assert.assertFalse;
|
||||||
import static junit.framework.Assert.assertTrue;
|
import static junit.framework.Assert.assertTrue;
|
||||||
|
|
||||||
import android.content.Context;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doAnswer;
|
||||||
|
import static org.mockito.Mockito.doNothing;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
import android.hardware.hdmi.HdmiControlManager;
|
import android.hardware.hdmi.HdmiControlManager;
|
||||||
import android.hardware.tv.cec.V1_0.SendMessageResult;
|
import android.hardware.tv.cec.V1_0.SendMessageResult;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
@@ -44,6 +58,7 @@ import android.platform.test.annotations.Presubmit;
|
|||||||
import androidx.test.InstrumentationRegistry;
|
import androidx.test.InstrumentationRegistry;
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
|
import com.android.server.SystemService;
|
||||||
import com.android.server.hdmi.HdmiCecController.AllocateAddressCallback;
|
import com.android.server.hdmi.HdmiCecController.AllocateAddressCallback;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
@@ -53,6 +68,7 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
/** Tests for {@link com.android.server.hdmi.HdmiCecController} class. */
|
/** Tests for {@link com.android.server.hdmi.HdmiCecController} class. */
|
||||||
@@ -63,27 +79,7 @@ public class HdmiCecControllerTest {
|
|||||||
|
|
||||||
private FakeNativeWrapper mNativeWrapper;
|
private FakeNativeWrapper mNativeWrapper;
|
||||||
|
|
||||||
private class MyHdmiControlService extends HdmiControlService {
|
private HdmiControlService mHdmiControlServiceSpy;
|
||||||
|
|
||||||
MyHdmiControlService(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
Looper getIoLooper() {
|
|
||||||
return mMyLooper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
Looper getServiceLooper() {
|
|
||||||
return mMyLooper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
int getCecVersion() {
|
|
||||||
return mCecVersion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private HdmiCecController mHdmiCecController;
|
private HdmiCecController mHdmiCecController;
|
||||||
private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_1_4_B;
|
private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_1_4_B;
|
||||||
@@ -101,12 +97,39 @@ public class HdmiCecControllerTest {
|
|||||||
@Before
|
@Before
|
||||||
public void SetUp() {
|
public void SetUp() {
|
||||||
mMyLooper = mTestLooper.getLooper();
|
mMyLooper = mTestLooper.getLooper();
|
||||||
mMyLooper = mTestLooper.getLooper();
|
|
||||||
HdmiControlService hdmiControlService = new MyHdmiControlService(
|
mHdmiControlServiceSpy = spy(new HdmiControlService(
|
||||||
InstrumentationRegistry.getTargetContext());
|
InstrumentationRegistry.getTargetContext()));
|
||||||
|
doReturn(mMyLooper).when(mHdmiControlServiceSpy).getIoLooper();
|
||||||
|
doReturn(mMyLooper).when(mHdmiControlServiceSpy).getServiceLooper();
|
||||||
|
doAnswer(__ -> mCecVersion).when(mHdmiControlServiceSpy).getCecVersion();
|
||||||
|
doNothing().when(mHdmiControlServiceSpy)
|
||||||
|
.writeStringSystemProperty(anyString(), anyString());
|
||||||
|
|
||||||
mNativeWrapper = new FakeNativeWrapper();
|
mNativeWrapper = new FakeNativeWrapper();
|
||||||
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||||
hdmiControlService, mNativeWrapper, hdmiControlService.getAtomWriter());
|
mHdmiControlServiceSpy, mNativeWrapper, mHdmiControlServiceSpy.getAtomWriter());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Additional setup for tests for onMessage
|
||||||
|
* Adds a local playback device and allocates addresses
|
||||||
|
*/
|
||||||
|
public void setUpForOnMessageTest() {
|
||||||
|
mHdmiControlServiceSpy.setCecController(mHdmiCecController);
|
||||||
|
|
||||||
|
HdmiCecLocalDevicePlayback playbackDevice =
|
||||||
|
new HdmiCecLocalDevicePlayback(mHdmiControlServiceSpy);
|
||||||
|
playbackDevice.init();
|
||||||
|
|
||||||
|
ArrayList<HdmiCecLocalDevice> localDevices = new ArrayList<>();
|
||||||
|
localDevices.add(playbackDevice);
|
||||||
|
|
||||||
|
mHdmiControlServiceSpy.initService();
|
||||||
|
mHdmiControlServiceSpy.allocateLogicalAddress(localDevices,
|
||||||
|
HdmiControlService.INITIATED_BY_ENABLE_CEC);
|
||||||
|
mHdmiControlServiceSpy.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Tests for {@link HdmiCecController#allocateLogicalAddress} */
|
/** Tests for {@link HdmiCecController#allocateLogicalAddress} */
|
||||||
@@ -119,7 +142,6 @@ public class HdmiCecControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAllocateLogicalAddress_TvDeviceNonPreferredNotOccupied() {
|
public void testAllocateLogicalAddress_TvDeviceNonPreferredNotOccupied() {
|
||||||
|
|
||||||
mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_UNREGISTERED, mCallback);
|
mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_UNREGISTERED, mCallback);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertEquals(ADDR_TV, mLogicalAddress);
|
assertEquals(ADDR_TV, mLogicalAddress);
|
||||||
@@ -308,4 +330,90 @@ public class HdmiCecControllerTest {
|
|||||||
TestCase.assertEquals(Optional.of(callerUid), uidReadingRunnable.getWorkSourceUid());
|
TestCase.assertEquals(Optional.of(callerUid), uidReadingRunnable.getWorkSourceUid());
|
||||||
TestCase.assertEquals(runnerUid, Binder.getCallingWorkSourceUid());
|
TestCase.assertEquals(runnerUid, Binder.getCallingWorkSourceUid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMessage_broadcastMessage_doesNotSendFeatureAbort() {
|
||||||
|
setUpForOnMessageTest();
|
||||||
|
|
||||||
|
doReturn(ABORT_UNRECOGNIZED_OPCODE).when(mHdmiControlServiceSpy).handleCecCommand(any());
|
||||||
|
|
||||||
|
HdmiCecMessage receivedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
ADDR_TV, ADDR_BROADCAST);
|
||||||
|
|
||||||
|
mNativeWrapper.onCecMessage(receivedMessage);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
assertFalse("No <Feature Abort> messages should be sent",
|
||||||
|
mNativeWrapper.getResultMessages().stream().anyMatch(
|
||||||
|
message -> message.getOpcode() == Constants.MESSAGE_FEATURE_ABORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMessage_notTheDestination_doesNotSendFeatureAbort() {
|
||||||
|
setUpForOnMessageTest();
|
||||||
|
|
||||||
|
doReturn(ABORT_UNRECOGNIZED_OPCODE).when(mHdmiControlServiceSpy).handleCecCommand(any());
|
||||||
|
|
||||||
|
HdmiCecMessage receivedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
|
mNativeWrapper.onCecMessage(receivedMessage);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
assertFalse("No <Feature Abort> messages should be sent",
|
||||||
|
mNativeWrapper.getResultMessages().stream().anyMatch(
|
||||||
|
message -> message.getOpcode() == Constants.MESSAGE_FEATURE_ABORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMessage_handledMessage_doesNotSendFeatureAbort() {
|
||||||
|
setUpForOnMessageTest();
|
||||||
|
|
||||||
|
doReturn(HANDLED).when(mHdmiControlServiceSpy).handleCecCommand(any());
|
||||||
|
|
||||||
|
HdmiCecMessage receivedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
ADDR_TV, ADDR_PLAYBACK_1);
|
||||||
|
mNativeWrapper.onCecMessage(receivedMessage);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
assertFalse("No <Feature Abort> messages should be sent",
|
||||||
|
mNativeWrapper.getResultMessages().stream().anyMatch(
|
||||||
|
message -> message.getOpcode() == Constants.MESSAGE_FEATURE_ABORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMessage_unhandledMessage_sendsFeatureAbortUnrecognizedOpcode() {
|
||||||
|
setUpForOnMessageTest();
|
||||||
|
|
||||||
|
doReturn(NOT_HANDLED).when(mHdmiControlServiceSpy).handleCecCommand(any());
|
||||||
|
|
||||||
|
HdmiCecMessage receivedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
ADDR_TV, ADDR_PLAYBACK_1);
|
||||||
|
mNativeWrapper.onCecMessage(receivedMessage);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
||||||
|
DEVICE_PLAYBACK, DEVICE_TV, MESSAGE_STANDBY, ABORT_UNRECOGNIZED_OPCODE);
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(featureAbort);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMessage_sendsFeatureAbortWithRequestedOperand() {
|
||||||
|
setUpForOnMessageTest();
|
||||||
|
|
||||||
|
doReturn(ABORT_REFUSED).when(mHdmiControlServiceSpy).handleCecCommand(any());
|
||||||
|
|
||||||
|
HdmiCecMessage receivedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
ADDR_TV, ADDR_PLAYBACK_1);
|
||||||
|
mNativeWrapper.onCecMessage(receivedMessage);
|
||||||
|
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
||||||
|
DEVICE_PLAYBACK, DEVICE_TV, MESSAGE_STANDBY, ABORT_REFUSED);
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(featureAbort);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
|
|||||||
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
|
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_TUNER_1;
|
import static com.android.server.hdmi.Constants.ADDR_TUNER_1;
|
||||||
import static com.android.server.hdmi.Constants.ADDR_TV;
|
import static com.android.server.hdmi.Constants.ADDR_TV;
|
||||||
import static com.android.server.hdmi.Constants.MESSAGE_GIVE_AUDIO_STATUS;
|
|
||||||
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
|
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
|
||||||
import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF;
|
import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF;
|
||||||
|
|
||||||
@@ -248,7 +247,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
ADDR_AUDIO_SYSTEM, ADDR_TV, scaledVolume, true);
|
ADDR_AUDIO_SYSTEM, ADDR_TV, scaledVolume, true);
|
||||||
HdmiCecMessage messageGive =
|
HdmiCecMessage messageGive =
|
||||||
HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(messageGive)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(messageGive))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -262,45 +262,25 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessage messageGive =
|
HdmiCecMessage messageGive =
|
||||||
HdmiCecMessageBuilder.buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
HdmiCecMessageBuilder.buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
||||||
.isTrue();
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleRequestShortAudioDescriptor_featureDisabled() throws Exception {
|
public void handleRequestShortAudioDescriptor_featureDisabled() throws Exception {
|
||||||
HdmiCecMessage expectedMessage =
|
|
||||||
HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM,
|
|
||||||
ADDR_TV,
|
|
||||||
Constants.MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR,
|
|
||||||
Constants.ABORT_REFUSED);
|
|
||||||
|
|
||||||
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(false);
|
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(false);
|
||||||
assertThat(
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
||||||
mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
|
||||||
MESSAGE_REQUEST_SAD_LCPM))
|
MESSAGE_REQUEST_SAD_LCPM))
|
||||||
.isTrue();
|
.isEqualTo(Constants.ABORT_REFUSED);
|
||||||
mTestLooper.dispatchAll();
|
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleRequestShortAudioDescriptor_samOff() throws Exception {
|
public void handleRequestShortAudioDescriptor_samOff() throws Exception {
|
||||||
HdmiCecMessage expectedMessage =
|
|
||||||
HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM,
|
|
||||||
ADDR_TV,
|
|
||||||
Constants.MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR,
|
|
||||||
Constants.ABORT_NOT_IN_CORRECT_MODE);
|
|
||||||
|
|
||||||
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false);
|
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false);
|
||||||
assertThat(
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
||||||
mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
|
||||||
MESSAGE_REQUEST_SAD_LCPM))
|
MESSAGE_REQUEST_SAD_LCPM))
|
||||||
.isEqualTo(true);
|
.isEqualTo(Constants.ABORT_NOT_IN_CORRECT_MODE);
|
||||||
mTestLooper.dispatchAll();
|
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testing device has sadConfig.xml
|
// Testing device has sadConfig.xml
|
||||||
@@ -315,10 +295,9 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
Constants.ABORT_UNABLE_TO_DETERMINE);
|
Constants.ABORT_UNABLE_TO_DETERMINE);
|
||||||
|
|
||||||
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(true);
|
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(true);
|
||||||
assertThat(
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
||||||
mHdmiCecLocalDeviceAudioSystem.handleRequestShortAudioDescriptor(
|
|
||||||
MESSAGE_REQUEST_SAD_LCPM))
|
MESSAGE_REQUEST_SAD_LCPM))
|
||||||
.isEqualTo(true);
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -335,17 +314,18 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessage expectedMessage =
|
HdmiCecMessage expectedMessage =
|
||||||
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false);
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
||||||
.isTrue();
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
// Check if correctly turned on
|
// Check if correctly turned on
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
expectedMessage =
|
expectedMessage =
|
||||||
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true);
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSetSystemAudioMode(messageSet)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSetSystemAudioMode(messageSet))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
||||||
.isTrue();
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
assertThat(mMusicMute).isFalse();
|
assertThat(mMusicMute).isFalse();
|
||||||
@@ -365,7 +345,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
||||||
ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
|
ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOff))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOff))
|
||||||
.isTrue();
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
|
|
||||||
@@ -373,7 +353,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
expectedMessage =
|
expectedMessage =
|
||||||
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false);
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive))
|
||||||
.isTrue();
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
assertThat(mMusicMute).isTrue();
|
assertThat(mMusicMute).isTrue();
|
||||||
@@ -441,7 +421,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
public void handleActiveSource_updateActiveSource() throws Exception {
|
public void handleActiveSource_updateActiveSource() throws Exception {
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||||
ActiveSource expectedActiveSource = new ActiveSource(ADDR_TV, 0x0000);
|
ActiveSource expectedActiveSource = new ActiveSource(ADDR_TV, 0x0000);
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource().equals(expectedActiveSource))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource().equals(expectedActiveSource))
|
||||||
.isTrue();
|
.isTrue();
|
||||||
@@ -513,17 +494,10 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
public void handleRequestArcInitiate_isNotDirectConnectedToTv() throws Exception {
|
public void handleRequestArcInitiate_isNotDirectConnectedToTv() throws Exception {
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRequestArcInitiation(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
HdmiCecMessageBuilder.buildRequestArcInitiation(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
HdmiCecMessage expectedMessage =
|
|
||||||
HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM,
|
|
||||||
ADDR_TV,
|
|
||||||
Constants.MESSAGE_REQUEST_ARC_INITIATION,
|
|
||||||
Constants.ABORT_NOT_IN_CORRECT_MODE);
|
|
||||||
mNativeWrapper.setPhysicalAddress(0x1100);
|
mNativeWrapper.setPhysicalAddress(0x1100);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message))
|
||||||
mTestLooper.dispatchAll();
|
.isEqualTo(Constants.ABORT_NOT_IN_CORRECT_MODE);
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -533,7 +507,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
mNativeWrapper.setPhysicalAddress(0x1000);
|
mNativeWrapper.setPhysicalAddress(0x1000);
|
||||||
mHdmiCecLocalDeviceAudioSystem.removeAction(ArcInitiationActionFromAvr.class);
|
mHdmiCecLocalDeviceAudioSystem.removeAction(ArcInitiationActionFromAvr.class);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.getActions(ArcInitiationActionFromAvr.class))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.getActions(ArcInitiationActionFromAvr.class))
|
||||||
.isNotEmpty();
|
.isNotEmpty();
|
||||||
@@ -548,7 +523,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessageBuilder.buildRequestArcTermination(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
HdmiCecMessageBuilder.buildRequestArcTermination(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
mHdmiCecLocalDeviceAudioSystem.removeAction(ArcTerminationActionFromAvr.class);
|
mHdmiCecLocalDeviceAudioSystem.removeAction(ArcTerminationActionFromAvr.class);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcTermination(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcTermination(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.getActions(ArcTerminationActionFromAvr.class))
|
assertThat(mHdmiCecLocalDeviceAudioSystem.getActions(ArcTerminationActionFromAvr.class))
|
||||||
.isNotEmpty();
|
.isNotEmpty();
|
||||||
@@ -567,7 +543,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
Constants.MESSAGE_REQUEST_ARC_TERMINATION,
|
Constants.MESSAGE_REQUEST_ARC_TERMINATION,
|
||||||
Constants.ABORT_NOT_IN_CORRECT_MODE);
|
Constants.ABORT_NOT_IN_CORRECT_MODE);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcTermination(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcTermination(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -576,17 +553,10 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
public void handleRequestArcInit_arcIsNotSupported() throws Exception {
|
public void handleRequestArcInit_arcIsNotSupported() throws Exception {
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRequestArcInitiation(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
HdmiCecMessageBuilder.buildRequestArcInitiation(ADDR_TV, ADDR_AUDIO_SYSTEM);
|
||||||
HdmiCecMessage expectedMessage =
|
|
||||||
HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM,
|
|
||||||
ADDR_TV,
|
|
||||||
Constants.MESSAGE_REQUEST_ARC_INITIATION,
|
|
||||||
Constants.ABORT_UNRECOGNIZED_OPCODE);
|
|
||||||
mArcSupport = false;
|
mArcSupport = false;
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message))
|
||||||
mTestLooper.dispatchAll();
|
.isEqualTo(Constants.ABORT_UNRECOGNIZED_OPCODE);
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -612,7 +582,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST,
|
Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST,
|
||||||
Constants.ABORT_REFUSED);
|
Constants.ABORT_REFUSED);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(message))
|
||||||
|
.isEqualTo(Constants.ABORT_UNRECOGNIZED_OPCODE);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -629,7 +600,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
mHdmiCecLocalDeviceAudioSystem.setTvSystemAudioModeSupport(true);
|
mHdmiCecLocalDeviceAudioSystem.setTvSystemAudioModeSupport(true);
|
||||||
|
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -642,7 +614,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
|
|
||||||
ActiveSource expectedActiveSource = ActiveSource.of(ADDR_TV, 0x0000);
|
ActiveSource expectedActiveSource = ActiveSource.of(ADDR_TV, 0x0000);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource())
|
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource())
|
||||||
.isEqualTo(expectedActiveSource);
|
.isEqualTo(expectedActiveSource);
|
||||||
@@ -659,7 +632,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
ActiveSource expectedActiveSource = ActiveSource.of(ADDR_PLAYBACK_1, SELF_PHYSICAL_ADDRESS);
|
ActiveSource expectedActiveSource = ActiveSource.of(ADDR_PLAYBACK_1, SELF_PHYSICAL_ADDRESS);
|
||||||
int expectedLocalActivePort = Constants.CEC_SWITCH_HOME;
|
int expectedLocalActivePort = Constants.CEC_SWITCH_HOME;
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource())
|
assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource())
|
||||||
.isEqualTo(expectedActiveSource);
|
.isEqualTo(expectedActiveSource);
|
||||||
@@ -677,7 +651,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessageBuilder.buildRoutingInformation(
|
HdmiCecMessageBuilder.buildRoutingInformation(
|
||||||
ADDR_AUDIO_SYSTEM, HDMI_1_PHYSICAL_ADDRESS);
|
ADDR_AUDIO_SYSTEM, HDMI_1_PHYSICAL_ADDRESS);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -691,7 +666,8 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
HdmiCecMessage expectedMessage =
|
HdmiCecMessage expectedMessage =
|
||||||
HdmiCecMessageBuilder.buildActiveSource(ADDR_PLAYBACK_1, 0x2000);
|
HdmiCecMessageBuilder.buildActiveSource(ADDR_PLAYBACK_1, 0x2000);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
||||||
}
|
}
|
||||||
@@ -727,18 +703,15 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
int scaledVolume = VolumeControlAction.scaleToCecVolume(volume, maxVolume);
|
int scaledVolume = VolumeControlAction.scaleToCecVolume(volume, maxVolume);
|
||||||
HdmiCecMessage expected = HdmiCecMessageBuilder.buildReportAudioStatus(ADDR_AUDIO_SYSTEM,
|
HdmiCecMessage expected = HdmiCecMessageBuilder.buildReportAudioStatus(ADDR_AUDIO_SYSTEM,
|
||||||
ADDR_TV, scaledVolume, mute);
|
ADDR_TV, scaledVolume, mute);
|
||||||
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM, ADDR_TV, MESSAGE_GIVE_AUDIO_STATUS, Constants.ABORT_REFUSED);
|
|
||||||
|
|
||||||
HdmiCecMessage giveAudioStatus = HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV,
|
HdmiCecMessage giveAudioStatus = HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV,
|
||||||
ADDR_AUDIO_SYSTEM);
|
ADDR_AUDIO_SYSTEM);
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
boolean handled = mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(giveAudioStatus);
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(giveAudioStatus))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expected);
|
assertThat(mNativeWrapper.getResultMessages()).contains(expected);
|
||||||
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(featureAbort);
|
|
||||||
assertThat(handled).isTrue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -758,18 +731,15 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
|||||||
int scaledVolume = VolumeControlAction.scaleToCecVolume(volume, maxVolume);
|
int scaledVolume = VolumeControlAction.scaleToCecVolume(volume, maxVolume);
|
||||||
HdmiCecMessage unexpected = HdmiCecMessageBuilder.buildReportAudioStatus(ADDR_AUDIO_SYSTEM,
|
HdmiCecMessage unexpected = HdmiCecMessageBuilder.buildReportAudioStatus(ADDR_AUDIO_SYSTEM,
|
||||||
ADDR_TV, scaledVolume, mute);
|
ADDR_TV, scaledVolume, mute);
|
||||||
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
|
||||||
ADDR_AUDIO_SYSTEM, ADDR_TV, MESSAGE_GIVE_AUDIO_STATUS, Constants.ABORT_REFUSED);
|
|
||||||
|
|
||||||
HdmiCecMessage giveAudioStatus = HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV,
|
HdmiCecMessage giveAudioStatus = HdmiCecMessageBuilder.buildGiveAudioStatus(ADDR_TV,
|
||||||
ADDR_AUDIO_SYSTEM);
|
ADDR_AUDIO_SYSTEM);
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
boolean handled = mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(giveAudioStatus);
|
assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(giveAudioStatus))
|
||||||
|
.isEqualTo(Constants.ABORT_REFUSED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(featureAbort);
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(unexpected);
|
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(unexpected);
|
||||||
assertThat(handled).isTrue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean isStandbyMessageReceived() {
|
protected boolean isStandbyMessageReceived() {
|
||||||
return mStandby;
|
return mStandby;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +184,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isFalse();
|
assertThat(mWokenUp).isFalse();
|
||||||
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
||||||
@@ -205,7 +206,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isFalse();
|
assertThat(mWokenUp).isFalse();
|
||||||
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
||||||
@@ -226,7 +228,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
||||||
@@ -247,7 +250,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse();
|
||||||
@@ -270,7 +274,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
||||||
@@ -293,7 +298,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
|
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
|
||||||
@@ -309,7 +315,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
0x5000);
|
0x5000);
|
||||||
@@ -329,7 +336,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
@@ -349,7 +357,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
@@ -368,7 +377,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isTrue();
|
assertThat(mStandby).isTrue();
|
||||||
}
|
}
|
||||||
@@ -383,7 +393,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
}
|
}
|
||||||
@@ -399,7 +410,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
}
|
}
|
||||||
@@ -461,7 +473,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
0x5000);
|
0x5000);
|
||||||
@@ -481,7 +494,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
@@ -501,7 +515,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
@@ -520,7 +535,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isTrue();
|
assertThat(mStandby).isTrue();
|
||||||
}
|
}
|
||||||
@@ -535,7 +551,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
}
|
}
|
||||||
@@ -551,7 +568,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
}
|
}
|
||||||
@@ -606,7 +624,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
public void handleSetStreamPath() {
|
public void handleSetStreamPath() {
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x2100);
|
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x2100);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -616,7 +635,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
||||||
Constants.ADDR_AUDIO_SYSTEM, Constants.ADDR_BROADCAST, true);
|
Constants.ADDR_AUDIO_SYSTEM, Constants.ADDR_BROADCAST, true);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetSystemAudioMode(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetSystemAudioMode(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -629,7 +649,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
HdmiCecMessageBuilder.buildSetSystemAudioMode(
|
||||||
Constants.ADDR_AUDIO_SYSTEM, mHdmiCecLocalDevicePlayback.mAddress, false);
|
Constants.ADDR_AUDIO_SYSTEM, mHdmiCecLocalDevicePlayback.mAddress, false);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetSystemAudioMode(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetSystemAudioMode(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,7 +661,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildReportSystemAudioMode(
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(
|
||||||
Constants.ADDR_AUDIO_SYSTEM, mHdmiCecLocalDevicePlayback.mAddress, true);
|
Constants.ADDR_AUDIO_SYSTEM, mHdmiCecLocalDevicePlayback.mAddress, true);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSystemAudioModeStatus(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSystemAudioModeStatus(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -883,7 +905,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
@@ -900,7 +923,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE);
|
HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE);
|
||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
@@ -918,7 +942,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
|
||||||
mPlaybackPhysicalAddress);
|
mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
@@ -931,7 +956,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
|
HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
|
||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mStandby).isTrue();
|
assertThat(mStandby).isTrue();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
@@ -996,12 +1022,14 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
// 1. DUT is <AS>.
|
// 1. DUT is <AS>.
|
||||||
HdmiCecMessage message1 = HdmiCecMessageBuilder.buildActiveSource(
|
HdmiCecMessage message1 = HdmiCecMessageBuilder.buildActiveSource(
|
||||||
mHdmiCecLocalDevicePlayback.mAddress, mPlaybackPhysicalAddress);
|
mHdmiCecLocalDevicePlayback.mAddress, mPlaybackPhysicalAddress);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message1)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message1))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
// 2. DUT loses <AS> and goes to sleep.
|
// 2. DUT loses <AS> and goes to sleep.
|
||||||
HdmiCecMessage message2 = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
HdmiCecMessage message2 = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message2)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message2))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isTrue();
|
assertThat(mStandby).isTrue();
|
||||||
// 3. DUT becomes <AS> again.
|
// 3. DUT becomes <AS> again.
|
||||||
@@ -1271,7 +1299,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||||
0x5000);
|
0x5000);
|
||||||
@@ -1290,7 +1319,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isTrue();
|
assertThat(mStandby).isTrue();
|
||||||
}
|
}
|
||||||
@@ -1305,7 +1335,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mStandby = false;
|
mStandby = false;
|
||||||
HdmiCecMessage message =
|
HdmiCecMessage message =
|
||||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||||
assertThat(mStandby).isFalse();
|
assertThat(mStandby).isFalse();
|
||||||
}
|
}
|
||||||
@@ -1492,7 +1523,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mHdmiControlService.toggleAndFollowTvPower();
|
mHdmiControlService.toggleAndFollowTvPower();
|
||||||
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
||||||
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
|
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby(
|
HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
@@ -1510,7 +1542,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mHdmiControlService.toggleAndFollowTvPower();
|
mHdmiControlService.toggleAndFollowTvPower();
|
||||||
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
||||||
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
|
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby(
|
HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby(
|
||||||
@@ -1525,7 +1558,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mHdmiControlService.toggleAndFollowTvPower();
|
mHdmiControlService.toggleAndFollowTvPower();
|
||||||
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
||||||
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_STANDBY);
|
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_STANDBY);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(mPlaybackLogicalAddress,
|
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(mPlaybackLogicalAddress,
|
||||||
@@ -1543,7 +1577,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mHdmiControlService.toggleAndFollowTvPower();
|
mHdmiControlService.toggleAndFollowTvPower();
|
||||||
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV,
|
||||||
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_UNKNOWN);
|
mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_UNKNOWN);
|
||||||
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus)).isTrue();
|
assertThat(mHdmiCecLocalDevicePlayback.dispatchMessage(tvPowerStatus))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed(
|
HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed(
|
||||||
|
|||||||
@@ -198,8 +198,8 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
ADDR_PLAYBACK_1,
|
ADDR_PLAYBACK_1,
|
||||||
Constants.MESSAGE_CEC_VERSION,
|
Constants.MESSAGE_CEC_VERSION,
|
||||||
HdmiCecMessage.EMPTY_PARAM);
|
HdmiCecMessage.EMPTY_PARAM);
|
||||||
boolean handleResult = mHdmiLocalDevice.dispatchMessage(msg);
|
@Constants.HandleMessageResult int handleResult = mHdmiLocalDevice.dispatchMessage(msg);
|
||||||
assertFalse(handleResult);
|
assertEquals(Constants.NOT_HANDLED, handleResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -213,7 +213,7 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
(byte) (DEVICE_TV & 0xFF)
|
(byte) (DEVICE_TV & 0xFF)
|
||||||
};
|
};
|
||||||
callbackResult = -1;
|
callbackResult = -1;
|
||||||
boolean handleResult =
|
@Constants.HandleMessageResult int handleResult =
|
||||||
mHdmiLocalDevice.handleGivePhysicalAddress(
|
mHdmiLocalDevice.handleGivePhysicalAddress(
|
||||||
(int finalResult) -> callbackResult = finalResult);
|
(int finalResult) -> callbackResult = finalResult);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
@@ -221,7 +221,7 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
* Test if CecMessage is sent successfully SendMessageResult#SUCCESS is defined in HAL as 0
|
* Test if CecMessage is sent successfully SendMessageResult#SUCCESS is defined in HAL as 0
|
||||||
*/
|
*/
|
||||||
assertEquals(0, callbackResult);
|
assertEquals(0, callbackResult);
|
||||||
assertTrue(handleResult);
|
assertEquals(Constants.HANDLED, handleResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -251,85 +251,85 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
public void handleUserControlPressed_volumeUp() {
|
public void handleUserControlPressed_volumeUp() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP));
|
HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP));
|
||||||
|
|
||||||
assertTrue(result);
|
assertEquals(Constants.HANDLED, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_volumeDown() {
|
public void handleUserControlPressed_volumeDown() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_VOLUME_DOWN));
|
HdmiCecKeycode.CEC_KEYCODE_VOLUME_DOWN));
|
||||||
|
|
||||||
assertTrue(result);
|
assertEquals(Constants.HANDLED, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_volumeMute() {
|
public void handleUserControlPressed_volumeMute() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_MUTE));
|
HdmiCecKeycode.CEC_KEYCODE_MUTE));
|
||||||
|
|
||||||
assertTrue(result);
|
assertEquals(Constants.HANDLED, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_volumeUp_disabled() {
|
public void handleUserControlPressed_volumeUp_disabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP));
|
HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP));
|
||||||
|
|
||||||
assertFalse(result);
|
assertThat(result).isEqualTo(Constants.ABORT_REFUSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_volumeDown_disabled() {
|
public void handleUserControlPressed_volumeDown_disabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_VOLUME_DOWN));
|
HdmiCecKeycode.CEC_KEYCODE_VOLUME_DOWN));
|
||||||
|
|
||||||
assertFalse(result);
|
assertThat(result).isEqualTo(Constants.ABORT_REFUSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_volumeMute_disabled() {
|
public void handleUserControlPressed_volumeMute_disabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_PLAYBACK_1, ADDR_TV,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_MUTE));
|
HdmiCecKeycode.CEC_KEYCODE_MUTE));
|
||||||
|
|
||||||
assertFalse(result);
|
assertThat(result).isEqualTo(Constants.ABORT_REFUSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleCecVersion_isHandled() {
|
public void handleCecVersion_isHandled() {
|
||||||
boolean result = mHdmiLocalDevice.onMessage(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.onMessage(
|
||||||
HdmiCecMessageBuilder.buildCecVersion(ADDR_PLAYBACK_1, mHdmiLocalDevice.mAddress,
|
HdmiCecMessageBuilder.buildCecVersion(ADDR_PLAYBACK_1, mHdmiLocalDevice.mAddress,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B));
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_power_localDeviceInStandby_shouldTurnOn() {
|
public void handleUserControlPressed_power_localDeviceInStandby_shouldTurnOn() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER));
|
HdmiCecKeycode.CEC_KEYCODE_POWER));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isTrue();
|
assertThat(mWakeupMessageReceived).isTrue();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -337,11 +337,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_power_localDeviceOn_shouldNotChangePowerStatus() {
|
public void handleUserControlPressed_power_localDeviceOn_shouldNotChangePowerStatus() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER));
|
HdmiCecKeycode.CEC_KEYCODE_POWER));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isFalse();
|
assertThat(mWakeupMessageReceived).isFalse();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -349,11 +349,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerToggleFunction_localDeviceInStandby_shouldTurnOn() {
|
public void handleUserControlPressed_powerToggleFunction_localDeviceInStandby_shouldTurnOn() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isTrue();
|
assertThat(mWakeupMessageReceived).isTrue();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -361,11 +361,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerToggleFunction_localDeviceOn_shouldTurnOff() {
|
public void handleUserControlPressed_powerToggleFunction_localDeviceOn_shouldTurnOff() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isFalse();
|
assertThat(mWakeupMessageReceived).isFalse();
|
||||||
assertThat(mStandbyMessageReceived).isTrue();
|
assertThat(mStandbyMessageReceived).isTrue();
|
||||||
}
|
}
|
||||||
@@ -373,11 +373,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerOnFunction_localDeviceInStandby_shouldTurnOn() {
|
public void handleUserControlPressed_powerOnFunction_localDeviceInStandby_shouldTurnOn() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isTrue();
|
assertThat(mWakeupMessageReceived).isTrue();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -385,11 +385,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerOnFunction_localDeviceOn_noPowerStatusChange() {
|
public void handleUserControlPressed_powerOnFunction_localDeviceOn_noPowerStatusChange() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isFalse();
|
assertThat(mWakeupMessageReceived).isFalse();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -397,11 +397,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerOffFunction_localDeviceStandby_noPowerStatusChange() {
|
public void handleUserControlPressed_powerOffFunction_localDeviceStandby_noPowerStatusChange() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isFalse();
|
assertThat(mWakeupMessageReceived).isFalse();
|
||||||
assertThat(mStandbyMessageReceived).isFalse();
|
assertThat(mStandbyMessageReceived).isFalse();
|
||||||
}
|
}
|
||||||
@@ -409,11 +409,11 @@ public class HdmiCecLocalDeviceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void handleUserControlPressed_powerOffFunction_localDeviceOn_shouldTurnOff() {
|
public void handleUserControlPressed_powerOffFunction_localDeviceOn_shouldTurnOff() {
|
||||||
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
|
||||||
boolean result = mHdmiLocalDevice.handleUserControlPressed(
|
@Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
|
||||||
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1,
|
||||||
HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION));
|
HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION));
|
||||||
|
|
||||||
assertThat(result).isTrue();
|
assertEquals(Constants.HANDLED, result);
|
||||||
assertThat(mWakeupMessageReceived).isFalse();
|
assertThat(mWakeupMessageReceived).isFalse();
|
||||||
assertThat(mStandbyMessageReceived).isTrue();
|
assertThat(mStandbyMessageReceived).isTrue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mWokenUp = false;
|
mWokenUp = false;
|
||||||
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1,
|
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1,
|
||||||
mTvLogicalAddress);
|
mTvLogicalAddress);
|
||||||
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isTrue();
|
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
}
|
}
|
||||||
@@ -247,7 +247,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mWokenUp = false;
|
mWokenUp = false;
|
||||||
HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress,
|
HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress,
|
||||||
Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM);
|
Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM);
|
||||||
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isTrue();
|
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isTrue();
|
assertThat(mWokenUp).isTrue();
|
||||||
}
|
}
|
||||||
@@ -261,7 +261,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mWokenUp = false;
|
mWokenUp = false;
|
||||||
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1,
|
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1,
|
||||||
mTvLogicalAddress);
|
mTvLogicalAddress);
|
||||||
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isTrue();
|
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isFalse();
|
assertThat(mWokenUp).isFalse();
|
||||||
}
|
}
|
||||||
@@ -275,7 +275,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mWokenUp = false;
|
mWokenUp = false;
|
||||||
HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress,
|
HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress,
|
||||||
Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM);
|
Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM);
|
||||||
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isTrue();
|
assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isEqualTo(Constants.HANDLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mWokenUp).isFalse();
|
assertThat(mWokenUp).isFalse();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ import static junit.framework.Assert.assertFalse;
|
|||||||
import static junit.framework.Assert.assertTrue;
|
import static junit.framework.Assert.assertTrue;
|
||||||
import static junit.framework.TestCase.assertEquals;
|
import static junit.framework.TestCase.assertEquals;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doNothing;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -68,7 +71,7 @@ import java.util.Optional;
|
|||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class HdmiControlServiceTest {
|
public class HdmiControlServiceTest {
|
||||||
|
|
||||||
private class MockPlaybackDevice extends HdmiCecLocalDevicePlayback {
|
protected static class MockPlaybackDevice extends HdmiCecLocalDevicePlayback {
|
||||||
|
|
||||||
private boolean mCanGoToStandby;
|
private boolean mCanGoToStandby;
|
||||||
private boolean mIsStandby;
|
private boolean mIsStandby;
|
||||||
@@ -118,7 +121,7 @@ public class HdmiControlServiceTest {
|
|||||||
mCanGoToStandby = canGoToStandby;
|
mCanGoToStandby = canGoToStandby;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private class MockAudioSystemDevice extends HdmiCecLocalDeviceAudioSystem {
|
protected static class MockAudioSystemDevice extends HdmiCecLocalDeviceAudioSystem {
|
||||||
|
|
||||||
private boolean mCanGoToStandby;
|
private boolean mCanGoToStandby;
|
||||||
private boolean mIsStandby;
|
private boolean mIsStandby;
|
||||||
@@ -171,15 +174,14 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
private static final String TAG = "HdmiControlServiceTest";
|
private static final String TAG = "HdmiControlServiceTest";
|
||||||
private Context mContextSpy;
|
private Context mContextSpy;
|
||||||
private HdmiControlService mHdmiControlService;
|
private HdmiControlService mHdmiControlServiceSpy;
|
||||||
private HdmiCecController mHdmiCecController;
|
private HdmiCecController mHdmiCecController;
|
||||||
private MockAudioSystemDevice mAudioSystemDevice;
|
private MockAudioSystemDevice mAudioSystemDeviceSpy;
|
||||||
private MockPlaybackDevice mPlaybackDevice;
|
private MockPlaybackDevice mPlaybackDeviceSpy;
|
||||||
private FakeNativeWrapper mNativeWrapper;
|
private FakeNativeWrapper mNativeWrapper;
|
||||||
private Looper mMyLooper;
|
private Looper mMyLooper;
|
||||||
private TestLooper mTestLooper = new TestLooper();
|
private TestLooper mTestLooper = new TestLooper();
|
||||||
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
||||||
private boolean mStandbyMessageReceived;
|
|
||||||
private HdmiPortInfo[] mHdmiPortInfo;
|
private HdmiPortInfo[] mHdmiPortInfo;
|
||||||
|
|
||||||
@Mock private IPowerManager mIPowerManagerMock;
|
@Mock private IPowerManager mIPowerManagerMock;
|
||||||
@@ -199,36 +201,32 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
|
HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
|
||||||
|
|
||||||
mHdmiControlService = new HdmiControlService(mContextSpy) {
|
mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy));
|
||||||
@Override
|
doNothing().when(mHdmiControlServiceSpy)
|
||||||
boolean isStandbyMessageReceived() {
|
.writeStringSystemProperty(anyString(), anyString());
|
||||||
return mStandbyMessageReceived;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void writeStringSystemProperty(String key, String value) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mMyLooper = mTestLooper.getLooper();
|
mMyLooper = mTestLooper.getLooper();
|
||||||
|
|
||||||
mAudioSystemDevice = new MockAudioSystemDevice(mHdmiControlService);
|
mAudioSystemDeviceSpy = spy(new MockAudioSystemDevice(mHdmiControlServiceSpy));
|
||||||
mPlaybackDevice = new MockPlaybackDevice(mHdmiControlService);
|
mPlaybackDeviceSpy = spy(new MockPlaybackDevice(mHdmiControlServiceSpy));
|
||||||
mAudioSystemDevice.init();
|
mAudioSystemDeviceSpy.init();
|
||||||
mPlaybackDevice.init();
|
mPlaybackDeviceSpy.init();
|
||||||
|
|
||||||
mHdmiControlService.setIoLooper(mMyLooper);
|
mHdmiControlServiceSpy.setIoLooper(mMyLooper);
|
||||||
mHdmiControlService.setHdmiCecConfig(hdmiCecConfig);
|
mHdmiControlServiceSpy.setHdmiCecConfig(hdmiCecConfig);
|
||||||
mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
|
mHdmiControlServiceSpy.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
|
||||||
|
|
||||||
mNativeWrapper = new FakeNativeWrapper();
|
mNativeWrapper = new FakeNativeWrapper();
|
||||||
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||||
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
mHdmiControlServiceSpy, mNativeWrapper, mHdmiControlServiceSpy.getAtomWriter());
|
||||||
mHdmiControlService.setCecController(mHdmiCecController);
|
mHdmiControlServiceSpy.setCecController(mHdmiCecController);
|
||||||
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
|
mHdmiControlServiceSpy.setHdmiMhlController(HdmiMhlControllerStub.create(
|
||||||
mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService));
|
mHdmiControlServiceSpy));
|
||||||
|
mHdmiControlServiceSpy.setMessageValidator(new HdmiCecMessageValidator(
|
||||||
|
mHdmiControlServiceSpy));
|
||||||
|
|
||||||
mLocalDevices.add(mAudioSystemDevice);
|
mLocalDevices.add(mAudioSystemDeviceSpy);
|
||||||
mLocalDevices.add(mPlaybackDevice);
|
mLocalDevices.add(mPlaybackDeviceSpy);
|
||||||
mHdmiPortInfo = new HdmiPortInfo[4];
|
mHdmiPortInfo = new HdmiPortInfo[4];
|
||||||
mHdmiPortInfo[0] =
|
mHdmiPortInfo[0] =
|
||||||
new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, 0x2100, true, false, false);
|
new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, 0x2100, true, false, false);
|
||||||
@@ -239,80 +237,81 @@ public class HdmiControlServiceTest {
|
|||||||
mHdmiPortInfo[3] =
|
mHdmiPortInfo[3] =
|
||||||
new HdmiPortInfo(4, HdmiPortInfo.PORT_INPUT, 0x3000, true, false, false);
|
new HdmiPortInfo(4, HdmiPortInfo.PORT_INPUT, 0x3000, true, false, false);
|
||||||
mNativeWrapper.setPortInfo(mHdmiPortInfo);
|
mNativeWrapper.setPortInfo(mHdmiPortInfo);
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
|
||||||
HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mHdmiControlService.initService();
|
mHdmiControlServiceSpy.initService();
|
||||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
|
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onStandby_notByCec_cannotGoToStandby() {
|
public void onStandby_notByCec_cannotGoToStandby() {
|
||||||
mStandbyMessageReceived = false;
|
doReturn(false).when(mHdmiControlServiceSpy).isStandbyMessageReceived();
|
||||||
mPlaybackDevice.setCanGoToStandby(false);
|
|
||||||
|
|
||||||
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
mPlaybackDeviceSpy.setCanGoToStandby(false);
|
||||||
assertTrue(mPlaybackDevice.isStandby());
|
|
||||||
assertTrue(mAudioSystemDevice.isStandby());
|
mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
||||||
assertFalse(mPlaybackDevice.isDisabled());
|
assertTrue(mPlaybackDeviceSpy.isStandby());
|
||||||
assertFalse(mAudioSystemDevice.isDisabled());
|
assertTrue(mAudioSystemDeviceSpy.isStandby());
|
||||||
|
assertFalse(mPlaybackDeviceSpy.isDisabled());
|
||||||
|
assertFalse(mAudioSystemDeviceSpy.isDisabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onStandby_byCec() {
|
public void onStandby_byCec() {
|
||||||
mStandbyMessageReceived = true;
|
doReturn(true).when(mHdmiControlServiceSpy).isStandbyMessageReceived();
|
||||||
|
|
||||||
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
||||||
assertTrue(mPlaybackDevice.isStandby());
|
assertTrue(mPlaybackDeviceSpy.isStandby());
|
||||||
assertTrue(mAudioSystemDevice.isStandby());
|
assertTrue(mAudioSystemDeviceSpy.isStandby());
|
||||||
assertTrue(mPlaybackDevice.isDisabled());
|
assertTrue(mPlaybackDeviceSpy.isDisabled());
|
||||||
assertTrue(mAudioSystemDevice.isDisabled());
|
assertTrue(mAudioSystemDeviceSpy.isDisabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialPowerStatus_normalBoot_isTransientToStandby() {
|
public void initialPowerStatus_normalBoot_isTransientToStandby() {
|
||||||
assertThat(mHdmiControlService.getInitialPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialPowerStatus_quiescentBoot_isTransientToStandby() throws RemoteException {
|
public void initialPowerStatus_quiescentBoot_isTransientToStandby() throws RemoteException {
|
||||||
when(mIPowerManagerMock.isInteractive()).thenReturn(false);
|
when(mIPowerManagerMock.isInteractive()).thenReturn(false);
|
||||||
assertThat(mHdmiControlService.getInitialPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void powerStatusAfterBootComplete_normalBoot_isOn() {
|
public void powerStatusAfterBootComplete_normalBoot_isOn() {
|
||||||
mHdmiControlService.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON);
|
mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON);
|
||||||
mHdmiControlService.onBootPhase(PHASE_BOOT_COMPLETED);
|
mHdmiControlServiceSpy.onBootPhase(PHASE_BOOT_COMPLETED);
|
||||||
assertThat(mHdmiControlService.getPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON);
|
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void powerStatusAfterBootComplete_quiescentBoot_isStandby() throws RemoteException {
|
public void powerStatusAfterBootComplete_quiescentBoot_isStandby() throws RemoteException {
|
||||||
when(mIPowerManagerMock.isInteractive()).thenReturn(false);
|
when(mIPowerManagerMock.isInteractive()).thenReturn(false);
|
||||||
mHdmiControlService.onBootPhase(PHASE_BOOT_COMPLETED);
|
mHdmiControlServiceSpy.onBootPhase(PHASE_BOOT_COMPLETED);
|
||||||
assertThat(mHdmiControlService.getPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_STANDBY);
|
HdmiControlManager.POWER_STATUS_STANDBY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialPowerStatus_normalBoot_goToStandby_doesNotBroadcastsPowerStatus_1_4() {
|
public void initialPowerStatus_normalBoot_goToStandby_doesNotBroadcastsPowerStatus_1_4() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
|
|
||||||
assertThat(mHdmiControlService.getInitialPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
||||||
|
|
||||||
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
||||||
|
|
||||||
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
|
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
Constants.ADDR_PLAYBACK_1, Constants.ADDR_BROADCAST,
|
Constants.ADDR_PLAYBACK_1, Constants.ADDR_BROADCAST,
|
||||||
@@ -322,21 +321,21 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialPowerStatus_normalBoot_goToStandby_broadcastsPowerStatus_2_0() {
|
public void initialPowerStatus_normalBoot_goToStandby_broadcastsPowerStatus_2_0() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
|
|
||||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
assertThat(mHdmiControlService.getInitialPowerStatus()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo(
|
||||||
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
|
||||||
|
|
||||||
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
|
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
@@ -347,53 +346,53 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setAndGetCecVolumeControlEnabled_isApi() {
|
public void setAndGetCecVolumeControlEnabled_isApi() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
|
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setAndGetCecVolumeControlEnabled_changesSetting() {
|
public void setAndGetCecVolumeControlEnabled_changesSetting() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
assertThat(mHdmiControlService.readIntSetting(
|
assertThat(mHdmiControlServiceSpy.readIntSetting(
|
||||||
Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, -1)).isEqualTo(
|
Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, -1)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
|
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.readIntSetting(
|
assertThat(mHdmiControlServiceSpy.readIntSetting(
|
||||||
Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, -1)).isEqualTo(
|
Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, -1)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setAndGetCecVolumeControlEnabledInternal_doesNotChangeSetting() {
|
public void setAndGetCecVolumeControlEnabledInternal_doesNotChangeSetting() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
|
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
|
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
}
|
}
|
||||||
@@ -401,60 +400,61 @@ public class HdmiControlServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void disableAndReenableCec_volumeControlReturnsToOriginalValue_enabled() {
|
public void disableAndReenableCec_volumeControlReturnsToOriginalValue_enabled() {
|
||||||
int volumeControlEnabled = HdmiControlManager.VOLUME_CONTROL_ENABLED;
|
int volumeControlEnabled = HdmiControlManager.VOLUME_CONTROL_ENABLED;
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(volumeControlEnabled);
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(volumeControlEnabled);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecVolumeControl()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecVolumeControl()).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecVolumeControl()).isEqualTo(volumeControlEnabled);
|
assertThat(mHdmiControlServiceSpy.getHdmiCecVolumeControl())
|
||||||
|
.isEqualTo(volumeControlEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void disableAndReenableCec_volumeControlReturnsToOriginalValue_disabled() {
|
public void disableAndReenableCec_volumeControlReturnsToOriginalValue_disabled() {
|
||||||
int volumeControlEnabled = HdmiControlManager.VOLUME_CONTROL_DISABLED;
|
int volumeControlEnabled = HdmiControlManager.VOLUME_CONTROL_DISABLED;
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, volumeControlEnabled);
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, volumeControlEnabled);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
volumeControlEnabled);
|
volumeControlEnabled);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue(
|
assertThat(mHdmiControlServiceSpy.getHdmiCecConfig().getIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo(
|
||||||
volumeControlEnabled);
|
volumeControlEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void disableAndReenableCec_volumeControlFeatureListenersNotified() {
|
public void disableAndReenableCec_volumeControlFeatureListenersNotified() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
|
|
||||||
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback);
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
|
||||||
assertThat(callback.mCallbackReceived).isTrue();
|
assertThat(callback.mCallbackReceived).isTrue();
|
||||||
assertThat(callback.mVolumeControlEnabled).isEqualTo(
|
assertThat(callback.mVolumeControlEnabled).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
|
|
||||||
|
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(callback.mVolumeControlEnabled).isEqualTo(
|
assertThat(callback.mVolumeControlEnabled).isEqualTo(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_enabled() {
|
public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_enabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
||||||
|
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
assertThat(callback.mCallbackReceived).isTrue();
|
assertThat(callback.mCallbackReceived).isTrue();
|
||||||
@@ -464,11 +464,11 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_disabled() {
|
public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_disabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
||||||
|
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
assertThat(callback.mCallbackReceived).isTrue();
|
assertThat(callback.mCallbackReceived).isTrue();
|
||||||
@@ -478,13 +478,13 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addHdmiCecVolumeControlFeatureListener_notifiesStateUpdate() {
|
public void addHdmiCecVolumeControlFeatureListener_notifiesStateUpdate() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
||||||
|
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback);
|
||||||
|
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
@@ -495,15 +495,15 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addHdmiCecVolumeControlFeatureListener_honorsUnregistration() {
|
public void addHdmiCecVolumeControlFeatureListener_honorsUnregistration() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
|
||||||
|
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
mHdmiControlService.removeHdmiControlVolumeControlStatusChangeListener(callback);
|
mHdmiControlServiceSpy.removeHdmiControlVolumeControlStatusChangeListener(callback);
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
@@ -514,16 +514,16 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addHdmiCecVolumeControlFeatureListener_notifiesStateUpdate_multiple() {
|
public void addHdmiCecVolumeControlFeatureListener_notifiesStateUpdate_multiple() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
HdmiControlManager.VOLUME_CONTROL_DISABLED);
|
||||||
VolumeControlFeatureCallback callback1 = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback1 = new VolumeControlFeatureCallback();
|
||||||
VolumeControlFeatureCallback callback2 = new VolumeControlFeatureCallback();
|
VolumeControlFeatureCallback callback2 = new VolumeControlFeatureCallback();
|
||||||
|
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback1);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback1);
|
||||||
mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback2);
|
mHdmiControlServiceSpy.addHdmiCecVolumeControlFeatureListener(callback2);
|
||||||
|
|
||||||
|
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
|
mHdmiControlServiceSpy.setHdmiCecVolumeControlEnabledInternal(
|
||||||
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
HdmiControlManager.VOLUME_CONTROL_ENABLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
@@ -537,47 +537,48 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getCecVersion_1_4() {
|
public void getCecVersion_1_4() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getCecVersion_2_0() {
|
public void getCecVersion_2_0() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getCecVersion_change() {
|
public void getCecVersion_change() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
|
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleGiveFeatures_cec14_featureAbort() {
|
public void handleGiveFeatures_cec14_featureAbort() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveFeatures(Constants.ADDR_TV,
|
mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveFeatures(Constants.ADDR_TV,
|
||||||
@@ -592,11 +593,11 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleGiveFeatures_cec20_reportsFeatures() {
|
public void handleGiveFeatures_cec20_reportsFeatures() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveFeatures(Constants.ADDR_TV,
|
mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveFeatures(Constants.ADDR_TV,
|
||||||
@@ -606,43 +607,43 @@ public class HdmiControlServiceTest {
|
|||||||
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
||||||
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
||||||
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
||||||
mPlaybackDevice.getRcProfile(), mPlaybackDevice.getRcFeatures(),
|
mPlaybackDeviceSpy.getRcProfile(), mPlaybackDeviceSpy.getRcFeatures(),
|
||||||
mPlaybackDevice.getDeviceFeatures());
|
mPlaybackDeviceSpy.getDeviceFeatures());
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures);
|
assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initializeCec_14_doesNotBroadcastReportFeatures() {
|
public void initializeCec_14_doesNotBroadcastReportFeatures() {
|
||||||
mNativeWrapper.clearResultMessages();
|
mNativeWrapper.clearResultMessages();
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
||||||
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
||||||
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
||||||
mPlaybackDevice.getRcProfile(), mPlaybackDevice.getRcFeatures(),
|
mPlaybackDeviceSpy.getRcProfile(), mPlaybackDeviceSpy.getRcFeatures(),
|
||||||
mPlaybackDevice.getDeviceFeatures());
|
mPlaybackDeviceSpy.getDeviceFeatures());
|
||||||
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportFeatures);
|
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initializeCec_20_reportsFeaturesBroadcast() {
|
public void initializeCec_20_reportsFeaturesBroadcast() {
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
|
||||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures(
|
||||||
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0,
|
||||||
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM),
|
||||||
mPlaybackDevice.getRcProfile(), mPlaybackDevice.getRcFeatures(),
|
mPlaybackDeviceSpy.getRcProfile(), mPlaybackDeviceSpy.getRcFeatures(),
|
||||||
mPlaybackDevice.getDeviceFeatures());
|
mPlaybackDeviceSpy.getDeviceFeatures());
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures);
|
assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -653,7 +654,7 @@ public class HdmiControlServiceTest {
|
|||||||
|
|
||||||
Binder.setCallingWorkSourceUid(callerUid);
|
Binder.setCallingWorkSourceUid(callerUid);
|
||||||
WorkSourceUidReadingRunnable uidReadingRunnable = new WorkSourceUidReadingRunnable();
|
WorkSourceUidReadingRunnable uidReadingRunnable = new WorkSourceUidReadingRunnable();
|
||||||
mHdmiControlService.runOnServiceThread(uidReadingRunnable);
|
mHdmiControlServiceSpy.runOnServiceThread(uidReadingRunnable);
|
||||||
|
|
||||||
Binder.setCallingWorkSourceUid(runnerUid);
|
Binder.setCallingWorkSourceUid(runnerUid);
|
||||||
|
|
||||||
@@ -666,36 +667,36 @@ public class HdmiControlServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void initCecVersion_limitToMinimumSupportedVersion() {
|
public void initCecVersion_limitToMinimumSupportedVersion() {
|
||||||
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
|
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initCecVersion_limitToAtLeast1_4() {
|
public void initCecVersion_limitToAtLeast1_4() {
|
||||||
mNativeWrapper.setCecVersion(0x0);
|
mNativeWrapper.setCecVersion(0x0);
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
|
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initCecVersion_useHighestMatchingVersion() {
|
public void initCecVersion_useHighestMatchingVersion() {
|
||||||
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
mHdmiControlService.getHdmiCecConfig().setIntValue(
|
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
|
||||||
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
|
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
|
assertThat(mHdmiControlServiceSpy.getCecVersion()).isEqualTo(
|
||||||
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
HdmiControlManager.HDMI_CEC_VERSION_2_0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -710,4 +711,140 @@ public class HdmiControlServiceTest {
|
|||||||
this.mVolumeControlEnabled = enabled;
|
this.mVolumeControlEnabled = enabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_errorParameter_returnsAbortInvalidOperand() {
|
||||||
|
// Validity ERROR_PARAMETER. Taken from HdmiCecMessageValidatorTest#isValid_menuStatus
|
||||||
|
HdmiCecMessage message = HdmiUtils.buildMessage("40:8D:03");
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.ABORT_INVALID_OPERAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_errorSource_returnsHandled() {
|
||||||
|
// Validity ERROR_SOURCE. Taken from HdmiCecMessageValidatorTest#isValid_menuStatus
|
||||||
|
HdmiCecMessage message = HdmiUtils.buildMessage("F0:8E");
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_errorDestination_returnsHandled() {
|
||||||
|
// Validity ERROR_DESTINATION. Taken from HdmiCecMessageValidatorTest#isValid_menuStatus
|
||||||
|
HdmiCecMessage message = HdmiUtils.buildMessage("0F:8E:00");
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_errorParameterShort_returnsHandled() {
|
||||||
|
// Validity ERROR_PARAMETER_SHORT
|
||||||
|
// Taken from HdmiCecMessageValidatorTest#isValid_menuStatus
|
||||||
|
HdmiCecMessage message = HdmiUtils.buildMessage("40:8E");
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_notHandledByLocalDevice_returnsNotHandled() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1,
|
||||||
|
HdmiControlManager.POWER_STATUS_ON);
|
||||||
|
|
||||||
|
doReturn(Constants.NOT_HANDLED).when(mHdmiControlServiceSpy)
|
||||||
|
.dispatchMessageToLocalDevice(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.NOT_HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_handledByLocalDevice_returnsHandled() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1,
|
||||||
|
HdmiControlManager.POWER_STATUS_ON);
|
||||||
|
|
||||||
|
doReturn(Constants.HANDLED).when(mHdmiControlServiceSpy)
|
||||||
|
.dispatchMessageToLocalDevice(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handleCecCommand_localDeviceReturnsFeatureAbort_returnsFeatureAbort() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildReportPowerStatus(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1,
|
||||||
|
HdmiControlManager.POWER_STATUS_ON);
|
||||||
|
|
||||||
|
doReturn(Constants.ABORT_REFUSED).when(mHdmiControlServiceSpy)
|
||||||
|
.dispatchMessageToLocalDevice(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.handleCecCommand(message))
|
||||||
|
.isEqualTo(Constants.ABORT_REFUSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dispatchMessageToLocalDevice_broadcastMessage_returnsHandled() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_BROADCAST);
|
||||||
|
|
||||||
|
doReturn(Constants.ABORT_REFUSED).when(mPlaybackDeviceSpy).dispatchMessage(message);
|
||||||
|
doReturn(Constants.ABORT_NOT_IN_CORRECT_MODE)
|
||||||
|
.when(mAudioSystemDeviceSpy).dispatchMessage(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.dispatchMessageToLocalDevice(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dispatchMessageToLocalDevice_localDevicesDoNotHandleMessage_returnsUnhandled() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1);
|
||||||
|
|
||||||
|
doReturn(Constants.NOT_HANDLED).when(mPlaybackDeviceSpy).dispatchMessage(message);
|
||||||
|
doReturn(Constants.NOT_HANDLED)
|
||||||
|
.when(mAudioSystemDeviceSpy).dispatchMessage(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.dispatchMessageToLocalDevice(message))
|
||||||
|
.isEqualTo(Constants.NOT_HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dispatchMessageToLocalDevice_localDeviceHandlesMessage_returnsHandled() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1);
|
||||||
|
|
||||||
|
doReturn(Constants.NOT_HANDLED).when(mPlaybackDeviceSpy).dispatchMessage(message);
|
||||||
|
doReturn(Constants.HANDLED)
|
||||||
|
.when(mAudioSystemDeviceSpy).dispatchMessage(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.dispatchMessageToLocalDevice(message))
|
||||||
|
.isEqualTo(Constants.HANDLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dispatchMessageToLocalDevice_localDeviceReturnsFeatureAbort_returnsFeatureAbort() {
|
||||||
|
HdmiCecMessage message = HdmiCecMessageBuilder.buildStandby(
|
||||||
|
Constants.ADDR_TV,
|
||||||
|
Constants.ADDR_PLAYBACK_1);
|
||||||
|
|
||||||
|
doReturn(Constants.NOT_HANDLED).when(mPlaybackDeviceSpy).dispatchMessage(message);
|
||||||
|
doReturn(Constants.ABORT_REFUSED)
|
||||||
|
.when(mAudioSystemDeviceSpy).dispatchMessage(message);
|
||||||
|
|
||||||
|
assertThat(mHdmiControlServiceSpy.dispatchMessageToLocalDevice(message))
|
||||||
|
.isEqualTo(Constants.ABORT_REFUSED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user