Merge "Add AIDL API feedback" into main
diff --git a/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/AudioZone.aidl b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/AudioZone.aidl
index 2cb1760..57a9812 100644
--- a/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/AudioZone.aidl
+++ b/automotive/audiocontrol/aidl/aidl_api/android.hardware.automotive.audiocontrol/current/android/hardware/automotive/audiocontrol/AudioZone.aidl
@@ -35,11 +35,10 @@
 @JavaDerive(equals=true, toString=true) @VintfStability
 parcelable AudioZone {
   String name;
-  int id;
+  int id = android.media.audio.common.AudioHalProductStrategy.ZoneId.DEFAULT /* 0 */;
   int occupantZoneId = UNASSIGNED_OCCUPANT /* -1 */;
   android.hardware.automotive.audiocontrol.AudioZoneContext audioZoneContext;
   List<android.hardware.automotive.audiocontrol.AudioZoneConfig> audioZoneConfigs;
   List<android.media.audio.common.AudioPort> inputAudioDevices;
-  const int PRIMARY_AUDIO_ZONE = 0;
   const int UNASSIGNED_OCCUPANT = (-1) /* -1 */;
 }
diff --git a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioFadeConfiguration.aidl b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioFadeConfiguration.aidl
index d3181da..4190c46 100644
--- a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioFadeConfiguration.aidl
+++ b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioFadeConfiguration.aidl
@@ -73,6 +73,10 @@
 
     /**
      * Fade in delayed duration for audio focus offender in milliseconds
+     *
+     * <p>Fade offender are defined as audio players that do not stop playback after audio focus
+     * lost. This timeout serves to continue to fadeout the offender until audio is stopped or the
+     * timeout expires.
      */
     long fadeInDelayedForOffendersMs = DEFAULT_DELAY_FADE_IN_OFFENDERS_MS;
 
diff --git a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioZone.aidl b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioZone.aidl
index c90bcfd..d31d6fd 100644
--- a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioZone.aidl
+++ b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/AudioZone.aidl
@@ -18,6 +18,7 @@
 
 import android.hardware.automotive.audiocontrol.AudioZoneConfig;
 import android.hardware.automotive.audiocontrol.AudioZoneContext;
+import android.media.audio.common.AudioHalProductStrategy;
 import android.media.audio.common.AudioPort;
 
 /**
@@ -27,11 +28,6 @@
 @VintfStability
 parcelable AudioZone {
     /**
-     * Value indicating the primary audio zone
-     */
-    const int PRIMARY_AUDIO_ZONE = 0;
-
-    /**
      * Value indicating the occupant zone is not assigned.
      */
     const int UNASSIGNED_OCCUPANT = -1;
@@ -47,8 +43,11 @@
     /**
      * Audio zone id use to distiguish between the different audio zones for
      * volume management, fade, and min/max activation management.
+     *
+     * <p>Value must start at {@link AudioHalProductStrategy#ZoneId#DEFAULT} for the primary zone
+     * and increase for each different zone. Zone id must also not repeat for different zones.
      */
-    int id;
+    int id = AudioHalProductStrategy.ZoneId.DEFAULT;
 
     /**
      * Occupant zone id that should be mapped to this audio zone.
diff --git a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/VolumeGroupConfig.aidl b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/VolumeGroupConfig.aidl
index 7e3bc60..bea80ce 100644
--- a/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/VolumeGroupConfig.aidl
+++ b/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol/VolumeGroupConfig.aidl
@@ -33,8 +33,9 @@
     /**
      * Audio zone group name.
      *
-     * <p>Must be non-empty if using configurable audio policy engine volume management, see
-     * {@code AudioDeviceConfiguration#useCoreAudioVolume} for details.
+     * <p>Must be non-empty if using configurable audio policy engine volume management,
+     * {@see AudioDeviceConfiguration#useCoreAudioVolume} for details. For non-core volume group
+     * management this can be left empty or use for debugging purposes.
      */
     String name;
 
