Update AudioPort <-> configs mapping

It is considered that in general there is a 1:N relationship
between an AudioPort and AudioPortConfigs.
The 'AudioPort.activeConfig' field could only support a 1:1
relationship, but this is true for device ports.
Thus, 'AudioPort.activeConfig' has been moved to 'AudioPortSys'.

The new field 'AudioPortConfig.portId' in the types shared with
HAL is initialized using the ID of the port this config applies
to.

Bug: 205884982
Test: atest audiofoundation_parcelable_test
Change-Id: I8db679213ad582ce106753d254f82ec0318b35bb
diff --git a/media/libaudioclient/AidlConversion.cpp b/media/libaudioclient/AidlConversion.cpp
index 4c83406..f2b7366 100644
--- a/media/libaudioclient/AidlConversion.cpp
+++ b/media/libaudioclient/AidlConversion.cpp
@@ -2957,11 +2957,8 @@
                                  }));
     legacy.num_gains = aidl.hal.gains.size();
 
-    media::AudioPortConfig aidlPortConfig;
-    aidlPortConfig.hal = aidl.hal.activeConfig;
-    aidlPortConfig.sys = aidl.sys.activeConfig;
     legacy.active_config = VALUE_OR_RETURN(
-            aidl2legacy_AudioPortConfig_audio_port_config(aidlPortConfig));
+            aidl2legacy_AudioPortConfig_audio_port_config(aidl.sys.activeConfig));
     legacy.ext = VALUE_OR_RETURN(
             aidl2legacy_AudioPortExt_audio_port_v7_ext(aidl.hal.ext, aidl.sys.type, aidl.sys.ext));
     return legacy;
@@ -3007,10 +3004,9 @@
                          }));
     aidl.sys.gains.resize(legacy.num_gains);
 
-    media::AudioPortConfig aidlPortConfig = VALUE_OR_RETURN(
+    aidl.sys.activeConfig = VALUE_OR_RETURN(
             legacy2aidl_audio_port_config_AudioPortConfig(legacy.active_config));
-    aidl.hal.activeConfig = aidlPortConfig.hal;
-    aidl.sys.activeConfig = aidlPortConfig.sys;
+    aidl.sys.activeConfig.hal.portId = aidl.hal.id;
     RETURN_IF_ERROR(
             legacy2aidl_AudioPortExt(legacy.ext, legacy.type, &aidl.hal.ext, &aidl.sys.ext));
     return aidl;
diff --git a/media/libaudioclient/aidl/android/media/AudioPortSys.aidl b/media/libaudioclient/aidl/android/media/AudioPortSys.aidl
index 27c0fe5..f3b5c19 100644
--- a/media/libaudioclient/aidl/android/media/AudioPortSys.aidl
+++ b/media/libaudioclient/aidl/android/media/AudioPortSys.aidl
@@ -17,7 +17,7 @@
 package android.media;
 
 import android.media.AudioGainSys;
-import android.media.AudioPortConfigSys;
+import android.media.AudioPortConfig;
 import android.media.AudioPortExtSys;
 import android.media.AudioPortRole;
 import android.media.AudioPortType;
@@ -35,8 +35,8 @@
     AudioProfileSys[] profiles;
     /** System-only parameters for each AudioGain from 'port.gains'. */
     AudioGainSys[] gains;
-    /** System-only parameters for 'port.activeConfig'. */
-    AudioPortConfigSys activeConfig;
+    /** Current audio port configuration. */
+    AudioPortConfig activeConfig;
     /** System-only extra parameters for 'port.ext'. */
     AudioPortExtSys ext;
 }
diff --git a/media/libaudiofoundation/DeviceDescriptorBase.cpp b/media/libaudiofoundation/DeviceDescriptorBase.cpp
index ec02d59..5ffbffc 100644
--- a/media/libaudiofoundation/DeviceDescriptorBase.cpp
+++ b/media/libaudiofoundation/DeviceDescriptorBase.cpp
@@ -176,8 +176,9 @@
 
 status_t DeviceDescriptorBase::writeToParcelable(media::AudioPort* parcelable) const {
     AudioPort::writeToParcelable(parcelable);
-    AudioPortConfig::writeToParcelable(&parcelable->hal.activeConfig, useInputChannelMask());
+    AudioPortConfig::writeToParcelable(&parcelable->sys.activeConfig.hal, useInputChannelMask());
     parcelable->hal.id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));
+    parcelable->sys.activeConfig.hal.portId = parcelable->hal.id;
 
     media::audio::common::AudioPortDeviceExt deviceExt;
     deviceExt.device = VALUE_OR_RETURN_STATUS(
@@ -201,7 +202,7 @@
     }
     status_t status = AudioPort::readFromParcelable(parcelable)
             ?: AudioPortConfig::readFromParcelable(
-                    parcelable.hal.activeConfig, useInputChannelMask());
+                    parcelable.sys.activeConfig.hal, useInputChannelMask());
     if (status != OK) {
         return status;
     }