Merge "Revert "Audio CAP: Address ANAPIC comments, Part 3."" into main am: 0121f3f5f2

Original change: https://android-review.googlesource.com/c/platform/system/hardware/interfaces/+/3368982

Change-Id: Ibff7751d71810cf7f40001874e568b0880568c06
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/media/Android.bp b/media/Android.bp
index b89d1b0..5ba8985 100644
--- a/media/Android.bp
+++ b/media/Android.bp
@@ -68,6 +68,7 @@
         "aidl/android/media/audio/common/AudioOffloadInfo.aidl",
         "aidl/android/media/audio/common/AudioOutputFlags.aidl",
         "aidl/android/media/audio/common/AudioPlaybackRate.aidl",
+        "aidl/android/media/audio/common/AudioPolicyForcedConfig.aidl",
         "aidl/android/media/audio/common/AudioPolicyForceUse.aidl",
         "aidl/android/media/audio/common/AudioPort.aidl",
         "aidl/android/media/audio/common/AudioPortConfig.aidl",
diff --git a/media/aidl/android/media/audio/common/AudioHalCapCriterionV2.aidl b/media/aidl/android/media/audio/common/AudioHalCapCriterionV2.aidl
index 2416bca..5e034c8 100644
--- a/media/aidl/android/media/audio/common/AudioHalCapCriterionV2.aidl
+++ b/media/aidl/android/media/audio/common/AudioHalCapCriterionV2.aidl
@@ -20,6 +20,7 @@
 import android.media.audio.common.AudioDeviceDescription;
 import android.media.audio.common.AudioMode;
 import android.media.audio.common.AudioPolicyForceUse;
+import android.media.audio.common.AudioPolicyForcedConfig;
 
 /**
  * AudioHalCapCriterion is a wrapper for a CriterionType and its default value.
@@ -47,13 +48,12 @@
      */
     @VintfStability
     parcelable ForceConfigForUse {
+        /**  Force usage addressed by this criterion. */
+        AudioPolicyForceUse forceUse = AudioPolicyForceUse.MEDIA;
         /** List of supported value by this criterion. */
-        AudioPolicyForceUse[] values;
-        /**
-         * Default configuration applied if none is provided. This is the default-initialized
-         * value of 'AudioPolicyForceUse' which is 'forMedia = NONE'.
-         */
-        AudioPolicyForceUse defaultValue;
+        AudioPolicyForcedConfig[] values;
+        /** Default configuration applied if none is provided. */
+        AudioPolicyForcedConfig defaultValue = AudioPolicyForcedConfig.NONE;
         /** Logic followed by this criterion, only one value at given time. */
         LogicalDisjunction logic = LogicalDisjunction.EXCLUSIVE;
     }
diff --git a/media/aidl/android/media/audio/common/AudioPolicyForceUse.aidl b/media/aidl/android/media/audio/common/AudioPolicyForceUse.aidl
index 4a67851..017fb30 100644
--- a/media/aidl/android/media/audio/common/AudioPolicyForceUse.aidl
+++ b/media/aidl/android/media/audio/common/AudioPolicyForceUse.aidl
@@ -16,92 +16,48 @@
 package android.media.audio.common;
 
 /**
- * "Force Use" specifies high-level routing policies which are used
- * in order to override the usual routing behavior.
+ * List of usages to be used the values from 'AudioPolicyForcedConfig' in order
+ * to force audio routing.
  *
  * {@hide}
  */
+@Backing(type="int")
 @SuppressWarnings(value={"redundant-name"})
 @VintfStability