diff --git a/automotive/audiocontrol/aidl/default/converter/src/CarAudioConfigurationXmlConverter.cpp b/automotive/audiocontrol/aidl/default/converter/src/CarAudioConfigurationXmlConverter.cpp
index 206ce0c..f4e8123 100644
--- a/automotive/audiocontrol/aidl/default/converter/src/CarAudioConfigurationXmlConverter.cpp
+++ b/automotive/audiocontrol/aidl/default/converter/src/CarAudioConfigurationXmlConverter.cpp
@@ -49,6 +49,7 @@
 using aidl::android::media::audio::common::AudioDeviceAddress;
 using aidl::android::media::audio::common::AudioDeviceDescription;
 using aidl::android::media::audio::common::AudioDeviceType;
+using aidl::android::media::audio::common::AudioHalProductStrategy;
 using aidl::android::media::audio::common::AudioPort;
 using aidl::android::media::audio::common::AudioPortDeviceExt;
 using aidl::android::media::audio::common::AudioPortExt;
@@ -537,6 +538,7 @@
 
 bool parseAudioZone(const xsd::ZoneType& zone, const ActivationMap& activations,
                     const FadeConfigurationMap& fadeConfigurations, api::AudioZone& audioZone) {
+    static int kPrimaryZoneId = static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT);
     if (zone.hasName()) {
         audioZone.name = zone.getName();
     }
@@ -558,7 +560,7 @@
     bool isPrimary = zone.hasIsPrimary() && zone.getIsPrimary();
 
     if (isPrimary) {
-        audioZone.id = api::AudioZone::PRIMARY_AUDIO_ZONE;
+        audioZone.id = kPrimaryZoneId;
     }
 
     // ID not required in XML for primary zone
@@ -569,10 +571,10 @@
         return false;
     }
 
-    if (isPrimary && audioZone.id != api::AudioZone::PRIMARY_AUDIO_ZONE) {
+    if (isPrimary && audioZone.id != kPrimaryZoneId) {
         LOG(ERROR) << __func__ << " Audio zone is primary but has zone id "
                    << std::to_string(audioZone.id) << " instead of primary zone id "
-                   << std::to_string(api::AudioZone::PRIMARY_AUDIO_ZONE);
+                   << std::to_string(kPrimaryZoneId);
         return false;
     }
 
diff --git a/automotive/audiocontrol/aidl/default/converter/test/AudioControlConverterUnitTest.cpp b/automotive/audiocontrol/aidl/default/converter/test/AudioControlConverterUnitTest.cpp
index b6bebe5..d11a59a 100644
--- a/automotive/audiocontrol/aidl/default/converter/test/AudioControlConverterUnitTest.cpp
+++ b/automotive/audiocontrol/aidl/default/converter/test/AudioControlConverterUnitTest.cpp
@@ -38,6 +38,7 @@
 using ::aidl::android::media::audio::common::AudioDeviceAddress;
 using ::aidl::android::media::audio::common::AudioDeviceDescription;
 using ::aidl::android::media::audio::common::AudioDeviceType;
+using ::aidl::android::media::audio::common::AudioHalProductStrategy;
 using ::aidl::android::media::audio::common::AudioPort;
 using ::aidl::android::media::audio::common::AudioPortDeviceExt;
 using ::aidl::android::media::audio::common::AudioPortExt;
@@ -476,7 +477,7 @@
         {kBusMediaVolumeGroup, kBusNavVolumeGroup, kBusCallVolumeGroup, kBusSysVolumeGroup}, true);
 
 const api::AudioZone kDriverZone =
-        createAudioZone("driver zone", api::AudioZone::PRIMARY_AUDIO_ZONE,
+        createAudioZone("driver zone", static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT),
                         kSimpleCarAudioConfigurationContext, {kDriverZoneConfig});
 
 const api::AudioZoneFadeConfiguration kZoneAudioConfigFading = createAudioZoneFadeConfiguration(
@@ -491,9 +492,9 @@
                        "oem_system_sound", "oem_notification"})});
 const api::AudioZoneConfig kFrontZoneConfig = createAudioZoneConfig(
         "front passenger config 0", kZoneAudioConfigFading, {kFrontVolumeGroup}, true);
