Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2018 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package com.android.server.hdmi; |
| 17 | |
| 18 | import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 19 | import static com.android.server.hdmi.Constants.ADDR_BROADCAST; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 20 | import static com.android.server.hdmi.Constants.ADDR_TV; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 21 | import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; |
Amy | b887fa0 | 2018-06-21 11:22:13 -0700 | [diff] [blame] | 22 | import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF; |
Amy | 6506bd6 | 2018-07-02 17:29:36 -0700 | [diff] [blame] | 23 | import static com.google.common.truth.Truth.assertThat; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 24 | |
| 25 | import android.media.AudioManager; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 26 | import android.os.Looper; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 27 | import android.os.test.TestLooper; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 28 | import android.support.test.filters.SmallTest; |
Nick Chalko | 7206f3b | 2018-06-19 10:17:03 -0700 | [diff] [blame] | 29 | |
Amy | e30f993 | 2018-07-13 13:54:52 -0700 | [diff] [blame] | 30 | import com.android.server.hdmi.HdmiCecLocalDevice.ActiveSource; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 31 | import java.util.ArrayList; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 32 | import org.junit.Before; |
| 33 | import org.junit.Test; |
| 34 | import org.junit.runner.RunWith; |
| 35 | import org.junit.runners.JUnit4; |
| 36 | |
| 37 | @SmallTest |
| 38 | @RunWith(JUnit4.class) |
| 39 | /** |
| 40 | * Tests for {@link HdmiCecLocalDeviceAudioSystem} class. |
| 41 | */ |
| 42 | public class HdmiCecLocalDeviceAudioSystemTest { |
| 43 | |
Amy | b887fa0 | 2018-06-21 11:22:13 -0700 | [diff] [blame] | 44 | private static final String TAG = "HdmiCecLocalDeviceAudioSystemTest"; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 45 | private HdmiControlService mHdmiControlService; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 46 | private HdmiCecController mHdmiCecController; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 47 | private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; |
Nick Chalko | 7206f3b | 2018-06-19 10:17:03 -0700 | [diff] [blame] | 48 | private FakeNativeWrapper mNativeWrapper; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 49 | private Looper mMyLooper; |
| 50 | private TestLooper mTestLooper = new TestLooper(); |
| 51 | private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>(); |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 52 | private int mMusicVolume; |
| 53 | private int mMusicMaxVolume; |
| 54 | private boolean mMusicMute; |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 55 | private boolean isAwake; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 56 | |
| 57 | @Before |
| 58 | public void SetUp() { |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 59 | isAwake = false; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 60 | mHdmiControlService = new HdmiControlService(null) { |
| 61 | @Override |
| 62 | AudioManager getAudioManager() { |
| 63 | return new AudioManager() { |
| 64 | @Override |
| 65 | public int getStreamVolume(int streamType) { |
| 66 | switch (streamType) { |
| 67 | case STREAM_MUSIC: |
| 68 | return mMusicVolume; |
| 69 | default: |
| 70 | return 0; |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | @Override |
| 75 | public boolean isStreamMute(int streamType) { |
| 76 | switch (streamType) { |
| 77 | case STREAM_MUSIC: |
| 78 | return mMusicMute; |
| 79 | default: |
| 80 | return false; |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | @Override |
| 85 | public int getStreamMaxVolume(int streamType) { |
| 86 | switch (streamType) { |
| 87 | case STREAM_MUSIC: |
| 88 | return mMusicMaxVolume; |
| 89 | default: |
| 90 | return 100; |
| 91 | } |
| 92 | } |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 93 | |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 94 | @Override |
| 95 | public void adjustStreamVolume(int streamType, int direction, int flags) { |
| 96 | switch (streamType) { |
| 97 | case STREAM_MUSIC: |
| 98 | if (direction == AudioManager.ADJUST_UNMUTE) { |
| 99 | mMusicMute = false; |
| 100 | } else if (direction == AudioManager.ADJUST_MUTE) { |
| 101 | mMusicMute = true; |
| 102 | } |
| 103 | default: |
| 104 | } |
| 105 | } |
| 106 | }; |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 107 | } |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 108 | |
| 109 | @Override |
| 110 | void wakeUp() { |
| 111 | isAwake = true; |
| 112 | } |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 113 | }; |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 114 | mMyLooper = mTestLooper.getLooper(); |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 115 | mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 116 | mHdmiCecLocalDeviceAudioSystem.init(); |
| 117 | mHdmiControlService.setIoLooper(mMyLooper); |
| 118 | |
Nick Chalko | 7206f3b | 2018-06-19 10:17:03 -0700 | [diff] [blame] | 119 | mNativeWrapper = new FakeNativeWrapper(); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 120 | mHdmiCecController = HdmiCecController.createWithNativeWrapper( |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 121 | mHdmiControlService, mNativeWrapper); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 122 | mHdmiControlService.setCecController(mHdmiCecController); |
| 123 | mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService)); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 124 | mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 125 | |
| 126 | mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem); |
| 127 | mHdmiControlService.initPortInfo(); |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 128 | // No TV device interacts with AVR so system audio control won't be turned on here |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 129 | mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); |
| 130 | |
| 131 | mTestLooper.dispatchAll(); |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 132 | } |
| 133 | |
| 134 | @Test |
| 135 | public void handleGiveAudioStatus_volume_10_mute_true() { |
| 136 | mMusicVolume = 10; |
| 137 | mMusicMute = true; |
| 138 | mMusicMaxVolume = 20; |
| 139 | int scaledVolume = VolumeControlAction.scaleToCecVolume(10, mMusicMaxVolume); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 140 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildReportAudioStatus( |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 141 | ADDR_AUDIO_SYSTEM, ADDR_TV, scaledVolume, true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 142 | HdmiCecMessage messageGive = HdmiCecMessageBuilder.buildGiveAudioStatus( |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 143 | ADDR_TV, ADDR_AUDIO_SYSTEM); |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 144 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 145 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveAudioStatus(messageGive)) |
| 146 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 147 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 148 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 149 | } |
Amy | 87eda82 | 2018-06-06 17:56:39 -0700 | [diff] [blame] | 150 | |
| 151 | @Test |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 152 | public void handleGiveSystemAudioModeStatus_originalOff() { |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 153 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 154 | .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 155 | HdmiCecMessage messageGive = HdmiCecMessageBuilder |
Amy | 87eda82 | 2018-06-06 17:56:39 -0700 | [diff] [blame] | 156 | .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); |
Amy | 87eda82 | 2018-06-06 17:56:39 -0700 | [diff] [blame] | 157 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 158 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)) |
| 159 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 160 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 161 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 87eda82 | 2018-06-06 17:56:39 -0700 | [diff] [blame] | 162 | } |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 163 | |
| 164 | @Test |
| 165 | public void handleRequestArcInitiate() { |
| 166 | // TODO(b/80296911): Add tests when finishing handler impl. |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 167 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 168 | .buildInitiateArc(ADDR_AUDIO_SYSTEM, ADDR_TV); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 169 | HdmiCecMessage message = HdmiCecMessageBuilder |
| 170 | .buildRequestArcInitiation(ADDR_TV, ADDR_AUDIO_SYSTEM); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 171 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 172 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcInitiate(message)) |
| 173 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 174 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 175 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 176 | } |
| 177 | |
| 178 | @Test |
| 179 | public void handleRequestArcTermination() { |
| 180 | // TODO(b/80297105): Add tests when finishing handler impl. |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 181 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 182 | .buildTerminateArc(ADDR_AUDIO_SYSTEM, ADDR_TV); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 183 | HdmiCecMessage messageRequestOff = HdmiCecMessageBuilder |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 184 | .buildRequestArcTermination(ADDR_TV, ADDR_AUDIO_SYSTEM); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 185 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 186 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleRequestArcTermination(messageRequestOff)) |
| 187 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 188 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 189 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 190 | } |
| 191 | |
| 192 | @Test |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 193 | public void handleSetSystemAudioMode_setOn_orignalOff() { |
| 194 | mMusicMute = true; |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 195 | HdmiCecMessage messageSet = HdmiCecMessageBuilder |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 196 | .buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 197 | HdmiCecMessage messageGive = HdmiCecMessageBuilder |
| 198 | .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); |
| 199 | |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 200 | // Check if originally off |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 201 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 202 | .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 203 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 204 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)) |
| 205 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 206 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 207 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 208 | |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 209 | // Check if correctly turned on |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 210 | expectedMessage = HdmiCecMessageBuilder |
Amy | fc56efb | 2018-07-09 16:37:07 -0700 | [diff] [blame] | 211 | .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 212 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 213 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleSetSystemAudioMode(messageSet)) |
| 214 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 215 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 216 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)) |
| 217 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 218 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 219 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
| 220 | assertThat(mMusicMute).isEqualTo(false); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 221 | } |
| 222 | |
| 223 | @Test |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 224 | public void handleSystemAudioModeRequest_turnOffByTv() { |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 225 | assertThat(mMusicMute).isEqualTo(false); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 226 | |
| 227 | // Check if feature correctly turned off |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 228 | HdmiCecMessage messageGive = HdmiCecMessageBuilder |
| 229 | .buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 230 | HdmiCecMessage messageRequestOff = HdmiCecMessageBuilder |
| 231 | .buildSystemAudioModeRequest(ADDR_TV, ADDR_AUDIO_SYSTEM, 2, false); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 232 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 233 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 234 | .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 235 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleSystemAudioModeRequest(messageRequestOff)) |
| 236 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 237 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 238 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 239 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 240 | expectedMessage = HdmiCecMessageBuilder |
Amy | 0fd41e3 | 2018-06-21 13:40:27 -0700 | [diff] [blame] | 241 | .buildReportSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_TV, false); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 242 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleGiveSystemAudioModeStatus(messageGive)) |
| 243 | .isEqualTo(true); |
Amy | 9b91e8c | 2018-06-11 17:26:26 -0700 | [diff] [blame] | 244 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 245 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
| 246 | assertThat(mMusicMute).isEqualTo(true); |
Amy | 4e7ff1a | 2018-06-07 16:24:31 -0700 | [diff] [blame] | 247 | } |
Amy | b887fa0 | 2018-06-21 11:22:13 -0700 | [diff] [blame] | 248 | |
| 249 | @Test |
| 250 | public void onStandbyAudioSystem_currentSystemAudioControlOn() { |
| 251 | // Set system audio control on first |
| 252 | mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(true); |
| 253 | |
| 254 | // Check if standby correctly turns off the feature |
| 255 | mHdmiCecLocalDeviceAudioSystem.onStandby(false, STANDBY_SCREEN_OFF); |
| 256 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 257 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
Amy | b887fa0 | 2018-06-21 11:22:13 -0700 | [diff] [blame] | 258 | .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 259 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
| 260 | assertThat(mMusicMute).isEqualTo(true); |
Amy | b887fa0 | 2018-06-21 11:22:13 -0700 | [diff] [blame] | 261 | } |
Amy | 6506bd6 | 2018-07-02 17:29:36 -0700 | [diff] [blame] | 262 | |
| 263 | @Test |
| 264 | public void systemAudioControlOnPowerOn_alwaysOn() { |
| 265 | mHdmiCecLocalDeviceAudioSystem.removeAction( |
| 266 | SystemAudioInitiationActionFromAvr.class); |
| 267 | mHdmiCecLocalDeviceAudioSystem.systemAudioControlOnPowerOn( |
| 268 | Constants.ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON, true); |
| 269 | |
| 270 | assertThat(mHdmiCecLocalDeviceAudioSystem |
| 271 | .getActions(SystemAudioInitiationActionFromAvr.class)).isNotEmpty(); |
| 272 | } |
| 273 | |
| 274 | @Test |
| 275 | public void systemAudioControlOnPowerOn_neverOn() { |
| 276 | mHdmiCecLocalDeviceAudioSystem.removeAction( |
| 277 | SystemAudioInitiationActionFromAvr.class); |
| 278 | mHdmiCecLocalDeviceAudioSystem.systemAudioControlOnPowerOn( |
| 279 | Constants.NEVER_SYSTEM_AUDIO_CONTROL_ON_POWER_ON, false); |
| 280 | |
| 281 | assertThat(mHdmiCecLocalDeviceAudioSystem |
| 282 | .getActions(SystemAudioInitiationActionFromAvr.class)).isEmpty(); |
| 283 | } |
| 284 | |
| 285 | @Test |
| 286 | public void systemAudioControlOnPowerOn_useLastState_off() { |
| 287 | mHdmiCecLocalDeviceAudioSystem.removeAction( |
| 288 | SystemAudioInitiationActionFromAvr.class); |
| 289 | mHdmiCecLocalDeviceAudioSystem.systemAudioControlOnPowerOn( |
| 290 | Constants.USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON, false); |
| 291 | |
| 292 | assertThat(mHdmiCecLocalDeviceAudioSystem |
| 293 | .getActions(SystemAudioInitiationActionFromAvr.class)).isEmpty(); |
| 294 | } |
| 295 | |
| 296 | @Test |
| 297 | public void systemAudioControlOnPowerOn_useLastState_on() { |
| 298 | mHdmiCecLocalDeviceAudioSystem.removeAction( |
| 299 | SystemAudioInitiationActionFromAvr.class); |
| 300 | mHdmiCecLocalDeviceAudioSystem.systemAudioControlOnPowerOn( |
| 301 | Constants.USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON, true); |
| 302 | |
| 303 | assertThat(mHdmiCecLocalDeviceAudioSystem |
| 304 | .getActions(SystemAudioInitiationActionFromAvr.class)).isNotEmpty(); |
| 305 | } |
Amy | e30f993 | 2018-07-13 13:54:52 -0700 | [diff] [blame] | 306 | |
| 307 | @Test |
| 308 | public void handleActiveSource_updateActiveSource() { |
| 309 | HdmiCecMessage message = HdmiCecMessageBuilder |
| 310 | .buildActiveSource(ADDR_TV, 0x0000); |
| 311 | ActiveSource expectedActiveSource = new ActiveSource(ADDR_TV, 0x0000); |
| 312 | |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 313 | assertThat(mHdmiCecLocalDeviceAudioSystem.handleActiveSource(message)) |
| 314 | .isEqualTo(true); |
Amy | e30f993 | 2018-07-13 13:54:52 -0700 | [diff] [blame] | 315 | mTestLooper.dispatchAll(); |
Shubang | 2fd186e | 2018-07-18 16:53:12 -0700 | [diff] [blame] | 316 | assertThat(mHdmiCecLocalDeviceAudioSystem.getActiveSource().equals(expectedActiveSource)) |
| 317 | .isEqualTo(true); |
| 318 | } |
| 319 | |
| 320 | @Test |
| 321 | public void terminateSystemAudioMode_systemAudioModeOff() { |
| 322 | mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(false); |
| 323 | assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isEqualTo(false); |
| 324 | |
| 325 | mMusicMute = false; |
| 326 | HdmiCecMessage message = HdmiCecMessageBuilder |
| 327 | .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); |
| 328 | |
| 329 | mHdmiCecLocalDeviceAudioSystem.terminateSystemAudioMode(); |
| 330 | |
| 331 | assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isEqualTo(false); |
| 332 | assertThat(mMusicMute).isEqualTo(false); |
| 333 | assertThat(mNativeWrapper.getResultMessage()).isNotEqualTo(message); |
| 334 | } |
| 335 | |
| 336 | @Test |
| 337 | public void terminateSystemAudioMode_systemAudioModeOn() { |
| 338 | mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(true); |
| 339 | assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isEqualTo(true); |
| 340 | |
| 341 | mMusicMute = false; |
| 342 | HdmiCecMessage expectedMessage = HdmiCecMessageBuilder |
| 343 | .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false); |
| 344 | |
| 345 | mHdmiCecLocalDeviceAudioSystem.terminateSystemAudioMode(); |
| 346 | |
| 347 | assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isEqualTo(false); |
| 348 | assertThat(mMusicMute).isEqualTo(true); |
| 349 | mTestLooper.dispatchAll(); |
| 350 | assertThat(mNativeWrapper.getResultMessage()).isEqualTo(expectedMessage); |
Amy | e30f993 | 2018-07-13 13:54:52 -0700 | [diff] [blame] | 351 | } |
Amy | 2a6c3dc | 2018-06-05 17:31:55 -0700 | [diff] [blame] | 352 | } |