Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +10 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.input.InputManager; import android.hardware.tv.cec.V1_0.Result; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; import android.os.Handler; Loading Loading @@ -285,7 +286,7 @@ abstract class HdmiCecLocalDevice { case Constants.MESSAGE_GIVE_OSD_NAME: return handleGiveOsdName(message); case Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID: return handleGiveDeviceVendorId(null); return handleGiveDeviceVendorId(message); case Constants.MESSAGE_CEC_VERSION: return handleCecVersion(); case Constants.MESSAGE_GET_CEC_VERSION: Loading Loading @@ -393,12 +394,16 @@ abstract class HdmiCecLocalDevice { @ServiceThreadOnly @Constants.HandleMessageResult protected int handleGiveDeviceVendorId(@Nullable SendMessageCallback callback) { protected int handleGiveDeviceVendorId(HdmiCecMessage message) { assertRunOnServiceThread(); int vendorId = mService.getVendorId(); if (vendorId == Result.FAILURE_UNKNOWN) { mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNABLE_TO_DETERMINE); } else { HdmiCecMessage cecMessage = HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, vendorId); mService.sendCecCommand(cecMessage, callback); mService.sendCecCommand(cecMessage); } return Constants.HANDLED; } Loading services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java +7 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ final class FakeNativeWrapper implements NativeWrapper { private final Map<Integer, Boolean> mPortConnectionStatus = new HashMap<>(); private final HashMap<Integer, Integer> mMessageSendResult = new HashMap<>(); private int mMyPhysicalAddress = 0; private int mVendorId = 0; private HdmiPortInfo[] mHdmiPortInfo = null; private HdmiCecController.HdmiCecCallback mCallback = null; private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0; Loading Loading @@ -102,7 +103,7 @@ final class FakeNativeWrapper implements NativeWrapper { @Override public int nativeGetVendorId() { return 0; return mVendorId; } @Override Loading Loading @@ -180,6 +181,11 @@ final class FakeNativeWrapper implements NativeWrapper { mMessageSendResult.put(opcode, result); } @VisibleForTesting protected void setVendorId(int vendorId) { mVendorId = vendorId; } @VisibleForTesting protected void setPhysicalAddress(int physicalAddress) { mMyPhysicalAddress = physicalAddress; Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +32 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import static org.mockito.Mockito.verify; import android.content.Context; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.tv.cec.V1_0.Result; import android.media.AudioManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; Loading Loading @@ -205,6 +206,7 @@ public class HdmiCecLocalDeviceTest { mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x2000); mTestLooper.dispatchAll(); mNativeWrapper.clearResultMessages(); } @Test Loading Loading @@ -243,15 +245,37 @@ public class HdmiCecLocalDeviceTest { @Test public void handleGiveDeviceVendorId_success() { mSrcAddr = ADDR_UNREGISTERED; mDesAddr = ADDR_BROADCAST; /** nativeGetVendorId returns 0 */ param = new byte[] {(byte) ((0 >> 8) & 0xFF), (byte) (0 & 0xFF), (byte) (0 & 0xFF)}; callbackResult = -1; /** Set vendor id to 0 */ mNativeWrapper.setVendorId(0); HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildDeviceVendorIdCommand(ADDR_TV, 0); @Constants.HandleMessageResult int handleResult = mHdmiLocalDevice.handleGiveDeviceVendorId( (int finalResult) -> callbackResult = finalResult); HdmiCecMessageBuilder.buildGiveDeviceVendorIdCommand( ADDR_PLAYBACK_1, ADDR_TV)); mTestLooper.dispatchAll(); assertEquals(0, callbackResult); assertEquals(Constants.HANDLED, handleResult); assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage); } @Test public void handleGiveDeviceVendorId_failure() { mNativeWrapper.setVendorId(Result.FAILURE_UNKNOWN); HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildFeatureAbortCommand( ADDR_TV, ADDR_PLAYBACK_1, Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID, Constants.ABORT_UNABLE_TO_DETERMINE); @Constants.HandleMessageResult int handleResult = mHdmiLocalDevice.handleGiveDeviceVendorId( HdmiCecMessageBuilder.buildGiveDeviceVendorIdCommand( ADDR_PLAYBACK_1, ADDR_TV)); mTestLooper.dispatchAll(); assertEquals(Constants.HANDLED, handleResult); assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage); } @Test Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +10 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.input.InputManager; import android.hardware.tv.cec.V1_0.Result; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; import android.os.Handler; Loading Loading @@ -285,7 +286,7 @@ abstract class HdmiCecLocalDevice { case Constants.MESSAGE_GIVE_OSD_NAME: return handleGiveOsdName(message); case Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID: return handleGiveDeviceVendorId(null); return handleGiveDeviceVendorId(message); case Constants.MESSAGE_CEC_VERSION: return handleCecVersion(); case Constants.MESSAGE_GET_CEC_VERSION: Loading Loading @@ -393,12 +394,16 @@ abstract class HdmiCecLocalDevice { @ServiceThreadOnly @Constants.HandleMessageResult protected int handleGiveDeviceVendorId(@Nullable SendMessageCallback callback) { protected int handleGiveDeviceVendorId(HdmiCecMessage message) { assertRunOnServiceThread(); int vendorId = mService.getVendorId(); if (vendorId == Result.FAILURE_UNKNOWN) { mService.maySendFeatureAbortCommand(message, Constants.ABORT_UNABLE_TO_DETERMINE); } else { HdmiCecMessage cecMessage = HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, vendorId); mService.sendCecCommand(cecMessage, callback); mService.sendCecCommand(cecMessage); } return Constants.HANDLED; } Loading
services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java +7 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ final class FakeNativeWrapper implements NativeWrapper { private final Map<Integer, Boolean> mPortConnectionStatus = new HashMap<>(); private final HashMap<Integer, Integer> mMessageSendResult = new HashMap<>(); private int mMyPhysicalAddress = 0; private int mVendorId = 0; private HdmiPortInfo[] mHdmiPortInfo = null; private HdmiCecController.HdmiCecCallback mCallback = null; private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0; Loading Loading @@ -102,7 +103,7 @@ final class FakeNativeWrapper implements NativeWrapper { @Override public int nativeGetVendorId() { return 0; return mVendorId; } @Override Loading Loading @@ -180,6 +181,11 @@ final class FakeNativeWrapper implements NativeWrapper { mMessageSendResult.put(opcode, result); } @VisibleForTesting protected void setVendorId(int vendorId) { mVendorId = vendorId; } @VisibleForTesting protected void setPhysicalAddress(int physicalAddress) { mMyPhysicalAddress = physicalAddress; Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +32 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import static org.mockito.Mockito.verify; import android.content.Context; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.tv.cec.V1_0.Result; import android.media.AudioManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; Loading Loading @@ -205,6 +206,7 @@ public class HdmiCecLocalDeviceTest { mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x2000); mTestLooper.dispatchAll(); mNativeWrapper.clearResultMessages(); } @Test Loading Loading @@ -243,15 +245,37 @@ public class HdmiCecLocalDeviceTest { @Test public void handleGiveDeviceVendorId_success() { mSrcAddr = ADDR_UNREGISTERED; mDesAddr = ADDR_BROADCAST; /** nativeGetVendorId returns 0 */ param = new byte[] {(byte) ((0 >> 8) & 0xFF), (byte) (0 & 0xFF), (byte) (0 & 0xFF)}; callbackResult = -1; /** Set vendor id to 0 */ mNativeWrapper.setVendorId(0); HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildDeviceVendorIdCommand(ADDR_TV, 0); @Constants.HandleMessageResult int handleResult = mHdmiLocalDevice.handleGiveDeviceVendorId( (int finalResult) -> callbackResult = finalResult); HdmiCecMessageBuilder.buildGiveDeviceVendorIdCommand( ADDR_PLAYBACK_1, ADDR_TV)); mTestLooper.dispatchAll(); assertEquals(0, callbackResult); assertEquals(Constants.HANDLED, handleResult); assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage); } @Test public void handleGiveDeviceVendorId_failure() { mNativeWrapper.setVendorId(Result.FAILURE_UNKNOWN); HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildFeatureAbortCommand( ADDR_TV, ADDR_PLAYBACK_1, Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID, Constants.ABORT_UNABLE_TO_DETERMINE); @Constants.HandleMessageResult int handleResult = mHdmiLocalDevice.handleGiveDeviceVendorId( HdmiCecMessageBuilder.buildGiveDeviceVendorIdCommand( ADDR_PLAYBACK_1, ADDR_TV)); mTestLooper.dispatchAll(); assertEquals(Constants.HANDLED, handleResult); assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage); } @Test Loading