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.google.common.truth.Truth.assertThat; 19 20 import static junit.framework.Assert.assertTrue; 21 22 import static org.mockito.Mockito.doReturn; 23 import static org.mockito.Mockito.never; 24 import static org.mockito.Mockito.verify; 25 import static org.mockito.Mockito.when; 26 import static org.testng.Assert.assertThrows; 27 28 import android.content.Context; 29 import android.content.res.Resources; 30 import android.hardware.hdmi.HdmiControlManager; 31 import android.os.test.TestLooper; 32 import android.platform.test.annotations.Presubmit; 33 34 import androidx.test.InstrumentationRegistry; 35 import androidx.test.filters.SmallTest; 36 37 import com.android.internal.R; 38 39 import org.junit.Before; 40 import org.junit.Test; 41 import org.junit.runner.RunWith; 42 import org.junit.runners.JUnit4; 43 import org.mockito.Mock; 44 import org.mockito.MockitoAnnotations; 45 46 @SmallTest 47 @Presubmit 48 @RunWith(JUnit4.class) 49 public final class HdmiCecConfigTest { 50 private static final String TAG = "HdmiCecConfigTest"; 51 52 private static final int TIMEOUT_CONTENT_CHANGE_SEC = 3; 53 54 private final TestLooper mTestLooper = new TestLooper(); 55 56 private Context mContext; 57 58 @Mock private HdmiCecConfig.StorageAdapter mStorageAdapter; 59 @Mock private HdmiCecConfig.SettingChangeListener mSettingChangeListener; 60 setBooleanResource(int resId, boolean value)61 private void setBooleanResource(int resId, boolean value) { 62 Resources resources = mContext.getResources(); 63 doReturn(value).when(resources).getBoolean(resId); 64 } 65 66 @Before setUp()67 public void setUp() throws Exception { 68 MockitoAnnotations.initMocks(this); 69 mContext = FakeHdmiCecConfig.buildContext(InstrumentationRegistry.getTargetContext()); 70 } 71 72 @Test getAllCecSettings_BasicSanity()73 public void getAllCecSettings_BasicSanity() { 74 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 75 assertThat(hdmiCecConfig.getAllSettings()) 76 .containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, 77 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, 78 HdmiControlManager.CEC_SETTING_NAME_ROUTING_CONTROL, 79 HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, 80 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, 81 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 82 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL, 83 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 84 HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, 85 HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, 86 HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, 87 HdmiControlManager.CEC_SETTING_NAME_SET_MENU_LANGUAGE, 88 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV, 89 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU, 90 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU, 91 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU, 92 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU, 93 HdmiControlManager 94 .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU, 95 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM, 96 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD, 97 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1, 98 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3, 99 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2, 100 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC, 101 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS, 102 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC, 103 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO, 104 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP, 105 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD, 106 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD, 107 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST, 108 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO, 109 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX, 110 HdmiControlManager.SETTING_NAME_EARC_ENABLED); 111 } 112 113 @Test getUserCecSettings_BasicSanity()114 public void getUserCecSettings_BasicSanity() { 115 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 116 assertThat(hdmiCecConfig.getUserSettings()) 117 .containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, 118 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, 119 HdmiControlManager.CEC_SETTING_NAME_ROUTING_CONTROL, 120 HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, 121 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, 122 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 123 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL, 124 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 125 HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, 126 HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, 127 HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, 128 HdmiControlManager.CEC_SETTING_NAME_SET_MENU_LANGUAGE, 129 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV, 130 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU, 131 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU, 132 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU, 133 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU, 134 HdmiControlManager 135 .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU, 136 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM, 137 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD, 138 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1, 139 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3, 140 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2, 141 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC, 142 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS, 143 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC, 144 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO, 145 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP, 146 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD, 147 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD, 148 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST, 149 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO, 150 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX, 151 HdmiControlManager.SETTING_NAME_EARC_ENABLED); 152 } 153 154 @Test getUserCecSettings_WithOverride()155 public void getUserCecSettings_WithOverride() { 156 setBooleanResource(R.bool.config_cecHdmiCecEnabled_userConfigurable, false); 157 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 158 assertThat(hdmiCecConfig.getUserSettings()) 159 .containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, 160 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, 161 HdmiControlManager.CEC_SETTING_NAME_ROUTING_CONTROL, 162 HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, 163 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 164 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL, 165 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 166 HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, 167 HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, 168 HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, 169 HdmiControlManager.CEC_SETTING_NAME_SET_MENU_LANGUAGE, 170 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV, 171 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU, 172 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU, 173 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU, 174 HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU, 175 HdmiControlManager 176 .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU, 177 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM, 178 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD, 179 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1, 180 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3, 181 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2, 182 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC, 183 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS, 184 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC, 185 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO, 186 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP, 187 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD, 188 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD, 189 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST, 190 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO, 191 HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX, 192 HdmiControlManager.SETTING_NAME_EARC_ENABLED); 193 } 194 195 @Test isStringValueType_InvalidSetting()196 public void isStringValueType_InvalidSetting() { 197 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 198 assertThrows(IllegalArgumentException.class, 199 () -> hdmiCecConfig.isStringValueType("foo")); 200 } 201 202 @Test isStringValueType_BasicSanity()203 public void isStringValueType_BasicSanity() { 204 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 205 assertTrue(hdmiCecConfig.isStringValueType( 206 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)); 207 } 208 209 @Test isIntValueType_InvalidSetting()210 public void isIntValueType_InvalidSetting() { 211 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 212 assertThrows(IllegalArgumentException.class, 213 () -> hdmiCecConfig.isIntValueType("foo")); 214 } 215 216 @Test isIntValueType_BasicSanity()217 public void isIntValueType_BasicSanity() { 218 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 219 assertTrue(hdmiCecConfig.isIntValueType( 220 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); 221 } 222 223 @Test getAllowedStringValues_InvalidSetting()224 public void getAllowedStringValues_InvalidSetting() { 225 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 226 assertThrows(IllegalArgumentException.class, 227 () -> hdmiCecConfig.getAllowedStringValues("foo")); 228 } 229 230 @Test getAllowedStringValues_InvalidValueType()231 public void getAllowedStringValues_InvalidValueType() { 232 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 233 assertThrows(IllegalArgumentException.class, 234 () -> hdmiCecConfig.getAllowedStringValues( 235 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); 236 } 237 238 @Test getAllowedStringValues_BasicSanity()239 public void getAllowedStringValues_BasicSanity() { 240 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 241 assertThat(hdmiCecConfig.getAllowedStringValues( 242 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)) 243 .containsExactly(HdmiControlManager.POWER_CONTROL_MODE_TV, 244 HdmiControlManager.POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM, 245 HdmiControlManager.POWER_CONTROL_MODE_BROADCAST, 246 HdmiControlManager.POWER_CONTROL_MODE_NONE); 247 } 248 249 @Test getAllowedStringValues_WithOverride()250 public void getAllowedStringValues_WithOverride() { 251 setBooleanResource(R.bool.config_cecPowerControlModeNone_allowed, false); 252 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 253 assertThat(hdmiCecConfig.getAllowedStringValues( 254 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)) 255 .containsExactly(HdmiControlManager.POWER_CONTROL_MODE_TV, 256 HdmiControlManager.POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM, 257 HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); 258 } 259 260 @Test getAllowedIntValues_InvalidSetting()261 public void getAllowedIntValues_InvalidSetting() { 262 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 263 assertThrows(IllegalArgumentException.class, 264 () -> hdmiCecConfig.getAllowedIntValues("foo")); 265 } 266 267 @Test getAllowedIntValues_InvalidValueType()268 public void getAllowedIntValues_InvalidValueType() { 269 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 270 assertThrows(IllegalArgumentException.class, 271 () -> hdmiCecConfig.getAllowedIntValues( 272 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)); 273 } 274 275 @Test getAllowedIntValues_BasicSanity()276 public void getAllowedIntValues_BasicSanity() { 277 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 278 assertThat(hdmiCecConfig.getAllowedIntValues( 279 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) 280 .containsExactly(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED, 281 HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); 282 } 283 284 @Test getAllowedIntValues_WithOverride()285 public void getAllowedIntValues_WithOverride() { 286 setBooleanResource(R.bool.config_cecHdmiCecControlDisabled_allowed, false); 287 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 288 assertThat(hdmiCecConfig.getAllowedIntValues( 289 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) 290 .containsExactly(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); 291 } 292 293 @Test getDefaultStringValue_InvalidSetting()294 public void getDefaultStringValue_InvalidSetting() { 295 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 296 assertThrows(IllegalArgumentException.class, 297 () -> hdmiCecConfig.getDefaultStringValue("foo")); 298 } 299 300 @Test getDefaultStringValue_InvalidValueType()301 public void getDefaultStringValue_InvalidValueType() { 302 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 303 assertThrows(IllegalArgumentException.class, 304 () -> hdmiCecConfig.getDefaultStringValue( 305 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); 306 } 307 308 @Test getDefaultStringValue_BasicSanity()309 public void getDefaultStringValue_BasicSanity() { 310 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 311 assertThat(hdmiCecConfig.getDefaultStringValue( 312 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)) 313 .isEqualTo(HdmiControlManager.POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM); 314 } 315 316 @Test getDefaultStringValue_WithOverride()317 public void getDefaultStringValue_WithOverride() { 318 setBooleanResource(R.bool.config_cecPowerControlModeTvAndAudioSystem_default, false); 319 setBooleanResource(R.bool.config_cecPowerControlModeBroadcast_default, true); 320 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 321 assertThat(hdmiCecConfig.getDefaultStringValue( 322 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)) 323 .isEqualTo(HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); 324 } 325 326 @Test getDefaultStringValue_MultipleDefaults()327 public void getDefaultStringValue_MultipleDefaults() { 328 setBooleanResource(R.bool.config_cecPowerControlModeBroadcast_default, true); 329 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 330 assertThat(hdmiCecConfig.getDefaultStringValue( 331 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)) 332 .isEqualTo(HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); 333 } 334 335 @Test getDefaultStringValue_NoDefault()336 public void getDefaultStringValue_NoDefault() { 337 setBooleanResource(R.bool.config_cecPowerControlModeTvAndAudioSystem_default, false); 338 assertThrows(RuntimeException.class, 339 () -> new HdmiCecConfig(mContext, mStorageAdapter)); 340 } 341 342 @Test getDefaultIntValue_InvalidSetting()343 public void getDefaultIntValue_InvalidSetting() { 344 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 345 assertThrows(IllegalArgumentException.class, 346 () -> hdmiCecConfig.getDefaultIntValue("foo")); 347 } 348 349 @Test getDefaultIntValue_InvalidValueType()350 public void getDefaultIntValue_InvalidValueType() { 351 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 352 assertThrows(IllegalArgumentException.class, 353 () -> hdmiCecConfig.getDefaultIntValue( 354 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)); 355 } 356 357 @Test getDefaultIntValue_BasicSanity()358 public void getDefaultIntValue_BasicSanity() { 359 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 360 assertThat(hdmiCecConfig.getDefaultIntValue( 361 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) 362 .isEqualTo(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); 363 } 364 365 @Test getDefaultIntValue_WithOverride()366 public void getDefaultIntValue_WithOverride() { 367 setBooleanResource(R.bool.config_cecHdmiCecControlEnabled_default, false); 368 setBooleanResource(R.bool.config_cecHdmiCecControlDisabled_default, true); 369 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 370 assertThat(hdmiCecConfig.getDefaultIntValue( 371 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) 372 .isEqualTo(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); 373 } 374 375 @Test getStringValue_InvalidSetting()376 public void getStringValue_InvalidSetting() { 377 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 378 assertThrows(IllegalArgumentException.class, 379 () -> hdmiCecConfig.getStringValue("foo")); 380 } 381 382 @Test getStringValue_InvalidType()383 public void getStringValue_InvalidType() { 384 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 385 assertThrows(IllegalArgumentException.class, 386 () -> hdmiCecConfig.getStringValue( 387 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); 388 } 389 390 @Test getStringValue_SharedPref_BasicSanity()391 public void getStringValue_SharedPref_BasicSanity() { 392 when(mStorageAdapter.retrieveSharedPref( 393 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 394 HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE)) 395 .thenReturn( 396 HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); 397 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 398 assertThat(hdmiCecConfig.getStringValue( 399 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST)) 400 .isEqualTo(HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); 401 } 402 403 @Test getIntValue_InvalidSetting()404 public void getIntValue_InvalidSetting() { 405 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 406 assertThrows(IllegalArgumentException.class, 407 () -> hdmiCecConfig.getIntValue("foo")); 408 } 409 410 @Test getIntValue_InvalidType()411 public void getIntValue_InvalidType() { 412 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 413 assertThrows(IllegalArgumentException.class, 414 () -> hdmiCecConfig.getIntValue( 415 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)); 416 } 417 418 @Test getIntValue_SharedPref_BasicSanity()419 public void getIntValue_SharedPref_BasicSanity() { 420 when(mStorageAdapter.retrieveSharedPref( 421 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 422 Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED))) 423 .thenReturn(Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); 424 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 425 assertThat(hdmiCecConfig.getIntValue( 426 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING)) 427 .isEqualTo(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); 428 } 429 430 @Test setStringValue_InvalidSetting()431 public void setStringValue_InvalidSetting() { 432 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 433 assertThrows(IllegalArgumentException.class, 434 () -> hdmiCecConfig.setStringValue("foo", "bar")); 435 } 436 437 @Test setStringValue_NotConfigurable()438 public void setStringValue_NotConfigurable() { 439 setBooleanResource(R.bool.config_cecPowerControlMode_userConfigurable, false); 440 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 441 assertThrows(IllegalArgumentException.class, 442 () -> hdmiCecConfig.setStringValue( 443 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, 444 HdmiControlManager.POWER_CONTROL_MODE_BROADCAST)); 445 } 446 447 @Test setStringValue_InvalidValue()448 public void setStringValue_InvalidValue() { 449 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 450 assertThrows(IllegalArgumentException.class, 451 () -> hdmiCecConfig.setStringValue( 452 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, 453 "bar")); 454 } 455 456 @Test setStringValue_SharedPref_BasicSanity()457 public void setStringValue_SharedPref_BasicSanity() { 458 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 459 hdmiCecConfig.setStringValue( 460 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 461 HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); 462 verify(mStorageAdapter).storeSharedPref( 463 HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, 464 HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); 465 } 466 467 @Test setIntValue_InvalidSetting()468 public void setIntValue_InvalidSetting() { 469 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 470 assertThrows(IllegalArgumentException.class, 471 () -> hdmiCecConfig.setIntValue("foo", 0)); 472 } 473 474 @Test setIntValue_NotConfigurable()475 public void setIntValue_NotConfigurable() { 476 setBooleanResource(R.bool.config_cecHdmiCecEnabled_userConfigurable, false); 477 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 478 assertThrows(IllegalArgumentException.class, 479 () -> hdmiCecConfig.setIntValue( 480 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, 481 HdmiControlManager.HDMI_CEC_CONTROL_DISABLED)); 482 } 483 484 @Test setIntValue_InvalidValue()485 public void setIntValue_InvalidValue() { 486 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 487 assertThrows(IllegalArgumentException.class, 488 () -> hdmiCecConfig.setIntValue( 489 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, 490 123)); 491 } 492 493 @Test setIntValue_SharedPref_BasicSanity()494 public void setIntValue_SharedPref_BasicSanity() { 495 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 496 hdmiCecConfig.setIntValue( 497 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 498 HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); 499 verify(mStorageAdapter).storeSharedPref( 500 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 501 Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); 502 } 503 504 @Test registerChangeListener_SharedPref_BasicSanity()505 public void registerChangeListener_SharedPref_BasicSanity() { 506 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 507 hdmiCecConfig.registerChangeListener( 508 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 509 mSettingChangeListener); 510 hdmiCecConfig.setIntValue( 511 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 512 HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); 513 verify(mSettingChangeListener).onChange( 514 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING); 515 } 516 517 @Test removeChangeListener_SharedPref_BasicSanity()518 public void removeChangeListener_SharedPref_BasicSanity() { 519 HdmiCecConfig hdmiCecConfig = new HdmiCecConfig(mContext, mStorageAdapter); 520 hdmiCecConfig.registerChangeListener( 521 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 522 mSettingChangeListener); 523 hdmiCecConfig.removeChangeListener( 524 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 525 mSettingChangeListener); 526 hdmiCecConfig.setIntValue( 527 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, 528 HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); 529 verify(mSettingChangeListener, never()).onChange( 530 HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING); 531 } 532 } 533