Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +3 −4 Original line number Diff line number Diff line Loading @@ -698,10 +698,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { protected boolean handleReportAudioStatus(HdmiCecMessage message) { assertRunOnServiceThread(); byte params[] = message.getParams(); int mute = params[0] & 0x80; int volume = params[0] & 0x7F; setAudioStatus(mute == 0x80, volume); boolean mute = HdmiUtils.isAudioStatusMute(message); int volume = HdmiUtils.getAudioStatusVolume(message); setAudioStatus(mute, volume); return true; } Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +6 −2 Original line number Diff line number Diff line Loading @@ -989,8 +989,12 @@ public final class HdmiControlService extends SystemService { } // FLAG_HDMI_SYSTEM_AUDIO_VOLUME prevents audio manager from announcing // volume change notification back to hdmi control service. audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME); int flag = AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME; if (0 <= volume && volume <= 100) { Slog.i(TAG, "volume: " + volume); flag |= AudioManager.FLAG_SHOW_UI; audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, flag); } } } Loading services/core/java/com/android/server/hdmi/HdmiUtils.java +26 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,32 @@ final class HdmiUtils { return cmd.getParams()[0] == Constants.SYSTEM_AUDIO_STATUS_ON; } /** * Parse the <Report Audio Status> message and check if it is mute * * @param cmd the CEC message to parse * @return true if the given parameter has [MUTE] */ static boolean isAudioStatusMute(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); return (params[0] & 0x80) == 0x80; } /** * Parse the <Report Audio Status> message and extract the volume * * @param cmd the CEC message to parse * @return device's volume. Constants.UNKNOWN_VOLUME in case it is out of range */ static int getAudioStatusVolume(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); int volume = params[0] & 0x7F; if (volume < 0x00 || 0x64 < volume) { volume = Constants.UNKNOWN_VOLUME; } return volume; } /** * Convert integer array to list of {@link Integer}. * Loading services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -92,8 +92,8 @@ final class SystemAudioStatusAction extends HdmiCecFeatureAction { private void handleReportAudioStatus(HdmiCecMessage cmd) { byte[] params = cmd.getParams(); boolean mute = (params[0] & 0x80) == 0x80; int volume = params[0] & 0x7F; boolean mute = HdmiUtils.isAudioStatusMute(cmd); int volume = HdmiUtils.getAudioStatusVolume(cmd); tv().setAudioStatus(mute, volume); if (!(tv().isSystemAudioActivated() ^ mute)) { Loading services/core/java/com/android/server/hdmi/VolumeControlAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -139,8 +139,8 @@ final class VolumeControlAction extends HdmiCecFeatureAction { private boolean handleReportAudioStatus(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); boolean mute = (params[0] & 0x80) == 0x80; int volume = params[0] & 0x7F; boolean mute = HdmiUtils.isAudioStatusMute(cmd); int volume = HdmiUtils.getAudioStatusVolume(cmd); mLastAvrVolume = volume; mLastAvrMute = mute; if (shouldUpdateAudioVolume(mute)) { Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +3 −4 Original line number Diff line number Diff line Loading @@ -698,10 +698,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { protected boolean handleReportAudioStatus(HdmiCecMessage message) { assertRunOnServiceThread(); byte params[] = message.getParams(); int mute = params[0] & 0x80; int volume = params[0] & 0x7F; setAudioStatus(mute == 0x80, volume); boolean mute = HdmiUtils.isAudioStatusMute(message); int volume = HdmiUtils.getAudioStatusVolume(message); setAudioStatus(mute, volume); return true; } Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +6 −2 Original line number Diff line number Diff line Loading @@ -989,8 +989,12 @@ public final class HdmiControlService extends SystemService { } // FLAG_HDMI_SYSTEM_AUDIO_VOLUME prevents audio manager from announcing // volume change notification back to hdmi control service. audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME); int flag = AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME; if (0 <= volume && volume <= 100) { Slog.i(TAG, "volume: " + volume); flag |= AudioManager.FLAG_SHOW_UI; audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, flag); } } } Loading
services/core/java/com/android/server/hdmi/HdmiUtils.java +26 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,32 @@ final class HdmiUtils { return cmd.getParams()[0] == Constants.SYSTEM_AUDIO_STATUS_ON; } /** * Parse the <Report Audio Status> message and check if it is mute * * @param cmd the CEC message to parse * @return true if the given parameter has [MUTE] */ static boolean isAudioStatusMute(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); return (params[0] & 0x80) == 0x80; } /** * Parse the <Report Audio Status> message and extract the volume * * @param cmd the CEC message to parse * @return device's volume. Constants.UNKNOWN_VOLUME in case it is out of range */ static int getAudioStatusVolume(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); int volume = params[0] & 0x7F; if (volume < 0x00 || 0x64 < volume) { volume = Constants.UNKNOWN_VOLUME; } return volume; } /** * Convert integer array to list of {@link Integer}. * Loading
services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -92,8 +92,8 @@ final class SystemAudioStatusAction extends HdmiCecFeatureAction { private void handleReportAudioStatus(HdmiCecMessage cmd) { byte[] params = cmd.getParams(); boolean mute = (params[0] & 0x80) == 0x80; int volume = params[0] & 0x7F; boolean mute = HdmiUtils.isAudioStatusMute(cmd); int volume = HdmiUtils.getAudioStatusVolume(cmd); tv().setAudioStatus(mute, volume); if (!(tv().isSystemAudioActivated() ^ mute)) { Loading
services/core/java/com/android/server/hdmi/VolumeControlAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -139,8 +139,8 @@ final class VolumeControlAction extends HdmiCecFeatureAction { private boolean handleReportAudioStatus(HdmiCecMessage cmd) { byte params[] = cmd.getParams(); boolean mute = (params[0] & 0x80) == 0x80; int volume = params[0] & 0x7F; boolean mute = HdmiUtils.isAudioStatusMute(cmd); int volume = HdmiUtils.getAudioStatusVolume(cmd); mLastAvrVolume = volume; mLastAvrMute = mute; if (shouldUpdateAudioVolume(mute)) { Loading