Merge changes I4f262f42,I312edbca into udc-dev
* changes: Unit tests for SAM during transitions from and to eARC Make naming in Java consistent.
This commit is contained in:
committed by
Android (Google) Code Review
commit
4e3a03eb68
@@ -35,40 +35,40 @@ final class HdmiEarcController {
|
|||||||
|
|
||||||
private final HdmiControlService mService;
|
private final HdmiControlService mService;
|
||||||
|
|
||||||
private EArcNativeWrapper mEArcNativeWrapperImpl;
|
private EarcNativeWrapper mEarcNativeWrapperImpl;
|
||||||
|
|
||||||
protected interface EArcNativeWrapper {
|
protected interface EarcNativeWrapper {
|
||||||
boolean nativeInit();
|
boolean nativeInit();
|
||||||
void nativeSetEArcEnabled(boolean enabled);
|
void nativeSetEarcEnabled(boolean enabled);
|
||||||
boolean nativeIsEArcEnabled();
|
boolean nativeIsEarcEnabled();
|
||||||
void nativeSetCallback(EarcAidlCallback callback);
|
void nativeSetCallback(EarcAidlCallback callback);
|
||||||
byte nativeGetState(int portId);
|
byte nativeGetState(int portId);
|
||||||
byte[] nativeGetLastReportedAudioCapabilities(int portId);
|
byte[] nativeGetLastReportedAudioCapabilities(int portId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class EArcNativeWrapperImpl implements EArcNativeWrapper,
|
private static final class EarcNativeWrapperImpl implements EarcNativeWrapper,
|
||||||
IBinder.DeathRecipient {
|
IBinder.DeathRecipient {
|
||||||
private IEArc mEArc;
|
private IEArc mEarc;
|
||||||
private EarcAidlCallback mEArcCallback;
|
private EarcAidlCallback mEarcCallback;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void binderDied() {
|
public void binderDied() {
|
||||||
mEArc.asBinder().unlinkToDeath(this, 0);
|
mEarc.asBinder().unlinkToDeath(this, 0);
|
||||||
connectToHal();
|
connectToHal();
|
||||||
if (mEArcCallback != null) {
|
if (mEarcCallback != null) {
|
||||||
nativeSetCallback(mEArcCallback);
|
nativeSetCallback(mEarcCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean connectToHal() {
|
boolean connectToHal() {
|
||||||
mEArc =
|
mEarc =
|
||||||
IEArc.Stub.asInterface(
|
IEArc.Stub.asInterface(
|
||||||
ServiceManager.getService(IEArc.DESCRIPTOR + "/default"));
|
ServiceManager.getService(IEArc.DESCRIPTOR + "/default"));
|
||||||
if (mEArc == null) {
|
if (mEarc == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mEArc.asBinder().linkToDeath(this, 0);
|
mEarc.asBinder().linkToDeath(this, 0);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
HdmiLogger.error("Couldn't link callback object: ", e);
|
HdmiLogger.error("Couldn't link callback object: ", e);
|
||||||
}
|
}
|
||||||
@@ -81,9 +81,9 @@ final class HdmiEarcController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nativeSetEArcEnabled(boolean enabled) {
|
public void nativeSetEarcEnabled(boolean enabled) {
|
||||||
try {
|
try {
|
||||||
mEArc.setEArcEnabled(enabled);
|
mEarc.setEArcEnabled(enabled);
|
||||||
} catch (ServiceSpecificException sse) {
|
} catch (ServiceSpecificException sse) {
|
||||||
HdmiLogger.error(
|
HdmiLogger.error(
|
||||||
"Could not set eARC enabled to " + enabled + ". Error: ", sse.errorCode);
|
"Could not set eARC enabled to " + enabled + ". Error: ", sse.errorCode);
|
||||||
@@ -93,9 +93,9 @@ final class HdmiEarcController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean nativeIsEArcEnabled() {
|
public boolean nativeIsEarcEnabled() {
|
||||||
try {
|
try {
|
||||||
return mEArc.isEArcEnabled();
|
return mEarc.isEArcEnabled();
|
||||||
} catch (RemoteException re) {
|
} catch (RemoteException re) {
|
||||||
HdmiLogger.error("Could not read if eARC is enabled. Exception: ", re);
|
HdmiLogger.error("Could not read if eARC is enabled. Exception: ", re);
|
||||||
return false;
|
return false;
|
||||||
@@ -104,9 +104,9 @@ final class HdmiEarcController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nativeSetCallback(EarcAidlCallback callback) {
|
public void nativeSetCallback(EarcAidlCallback callback) {
|
||||||
mEArcCallback = callback;
|
mEarcCallback = callback;
|
||||||
try {
|
try {
|
||||||
mEArc.setCallback(callback);
|
mEarc.setCallback(callback);
|
||||||
} catch (RemoteException re) {
|
} catch (RemoteException re) {
|
||||||
HdmiLogger.error("Could not set callback. Exception: ", re);
|
HdmiLogger.error("Could not set callback. Exception: ", re);
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ final class HdmiEarcController {
|
|||||||
@Override
|
@Override
|
||||||
public byte nativeGetState(int portId) {
|
public byte nativeGetState(int portId) {
|
||||||
try {
|
try {
|
||||||
return mEArc.getState(portId);
|
return mEarc.getState(portId);
|
||||||
} catch (RemoteException re) {
|
} catch (RemoteException re) {
|
||||||
HdmiLogger.error("Could not get eARC state. Exception: ", re);
|
HdmiLogger.error("Could not get eARC state. Exception: ", re);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -125,7 +125,7 @@ final class HdmiEarcController {
|
|||||||
@Override
|
@Override
|
||||||
public byte[] nativeGetLastReportedAudioCapabilities(int portId) {
|
public byte[] nativeGetLastReportedAudioCapabilities(int portId) {
|
||||||
try {
|
try {
|
||||||
return mEArc.getLastReportedAudioCapabilities(portId);
|
return mEarc.getLastReportedAudioCapabilities(portId);
|
||||||
} catch (RemoteException re) {
|
} catch (RemoteException re) {
|
||||||
HdmiLogger.error(
|
HdmiLogger.error(
|
||||||
"Could not read last reported audio capabilities. Exception: ", re);
|
"Could not read last reported audio capabilities. Exception: ", re);
|
||||||
@@ -135,9 +135,9 @@ final class HdmiEarcController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Private constructor. Use HdmiEarcController.create().
|
// Private constructor. Use HdmiEarcController.create().
|
||||||
private HdmiEarcController(HdmiControlService service, EArcNativeWrapper nativeWrapper) {
|
private HdmiEarcController(HdmiControlService service, EarcNativeWrapper nativeWrapper) {
|
||||||
mService = service;
|
mService = service;
|
||||||
mEArcNativeWrapperImpl = nativeWrapper;
|
mEarcNativeWrapperImpl = nativeWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -151,14 +151,14 @@ final class HdmiEarcController {
|
|||||||
* returns {@code null}.
|
* returns {@code null}.
|
||||||
*/
|
*/
|
||||||
static HdmiEarcController create(HdmiControlService service) {
|
static HdmiEarcController create(HdmiControlService service) {
|
||||||
return createWithNativeWrapper(service, new EArcNativeWrapperImpl());
|
return createWithNativeWrapper(service, new EarcNativeWrapperImpl());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A factory method with injection of native methods for testing.
|
* A factory method with injection of native methods for testing.
|
||||||
*/
|
*/
|
||||||
static HdmiEarcController createWithNativeWrapper(HdmiControlService service,
|
static HdmiEarcController createWithNativeWrapper(HdmiControlService service,
|
||||||
EArcNativeWrapper nativeWrapper) {
|
EarcNativeWrapper nativeWrapper) {
|
||||||
HdmiEarcController controller = new HdmiEarcController(service, nativeWrapper);
|
HdmiEarcController controller = new HdmiEarcController(service, nativeWrapper);
|
||||||
if (!controller.init(nativeWrapper)) {
|
if (!controller.init(nativeWrapper)) {
|
||||||
HdmiLogger.warning("Could not connect to eARC AIDL HAL.");
|
HdmiLogger.warning("Could not connect to eARC AIDL HAL.");
|
||||||
@@ -167,10 +167,10 @@ final class HdmiEarcController {
|
|||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean init(EArcNativeWrapper nativeWrapper) {
|
private boolean init(EarcNativeWrapper nativeWrapper) {
|
||||||
if (nativeWrapper.nativeInit()) {
|
if (nativeWrapper.nativeInit()) {
|
||||||
mControlHandler = new Handler(mService.getServiceLooper());
|
mControlHandler = new Handler(mService.getServiceLooper());
|
||||||
mEArcNativeWrapperImpl.nativeSetCallback(new EarcAidlCallback());
|
mEarcNativeWrapperImpl.nativeSetCallback(new EarcAidlCallback());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -194,7 +194,7 @@ final class HdmiEarcController {
|
|||||||
@HdmiAnnotations.ServiceThreadOnly
|
@HdmiAnnotations.ServiceThreadOnly
|
||||||
void setEarcEnabled(boolean enabled) {
|
void setEarcEnabled(boolean enabled) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
mEArcNativeWrapperImpl.nativeSetEArcEnabled(enabled);
|
mEarcNativeWrapperImpl.nativeSetEarcEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -205,7 +205,7 @@ final class HdmiEarcController {
|
|||||||
@HdmiAnnotations.ServiceThreadOnly
|
@HdmiAnnotations.ServiceThreadOnly
|
||||||
@Constants.EarcStatus
|
@Constants.EarcStatus
|
||||||
int getState(int portId) {
|
int getState(int portId) {
|
||||||
return mEArcNativeWrapperImpl.nativeGetState(portId);
|
return mEarcNativeWrapperImpl.nativeGetState(portId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -215,7 +215,7 @@ final class HdmiEarcController {
|
|||||||
*/
|
*/
|
||||||
@HdmiAnnotations.ServiceThreadOnly
|
@HdmiAnnotations.ServiceThreadOnly
|
||||||
byte[] getLastReportedCaps(int portId) {
|
byte[] getLastReportedCaps(int portId) {
|
||||||
return mEArcNativeWrapperImpl.nativeGetLastReportedAudioCapabilities(portId);
|
return mEarcNativeWrapperImpl.nativeGetLastReportedAudioCapabilities(portId);
|
||||||
}
|
}
|
||||||
|
|
||||||
final class EarcAidlCallback extends IEArcCallback.Stub {
|
final class EarcAidlCallback extends IEArcCallback.Stub {
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ package com.android.server.hdmi;
|
|||||||
|
|
||||||
import android.hardware.tv.hdmi.earc.IEArcStatus;
|
import android.hardware.tv.hdmi.earc.IEArcStatus;
|
||||||
|
|
||||||
final class FakeEArcNativeWrapper implements HdmiEarcController.EArcNativeWrapper {
|
final class FakeEarcNativeWrapper implements HdmiEarcController.EarcNativeWrapper {
|
||||||
private static final String TAG = "FakeEArcNativeWrapper";
|
private static final String TAG = "FakeEarcNativeWrapper";
|
||||||
|
|
||||||
private boolean mIsEArcEnabled = true;
|
private boolean mIsEarcEnabled = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean nativeInit() {
|
public boolean nativeInit() {
|
||||||
@@ -29,13 +29,13 @@ final class FakeEArcNativeWrapper implements HdmiEarcController.EArcNativeWrappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nativeSetEArcEnabled(boolean enabled) {
|
public void nativeSetEarcEnabled(boolean enabled) {
|
||||||
mIsEArcEnabled = enabled;
|
mIsEarcEnabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean nativeIsEArcEnabled() {
|
public boolean nativeIsEarcEnabled() {
|
||||||
return mIsEArcEnabled;
|
return mIsEarcEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -29,9 +29,11 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.eq;
|
import static org.mockito.Mockito.eq;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -91,7 +93,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv;
|
private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv;
|
||||||
private FakeNativeWrapper mNativeWrapper;
|
private FakeNativeWrapper mNativeWrapper;
|
||||||
private HdmiEarcController mHdmiEarcController;
|
private HdmiEarcController mHdmiEarcController;
|
||||||
private FakeEArcNativeWrapper mEArcNativeWrapper;
|
private FakeEarcNativeWrapper mEarcNativeWrapper;
|
||||||
private FakePowerManagerWrapper mPowerManager;
|
private FakePowerManagerWrapper mPowerManager;
|
||||||
private Looper mMyLooper;
|
private Looper mMyLooper;
|
||||||
private TestLooper mTestLooper = new TestLooper();
|
private TestLooper mTestLooper = new TestLooper();
|
||||||
@@ -187,9 +189,9 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||||
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
||||||
mHdmiControlService.setCecController(mHdmiCecController);
|
mHdmiControlService.setCecController(mHdmiCecController);
|
||||||
mEArcNativeWrapper = new FakeEArcNativeWrapper();
|
mEarcNativeWrapper = new FakeEarcNativeWrapper();
|
||||||
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
||||||
mHdmiControlService, mEArcNativeWrapper);
|
mHdmiControlService, mEarcNativeWrapper);
|
||||||
mHdmiControlService.setEarcController(mHdmiEarcController);
|
mHdmiControlService.setEarcController(mHdmiEarcController);
|
||||||
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
|
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
|
||||||
HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[2];
|
HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[2];
|
||||||
@@ -240,6 +242,61 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initiateArcAndValidate() {
|
||||||
|
HdmiCecMessage initiateArc = HdmiCecMessageBuilder.buildInitiateArc(
|
||||||
|
ADDR_AUDIO_SYSTEM,
|
||||||
|
ADDR_TV);
|
||||||
|
|
||||||
|
mNativeWrapper.onCecMessage(initiateArc);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
HdmiCecMessage reportArcInitiated = HdmiCecMessageBuilder.buildReportArcInitiated(
|
||||||
|
ADDR_TV,
|
||||||
|
ADDR_AUDIO_SYSTEM);
|
||||||
|
// <Report ARC Initiated> should only be sent after SAD querying is done
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportArcInitiated);
|
||||||
|
|
||||||
|
// Finish querying SADs
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY);
|
||||||
|
mNativeWrapper.clearResultMessages();
|
||||||
|
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY);
|
||||||
|
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(reportArcInitiated);
|
||||||
|
mNativeWrapper.clearResultMessages();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initateSamAndValidate() {
|
||||||
|
// Record that previous system audio mode is on.
|
||||||
|
mHdmiCecLocalDeviceTv.setSystemAudioControlFeatureEnabled(true);
|
||||||
|
|
||||||
|
HdmiCecFeatureAction action = new SystemAudioAutoInitiationAction(mHdmiCecLocalDeviceTv,
|
||||||
|
ADDR_AUDIO_SYSTEM);
|
||||||
|
mHdmiCecLocalDeviceTv.addAndStartAction(action);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
HdmiCecMessage giveSystemAudioModeStatus =
|
||||||
|
HdmiCecMessageBuilder.buildGiveSystemAudioModeStatus(
|
||||||
|
mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
|
||||||
|
ADDR_AUDIO_SYSTEM);
|
||||||
|
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(giveSystemAudioModeStatus);
|
||||||
|
|
||||||
|
HdmiCecMessage reportSystemAudioMode =
|
||||||
|
HdmiCecMessageBuilder.buildReportSystemAudioMode(
|
||||||
|
ADDR_AUDIO_SYSTEM,
|
||||||
|
mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
|
||||||
|
true);
|
||||||
|
mHdmiControlService.handleCecCommand(reportSystemAudioMode);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialPowerStateIsStandby() {
|
public void initialPowerStateIsStandby() {
|
||||||
assertThat(mHdmiCecLocalDeviceTv.getPowerStatus()).isEqualTo(
|
assertThat(mHdmiCecLocalDeviceTv.getPowerStatus()).isEqualTo(
|
||||||
@@ -1531,30 +1588,7 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
mNativeWrapper.onCecMessage(reportPhysicalAddress);
|
mNativeWrapper.onCecMessage(reportPhysicalAddress);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
HdmiCecMessage initiateArc = HdmiCecMessageBuilder.buildInitiateArc(
|
initiateArcAndValidate();
|
||||||
ADDR_AUDIO_SYSTEM,
|
|
||||||
ADDR_TV);
|
|
||||||
|
|
||||||
mNativeWrapper.onCecMessage(initiateArc);
|
|
||||||
mTestLooper.dispatchAll();
|
|
||||||
|
|
||||||
HdmiCecMessage reportArcInitiated = HdmiCecMessageBuilder.buildReportArcInitiated(
|
|
||||||
ADDR_TV,
|
|
||||||
ADDR_AUDIO_SYSTEM);
|
|
||||||
// <Report ARC Initiated> should only be sent after SAD querying is done
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportArcInitiated);
|
|
||||||
|
|
||||||
// Finish querying SADs
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY);
|
|
||||||
mNativeWrapper.clearResultMessages();
|
|
||||||
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
|
|
||||||
mTestLooper.dispatchAll();
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY);
|
|
||||||
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
|
|
||||||
mTestLooper.dispatchAll();
|
|
||||||
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(reportArcInitiated);
|
|
||||||
mNativeWrapper.clearResultMessages();
|
|
||||||
|
|
||||||
mHdmiControlService.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
|
mHdmiControlService.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
@@ -1565,4 +1599,59 @@ public class HdmiCecLocalDeviceTvTest {
|
|||||||
|
|
||||||
assertThat(mNativeWrapper.getResultMessages()).contains(requestArcTermination);
|
assertThat(mNativeWrapper.getResultMessages()).contains(requestArcTermination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fromArcToEarc_SamRemainsOn() {
|
||||||
|
initateSamAndValidate();
|
||||||
|
|
||||||
|
// Emulate Audio device on port 0x2000 (supports ARC and eARC)
|
||||||
|
mNativeWrapper.setPortConnectionStatus(2, true);
|
||||||
|
HdmiCecMessage reportPhysicalAddress =
|
||||||
|
HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
||||||
|
ADDR_AUDIO_SYSTEM, 0x2000, HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
|
||||||
|
mNativeWrapper.onCecMessage(reportPhysicalAddress);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
initiateArcAndValidate();
|
||||||
|
|
||||||
|
assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue();
|
||||||
|
|
||||||
|
mHdmiControlService.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
HdmiCecMessage requestArcTermination = HdmiCecMessageBuilder.buildRequestArcTermination(
|
||||||
|
ADDR_TV,
|
||||||
|
ADDR_AUDIO_SYSTEM);
|
||||||
|
|
||||||
|
assertThat(mNativeWrapper.getResultMessages()).contains(requestArcTermination);
|
||||||
|
assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void disableEarc_SamRemainsOn() {
|
||||||
|
initateSamAndValidate();
|
||||||
|
|
||||||
|
// Emulate Audio device on port 0x2000 (supports ARC and eARC)
|
||||||
|
mNativeWrapper.setPortConnectionStatus(2, true);
|
||||||
|
HdmiCecMessage reportPhysicalAddress =
|
||||||
|
HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
||||||
|
ADDR_AUDIO_SYSTEM, 0x2000, HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
|
||||||
|
mNativeWrapper.onCecMessage(reportPhysicalAddress);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
|
||||||
|
mHdmiControlService.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue();
|
||||||
|
|
||||||
|
mHdmiControlService.initializeEarcLocalDevice(HdmiControlService.INITIATED_BY_BOOT_UP);
|
||||||
|
HdmiEarcLocalDevice mHdmiEarcLocalDeviceTx = mHdmiControlService.getEarcLocalDevice();
|
||||||
|
mHdmiEarcLocalDeviceTx.handleEarcStateChange(Constants.HDMI_EARC_STATUS_EARC_CONNECTED);
|
||||||
|
mTestLooper.moveTimeForward(HdmiEarcLocalDeviceTx.REPORT_CAPS_MAX_DELAY_MS + 1);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
verify(mAudioManager, times(1)).setWiredDeviceConnectionState(
|
||||||
|
any(), eq(1));
|
||||||
|
|
||||||
|
assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class HdmiControlServiceTest {
|
|||||||
private MockPlaybackDevice mPlaybackDeviceSpy;
|
private MockPlaybackDevice mPlaybackDeviceSpy;
|
||||||
private FakeNativeWrapper mNativeWrapper;
|
private FakeNativeWrapper mNativeWrapper;
|
||||||
private HdmiEarcController mHdmiEarcController;
|
private HdmiEarcController mHdmiEarcController;
|
||||||
private FakeEArcNativeWrapper mEArcNativeWrapper;
|
private FakeEarcNativeWrapper mEarcNativeWrapper;
|
||||||
private FakePowerManagerWrapper mPowerManager;
|
private FakePowerManagerWrapper mPowerManager;
|
||||||
private Looper mMyLooper;
|
private Looper mMyLooper;
|
||||||
private TestLooper mTestLooper = new TestLooper();
|
private TestLooper mTestLooper = new TestLooper();
|
||||||
@@ -128,9 +128,9 @@ public class HdmiControlServiceTest {
|
|||||||
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||||
mHdmiControlServiceSpy, mNativeWrapper, mHdmiControlServiceSpy.getAtomWriter());
|
mHdmiControlServiceSpy, mNativeWrapper, mHdmiControlServiceSpy.getAtomWriter());
|
||||||
mHdmiControlServiceSpy.setCecController(mHdmiCecController);
|
mHdmiControlServiceSpy.setCecController(mHdmiCecController);
|
||||||
mEArcNativeWrapper = new FakeEArcNativeWrapper();
|
mEarcNativeWrapper = new FakeEarcNativeWrapper();
|
||||||
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
||||||
mHdmiControlServiceSpy, mEArcNativeWrapper);
|
mHdmiControlServiceSpy, mEarcNativeWrapper);
|
||||||
mHdmiControlServiceSpy.setEarcController(mHdmiEarcController);
|
mHdmiControlServiceSpy.setEarcController(mHdmiEarcController);
|
||||||
mHdmiControlServiceSpy.setHdmiMhlController(HdmiMhlControllerStub.create(
|
mHdmiControlServiceSpy.setHdmiMhlController(HdmiMhlControllerStub.create(
|
||||||
mHdmiControlServiceSpy));
|
mHdmiControlServiceSpy));
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public class HdmiEarcLocalDeviceTxTest {
|
|||||||
private HdmiEarcLocalDevice mHdmiEarcLocalDeviceTx;
|
private HdmiEarcLocalDevice mHdmiEarcLocalDeviceTx;
|
||||||
private FakeNativeWrapper mNativeWrapper;
|
private FakeNativeWrapper mNativeWrapper;
|
||||||
private HdmiEarcController mHdmiEarcController;
|
private HdmiEarcController mHdmiEarcController;
|
||||||
private FakeEArcNativeWrapper mEArcNativeWrapper;
|
private FakeEarcNativeWrapper mEarcNativeWrapper;
|
||||||
private FakePowerManagerWrapper mPowerManager;
|
private FakePowerManagerWrapper mPowerManager;
|
||||||
private byte[] mEarcCapabilities = new byte[]{
|
private byte[] mEarcCapabilities = new byte[]{
|
||||||
0x01, 0x01, 0x1a, 0x35, 0x0f, 0x7f, 0x07, 0x15, 0x07, 0x50, 0x3d, 0x1f, (byte) 0xc0,
|
0x01, 0x01, 0x1a, 0x35, 0x0f, 0x7f, 0x07, 0x15, 0x07, 0x50, 0x3d, 0x1f, (byte) 0xc0,
|
||||||
@@ -128,9 +128,9 @@ public class HdmiEarcLocalDeviceTxTest {
|
|||||||
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
mHdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||||
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
||||||
mHdmiControlService.setCecController(mHdmiCecController);
|
mHdmiControlService.setCecController(mHdmiCecController);
|
||||||
mEArcNativeWrapper = new FakeEArcNativeWrapper();
|
mEarcNativeWrapper = new FakeEarcNativeWrapper();
|
||||||
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
|
||||||
mHdmiControlService, mEArcNativeWrapper);
|
mHdmiControlService, mEarcNativeWrapper);
|
||||||
mHdmiControlService.setEarcController(mHdmiEarcController);
|
mHdmiControlService.setEarcController(mHdmiEarcController);
|
||||||
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
|
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
|
||||||
mHdmiControlService.initService();
|
mHdmiControlService.initService();
|
||||||
|
|||||||
Reference in New Issue
Block a user