Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +3 −1 Original line number Diff line number Diff line Loading @@ -219,7 +219,9 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { && reason != HdmiControlService.INITIATED_BY_BOOT_UP; List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty()) { List<HdmiCecMessage> bufferedActiveSourceFromService = mService.getCecMessageWithOpcode( Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty() && bufferedActiveSourceFromService.isEmpty()) { addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { @Override public void onComplete(int result) { Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +11 −0 Original line number Diff line number Diff line Loading @@ -1593,6 +1593,17 @@ public class HdmiControlService extends SystemService { this.mCecMessageBuffer = cecMessageBuffer; } List<HdmiCecMessage> getCecMessageWithOpcode(int opcode) { List<HdmiCecMessage> cecMessagesWithOpcode = new ArrayList<>(); List<HdmiCecMessage> cecMessages = mCecMessageBuffer.getBuffer(); for (HdmiCecMessage message: cecMessages) { if (message.getOpcode() == opcode) { cecMessagesWithOpcode.add(message); } } return cecMessagesWithOpcode; } /** * Returns {@link Looper} of main thread. Use this {@link Looper} instance * for tasks that are running on main service thread. Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -2295,6 +2295,38 @@ public class HdmiCecLocalDeviceTvTest { .hasSize(1); } @Test public void onOneTouchPlay_wakeUp_exist_device() { HdmiCecMessage requestActiveSource = HdmiCecMessageBuilder.buildRequestActiveSource(ADDR_TV); // Go to standby to trigger RequestActiveSourceAction for playback_1 mHdmiControlService.onStandby(STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mHdmiControlService.onWakeUp(WAKE_UP_SCREEN_ON); mTestLooper.dispatchAll(); // Skip the LauncherX API timeout. mTestLooper.moveTimeForward(TIMEOUT_WAIT_FOR_TV_ASSERT_ACTIVE_SOURCE_MS); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(requestActiveSource); mNativeWrapper.clearResultMessages(); // turn off TV and wake up with one touch play mHdmiControlService.onStandby(STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); // FakePowerManagerWrapper#wakeUp() doesn't broadcast Intent.ACTION_SCREEN_ON // manually trigger onWakeUp to mock OTP mHdmiControlService.onWakeUp(WAKE_UP_SCREEN_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(requestActiveSource); } @Test public void handleReportAudioStatus_SamOnAvrStandby_startSystemAudioActionFromTv() { Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +3 −1 Original line number Diff line number Diff line Loading @@ -219,7 +219,9 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { && reason != HdmiControlService.INITIATED_BY_BOOT_UP; List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty()) { List<HdmiCecMessage> bufferedActiveSourceFromService = mService.getCecMessageWithOpcode( Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty() && bufferedActiveSourceFromService.isEmpty()) { addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { @Override public void onComplete(int result) { Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +11 −0 Original line number Diff line number Diff line Loading @@ -1593,6 +1593,17 @@ public class HdmiControlService extends SystemService { this.mCecMessageBuffer = cecMessageBuffer; } List<HdmiCecMessage> getCecMessageWithOpcode(int opcode) { List<HdmiCecMessage> cecMessagesWithOpcode = new ArrayList<>(); List<HdmiCecMessage> cecMessages = mCecMessageBuffer.getBuffer(); for (HdmiCecMessage message: cecMessages) { if (message.getOpcode() == opcode) { cecMessagesWithOpcode.add(message); } } return cecMessagesWithOpcode; } /** * Returns {@link Looper} of main thread. Use this {@link Looper} instance * for tasks that are running on main service thread. Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -2295,6 +2295,38 @@ public class HdmiCecLocalDeviceTvTest { .hasSize(1); } @Test public void onOneTouchPlay_wakeUp_exist_device() { HdmiCecMessage requestActiveSource = HdmiCecMessageBuilder.buildRequestActiveSource(ADDR_TV); // Go to standby to trigger RequestActiveSourceAction for playback_1 mHdmiControlService.onStandby(STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mHdmiControlService.onWakeUp(WAKE_UP_SCREEN_ON); mTestLooper.dispatchAll(); // Skip the LauncherX API timeout. mTestLooper.moveTimeForward(TIMEOUT_WAIT_FOR_TV_ASSERT_ACTIVE_SOURCE_MS); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(requestActiveSource); mNativeWrapper.clearResultMessages(); // turn off TV and wake up with one touch play mHdmiControlService.onStandby(STANDBY_SCREEN_OFF); mTestLooper.dispatchAll(); // FakePowerManagerWrapper#wakeUp() doesn't broadcast Intent.ACTION_SCREEN_ON // manually trigger onWakeUp to mock OTP mHdmiControlService.onWakeUp(WAKE_UP_SCREEN_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(requestActiveSource); } @Test public void handleReportAudioStatus_SamOnAvrStandby_startSystemAudioActionFromTv() { Loading