Loading services/core/java/com/android/server/hdmi/HdmiCecConfig.java +23 −22 Original line number Diff line number Diff line Loading @@ -58,10 +58,6 @@ public class HdmiCecConfig { private static final String ETC_DIR = "etc"; private static final String CONFIG_FILE = "cec_config.xml"; @Nullable private CecSettings mProductConfig = null; @Nullable private CecSettings mVendorOverride = null; @Nullable private StorageAdapter mStorageAdapter = null; @IntDef({ STORAGE_SYSPROPS, STORAGE_GLOBAL_SETTINGS, Loading @@ -83,6 +79,11 @@ public class HdmiCecConfig { public static final String SYSPROP_SYSTEM_AUDIO_MODE_MUTING = "ro.hdmi.cec.audio.system_audio_mode_muting.enabled"; @NonNull private final Context mContext; @NonNull private final StorageAdapter mStorageAdapter; @Nullable private final CecSettings mProductConfig; @Nullable private final CecSettings mVendorOverride; /** * Setting storage input/output helper class. */ Loading Loading @@ -126,20 +127,22 @@ public class HdmiCecConfig { } @VisibleForTesting HdmiCecConfig(@Nullable CecSettings productConfig, @Nullable CecSettings vendorOverride, @Nullable StorageAdapter storageAdapter) { HdmiCecConfig(@NonNull Context context, @NonNull StorageAdapter storageAdapter, @Nullable CecSettings productConfig, @Nullable CecSettings vendorOverride) { mContext = context; mStorageAdapter = storageAdapter; mProductConfig = productConfig; mVendorOverride = vendorOverride; mStorageAdapter = storageAdapter; } HdmiCecConfig() { this(readSettingsFromFile(Environment.buildPath(Environment.getProductDirectory(), HdmiCecConfig(@NonNull Context context) { this(context, new StorageAdapter(), readSettingsFromFile(Environment.buildPath(Environment.getProductDirectory(), ETC_DIR, CONFIG_FILE)), readSettingsFromFile(Environment.buildPath(Environment.getVendorDirectory(), ETC_DIR, CONFIG_FILE)), new StorageAdapter()); ETC_DIR, CONFIG_FILE))); } @Nullable Loading Loading @@ -211,7 +214,7 @@ public class HdmiCecConfig { } } private String retrieveValue(@NonNull Context context, @NonNull Setting setting) { private String retrieveValue(@NonNull Setting setting) { @Storage int storage = getStorage(setting); String storageKey = getStorageKey(setting); if (storage == STORAGE_SYSPROPS) { Loading @@ -220,14 +223,13 @@ public class HdmiCecConfig { setting.getDefaultValue().getStringValue()); } else if (storage == STORAGE_GLOBAL_SETTINGS) { Slog.d(TAG, "Reading '" + storageKey + "' global setting."); return mStorageAdapter.retrieveGlobalSetting(context, storageKey, return mStorageAdapter.retrieveGlobalSetting(mContext, storageKey, setting.getDefaultValue().getStringValue()); } return null; } private void storeValue(@NonNull Context context, @NonNull Setting setting, @NonNull String value) { private void storeValue(@NonNull Setting setting, @NonNull String value) { @Storage int storage = getStorage(setting); String storageKey = getStorageKey(setting); if (storage == STORAGE_SYSPROPS) { Loading @@ -235,7 +237,7 @@ public class HdmiCecConfig { mStorageAdapter.storeSystemProperty(storageKey, value); } else if (storage == STORAGE_GLOBAL_SETTINGS) { Slog.d(TAG, "Setting '" + storageKey + "' global setting."); mStorageAdapter.storeGlobalSetting(context, storageKey, value); mStorageAdapter.storeGlobalSetting(mContext, storageKey, value); } } Loading Loading @@ -303,20 +305,19 @@ public class HdmiCecConfig { /** * For a given setting name returns the current value of that setting. */ public String getValue(@NonNull Context context, @NonNull @CecSettingName String name) { public String getValue(@NonNull @CecSettingName String name) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); } Slog.d(TAG, "Getting CEC setting value '" + name + "'."); return retrieveValue(context, setting); return retrieveValue(setting); } /** * For a given setting name and value sets the current value of that setting. */ public void setValue(@NonNull Context context, @NonNull @CecSettingName String name, @NonNull String value) { public void setValue(@NonNull @CecSettingName String name, @NonNull String value) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); Loading @@ -329,6 +330,6 @@ public class HdmiCecConfig { + "' value: '" + value + "'."); } Slog.d(TAG, "Updating CEC setting '" + name + "' to '" + value + "'."); storeValue(context, setting, value); storeValue(setting, value); } } services/core/java/com/android/server/hdmi/HdmiControlService.java +5 −4 Original line number Diff line number Diff line Loading @@ -190,7 +190,7 @@ public class HdmiControlService extends SystemService { private boolean mHdmiCecVolumeControlEnabled; // Make sure HdmiCecConfig is instantiated and the XMLs are read. private final HdmiCecConfig mHdmiCecConfig = new HdmiCecConfig(); private final HdmiCecConfig mHdmiCecConfig; /** * Interface to report send result. Loading Loading @@ -488,6 +488,7 @@ public class HdmiControlService extends SystemService { } mLocalDevices = deviceTypes; mSettingsObserver = new SettingsObserver(mHandler); mHdmiCecConfig = new HdmiCecConfig(context); } protected static List<Integer> getIntList(String string) { Loading Loading @@ -2328,7 +2329,7 @@ public class HdmiControlService extends SystemService { List<String> allSettings = hdmiCecConfig.getAllSettings(); Set<String> userSettings = new HashSet<>(hdmiCecConfig.getUserSettings()); for (String setting : allSettings) { pw.println(setting + ": " + hdmiCecConfig.getValue(getContext(), setting) pw.println(setting + ": " + hdmiCecConfig.getValue(setting) + " (default: " + hdmiCecConfig.getDefaultValue(setting) + ")" + (userSettings.contains(setting) ? " [modifiable]" : "")); } Loading Loading @@ -2375,7 +2376,7 @@ public class HdmiControlService extends SystemService { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { return HdmiControlService.this.getHdmiCecConfig().getValue(getContext(), name); return HdmiControlService.this.getHdmiCecConfig().getValue(name); } finally { Binder.restoreCallingIdentity(token); } Loading @@ -2386,7 +2387,7 @@ public class HdmiControlService extends SystemService { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { HdmiControlService.this.getHdmiCecConfig().setValue(getContext(), name, value); HdmiControlService.this.getHdmiCecConfig().setValue(name, value); } finally { Binder.restoreCallingIdentity(token); } Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +9 −10 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ public final class HdmiCecConfigTest { + "<cec-settings>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.getValue(mContext, "foo")); () -> hdmiCecConfig.getValue("foo")); } @Test Loading @@ -267,7 +267,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"to_tv\" />" + " </setting>" + "</cec-settings>", null); assertThat(hdmiCecConfig.getValue(mContext, assertThat(hdmiCecConfig.getValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); } Loading @@ -292,7 +292,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"none\" />" + " </setting>" + "</cec-settings>", null); assertThat(hdmiCecConfig.getValue(mContext, assertThat(hdmiCecConfig.getValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST)) .isEqualTo(HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); Loading @@ -305,7 +305,7 @@ public final class HdmiCecConfigTest { + "<cec-settings>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, "foo", "bar")); () -> hdmiCecConfig.setValue("foo", "bar")); } @Test Loading @@ -324,7 +324,7 @@ public final class HdmiCecConfigTest { + " </setting>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, () -> hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST)); } Loading @@ -345,7 +345,7 @@ public final class HdmiCecConfigTest { + " </setting>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, () -> hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, "bar")); } Loading @@ -365,8 +365,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"to_tv\" />" + " </setting>" + "</cec-settings>", null); hdmiCecConfig.setValue(mContext, HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, hdmiCecConfig.setValue(HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); verify(mStorageAdapter).storeGlobalSetting(mContext, Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP, Loading @@ -387,7 +386,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"none\" />" + " </setting>" + "</cec-settings>", null); hdmiCecConfig.setValue(mContext, hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); Loading @@ -409,6 +408,6 @@ public final class HdmiCecConfigTest { } catch (IOException | DatatypeConfigurationException | XmlPullParserException e) { Slog.e(TAG, "Encountered an error while reading/parsing CEC config strings", e); } return new HdmiCecConfig(productConfig, vendorOverride, mStorageAdapter); return new HdmiCecConfig(mContext, mStorageAdapter, productConfig, vendorOverride); } } Loading
services/core/java/com/android/server/hdmi/HdmiCecConfig.java +23 −22 Original line number Diff line number Diff line Loading @@ -58,10 +58,6 @@ public class HdmiCecConfig { private static final String ETC_DIR = "etc"; private static final String CONFIG_FILE = "cec_config.xml"; @Nullable private CecSettings mProductConfig = null; @Nullable private CecSettings mVendorOverride = null; @Nullable private StorageAdapter mStorageAdapter = null; @IntDef({ STORAGE_SYSPROPS, STORAGE_GLOBAL_SETTINGS, Loading @@ -83,6 +79,11 @@ public class HdmiCecConfig { public static final String SYSPROP_SYSTEM_AUDIO_MODE_MUTING = "ro.hdmi.cec.audio.system_audio_mode_muting.enabled"; @NonNull private final Context mContext; @NonNull private final StorageAdapter mStorageAdapter; @Nullable private final CecSettings mProductConfig; @Nullable private final CecSettings mVendorOverride; /** * Setting storage input/output helper class. */ Loading Loading @@ -126,20 +127,22 @@ public class HdmiCecConfig { } @VisibleForTesting HdmiCecConfig(@Nullable CecSettings productConfig, @Nullable CecSettings vendorOverride, @Nullable StorageAdapter storageAdapter) { HdmiCecConfig(@NonNull Context context, @NonNull StorageAdapter storageAdapter, @Nullable CecSettings productConfig, @Nullable CecSettings vendorOverride) { mContext = context; mStorageAdapter = storageAdapter; mProductConfig = productConfig; mVendorOverride = vendorOverride; mStorageAdapter = storageAdapter; } HdmiCecConfig() { this(readSettingsFromFile(Environment.buildPath(Environment.getProductDirectory(), HdmiCecConfig(@NonNull Context context) { this(context, new StorageAdapter(), readSettingsFromFile(Environment.buildPath(Environment.getProductDirectory(), ETC_DIR, CONFIG_FILE)), readSettingsFromFile(Environment.buildPath(Environment.getVendorDirectory(), ETC_DIR, CONFIG_FILE)), new StorageAdapter()); ETC_DIR, CONFIG_FILE))); } @Nullable Loading Loading @@ -211,7 +214,7 @@ public class HdmiCecConfig { } } private String retrieveValue(@NonNull Context context, @NonNull Setting setting) { private String retrieveValue(@NonNull Setting setting) { @Storage int storage = getStorage(setting); String storageKey = getStorageKey(setting); if (storage == STORAGE_SYSPROPS) { Loading @@ -220,14 +223,13 @@ public class HdmiCecConfig { setting.getDefaultValue().getStringValue()); } else if (storage == STORAGE_GLOBAL_SETTINGS) { Slog.d(TAG, "Reading '" + storageKey + "' global setting."); return mStorageAdapter.retrieveGlobalSetting(context, storageKey, return mStorageAdapter.retrieveGlobalSetting(mContext, storageKey, setting.getDefaultValue().getStringValue()); } return null; } private void storeValue(@NonNull Context context, @NonNull Setting setting, @NonNull String value) { private void storeValue(@NonNull Setting setting, @NonNull String value) { @Storage int storage = getStorage(setting); String storageKey = getStorageKey(setting); if (storage == STORAGE_SYSPROPS) { Loading @@ -235,7 +237,7 @@ public class HdmiCecConfig { mStorageAdapter.storeSystemProperty(storageKey, value); } else if (storage == STORAGE_GLOBAL_SETTINGS) { Slog.d(TAG, "Setting '" + storageKey + "' global setting."); mStorageAdapter.storeGlobalSetting(context, storageKey, value); mStorageAdapter.storeGlobalSetting(mContext, storageKey, value); } } Loading Loading @@ -303,20 +305,19 @@ public class HdmiCecConfig { /** * For a given setting name returns the current value of that setting. */ public String getValue(@NonNull Context context, @NonNull @CecSettingName String name) { public String getValue(@NonNull @CecSettingName String name) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); } Slog.d(TAG, "Getting CEC setting value '" + name + "'."); return retrieveValue(context, setting); return retrieveValue(setting); } /** * For a given setting name and value sets the current value of that setting. */ public void setValue(@NonNull Context context, @NonNull @CecSettingName String name, @NonNull String value) { public void setValue(@NonNull @CecSettingName String name, @NonNull String value) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); Loading @@ -329,6 +330,6 @@ public class HdmiCecConfig { + "' value: '" + value + "'."); } Slog.d(TAG, "Updating CEC setting '" + name + "' to '" + value + "'."); storeValue(context, setting, value); storeValue(setting, value); } }
services/core/java/com/android/server/hdmi/HdmiControlService.java +5 −4 Original line number Diff line number Diff line Loading @@ -190,7 +190,7 @@ public class HdmiControlService extends SystemService { private boolean mHdmiCecVolumeControlEnabled; // Make sure HdmiCecConfig is instantiated and the XMLs are read. private final HdmiCecConfig mHdmiCecConfig = new HdmiCecConfig(); private final HdmiCecConfig mHdmiCecConfig; /** * Interface to report send result. Loading Loading @@ -488,6 +488,7 @@ public class HdmiControlService extends SystemService { } mLocalDevices = deviceTypes; mSettingsObserver = new SettingsObserver(mHandler); mHdmiCecConfig = new HdmiCecConfig(context); } protected static List<Integer> getIntList(String string) { Loading Loading @@ -2328,7 +2329,7 @@ public class HdmiControlService extends SystemService { List<String> allSettings = hdmiCecConfig.getAllSettings(); Set<String> userSettings = new HashSet<>(hdmiCecConfig.getUserSettings()); for (String setting : allSettings) { pw.println(setting + ": " + hdmiCecConfig.getValue(getContext(), setting) pw.println(setting + ": " + hdmiCecConfig.getValue(setting) + " (default: " + hdmiCecConfig.getDefaultValue(setting) + ")" + (userSettings.contains(setting) ? " [modifiable]" : "")); } Loading Loading @@ -2375,7 +2376,7 @@ public class HdmiControlService extends SystemService { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { return HdmiControlService.this.getHdmiCecConfig().getValue(getContext(), name); return HdmiControlService.this.getHdmiCecConfig().getValue(name); } finally { Binder.restoreCallingIdentity(token); } Loading @@ -2386,7 +2387,7 @@ public class HdmiControlService extends SystemService { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { HdmiControlService.this.getHdmiCecConfig().setValue(getContext(), name, value); HdmiControlService.this.getHdmiCecConfig().setValue(name, value); } finally { Binder.restoreCallingIdentity(token); } Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +9 −10 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ public final class HdmiCecConfigTest { + "<cec-settings>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.getValue(mContext, "foo")); () -> hdmiCecConfig.getValue("foo")); } @Test Loading @@ -267,7 +267,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"to_tv\" />" + " </setting>" + "</cec-settings>", null); assertThat(hdmiCecConfig.getValue(mContext, assertThat(hdmiCecConfig.getValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); } Loading @@ -292,7 +292,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"none\" />" + " </setting>" + "</cec-settings>", null); assertThat(hdmiCecConfig.getValue(mContext, assertThat(hdmiCecConfig.getValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST)) .isEqualTo(HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); Loading @@ -305,7 +305,7 @@ public final class HdmiCecConfigTest { + "<cec-settings>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, "foo", "bar")); () -> hdmiCecConfig.setValue("foo", "bar")); } @Test Loading @@ -324,7 +324,7 @@ public final class HdmiCecConfigTest { + " </setting>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, () -> hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST)); } Loading @@ -345,7 +345,7 @@ public final class HdmiCecConfigTest { + " </setting>" + "</cec-settings>", null); assertThrows(IllegalArgumentException.class, () -> hdmiCecConfig.setValue(mContext, () -> hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, "bar")); } Loading @@ -365,8 +365,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"to_tv\" />" + " </setting>" + "</cec-settings>", null); hdmiCecConfig.setValue(mContext, HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, hdmiCecConfig.setValue(HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); verify(mStorageAdapter).storeGlobalSetting(mContext, Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP, Loading @@ -387,7 +386,7 @@ public final class HdmiCecConfigTest { + " <default-value string-value=\"none\" />" + " </setting>" + "</cec-settings>", null); hdmiCecConfig.setValue(mContext, hdmiCecConfig.setValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); Loading @@ -409,6 +408,6 @@ public final class HdmiCecConfigTest { } catch (IOException | DatatypeConfigurationException | XmlPullParserException e) { Slog.e(TAG, "Encountered an error while reading/parsing CEC config strings", e); } return new HdmiCecConfig(productConfig, vendorOverride, mStorageAdapter); return new HdmiCecConfig(mContext, mStorageAdapter, productConfig, vendorOverride); } }