-const api::AudioZone kFrontZone =
-        createAudioZone("front passenger zone", api::AudioZone::PRIMARY_AUDIO_ZONE + 1,
-                        kSimpleCarAudioConfigurationContext, {kFrontZoneConfig});
+const api::AudioZone kFrontZone = createAudioZone(
+        "front passenger zone", static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT) + 1,
+        kSimpleCarAudioConfigurationContext, {kFrontZoneConfig});
 
 const AudioPort kBusRearDevice = createAudioPort("BUS_REAR", AudioDeviceType::OUT_BUS);
 const api::VolumeGroupConfig kRearVolumeGroup =
@@ -503,9 +504,9 @@
                                                          "oem_system_sound", "oem_notification"})});
 const api::AudioZoneConfig kRearZoneConfig = createAudioZoneConfig(
         "rear seat config 0", kZoneAudioConfigFading, {kRearVolumeGroup}, true);
-const api::AudioZone kRearZone =
-        createAudioZone("rear seat zone", api::AudioZone::PRIMARY_AUDIO_ZONE + 2,
-                        kSimpleCarAudioConfigurationContext, {kRearZoneConfig});
+const api::AudioZone kRearZone = createAudioZone(
+        "rear seat zone", static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT) + 2,
+        kSimpleCarAudioConfigurationContext, {kRearZoneConfig});
 
 std::vector<api::AudioZone> kMultiZones = {kDriverZone, kFrontZone, kRearZone};
 
@@ -624,7 +625,7 @@
     EXPECT_EQ(zones.size(), 1);
 
     const auto& zone = zones.front();
-    EXPECT_EQ(zone.id, api::AudioZone::PRIMARY_AUDIO_ZONE);
+    EXPECT_EQ(zone.id, static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT));
     EXPECT_EQ(zone.occupantZoneId, 0);
     EXPECT_EQ(zone.name, "primary zone");
 
@@ -685,7 +686,7 @@
     EXPECT_EQ(zones.size(), 1);
 
     const auto& zone = zones.front();
-    EXPECT_EQ(zone.id, api::AudioZone::PRIMARY_AUDIO_ZONE);
+    EXPECT_EQ(zone.id, static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT));
     EXPECT_EQ(zone.occupantZoneId, 0);
     EXPECT_EQ(zone.name, "primary zone");
 
diff --git a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
index cd58f40..f01f04d 100644
--- a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
+++ b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
@@ -26,6 +26,7 @@
 #include <android/hardware/automotive/audiocontrol/BnModuleChangeCallback.h>
 #include <android/hardware/automotive/audiocontrol/IAudioControl.h>
 #include <android/log.h>
+#include <android/media/audio/common/AudioHalProductStrategy.h>
 #include <binder/IServiceManager.h>
 #include <binder/ProcessState.h>
 #include <include/AudioControlTestUtils.h>
@@ -63,6 +64,8 @@
         DEFAULT_MAX_ACTIVATION_VALUE;
 using android::hardware::automotive::audiocontrol::VolumeActivationConfigurationEntry::
         DEFAULT_MIN_ACTIVATION_VALUE;
+using android::media::audio::common::AudioHalProductStrategy;
+
 using ::testing::AnyOf;
 using ::testing::Eq;
 
@@ -628,7 +631,7 @@
     std::set<android::String16> zoneNames;
     std::set<std::string> deviceAddresses;
     for (const auto& zone : audioZones) {
-        if (zone.id == AudioZone::PRIMARY_AUDIO_ZONE) {
+        if (zone.id == static_cast<int>(AudioHalProductStrategy::ZoneId::DEFAULT)) {
             EXPECT_FALSE(primaryZoneFound) << "There can only be one primary zone";
             primaryZoneFound = true;
         }