diff options
16 files changed, 271 insertions, 96 deletions
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java index bf325609b1a6..500b2998e009 100644 --- a/core/java/android/hardware/hdmi/HdmiControlManager.java +++ b/core/java/android/hardware/hdmi/HdmiControlManager.java @@ -344,6 +344,29 @@ public final class HdmiControlManager { @Retention(RetentionPolicy.SOURCE) public @interface HdmiCecControl {} + // -- Supported HDM-CEC versions. + /** + * Version constant for HDMI-CEC v1.4b. + * + * @hide + */ + public static final int HDMI_CEC_VERSION_1_4_b = 0x05; + /** + * Version constant for HDMI-CEC v2.0. + * + * @hide + */ + public static final int HDMI_CEC_VERSION_2_0 = 0x06; + /** + * @hide + */ + @IntDef({ + HDMI_CEC_VERSION_1_4_b, + HDMI_CEC_VERSION_2_0 + }) + @Retention(RetentionPolicy.SOURCE) + public @interface HdmiCecVersion {} + // -- Which devices the playback device can send a <Standby> message to upon going to sleep. /** * Send <Standby> to TV only. @@ -428,6 +451,12 @@ public final class HdmiControlManager { */ public static final String CEC_SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled"; /** + * Name of a setting controlling the version of HDMI-CEC used. + * + * @hide + */ + public static final String CEC_SETTING_NAME_HDMI_CEC_VERSION = "hdmi_cec_version"; + /** * Name of a setting deciding on the Standby message behaviour on sleep. * * @hide @@ -452,6 +481,7 @@ public final class HdmiControlManager { */ @StringDef({ CEC_SETTING_NAME_HDMI_CEC_ENABLED, + CEC_SETTING_NAME_HDMI_CEC_VERSION, CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, @@ -1415,6 +1445,51 @@ public final class HdmiControlManager { } /** + * Set the 'hdmi_cec_version' option. + * + * @param value the desired value + * @throws IllegalArgumentException when the new value is not allowed. + * @throws RuntimeException when the HdmiControlService is not available. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.HDMI_CEC) + public void setHdmiCecVersion(@NonNull @HdmiCecVersion int value) { + if (mService == null) { + Log.e(TAG, "HdmiControlService is not available"); + throw new RuntimeException("HdmiControlService is not available"); + } + try { + mService.setCecSettingIntValue(CEC_SETTING_NAME_HDMI_CEC_VERSION, value); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Get the value of 'hdmi_cec_enabled' option. + * + * @return the current value. + * @throws RuntimeException when the HdmiControlService is not available. + * + * @hide + */ + @NonNull + @HdmiCecVersion + @RequiresPermission(android.Manifest.permission.HDMI_CEC) + public int getHdmiCecVersion() { + if (mService == null) { + Log.e(TAG, "HdmiControlService is not available"); + throw new RuntimeException("HdmiControlService is not available"); + } + try { + return mService.getCecSettingIntValue(CEC_SETTING_NAME_HDMI_CEC_VERSION); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Set the 'send_standby_on_sleep' option. * * @param value the desired value diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java index ca78f35b9f1f..3794da398c01 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java @@ -229,6 +229,8 @@ public class HdmiCecConfig { switch (setting.getName()) { case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED: return STORAGE_GLOBAL_SETTINGS; + case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION: + return STORAGE_GLOBAL_SETTINGS; case HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP: return STORAGE_GLOBAL_SETTINGS; case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST: @@ -237,7 +239,7 @@ public class HdmiCecConfig { return STORAGE_SYSPROPS; default: throw new RuntimeException("Invalid CEC setting '" + setting.getName() - + "' storage."); + + "' storage."); } } @@ -245,6 +247,8 @@ public class HdmiCecConfig { switch (setting.getName()) { case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED: return Global.HDMI_CONTROL_ENABLED; + case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION: + return Global.HDMI_CEC_VERSION; case HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP: return Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP; case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST: diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 2fc9acb4a2ab..dcd6c0260cff 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -26,7 +26,6 @@ import static com.android.server.hdmi.Constants.OPTION_MHL_ENABLE; import static com.android.server.hdmi.Constants.OPTION_MHL_INPUT_SWITCHING; import static com.android.server.hdmi.Constants.OPTION_MHL_POWER_CHARGE; import static com.android.server.hdmi.Constants.OPTION_MHL_SERVICE_CONTROL; -import static com.android.server.hdmi.Constants.VERSION_1_4; import static com.android.server.power.ShutdownThread.SHUTDOWN_ACTION_PROPERTY; import android.annotation.IntDef; @@ -81,7 +80,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.SystemService; -import com.android.server.hdmi.Constants.CecVersion; import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly; import com.android.server.hdmi.HdmiCecController.AllocateAddressCallback; import com.android.server.hdmi.HdmiCecLocalDevice.ActiveSource; @@ -391,8 +389,8 @@ public class HdmiControlService extends SystemService { @Nullable private Looper mIoLooper; - @CecVersion - private int mCecVersion = Constants.VERSION_1_4; + @HdmiControlManager.HdmiCecVersion + private int mCecVersion; // Last input port before switching to the MHL port. Should switch back to this port // when the mobile device sends the request one touch play with off. @@ -820,7 +818,8 @@ public class HdmiControlService extends SystemService { private void initializeCec(int initiatedBy) { mAddressAllocated = false; - mCecVersion = readIntSetting(Global.HDMI_CEC_VERSION, VERSION_1_4); + mCecVersion = getHdmiCecConfig().getIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION); mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true); mCecController.setLanguage(mMenuLanguage); @@ -1028,7 +1027,7 @@ public class HdmiControlService extends SystemService { /** * Returns version of CEC. */ - @CecVersion + @HdmiControlManager.HdmiCecVersion int getCecVersion() { return mCecVersion; } @@ -2191,7 +2190,6 @@ public class HdmiControlService extends SystemService { if (!DumpUtils.checkDumpPermission(getContext(), TAG, writer)) return; final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); - pw.println("mCecVersion: " + mCecVersion); pw.println("mProhibitMode: " + mProhibitMode); pw.println("mPowerStatus: " + mPowerStatus); diff --git a/services/core/java/com/android/server/hdmi/HdmiUtils.java b/services/core/java/com/android/server/hdmi/HdmiUtils.java index 45aaa73b757b..cdc28e687316 100644 --- a/services/core/java/com/android/server/hdmi/HdmiUtils.java +++ b/services/core/java/com/android/server/hdmi/HdmiUtils.java @@ -21,6 +21,7 @@ import static com.android.server.hdmi.Constants.ADDR_BACKUP_2; import static com.android.server.hdmi.Constants.ADDR_TV; import android.annotation.Nullable; +import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.util.Slog; import android.util.SparseArray; @@ -134,7 +135,7 @@ final class HdmiUtils { static boolean isEligibleAddressForCecVersion(int cecVersion, int logicalAddress) { if (isValidAddress(logicalAddress)) { if (logicalAddress == ADDR_BACKUP_1 || logicalAddress == ADDR_BACKUP_2) { - return cecVersion == Constants.VERSION_2_0; + return cecVersion >= HdmiControlManager.HDMI_CEC_VERSION_2_0; } return true; } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java index 8af7332e24ed..6debc893ea1b 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java @@ -74,6 +74,8 @@ public class ActiveSourceActionTest { when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager); when(mIPowerManagerMock.isInteractive()).thenReturn(true); + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); + mHdmiControlService = new HdmiControlService(mContextSpy) { @Override AudioManager getAudioManager() { @@ -104,6 +106,11 @@ public class ActiveSourceActionTest { void writeStringSystemProperty(String key, String value) { // do nothing } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; Looper looper = mTestLooper.getLooper(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java index 37a75e3822aa..a19336eeb5ea 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java @@ -76,6 +76,8 @@ public class ArcInitiationActionFromAvrTest { when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager); when(mIPowerManagerMock.isInteractive()).thenReturn(true); + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); + HdmiControlService hdmiControlService = new HdmiControlService(mContextSpy) { @Override @@ -106,6 +108,11 @@ public class ArcInitiationActionFromAvrTest { Looper getServiceLooper() { return mTestLooper.getLooper(); } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java index 6027c3e4eeab..cd6977524943 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -77,6 +77,8 @@ public class ArcTerminationActionFromAvrTest { when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager); when(mIPowerManagerMock.isInteractive()).thenReturn(true); + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); + HdmiControlService hdmiControlService = new HdmiControlService(mContextSpy) { @Override @@ -107,6 +109,11 @@ public class ArcTerminationActionFromAvrTest { Looper getServiceLooper() { return mTestLooper.getLooper(); } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; Looper looper = mTestLooper.getLooper(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java index fb6266d89005..52899faf0ed7 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java @@ -31,26 +31,35 @@ import java.io.IOException; import javax.xml.datatype.DatatypeConfigurationException; /** - * Fake class which loads default system configuration with user-configurable - * settings (useful for testing). + * Fake class which loads default system configuration with user-configurable + * settings (useful for testing). */ final class FakeHdmiCecConfig extends HdmiCecConfig { private static final String TAG = "FakeHdmiCecConfig"; private static final String SYSTEM_CONFIG_XML = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" - + "<cec-settings>" - + " <setting name=\"send_standby_on_sleep\"" - + " value-type=\"string\"" - + " user-configurable=\"true\">" - + " <allowed-values>" - + " <value string-value=\"to_tv\" />" - + " <value string-value=\"broadcast\" />" - + " <value string-value=\"none\" />" - + " </allowed-values>" - + " <default-value string-value=\"to_tv\" />" - + " </setting>" - + "</cec-settings>"; + + "<cec-settings>" + + " <setting name=\"send_standby_on_sleep\"" + + " value-type=\"string\"" + + " user-configurable=\"true\">" + + " <allowed-values>" + + " <value string-value=\"to_tv\" />" + + " <value string-value=\"broadcast\" />" + + " <value string-value=\"none\" />" + + " </allowed-values>" + + " <default-value string-value=\"to_tv\" />" + + " </setting>" + + " <setting name=\"hdmi_cec_version\"" + + " value-type=\"int\"" + + " user-configurable=\"true\">" + + " <allowed-values>" + + " <value int-value=\"0x05\" />" + + " <value int-value=\"0x06\" />" + + " </allowed-values>" + + " <default-value int-value=\"0x05\" />" + + " </setting>" + + "</cec-settings>"; FakeHdmiCecConfig(@NonNull Context context) { super(context, new StorageAdapter(), parseFromString(SYSTEM_CONFIG_XML), null); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java index a27f7331e407..dd74f22c78b7 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java @@ -1006,22 +1006,22 @@ public final class HdmiCecConfigTest { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" - + "<cec-settings>" - + " <setting name=\"system_audio_mode_muting\"" - + " value-type=\"int\"" - + " user-configurable=\"true\">" - + " <allowed-values>" - + " <value int-value=\"0\" />" - + " <value int-value=\"1\" />" - + " </allowed-values>" - + " <default-value int-value=\"1\" />" - + " </setting>" - + "</cec-settings>", null); + + "<cec-settings>" + + " <setting name=\"system_audio_mode_muting\"" + + " value-type=\"int\"" + + " user-configurable=\"true\">" + + " <allowed-values>" + + " <value int-value=\"0\" />" + + " <value int-value=\"1\" />" + + " </allowed-values>" + + " <default-value int-value=\"1\" />" + + " </setting>" + + "</cec-settings>", null); hdmiCecConfig.setIntValue( - HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, - HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, + HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); verify(mStorageAdapter).storeSystemProperty( - HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, - Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); + HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, + Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java index 81c3be5f9f75..0a3d545da0a9 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java @@ -32,6 +32,7 @@ import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED; import static junit.framework.Assert.assertEquals; import android.content.Context; +import android.hardware.hdmi.HdmiControlManager; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.Looper; import android.os.test.TestLooper; @@ -78,7 +79,7 @@ public class HdmiCecControllerTest { } private HdmiCecController mHdmiCecController; - private int mCecVersion = Constants.VERSION_1_4; + private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_1_4_b; private int mLogicalAddress = 16; private AllocateAddressCallback mCallback = new AllocateAddressCallback() { @@ -202,7 +203,7 @@ public class HdmiCecControllerTest { @Test public void testAllocateLogicalAddress_PlaybackNonPreferred_2_0_BackupOne() { - mCecVersion = Constants.VERSION_2_0; + mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0; mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS); @@ -214,7 +215,7 @@ public class HdmiCecControllerTest { @Test public void testAllocateLogicalAddress_PlaybackNonPreferred_2_0_BackupTwo() { - mCecVersion = Constants.VERSION_2_0; + mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0; mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS); @@ -245,7 +246,7 @@ public class HdmiCecControllerTest { @Test public void testAllocateLogicalAddress_PlaybackNonPreferred_2_0_AllOccupied() { - mCecVersion = Constants.VERSION_2_0; + mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0; mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java index 433f6e7938e2..25530940e964 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java @@ -96,6 +96,9 @@ public class HdmiCecLocalDeviceAudioSystemTest { mMyLooper = mTestLooper.getLooper(); PowerManager powerManager = new PowerManager(context, mIPowerManagerMock, mIThermalServiceMock, new Handler(mMyLooper)); + + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context); + mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext()) { @Override @@ -184,6 +187,11 @@ public class HdmiCecLocalDeviceAudioSystemTest { PowerManager getPowerManager() { return powerManager; } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; mHdmiControlService.setHdmiCecVolumeControlEnabled(true); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java index 647da95c242d..9646b5d2ec2c 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -82,6 +82,8 @@ public class HdmiCecLocalDevicePlaybackTest { mMyLooper = mTestLooper.getLooper(); PowerManager powerManager = new PowerManager(context, mIPowerManagerMock, mIThermalServiceMock, new Handler(mMyLooper)); + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context); + mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext()) { @Override @@ -114,11 +116,16 @@ public class HdmiCecLocalDevicePlaybackTest { return false; } - @Override - PowerManager getPowerManager() { - return powerManager; - } - }; + @Override + PowerManager getPowerManager() { + return powerManager; + } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } + }; mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService); mHdmiCecLocalDevicePlayback.init(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java index aa72d074a85f..12414d99d991 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java @@ -72,6 +72,9 @@ public class HdmiCecLocalDeviceTvTest { mMyLooper = mTestLooper.getLooper(); PowerManager powerManager = new PowerManager(context, mIPowerManagerMock, mIThermalServiceMock, new Handler(mMyLooper)); + + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context); + mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext()) { @Override @@ -93,6 +96,11 @@ public class HdmiCecLocalDeviceTvTest { PowerManager getPowerManager() { return powerManager; } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; mHdmiCecLocalDeviceTv = new HdmiCecLocalDeviceTv(mHdmiControlService); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index dea3896f1b77..2e4bed97dbec 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -142,11 +142,18 @@ public class HdmiControlServiceTest { when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager); when(mIPowerManagerMock.isInteractive()).thenReturn(true); + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); + mHdmiControlService = new HdmiControlService(mContextSpy) { @Override boolean isStandbyMessageReceived() { return mStandbyMessageReceived; } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; mMyLooper = mTestLooper.getLooper(); @@ -390,42 +397,52 @@ public class HdmiControlServiceTest { Settings.Global.HDMI_CEC_VERSION, null); mHdmiControlService.setControlEnabled(true); - assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4); + assertThat(mHdmiControlService.getCecVersion()).isEqualTo( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); } @Test public void getCecVersion_1_4() { - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_1_4); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); mHdmiControlService.setControlEnabled(true); - assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4); + assertThat(mHdmiControlService.getCecVersion()).isEqualTo( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); } @Test public void getCecVersion_2_0() { - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_2_0); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_2_0); mHdmiControlService.setControlEnabled(true); - assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_2_0); + assertThat(mHdmiControlService.getCecVersion()).isEqualTo( + HdmiControlManager.HDMI_CEC_VERSION_2_0); } @Test public void getCecVersion_change() { - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_1_4); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); mHdmiControlService.setControlEnabled(true); - assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4); + assertThat(mHdmiControlService.getCecVersion()).isEqualTo( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_2_0); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_2_0); mHdmiControlService.setControlEnabled(true); - assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_2_0); + assertThat(mHdmiControlService.getCecVersion()).isEqualTo( + HdmiControlManager.HDMI_CEC_VERSION_2_0); } @Test public void handleGiveFeatures_cec14_featureAbort() { - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_1_4); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); mHdmiControlService.setControlEnabled(true); mTestLooper.dispatchAll(); @@ -441,8 +458,9 @@ public class HdmiControlServiceTest { @Test public void handleGiveFeatures_cec20_reportsFeatures() { - Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, - Constants.VERSION_2_0); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_2_0); mHdmiControlService.setControlEnabled(true); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiUtilsTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiUtilsTest.java index a8f3acf8726f..dbf3b531fe04 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiUtilsTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.platform.test.annotations.Presubmit; import android.util.Slog; @@ -533,69 +534,84 @@ public class HdmiUtilsTest { @Test public void isEligibleAddressForCecVersion_1_4() { - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_TV)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_RECORDER_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_RECORDER_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_TUNER_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_PLAYBACK_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_AUDIO_SYSTEM)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_TUNER_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_TUNER_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_PLAYBACK_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_RECORDER_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_TUNER_4)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_PLAYBACK_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_BACKUP_1)).isFalse(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_BACKUP_2)).isFalse(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_1_4, + assertThat(HdmiUtils.isEligibleAddressForCecVersion( + HdmiControlManager.HDMI_CEC_VERSION_1_4_b, Constants.ADDR_SPECIFIC_USE)).isTrue(); } @Test public void isEligibleAddressForCecVersion_2_0() { - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_TV)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_RECORDER_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_RECORDER_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_TUNER_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_PLAYBACK_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_AUDIO_SYSTEM)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_TUNER_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_TUNER_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_PLAYBACK_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_RECORDER_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_TUNER_4)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_PLAYBACK_3)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_BACKUP_1)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_BACKUP_2)).isTrue(); - assertThat(HdmiUtils.isEligibleAddressForCecVersion(Constants.VERSION_2_0, + assertThat(HdmiUtils.isEligibleAddressForCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0, Constants.ADDR_SPECIFIC_USE)).isTrue(); } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java index 0e4bfab0d94c..0a225a06b380 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import android.annotation.Nullable; +import android.content.Context; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; @@ -61,9 +62,12 @@ public class SystemAudioInitiationActionFromAvrTest { @Before public void SetUp() { mDeviceInfoForTests = new HdmiDeviceInfo(1001, 1234); - HdmiControlService hdmiControlService = - new HdmiControlService(InstrumentationRegistry.getTargetContext()) { + Context context = InstrumentationRegistry.getTargetContext(); + + HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context); + + HdmiControlService hdmiControlService = new HdmiControlService(context) { @Override void sendCecCommand( HdmiCecMessage command, @Nullable SendMessageCallback callback) { @@ -156,6 +160,11 @@ public class SystemAudioInitiationActionFromAvrTest { int pathToPortId(int path) { return -1; } + + @Override + HdmiCecConfig getHdmiCecConfig() { + return hdmiCecConfig; + } }; Looper looper = mTestLooper.getLooper(); |