-union AudioPolicyForceUse {
-    @Backing(type="byte")
-    @VintfStability
-    enum CommunicationDeviceCategory {
-        NONE = 0,
-        SPEAKER,
-        BT_SCO,
-        BT_BLE,
-        WIRED_ACCESSORY,
-    }
-    @Backing(type="byte")
-    @VintfStability
-    enum MediaDeviceCategory {
-        NONE = 0,
-        SPEAKER,
-        HEADPHONES,
-        BT_A2DP,
-        ANALOG_DOCK,
-        DIGITAL_DOCK,
-        WIRED_ACCESSORY,
-        NO_BT_A2DP,
-    }
-    @Backing(type="byte")
-    @VintfStability
-    enum DockType {
-        NONE = 0,
-        BT_CAR_DOCK,
-        BT_DESK_DOCK,
-        ANALOG_DOCK,
-        DIGITAL_DOCK,
-        WIRED_ACCESSORY,
-    }
-    @Backing(type="byte")
-    @VintfStability
-    enum EncodedSurroundConfig {
-        UNSPECIFIED = 0,
-        NEVER,
-        ALWAYS,
-        MANUAL,
-    }
-
-    /**
-     * Configures the audio device used for media playback.
-     * This is also the default value.
-     */
-    MediaDeviceCategory forMedia = MediaDeviceCategory.NONE;
+enum AudioPolicyForceUse {
     /**
      * Configures the audio device used for "communication" (telephony, VoIP) use cases.
-     * Note that 'BT_BLE' and 'WIRED_ACCESSORY' can not be used in this case.
      */
-    CommunicationDeviceCategory forCommunication = CommunicationDeviceCategory.NONE;
+    COMMUNICATION = 0,
+    /**
+     * Configures the audio device used for media playback.
+     */
+    MEDIA = 1,
     /**
      * Configures the audio device used for recording.
-     * Note that 'SPEAKER' and 'BT_BLE' can not be used in this case.
      */
-    CommunicationDeviceCategory forRecord = CommunicationDeviceCategory.NONE;
-    /**
-     * Configures whether in muted audio mode ringing should also be sent to a BT device.
-     * Note that 'SPEAKER' and 'WIRED_ACCESSORY' can not be used in this case.
-     */
-    CommunicationDeviceCategory forVibrateRinging = CommunicationDeviceCategory.NONE;
+    RECORD = 2,
     /**
      * Specifies whether the phone is currently placed into a dock. The value of
-     * specifies the kind of the dock. This field may also be used that sending
-     * of audio to the dock is overridden by another device.
+     * 'AudioPolicyForcedConfig' specifies the kind of the dock.
      */
-    DockType dock = DockType.NONE;
+    DOCK = 3,
     /**
      * Specifies whether enforcing of certain sounds is enabled, for example,
      * enforcing of the camera shutter sound.
      */
-    boolean systemSounds = false;
+    SYSTEM = 4,
     /**
      * Specifies whether sending of system audio via HDMI is enabled.
      */
-    boolean hdmiSystemAudio = false;
+    HDMI_SYSTEM_AUDIO = 5,
     /**
      * Configures whether support for encoded surround formats is enabled for
      * applications.
      */
-    EncodedSurroundConfig encodedSurround = EncodedSurroundConfig.UNSPECIFIED;
+    ENCODED_SURROUND = 6,
+    /**
+     * Configures whether in muted audio mode ringing should also be sent to a BT device.
+     */
+    VIBRATE_RINGING = 7,
 }
diff --git a/media/aidl/android/media/audio/common/AudioPolicyForcedConfig.aidl b/media/aidl/android/media/audio/common/AudioPolicyForcedConfig.aidl
new file mode 100644
index 0000000..a9e32bc
--- /dev/null
+++ b/media/aidl/android/media/audio/common/AudioPolicyForcedConfig.aidl
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2024 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.media.audio.common;
+
+/**
+ * List of forced configurations aka device categories to be used in addition to the force use
+ * in order to force the audio routing. This is the "destination" for 'AudioPolicyForceUse'.
+ *
+ * {@hide}
+ */
+@Backing(type="int")
+@SuppressWarnings(value={"redundant-name"})
+@VintfStability
+enum AudioPolicyForcedConfig {
+    /**
+     * The 'NONE' value can be used with all uses from 'AudioPolicyForceUse'.
+     */
+    NONE = 0,
+    /**
+     * The following configurations are used with 'AudioPolicyForceUse.COMMUNICATION',
+     * '.MEDIA', and '.RECORD'.
+     *
+     * BT_SCO is also used with 'AudioPolicyForceUse.VIBRATE_RINGING' to specify that
+     * in addition to vibration the ringing should be played via the BT SCO device.
+     */
+    SPEAKER = 1,
+    HEADPHONES = 2,
+    BT_SCO = 3,
+    BT_A2DP = 4,
+    WIRED_ACCESSORY = 5,
+    /**
+     * The '*_DOCK' values are for 'AudioPolicyForceUse.DOCK'.
+     */
+    BT_CAR_DOCK = 6,
+    BT_DESK_DOCK = 7,
+    ANALOG_DOCK = 8,
+    DIGITAL_DOCK = 9,
+    /**
+     * BT A2DP sink is not preferred to the speaker or a wired headset. Used for
+     * 'AudioPolicyForceUse.MEDIA'.
+     */
+    NO_BT_A2DP = 10,
+    /**
+     * Used with 'AudioPolicyForceUse.SYSTEM' to indicate that sound enforcement is enabled.
+     */
+    SYSTEM_ENFORCED = 11,
+    /**
+     * Used with 'AudioPolicyForceUse.HDMI_SYSTEM_AUDIO' to indicate that sending
+     * of system audio to HDMI is enabled.
+     */
+    HDMI_SYSTEM_AUDIO_ENFORCED = 12,
+    /**
+     * The '*_ENCODED_SURROUND' values are for 'AudioPolicyForceUse.ENCODED_SURROUND'.
+     */
+    ENCODED_SURROUND_NEVER = 13,
+    ENCODED_SURROUND_ALWAYS = 14,
+    ENCODED_SURROUND_MANUAL = 15,
+    /**
+     * Used with 'AudioPolicyForceUse.VIBRATE_RINGING' to specify that in addition to
+     * vibration the ringing should be played via the BT BLE device.
+     */
+    BT_BLE = 16,
+}
diff --git a/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioHalCapCriterionV2.aidl b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioHalCapCriterionV2.aidl
index b5ceee3..1cb453a 100644
--- a/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioHalCapCriterionV2.aidl
+++ b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioHalCapCriterionV2.aidl
@@ -48,8 +48,9 @@
   }
   @VintfStability
   parcelable ForceConfigForUse {
-    android.media.audio.common.AudioPolicyForceUse[] values;
-    android.media.audio.common.AudioPolicyForceUse defaultValue;
+    android.media.audio.common.AudioPolicyForceUse forceUse = android.media.audio.common.AudioPolicyForceUse.MEDIA;
+    android.media.audio.common.AudioPolicyForcedConfig[] values;
+    android.media.audio.common.AudioPolicyForcedConfig defaultValue = android.media.audio.common.AudioPolicyForcedConfig.NONE;
     android.media.audio.common.AudioHalCapCriterionV2.LogicalDisjunction logic = android.media.audio.common.AudioHalCapCriterionV2.LogicalDisjunction.EXCLUSIVE;
   }
   @VintfStability
