Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +12 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,18 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true);*/ } @Override @ServiceThreadOnly protected void onStandby(boolean initiatedByCec, int standbyAction) { assertRunOnServiceThread(); if (setSystemAudioMode(false)) { mService.sendCecCommand( HdmiCecMessageBuilder.buildSetSystemAudioMode( mAddress, Constants.ADDR_BROADCAST, false) ); } } @Override @ServiceThreadOnly protected void onAddressAllocated(int logicalAddress, int reason) { Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +8 −2 Original line number Diff line number Diff line Loading @@ -2041,6 +2041,10 @@ public class HdmiControlService extends SystemService { return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_TV); } boolean isAudioSystemDevice() { return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM); } boolean isTvDeviceEnabled() { return isTvDevice() && tv() != null; } Loading Loading @@ -2229,9 +2233,11 @@ public class HdmiControlService extends SystemService { device.onStandby(mStandbyMessageReceived, standbyAction); } mStandbyMessageReceived = false; if (!isAudioSystemDevice()) { mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, false); mMhlController.setOption(OPTION_MHL_SERVICE_CONTROL, DISABLED); } } private void addVendorCommandListener(IHdmiVendorCommandListener listener, int deviceType) { VendorCommandListenerRecord record = new VendorCommandListenerRecord(listener, deviceType); Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertEquals; Loading @@ -41,6 +42,7 @@ import org.junit.runners.JUnit4; */ public class HdmiCecLocalDeviceAudioSystemTest { private static final String TAG = "HdmiCecLocalDeviceAudioSystemTest"; private HdmiControlService mHdmiControlService; private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; Loading Loading @@ -237,4 +239,18 @@ public class HdmiCecLocalDeviceAudioSystemTest { assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } @Test public void onStandbyAudioSystem_currentSystemAudioControlOn() { // Set system audio control on first mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(true); // Check if standby correctly turns off the feature mHdmiCecLocalDeviceAudioSystem.onStandby(false, STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } } services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +33 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.hdmi; import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV; import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED; Loading @@ -25,7 +26,9 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.os.PowerManager; import android.os.test.TestLooper; import android.support.test.filters.SmallTest; import android.os.MessageQueue; Loading Loading @@ -91,10 +94,29 @@ public class HdmiCecLocalDeviceTest { private int callbackResult; private HdmiCecMessageValidator mMessageValidator; private static byte[] param; private boolean mStandbyMessageReceived; private boolean isControlEnabled; private int mPowerStatus; @Before public void SetUp() { mHdmiControlService = new HdmiControlService(null); mHdmiControlService = new HdmiControlService(null) { @Override boolean isControlEnabled() { return isControlEnabled; } @Override boolean isPowerOnOrTransient() { return mPowerStatus == HdmiControlManager.POWER_STATUS_ON || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON; } @Override void standby() { mStandbyMessageReceived = true; } }; mHdmiControlService.setIoLooper(mTestLooper.getLooper()); mHdmiCecController = HdmiCecController.createWithNativeWrapper( mHdmiControlService, new FakeNativeWrapper()); Loading Loading @@ -155,4 +177,14 @@ public class HdmiCecLocalDeviceTest { mTestLooper.dispatchAll(); assertEquals(0, callbackResult); } @Test public void handleStandby_isPowerOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; isControlEnabled = true; assertFalse(mStandbyMessageReceived); mHdmiLocalDevice.handleStandby( HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_AUDIO_SYSTEM)); assertTrue(mStandbyMessageReceived); } } Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +12 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,18 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true);*/ } @Override @ServiceThreadOnly protected void onStandby(boolean initiatedByCec, int standbyAction) { assertRunOnServiceThread(); if (setSystemAudioMode(false)) { mService.sendCecCommand( HdmiCecMessageBuilder.buildSetSystemAudioMode( mAddress, Constants.ADDR_BROADCAST, false) ); } } @Override @ServiceThreadOnly protected void onAddressAllocated(int logicalAddress, int reason) { Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +8 −2 Original line number Diff line number Diff line Loading @@ -2041,6 +2041,10 @@ public class HdmiControlService extends SystemService { return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_TV); } boolean isAudioSystemDevice() { return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM); } boolean isTvDeviceEnabled() { return isTvDevice() && tv() != null; } Loading Loading @@ -2229,9 +2233,11 @@ public class HdmiControlService extends SystemService { device.onStandby(mStandbyMessageReceived, standbyAction); } mStandbyMessageReceived = false; if (!isAudioSystemDevice()) { mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, false); mMhlController.setOption(OPTION_MHL_SERVICE_CONTROL, DISABLED); } } private void addVendorCommandListener(IHdmiVendorCommandListener listener, int deviceType) { VendorCommandListenerRecord record = new VendorCommandListenerRecord(listener, deviceType); Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertEquals; Loading @@ -41,6 +42,7 @@ import org.junit.runners.JUnit4; */ public class HdmiCecLocalDeviceAudioSystemTest { private static final String TAG = "HdmiCecLocalDeviceAudioSystemTest"; private HdmiControlService mHdmiControlService; private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; Loading Loading @@ -237,4 +239,18 @@ public class HdmiCecLocalDeviceAudioSystemTest { assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } @Test public void onStandbyAudioSystem_currentSystemAudioControlOn() { // Set system audio control on first mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(true); // Check if standby correctly turns off the feature mHdmiCecLocalDeviceAudioSystem.onStandby(false, STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } }
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +33 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.hdmi; import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV; import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED; Loading @@ -25,7 +26,9 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.os.PowerManager; import android.os.test.TestLooper; import android.support.test.filters.SmallTest; import android.os.MessageQueue; Loading Loading @@ -91,10 +94,29 @@ public class HdmiCecLocalDeviceTest { private int callbackResult; private HdmiCecMessageValidator mMessageValidator; private static byte[] param; private boolean mStandbyMessageReceived; private boolean isControlEnabled; private int mPowerStatus; @Before public void SetUp() { mHdmiControlService = new HdmiControlService(null); mHdmiControlService = new HdmiControlService(null) { @Override boolean isControlEnabled() { return isControlEnabled; } @Override boolean isPowerOnOrTransient() { return mPowerStatus == HdmiControlManager.POWER_STATUS_ON || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON; } @Override void standby() { mStandbyMessageReceived = true; } }; mHdmiControlService.setIoLooper(mTestLooper.getLooper()); mHdmiCecController = HdmiCecController.createWithNativeWrapper( mHdmiControlService, new FakeNativeWrapper()); Loading Loading @@ -155,4 +177,14 @@ public class HdmiCecLocalDeviceTest { mTestLooper.dispatchAll(); assertEquals(0, callbackResult); } @Test public void handleStandby_isPowerOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; isControlEnabled = true; assertFalse(mStandbyMessageReceived); mHdmiLocalDevice.handleStandby( HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_AUDIO_SYSTEM)); assertTrue(mStandbyMessageReceived); } }