From a8bff8e07daef141207e3ebeb6109bc74c720a25 Mon Sep 17 00:00:00 2001 From: Yan Han Date: Fri, 6 May 2022 14:32:05 +0200 Subject: [PATCH] Enable volume UI for TVs using Absolute Volume Control. HdmiControlService now sets FLAG_SHOW_UI when calling AudioService APIs on a TV using Absolute Volume Control. With UI being shown when using Absolute Volume Control, hiding volume UI is only necessary when system audio mode is enabled, but Absolute Volume Control is not. This is covered by the check for full volume behavior in AudioService#sendVolumeUpdate, so the other TV-specific checks can be removed. Bug: 231430528 Test: manual Change-Id: I0579b3af77abe2559b64574e162021320cfb9100 --- .../com/android/server/audio/AudioService.java | 15 ++------------- .../android/server/hdmi/HdmiControlService.java | 13 ++++++++++--- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index aed63ce5b2c6e..8c0e2ddd8f3c2 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -4146,19 +4146,8 @@ public class AudioService extends IAudioService.Stub { streamType = mStreamVolumeAlias[streamType]; - if (streamType == AudioSystem.STREAM_MUSIC) { - flags = updateFlagsForTvPlatform(flags); - synchronized (mHdmiClientLock) { - // Don't display volume UI on a TV Playback device when using absolute volume - if (mHdmiCecVolumeControlEnabled && mHdmiPlaybackClient != null - && (isAbsoluteVolumeDevice(device) - || isA2dpAbsoluteVolumeDevice(device))) { - flags &= ~AudioManager.FLAG_SHOW_UI; - } - } - if (isFullVolumeDevice(device)) { - flags &= ~AudioManager.FLAG_SHOW_UI; - } + if (streamType == AudioSystem.STREAM_MUSIC && isFullVolumeDevice(device)) { + flags &= ~AudioManager.FLAG_SHOW_UI; } mVolumeController.postVolumeChanged(streamType, flags); } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 9824b4e6c43ae..f8a74f4f3f554 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -4176,7 +4176,11 @@ public class HdmiControlService extends SystemService { List streamMusicDevices = getAudioManager().getDevicesForAttributes(STREAM_MUSIC_ATTRIBUTES); if (streamMusicDevices.contains(getAvcAudioOutputDevice())) { - setStreamMusicVolume(volume, AudioManager.FLAG_ABSOLUTE_VOLUME); + int flags = AudioManager.FLAG_ABSOLUTE_VOLUME; + if (isTvDevice()) { + flags |= AudioManager.FLAG_SHOW_UI; + } + setStreamMusicVolume(volume, flags); } } @@ -4190,8 +4194,11 @@ public class HdmiControlService extends SystemService { getAudioManager().getDevicesForAttributes(STREAM_MUSIC_ATTRIBUTES); if (streamMusicDevices.contains(getAvcAudioOutputDevice())) { int direction = mute ? AudioManager.ADJUST_MUTE : AudioManager.ADJUST_UNMUTE; - getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, direction, - AudioManager.FLAG_ABSOLUTE_VOLUME); + int flags = AudioManager.FLAG_ABSOLUTE_VOLUME; + if (isTvDevice()) { + flags |= AudioManager.FLAG_SHOW_UI; + } + getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, direction, flags); } }