Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +14 −14 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { mAddress, mService.getPhysicalAddress(), mDeviceType)); mService.sendCecCommand(HdmiCecMessageBuilder.buildDeviceVendorIdCommand( mAddress, mService.getVendorId())); // TODO(amyjojo): check PROPERTY_SYSTEM_AUDIO_CONTROL_ON_POWER_ON to decide the action addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); startQueuedActions(); } Loading Loading @@ -171,20 +173,6 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { return true; } if (systemAudioStatusOn) { // TODO(amyjojo): Bring up device when it's on standby mode // TODO(amyjojo): Switch to the corresponding input } // Mute device when feature is turned off and unmute device when feature is turned on boolean currentMuteStatus = mService.getAudioManager().isStreamMute(AudioManager.STREAM_MUSIC); if (currentMuteStatus == systemAudioStatusOn) { mService.getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, systemAudioStatusOn ? AudioManager.ADJUST_UNMUTE : AudioManager.ADJUST_MUTE, 0); } mSystemAudioSource = systemAudioStatusOn ? message.getSource() : null; mService.sendCecCommand(HdmiCecMessageBuilder .buildSetSystemAudioMode(mAddress, Constants.ADDR_BROADCAST, systemAudioStatusOn)); return true; Loading Loading @@ -231,6 +219,18 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { } HdmiLogger.debug("System Audio Mode change[old:%b new:%b]", mSystemAudioActivated, newSystemAudioMode); // Wake up device if System Audio Control is turned on but device is still on standby if (newSystemAudioMode && mService.isPowerStandbyOrTransient()) { mService.wakeUp(); // TODO(amyjojo): Switch to the corresponding input } // Mute device when feature is turned off and unmute device when feature is turned on boolean currentMuteStatus = mService.getAudioManager().isStreamMute(AudioManager.STREAM_MUSIC); if (currentMuteStatus == newSystemAudioMode) { mService.getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, newSystemAudioMode ? AudioManager.ADJUST_UNMUTE : AudioManager.ADJUST_MUTE, 0); } updateAudioManagerForSystemAudio(newSystemAudioMode); synchronized (mLock) { if (mSystemAudioActivated != newSystemAudioMode) { Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +29 −37 Original line number Diff line number Diff line Loading @@ -51,9 +51,11 @@ public class HdmiCecLocalDeviceAudioSystemTest { private int mMusicVolume; private int mMusicMaxVolume; private boolean mMusicMute; private boolean isAwake; @Before public void SetUp() { isAwake = false; mHdmiControlService = new HdmiControlService(null) { @Override AudioManager getAudioManager() { Loading Loading @@ -102,6 +104,12 @@ public class HdmiCecLocalDeviceAudioSystemTest { } }; } @Override void wakeUp() { isAwake = true; } }; mMyLooper = mTestLooper.getLooper(); mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService); Loading @@ -117,6 +125,7 @@ public class HdmiCecLocalDeviceAudioSystemTest { mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem); mHdmiControlService.initPortInfo(); // System Audio Control will be turned on after allocating address during waking up mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); Loading @@ -139,9 +148,10 @@ public class HdmiCecLocalDeviceAudioSystemTest { } @Test public void handleGiveSystemAudioModeStatus_off() { public void handleGiveSystemAudioModeStatus_originalOn() { assertTrue(isAwake); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); Loading Loading @@ -177,69 +187,51 @@ public class HdmiCecLocalDeviceAudioSystemTest { } @Test public void handleSystemAudioModeRequest_turnOffByTv_originalOff() { HdmiCecMessage messageRequest = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, false); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequest)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); } @Test public void handleSetSystemAudioMode_setOn() { public void handleSetSystemAudioMode_setOff_orignalOn() { assertFalse(mMusicMute); HdmiCecMessage messageSet = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, true); .buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, false); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); // Check if originally off // Check if originally on HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); // Check if correctly turned on // Check if correctly turned off expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSetSystemAudioMode(messageSet)); mTestLooper.dispatchAll(); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } @Test public void handleSystemAudioModeRequest_turnOnByTv_thenTurnOffByTv() { mMusicMute = true; HdmiCecMessage messageRequestOn = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, true); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); // Turn the feature on HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOn)); mTestLooper.dispatchAll(); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); public void handleSystemAudioModeRequest_turnOffByTv() { assertFalse(mMusicMute); // Check if feature correctly turned off HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); HdmiCecMessage messageRequestOff = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, false); expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOff)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +14 −14 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { mAddress, mService.getPhysicalAddress(), mDeviceType)); mService.sendCecCommand(HdmiCecMessageBuilder.buildDeviceVendorIdCommand( mAddress, mService.getVendorId())); // TODO(amyjojo): check PROPERTY_SYSTEM_AUDIO_CONTROL_ON_POWER_ON to decide the action addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); startQueuedActions(); } Loading Loading @@ -171,20 +173,6 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { return true; } if (systemAudioStatusOn) { // TODO(amyjojo): Bring up device when it's on standby mode // TODO(amyjojo): Switch to the corresponding input } // Mute device when feature is turned off and unmute device when feature is turned on boolean currentMuteStatus = mService.getAudioManager().isStreamMute(AudioManager.STREAM_MUSIC); if (currentMuteStatus == systemAudioStatusOn) { mService.getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, systemAudioStatusOn ? AudioManager.ADJUST_UNMUTE : AudioManager.ADJUST_MUTE, 0); } mSystemAudioSource = systemAudioStatusOn ? message.getSource() : null; mService.sendCecCommand(HdmiCecMessageBuilder .buildSetSystemAudioMode(mAddress, Constants.ADDR_BROADCAST, systemAudioStatusOn)); return true; Loading Loading @@ -231,6 +219,18 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice { } HdmiLogger.debug("System Audio Mode change[old:%b new:%b]", mSystemAudioActivated, newSystemAudioMode); // Wake up device if System Audio Control is turned on but device is still on standby if (newSystemAudioMode && mService.isPowerStandbyOrTransient()) { mService.wakeUp(); // TODO(amyjojo): Switch to the corresponding input } // Mute device when feature is turned off and unmute device when feature is turned on boolean currentMuteStatus = mService.getAudioManager().isStreamMute(AudioManager.STREAM_MUSIC); if (currentMuteStatus == newSystemAudioMode) { mService.getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, newSystemAudioMode ? AudioManager.ADJUST_UNMUTE : AudioManager.ADJUST_MUTE, 0); } updateAudioManagerForSystemAudio(newSystemAudioMode); synchronized (mLock) { if (mSystemAudioActivated != newSystemAudioMode) { Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +29 −37 Original line number Diff line number Diff line Loading @@ -51,9 +51,11 @@ public class HdmiCecLocalDeviceAudioSystemTest { private int mMusicVolume; private int mMusicMaxVolume; private boolean mMusicMute; private boolean isAwake; @Before public void SetUp() { isAwake = false; mHdmiControlService = new HdmiControlService(null) { @Override AudioManager getAudioManager() { Loading Loading @@ -102,6 +104,12 @@ public class HdmiCecLocalDeviceAudioSystemTest { } }; } @Override void wakeUp() { isAwake = true; } }; mMyLooper = mTestLooper.getLooper(); mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService); Loading @@ -117,6 +125,7 @@ public class HdmiCecLocalDeviceAudioSystemTest { mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem); mHdmiControlService.initPortInfo(); // System Audio Control will be turned on after allocating address during waking up mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); Loading @@ -139,9 +148,10 @@ public class HdmiCecLocalDeviceAudioSystemTest { } @Test public void handleGiveSystemAudioModeStatus_off() { public void handleGiveSystemAudioModeStatus_originalOn() { assertTrue(isAwake); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); Loading Loading @@ -177,69 +187,51 @@ public class HdmiCecLocalDeviceAudioSystemTest { } @Test public void handleSystemAudioModeRequest_turnOffByTv_originalOff() { HdmiCecMessage messageRequest = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, false); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequest)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); } @Test public void handleSetSystemAudioMode_setOn() { public void handleSetSystemAudioMode_setOff_orignalOn() { assertFalse(mMusicMute); HdmiCecMessage messageSet = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, true); .buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, false); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); // Check if originally off // Check if originally on HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); // Check if correctly turned on // Check if correctly turned off expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSetSystemAudioMode(messageSet)); mTestLooper.dispatchAll(); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); assertTrue(mMusicMute); } @Test public void handleSystemAudioModeRequest_turnOnByTv_thenTurnOffByTv() { mMusicMute = true; HdmiCecMessage messageRequestOn = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, true); HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); // Turn the feature on HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOn)); mTestLooper.dispatchAll(); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); public void handleSystemAudioModeRequest_turnOffByTv() { assertFalse(mMusicMute); // Check if feature correctly turned off HdmiCecMessage messageGive = HdmiCecMessageBuilder .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); HdmiCecMessage messageRequestOff = HdmiCecMessageBuilder .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, false); expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); HdmiCecMessage expectMessage = HdmiCecMessageBuilder .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOff)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); expectMessage = HdmiCecMessageBuilder .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); assertTrue(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)); mTestLooper.dispatchAll(); assertEquals(expectMessage, mNativeWrapper.getResultMessage()); Loading