diff options
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 33 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioServiceEvents.java | 19 |
2 files changed, 38 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 39cb5a96f564..97326211d18e 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -461,6 +461,7 @@ public class AudioService extends IAudioService.Stub private static final int MSG_DISPATCH_PREFERRED_MIXER_ATTRIBUTES = 52; private static final int MSG_CONFIGURATION_CHANGED = 54; private static final int MSG_BROADCAST_MASTER_MUTE = 55; + private static final int MSG_UPDATE_CONTEXTUAL_VOLUMES = 56; /** * Messages handled by the {@link SoundDoseHelper}, do not exceed @@ -4466,7 +4467,7 @@ public class AudioService extends IAudioService.Stub } } if (mVoicePlaybackActive.getAndSet(voiceActive) != voiceActive) { - updateHearingAidVolumeOnVoiceActivityUpdate(); + postUpdateContextualVolumes(); } if (mMediaPlaybackActive.getAndSet(mediaActive) != mediaActive && mediaActive) { mSoundDoseHelper.scheduleMusicActiveCheck(); @@ -4604,13 +4605,29 @@ public class AudioService extends IAudioService.Stub } } - private void updateHearingAidVolumeOnVoiceActivityUpdate() { + + // delay between audio playback configuration update and checking + // actual stream activity to take async playback stop into account + private static final int UPDATE_CONTEXTUAL_VOLUME_DELAY_MS = 500; + + /*package*/ void postUpdateContextualVolumes() { + sendMsg(mAudioHandler, MSG_UPDATE_CONTEXTUAL_VOLUMES, SENDMSG_REPLACE, + /*arg1*/ 0, /*arg2*/ 0, TAG, UPDATE_CONTEXTUAL_VOLUME_DELAY_MS); + } + + private void onUpdateContextualVolumes() { final int streamType = getBluetoothContextualVolumeStream(); - final int index = getStreamVolume(streamType); - sVolumeLogger.enqueue(new VolumeEvent(VolumeEvent.VOL_VOICE_ACTIVITY_HEARING_AID, - mVoicePlaybackActive.get(), streamType, index)); - mDeviceBroker.postSetHearingAidVolumeIndex(index * 10, streamType); + final int device = getDeviceForStream(streamType); + final int index = getStreamVolume(streamType, device); + if (AudioSystem.isLeAudioDeviceType(device)) { + mDeviceBroker.postSetLeAudioVolumeIndex(index * 10, + mStreamStates[streamType].getMaxIndex(), streamType); + } else if (device == AudioSystem.DEVICE_OUT_HEARING_AID) { + mDeviceBroker.postSetHearingAidVolumeIndex(index * 10, streamType); + } + sVolumeLogger.enqueue(new VolumeEvent(VolumeEvent.VOL_VOICE_ACTIVITY_CONTEXTUAL_VOLUME, + mVoicePlaybackActive.get(), streamType, index, device)); } /** @@ -9812,6 +9829,10 @@ public class AudioService extends IAudioService.Stub onConfigurationChanged(); break; + case MSG_UPDATE_CONTEXTUAL_VOLUMES: + onUpdateContextualVolumes(); + break; + case MusicFxHelper.MSG_EFFECT_CLIENT_GONE: mMusicFxHelper.handleMessage(msg); break; diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java index 8ea28bed30a2..631d5d80acd7 100644 --- a/services/core/java/com/android/server/audio/AudioServiceEvents.java +++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java @@ -227,7 +227,7 @@ public class AudioServiceEvents { static final int VOL_SET_HEARING_AID_VOL = 3; static final int VOL_SET_AVRCP_VOL = 4; static final int VOL_ADJUST_VOL_UID = 5; - static final int VOL_VOICE_ACTIVITY_HEARING_AID = 6; + static final int VOL_VOICE_ACTIVITY_CONTEXTUAL_VOLUME = 6; static final int VOL_MODE_CHANGE_HEARING_AID = 7; static final int VOL_SET_GROUP_VOL = 8; static final int VOL_MUTE_STREAM_INT = 9; @@ -299,14 +299,14 @@ public class AudioServiceEvents { logMetricEvent(); } - /** used for VOL_VOICE_ACTIVITY_HEARING_AID */ - VolumeEvent(int op, boolean voiceActive, int stream, int index) { + /** used for VOL_VOICE_ACTIVITY_CONTEXTUAL_VOLUME */ + VolumeEvent(int op, boolean voiceActive, int stream, int index, int device) { mOp = op; mStream = stream; mVal1 = index; mVal2 = voiceActive ? 1 : 0; // unused - mVal3 = -1; + mVal3 = device; mCaller = null; mGroupName = null; logMetricEvent(); @@ -445,14 +445,16 @@ public class AudioServiceEvents { .set(MediaMetrics.Property.INDEX, mVal1) .record(); return; - case VOL_VOICE_ACTIVITY_HEARING_AID: + case VOL_VOICE_ACTIVITY_CONTEXTUAL_VOLUME: new MediaMetrics.Item(mMetricsId) - .set(MediaMetrics.Property.EVENT, "voiceActivityHearingAid") + .set(MediaMetrics.Property.EVENT, "voiceActivityContextualVolume") .set(MediaMetrics.Property.INDEX, mVal1) .set(MediaMetrics.Property.STATE, mVal2 == 1 ? "active" : "inactive") .set(MediaMetrics.Property.STREAM_TYPE, AudioSystem.streamToString(mStream)) + .set(MediaMetrics.Property.DEVICE, + AudioSystem.getOutputDeviceName(mVal3)) .record(); return; case VOL_MODE_CHANGE_HEARING_AID: @@ -538,11 +540,12 @@ public class AudioServiceEvents { .append(" flags:0x").append(Integer.toHexString(mVal2)) .append(") from ").append(mCaller) .toString(); - case VOL_VOICE_ACTIVITY_HEARING_AID: + case VOL_VOICE_ACTIVITY_CONTEXTUAL_VOLUME: return new StringBuilder("Voice activity change (") .append(mVal2 == 1 ? "active" : "inactive") - .append(") causes setting HEARING_AID volume to idx:").append(mVal1) + .append(") causes setting volume to idx:").append(mVal1) .append(" stream:").append(AudioSystem.streamToString(mStream)) + .append(" device:").append(AudioSystem.getOutputDeviceName(mVal3)) .toString(); case VOL_MODE_CHANGE_HEARING_AID: return new StringBuilder("setMode(") |