diff --git a/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/IAudioControl.aidl b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/IAudioControl.aidl index e5a0451618..bc4162bc8b 100644 --- a/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/IAudioControl.aidl +++ b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/IAudioControl.aidl @@ -20,6 +20,7 @@ package android.hardware.automotive.audiocontrol; interface IAudioControl { oneway void onAudioFocusChange(in String usage, in int zoneId, in android.hardware.automotive.audiocontrol.AudioFocusChange focusChange); oneway void onDevicesToDuckChange(in android.hardware.automotive.audiocontrol.DuckingInfo[] duckingInfos); + oneway void onDevicesToMuteChange(in android.hardware.automotive.audiocontrol.MutingInfo[] mutingInfos); oneway void registerFocusListener(in android.hardware.automotive.audiocontrol.IFocusListener listener); oneway void setBalanceTowardRight(in float value); oneway void setFadeTowardFront(in float value); diff --git a/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/MutingInfo.aidl b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/MutingInfo.aidl new file mode 100644 index 0000000000..ab902ec971 --- /dev/null +++ b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/MutingInfo.aidl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL interface (or parcelable). Do not try to +// edit this file. It looks like you are doing that because you have modified +// an AIDL interface in a backward-incompatible way, e.g., deleting a function +// from an interface or a field from a parcelable and it broke the build. That +// breakage is intended. +// +// You must not make a backward incompatible changes to the AIDL files built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.automotive.audiocontrol; +@VintfStability +parcelable MutingInfo { + int zoneId; + String[] deviceAddressesToMute; + String[] deviceAddressesToUnmute; +} diff --git a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/IAudioControl.aidl b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/IAudioControl.aidl index 4b03af11a4..3a0224557f 100644 --- a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/IAudioControl.aidl +++ b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/IAudioControl.aidl @@ -18,6 +18,7 @@ package android.hardware.automotive.audiocontrol; import android.hardware.automotive.audiocontrol.AudioFocusChange; import android.hardware.automotive.audiocontrol.DuckingInfo; +import android.hardware.automotive.audiocontrol.MutingInfo; import android.hardware.automotive.audiocontrol.IFocusListener; /** @@ -53,6 +54,18 @@ interface IAudioControl { */ oneway void onDevicesToDuckChange(in DuckingInfo[] duckingInfos); + /** + * Notifies HAL of changes in output devices that the HAL should apply muting to. + * + * This will be called in response to changes in audio mute state for each volume group + * and will include a {@link MutingInfo} object per audio zone that experienced a mute state + * event. + * + * @param mutingInfos an array of {@link MutingInfo} objects for the audio zones where audio + * mute state has changed. + */ + oneway void onDevicesToMuteChange(in MutingInfo[] mutingInfos); + /** * Registers focus listener to be used by HAL for requesting and abandoning audio focus. * diff --git a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/MutingInfo.aidl b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/MutingInfo.aidl new file mode 100644 index 0000000000..783640fcfe --- /dev/null +++ b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/MutingInfo.aidl @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + package android.hardware.automotive.audiocontrol; + + /** + * The current muting information for a single audio zone. + * + *
This includes devices to mute, as well as mute based on the contents of a previous + * {@link MutingInfo}. + */ + @VintfStability + parcelable MutingInfo { + /** + * ID of the associated audio zone + */ + int zoneId; + + /** + * List of addresses for audio output devices that should be muted. + * + *
The provided address strings are defined in audio_policy_configuration.xml. + */ + String[] deviceAddressesToMute; + + /** + * List of addresses for audio output devices that were previously be muted and should now be + * unmuted. + * + *
The provided address strings are defined in audio_policy_configuration.xml.
+ */
+ String[] deviceAddressesToUnmute;
+ }
\ No newline at end of file
diff --git a/automotive/audiocontrol/aidl/default/AudioControl.cpp b/automotive/audiocontrol/aidl/default/AudioControl.cpp
index 748947cb2e..b076d01282 100644
--- a/automotive/audiocontrol/aidl/default/AudioControl.cpp
+++ b/automotive/audiocontrol/aidl/default/AudioControl.cpp
@@ -109,21 +109,38 @@ ndk::ScopedAStatus AudioControl::onDevicesToDuckChange(
for (const DuckingInfo& duckingInfo : in_duckingInfos) {
LOG(INFO) << "zone: " << duckingInfo.zoneId;
LOG(INFO) << "Devices to duck:";
- for (auto& addressToDuck : duckingInfo.deviceAddressesToDuck) {
+ for (const auto& addressToDuck : duckingInfo.deviceAddressesToDuck) {
LOG(INFO) << addressToDuck;
}
LOG(INFO) << "Devices to unduck:";
- for (auto& addressToUnduck : duckingInfo.deviceAddressesToUnduck) {
+ for (const auto& addressToUnduck : duckingInfo.deviceAddressesToUnduck) {
LOG(INFO) << addressToUnduck;
}
LOG(INFO) << "Usages holding focus:";
- for (auto& usage : duckingInfo.usagesHoldingFocus) {
+ for (const auto& usage : duckingInfo.usagesHoldingFocus) {
LOG(INFO) << usage;
}
}
return ndk::ScopedAStatus::ok();
}
+ndk::ScopedAStatus AudioControl::onDevicesToMuteChange(
+ const std::vector