diff --git a/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForceUse.aidl b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForceUse.aidl
index eb883e9..7e69f85 100644
--- a/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForceUse.aidl
+++ b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForceUse.aidl
@@ -33,49 +33,14 @@
 
 package android.media.audio.common;
 /* @hide */
-@SuppressWarnings(value={"redundant-name"}) @VintfStability
-union AudioPolicyForceUse {
-  android.media.audio.common.AudioPolicyForceUse.MediaDeviceCategory forMedia = android.media.audio.common.AudioPolicyForceUse.MediaDeviceCategory.NONE;
-  android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory forCommunication = android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory.NONE;
-  android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory forRecord = android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory.NONE;
-  android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory forVibrateRinging = android.media.audio.common.AudioPolicyForceUse.CommunicationDeviceCategory.NONE;
-  android.media.audio.common.AudioPolicyForceUse.DockType dock = android.media.audio.common.AudioPolicyForceUse.DockType.NONE;
-  boolean systemSounds = false;
-  boolean hdmiSystemAudio = false;
-  android.media.audio.common.AudioPolicyForceUse.EncodedSurroundConfig encodedSurround = android.media.audio.common.AudioPolicyForceUse.EncodedSurroundConfig.UNSPECIFIED;
-  @Backing(type="byte") @VintfStability
-  enum CommunicationDeviceCategory {
-    NONE = 0,
-    SPEAKER,
-    BT_SCO,
-    BT_BLE,
-    WIRED_ACCESSORY,
-  }
-  @Backing(type="byte") @VintfStability
-  enum MediaDeviceCategory {
-    NONE = 0,
-    SPEAKER,
-    HEADPHONES,
-    BT_A2DP,
-    ANALOG_DOCK,
-    DIGITAL_DOCK,
-    WIRED_ACCESSORY,
-    NO_BT_A2DP,
-  }
-  @Backing(type="byte") @VintfStability
-  enum DockType {
-    NONE = 0,
-    BT_CAR_DOCK,
-    BT_DESK_DOCK,
-    ANALOG_DOCK,
-    DIGITAL_DOCK,
-    WIRED_ACCESSORY,
-  }
-  @Backing(type="byte") @VintfStability
-  enum EncodedSurroundConfig {
-    UNSPECIFIED = 0,
-    NEVER,
-    ALWAYS,
-    MANUAL,
-  }
+@Backing(type="int") @SuppressWarnings(value={"redundant-name"}) @VintfStability
+enum AudioPolicyForceUse {
+  COMMUNICATION = 0,
+  MEDIA = 1,
+  RECORD = 2,
+  DOCK = 3,
+  SYSTEM = 4,
+  HDMI_SYSTEM_AUDIO = 5,
+  ENCODED_SURROUND = 6,
+  VIBRATE_RINGING = 7,
 }
diff --git a/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForcedConfig.aidl b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForcedConfig.aidl
new file mode 100644
index 0000000..5135bcd
--- /dev/null
+++ b/media/aidl_api/android.media.audio.common.types/current/android/media/audio/common/AudioPolicyForcedConfig.aidl
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file 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.media.audio.common;
+/* @hide */
+@Backing(type="int") @SuppressWarnings(value={"redundant-name"}) @VintfStability
+enum AudioPolicyForcedConfig {
+  NONE = 0,
+  SPEAKER = 1,
+  HEADPHONES = 2,
+  BT_SCO = 3,
+  BT_A2DP = 4,
+  WIRED_ACCESSORY = 5,
+  BT_CAR_DOCK = 6,
+  BT_DESK_DOCK = 7,
+  ANALOG_DOCK = 8,
+  DIGITAL_DOCK = 9,
+  NO_BT_A2DP = 10,
+  SYSTEM_ENFORCED = 11,
+  HDMI_SYSTEM_AUDIO_ENFORCED = 12,
+  ENCODED_SURROUND_NEVER = 13,
+  ENCODED_SURROUND_ALWAYS = 14,
+  ENCODED_SURROUND_MANUAL = 15,
+  BT_BLE = 16,
+}