From 7ea873b0dceb9916a973c34d1d5a65e461cebb98 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Thu, 23 Jun 2022 23:32:27 +0000 Subject: [PATCH] AudioService: conditional logging of hearing aid volume To avoid confusion when reading audio dumpsys, do not log hearing aid volume changes when a DEVICE_OUT_HEARING_AID is not connected. Bug: 236983951 Test: adb shell dumpsys audio | grep HEARING_AID Merged-In: I36f39e88e11f4e8ed644b54bfb15308f08a3d698 Change-Id: I36f39e88e11f4e8ed644b54bfb15308f08a3d698 --- .../android/server/audio/AudioDeviceBroker.java | 3 ++- .../server/audio/AudioDeviceInventory.java | 16 ++++++++++++++++ .../java/com/android/server/audio/BtHelper.java | 10 +++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java index 03dcc8d711d34..b3aff65afb1f0 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java +++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java @@ -1323,7 +1323,8 @@ import java.util.concurrent.atomic.AtomicBoolean; break; case MSG_II_SET_HEARING_AID_VOLUME: synchronized (mDeviceStateLock) { - mBtHelper.setHearingAidVolume(msg.arg1, msg.arg2); + mBtHelper.setHearingAidVolume(msg.arg1, msg.arg2, + mDeviceInventory.isHearingAidConnected()); } break; case MSG_II_SET_LE_AUDIO_OUT_VOLUME: { diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java index 9c0d3dfe17a1b..ce476f56b87ea 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java +++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java @@ -1159,6 +1159,22 @@ public class AudioDeviceInventory { .record(); } + /** + * Returns whether a device of type DEVICE_OUT_HEARING_AID is connected. + * Visibility by APM plays no role + * @return true if a DEVICE_OUT_HEARING_AID is connected, false otherwise. + */ + boolean isHearingAidConnected() { + synchronized (mDevicesLock) { + for (DeviceInfo di : mConnectedDevices.values()) { + if (di.mDeviceType == AudioSystem.DEVICE_OUT_HEARING_AID) { + return true; + } + } + return false; + } + } + @GuardedBy("mDevicesLock") private void makeLeAudioDeviceAvailable(String address, String name, int streamType, int volumeIndex, int device, String eventSource) { diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java index 0e38232757777..c168d07c04c92 100644 --- a/services/core/java/com/android/server/audio/BtHelper.java +++ b/services/core/java/com/android/server/audio/BtHelper.java @@ -423,7 +423,8 @@ public class BtHelper { mLeAudio.setVolume(volume); } - /*package*/ synchronized void setHearingAidVolume(int index, int streamType) { + /*package*/ synchronized void setHearingAidVolume(int index, int streamType, + boolean isHeadAidConnected) { if (mHearingAid == null) { if (AudioService.DEBUG_VOL) { Log.i(TAG, "setHearingAidVolume: null mHearingAid"); @@ -440,8 +441,11 @@ public class BtHelper { Log.i(TAG, "setHearingAidVolume: calling mHearingAid.setVolume idx=" + index + " gain=" + gainDB); } - AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent( - AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB)); + // do not log when hearing aid is not connected to avoid confusion when reading dumpsys + if (isHeadAidConnected) { + AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent( + AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB)); + } mHearingAid.setVolume(gainDB); }