Revert "Audio CAP: Address ANAPIC comments, Part 3."
Revert submission 3341640-fix-b-364310317-fix-ANAPIC-comments-3
Reason for revert: Droidmonitor created revert due to b/380080376. Will be verifying through ABTD before submission.
Reverted changes: /q/submissionid:3341640-fix-b-364310317-fix-ANAPIC-comments-3
Change-Id: I55deced1f833a7bb22b19fb5473b36c92e5f27ed
diff --git a/audio/aidl/default/CapEngineConfigXmlConverter.cpp b/audio/aidl/default/CapEngineConfigXmlConverter.cpp
index 20fbca4..a6e78b9 100644
--- a/audio/aidl/default/CapEngineConfigXmlConverter.cpp
+++ b/audio/aidl/default/CapEngineConfigXmlConverter.cpp
@@ -96,8 +96,8 @@
} else if (!fastcmp<strncmp>(criterionName.c_str(), kXsdcForceConfigForUse,
strlen(kXsdcForceConfigForUse))) {
AudioHalCapCriterionV2::ForceConfigForUse value;
- value.values.emplace_back(
- VALUE_OR_RETURN(convertForceUseToAidl(criterionName, criterionValue)));
+ value.forceUse = VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName));
+ value.values.emplace_back(VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue)));
rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(value);
} else {
LOG(ERROR) << __func__ << " unrecognized criterion " << criterionName;
diff --git a/audio/aidl/default/XsdcConversion.cpp b/audio/aidl/default/XsdcConversion.cpp
index 4282085..ba6110d 100644
--- a/audio/aidl/default/XsdcConversion.cpp
+++ b/audio/aidl/default/XsdcConversion.cpp
@@ -1,19 +1,3 @@
-/*
- * 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.
- */
-
#include <inttypes.h>
#include <unordered_set>
@@ -21,7 +5,6 @@
#define LOG_TAG "AHAL_Config"
#include <android-base/logging.h>
#include <android-base/strings.h>
-#include <android/binder_enums.h>
#include <aidl/android/media/audio/common/AudioPort.h>
#include <aidl/android/media/audio/common/AudioPortConfig.h>
@@ -37,7 +20,9 @@
using aidl::android::hardware::audio::common::iequals;
using aidl::android::hardware::audio::common::isValidAudioMode;
+using aidl::android::hardware::audio::common::isValidAudioPolicyForcedConfig;
using aidl::android::hardware::audio::common::kValidAudioModes;
+using aidl::android::hardware::audio::common::kValidAudioPolicyForcedConfig;
using aidl::android::media::audio::common::AudioChannelLayout;
using aidl::android::media::audio::common::AudioContentType;
using aidl::android::media::audio::common::AudioDevice;
@@ -64,10 +49,9 @@
using aidl::android::media::audio::common::AudioSource;
using aidl::android::media::audio::common::AudioStreamType;
using aidl::android::media::audio::common::AudioUsage;
-using android::BAD_VALUE;
-using android::base::unexpected;
-using android::utilities::convertTo;
-using ndk::enum_range;
+using ::android::BAD_VALUE;
+using ::android::base::unexpected;
+using ::android::utilities::convertTo;
namespace ap_xsd = android::audio::policy::configuration;
namespace eng_xsd = android::audio::policy::engine::configuration;
@@ -547,6 +531,18 @@
return result;
}
+ConversionResult<AudioPolicyForcedConfig> convertForcedConfigToAidl(
+ const std::string& xsdcForcedConfigCriterionType) {
+ const auto it = std::find_if(
+ kValidAudioPolicyForcedConfig.begin(), kValidAudioPolicyForcedConfig.end(),
+ [&](const auto& config) { return toString(config) == xsdcForcedConfigCriterionType; });
+ if (it == kValidAudioPolicyForcedConfig.end()) {
+ LOG(ERROR) << __func__ << " invalid forced config " << xsdcForcedConfigCriterionType;
+ return unexpected(BAD_VALUE);
+ }
+ return *it;
+}
+
ConversionResult<AudioMode> convertTelephonyModeToAidl(const std::string& xsdcModeCriterionType) {
const auto it = std::find_if(kValidAudioModes.begin(), kValidAudioModes.end(),
[&xsdcModeCriterionType](const auto& mode) {
@@ -641,16 +637,6 @@
return aidlDeviceAddresses;
}
-ConversionResult<AudioMode> convertAudioModeToAidl(const std::string& xsdcAudioModeType) {
- const auto it = std::find_if(enum_range<AudioMode>().begin(), enum_range<AudioMode>().end(),
- [&](const auto v) { return toString(v) == xsdcAudioModeType; });
- if (it == enum_range<AudioMode>().end()) {
- LOG(ERROR) << __func__ << " invalid audio mode " << xsdcAudioModeType;
- return unexpected(BAD_VALUE);
- }
- return *it;
-}
-
ConversionResult<std::vector<AudioMode>> convertTelephonyModesToAidl(
const eng_xsd::CriterionTypeType& xsdcTelephonyModeCriterionType) {
if (xsdcTelephonyModeCriterionType.getValues().empty()) {
@@ -661,97 +647,71 @@
for (eng_xsd::ValuesType xsdcValues : xsdcTelephonyModeCriterionType.getValues()) {
aidlAudioModes.reserve(xsdcValues.getValue().size());
for (const eng_xsd::ValueType& xsdcValue : xsdcValues.getValue()) {
- aidlAudioModes.push_back(
- VALUE_OR_RETURN(convertAudioModeToAidl(xsdcValue.getLiteral())));
+ int integerValue = xsdcValue.getNumerical();
+ if (!isValidAudioMode(AudioMode(integerValue))) {
+ LOG(ERROR) << __func__ << " invalid audio mode " << integerValue;
+ return unexpected(BAD_VALUE);
+ }
+ aidlAudioModes.push_back(AudioMode(integerValue));
}
}
return aidlAudioModes;
}
-ConversionResult<std::vector<AudioPolicyForceUse>> convertForceUseConfigsToAidl(
- const std::string& criterionValue,
+ConversionResult<std::vector<AudioPolicyForcedConfig>> convertForcedConfigsToAidl(
const eng_xsd::CriterionTypeType& xsdcForcedConfigCriterionType) {
if (xsdcForcedConfigCriterionType.getValues().empty()) {
LOG(ERROR) << __func__ << " no values provided";
return unexpected(BAD_VALUE);
}
- std::vector<AudioPolicyForceUse> aidlForcedConfigs;
+ std::vector<AudioPolicyForcedConfig> aidlForcedConfigs;
for (eng_xsd::ValuesType xsdcValues : xsdcForcedConfigCriterionType.getValues()) {
aidlForcedConfigs.reserve(xsdcValues.getValue().size());
for (const eng_xsd::ValueType& xsdcValue : xsdcValues.getValue()) {
- aidlForcedConfigs.push_back(
- VALUE_OR_RETURN(convertForceUseToAidl(criterionValue, xsdcValue.getLiteral())));
+ int integerValue = xsdcValue.getNumerical();
+ if (!isValidAudioPolicyForcedConfig(AudioPolicyForcedConfig(integerValue))) {
+ LOG(ERROR) << __func__ << " invalid forced config mode " << integerValue;
+ return unexpected(BAD_VALUE);
+ }
+ aidlForcedConfigs.push_back(AudioPolicyForcedConfig(integerValue));
}
}
return aidlForcedConfigs;
}
-template <typename T>
-ConversionResult<T> convertForceUseForcedConfigToAidl(
- const std::string& xsdcForcedConfigCriterionType) {
- const auto it = std::find_if(enum_range<T>().begin(), enum_range<T>().end(), [&](const auto v) {
- return toString(v) == xsdcForcedConfigCriterionType;
- });
- if (it == enum_range<T>().end()) {
- LOG(ERROR) << __func__ << " invalid forced config " << xsdcForcedConfigCriterionType;
- return unexpected(BAD_VALUE);
- }
- return *it;
-}
-
-ConversionResult<AudioPolicyForceUse> convertForceUseToAidl(const std::string& xsdcCriterionName,
- const std::string& xsdcCriterionValue) {
+ConversionResult<AudioPolicyForceUse> convertForceUseCriterionToAidl(
+ const std::string& xsdcCriterionName) {
if (!fastcmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForCommunication,
- strlen(kXsdcForceConfigForCommunication))) {
- const auto deviceCategory = VALUE_OR_RETURN(
- convertForceUseForcedConfigToAidl<AudioPolicyForceUse::CommunicationDeviceCategory>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::forCommunication>(deviceCategory);
+ strlen(kXsdcForceConfigForCommunication))) {
+ return AudioPolicyForceUse::COMMUNICATION;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForMedia,
strlen(kXsdcForceConfigForMedia))) {
- const auto deviceCategory = VALUE_OR_RETURN(
- convertForceUseForcedConfigToAidl<AudioPolicyForceUse::MediaDeviceCategory>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::forMedia>(deviceCategory);
+ return AudioPolicyForceUse::MEDIA;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForRecord,
strlen(kXsdcForceConfigForRecord))) {
- const auto deviceCategory = VALUE_OR_RETURN(
- convertForceUseForcedConfigToAidl<AudioPolicyForceUse::CommunicationDeviceCategory>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::forRecord>(deviceCategory);
+ return AudioPolicyForceUse::RECORD;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForDock,
- strlen(kXsdcForceConfigForDock))) {
- const auto dockType =
- VALUE_OR_RETURN(convertForceUseForcedConfigToAidl<AudioPolicyForceUse::DockType>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::dock>(dockType);
+ strlen(kXsdcForceConfigForDock))) {
+ return AudioPolicyForceUse::DOCK;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForSystem,
strlen(kXsdcForceConfigForSystem))) {
- return AudioPolicyForceUse::make<AudioPolicyForceUse::systemSounds>(xsdcCriterionValue ==
- "SYSTEM_ENFORCED");
+ return AudioPolicyForceUse::SYSTEM;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForHdmiSystemAudio,
strlen(kXsdcForceConfigForHdmiSystemAudio))) {
- return AudioPolicyForceUse::make<AudioPolicyForceUse::hdmiSystemAudio>(
- xsdcCriterionValue == "HDMI_SYSTEM_AUDIO_ENFORCED");
+ return AudioPolicyForceUse::HDMI_SYSTEM_AUDIO;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForEncodedSurround,
strlen(kXsdcForceConfigForEncodedSurround))) {
- const auto encodedSurround = VALUE_OR_RETURN(
- convertForceUseForcedConfigToAidl<AudioPolicyForceUse::EncodedSurroundConfig>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::encodedSurround>(encodedSurround);
+ return AudioPolicyForceUse::ENCODED_SURROUND;
}
if (!fasticmp<strncmp>(xsdcCriterionName.c_str(), kXsdcForceConfigForVibrateRinging,
strlen(kXsdcForceConfigForVibrateRinging))) {
- const auto deviceCategory = VALUE_OR_RETURN(
- convertForceUseForcedConfigToAidl<AudioPolicyForceUse::CommunicationDeviceCategory>(
- xsdcCriterionValue));
- return AudioPolicyForceUse::make<AudioPolicyForceUse::forVibrateRinging>(deviceCategory);
+ return AudioPolicyForceUse::VIBRATE_RINGING;
}
LOG(ERROR) << __func__ << " unrecognized force use " << xsdcCriterionName;
return unexpected(BAD_VALUE);
@@ -787,8 +747,9 @@
}
if (!fastcmp<strncmp>(xsdcCriterion.getName().c_str(), kXsdcForceConfigForUse,
strlen(kXsdcForceConfigForUse))) {
- return AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(VALUE_OR_RETURN(
- convertForceUseConfigsToAidl(xsdcCriterion.getName(), xsdcCriterionType)));
+ return AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(
+ VALUE_OR_RETURN(convertForceUseCriterionToAidl(xsdcCriterion.getName())),
+ VALUE_OR_RETURN(convertForcedConfigsToAidl(xsdcCriterionType)));
}
LOG(ERROR) << __func__ << " unrecognized criterion " << xsdcCriterion.getName();
return unexpected(BAD_VALUE);
diff --git a/audio/aidl/default/config/audioPolicy/engine/api/current.txt b/audio/aidl/default/config/audioPolicy/engine/api/current.txt
index 017362f..8e0e9a2 100644
--- a/audio/aidl/default/config/audioPolicy/engine/api/current.txt
+++ b/audio/aidl/default/config/audioPolicy/engine/api/current.txt
@@ -148,45 +148,6 @@
method public void setValue(@Nullable java.util.List<android.audio.policy.engine.configuration.FlagType>);
}
- public enum ForcedConfigCommunicationDeviceType {
- method @NonNull public String getRawName();
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigCommunicationDeviceType BT_BLE;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigCommunicationDeviceType BT_SCO;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigCommunicationDeviceType NONE;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigCommunicationDeviceType SPEAKER;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigCommunicationDeviceType WIRED_ACCESSORY;
- }
-
- public enum ForcedConfigDockType {
- method @NonNull public String getRawName();
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType ANALOG_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType BT_CAR_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType BT_DESK_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType DIGITAL_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType NONE;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigDockType WIRED_ACCESSORY;
- }
-
- public enum ForcedConfigMediaDeviceType {
- method @NonNull public String getRawName();
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType ANALOG_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType BT_A2DP;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType DIGITAL_DOCK;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType HEADPHONES;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType NONE;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType NO_BT_A2DP;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType SPEAKER;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedConfigMediaDeviceType WIRED_ACCESSORY;
- }
-
- public enum ForcedEncodingSourroundConfigType {
- method @NonNull public String getRawName();
- enum_constant public static final android.audio.policy.engine.configuration.ForcedEncodingSourroundConfigType ALWAYS;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedEncodingSourroundConfigType MANUAL;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedEncodingSourroundConfigType NEVER;
- enum_constant public static final android.audio.policy.engine.configuration.ForcedEncodingSourroundConfigType UNSPECIFIED;
- }
-
public enum PfwCriterionTypeEnum {
method @NonNull public String getRawName();
enum_constant public static final android.audio.policy.engine.configuration.PfwCriterionTypeEnum exclusive;
@@ -283,8 +244,10 @@
ctor public ValueType();
method @Nullable public String getAndroid_type();
method @Nullable public String getLiteral();
+ method @Nullable public long getNumerical();
method public void setAndroid_type(@Nullable String);
method public void setLiteral(@Nullable String);
+ method public void setNumerical(@Nullable long);
}
public class ValuesType {
diff --git a/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd b/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd
index c16e366..e2508ea 100644
--- a/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd
+++ b/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd
@@ -191,9 +191,10 @@
<xs:complexType name="valueType">
<xs:annotation>
<xs:documentation xml:lang="en">
- Criterion type is provided as a pair of 'human readable' string (referred as the
- literal part, that will allow to express 'human readable' rules and an optional
- android type.
+ Criterion type is provided as a tuple of 'human readable' string (referred as the
+ literal part, that will allow to express 'human readable' rules, numerical value
+ associated in order to improve performances of the parameter framework library used,
+ and an optional android type.
This android type is reserved for device type mapping with parameter framework
representation on a bitfield (Only one bit is expected to represent a device) and
android representation of a type that may use several bits.
@@ -202,6 +203,7 @@
</xs:documentation>
</xs:annotation>
<xs:attribute name="literal" type="xs:string" use="required"/>
+ <xs:attribute name="numerical" type="xs:long" use="required"/>
<xs:attribute name="android_type" type="longDecimalOrHexType" use="optional"/>
</xs:complexType>
@@ -407,49 +409,6 @@
</xs:restriction>
</xs:simpleType>
- <xs:simpleType name="forcedConfigCommunicationDeviceType">
- <xs:restriction base="xs:string">
- <xs:enumeration value="NONE"/>
- <xs:enumeration value="SPEAKER"/>
- <xs:enumeration value="BT_SCO"/>
- <xs:enumeration value="BT_BLE"/>
- <xs:enumeration value="WIRED_ACCESSORY"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="forcedConfigMediaDeviceType">
- <xs:restriction base="xs:string">
- <xs:enumeration value="NONE"/>
- <xs:enumeration value="SPEAKER"/>
- <xs:enumeration value="HEADPHONES"/>
- <xs:enumeration value="BT_A2DP"/>
- <xs:enumeration value="ANALOG_DOCK"/>
- <xs:enumeration value="DIGITAL_DOCK"/>
- <xs:enumeration value="WIRED_ACCESSORY"/>
- <xs:enumeration value="NO_BT_A2DP"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="forcedConfigDockType">
- <xs:restriction base="xs:string">
- <xs:enumeration value="NONE"/>
- <xs:enumeration value="BT_CAR_DOCK"/>
- <xs:enumeration value="BT_DESK_DOCK"/>
- <xs:enumeration value="ANALOG_DOCK"/>
- <xs:enumeration value="DIGITAL_DOCK"/>
- <xs:enumeration value="WIRED_ACCESSORY"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="forcedEncodingSourroundConfigType">
- <xs:restriction base="xs:string">
- <xs:enumeration value="UNSPECIFIED"/>
- <xs:enumeration value="NEVER"/>
- <xs:enumeration value="ALWAYS"/>
- <xs:enumeration value="MANUAL"/>
- </xs:restriction>
- </xs:simpleType>
-
<xs:simpleType name="sourceEnumType">
<xs:restriction base="xs:string">
<xs:enumeration value="AUDIO_SOURCE_DEFAULT"/>
diff --git a/audio/aidl/default/include/core-impl/XsdcConversion.h b/audio/aidl/default/include/core-impl/XsdcConversion.h
index f00206b..e855a3e 100644
--- a/audio/aidl/default/include/core-impl/XsdcConversion.h
+++ b/audio/aidl/default/include/core-impl/XsdcConversion.h
@@ -1,20 +1,6 @@
-/*
- * 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.
- */
-
#include <string>
+#include <unordered_map>
+#include <unordered_set>
#include <aidl/android/media/audio/common/AudioHalCapCriterion.h>
#include <aidl/android/media/audio/common/AudioHalCapCriterionType.h>
@@ -35,8 +21,10 @@
static constexpr const char kXsdcForceConfigForUse[] = "ForceUseFor";
-ConversionResult<aidlaudiocommon::AudioPolicyForceUse> convertForceUseToAidl(
- const std::string& xsdcCriterionName, const std::string& xsdcCriterionValue);
+ConversionResult<aidlaudiocommon::AudioPolicyForceUse> convertForceUseCriterionToAidl(
+ const std::string& xsdcCriterionName);
+ConversionResult<aidlaudiocommon::AudioPolicyForcedConfig> convertForcedConfigToAidl(
+ const std::string& xsdcForcedConfigCriterionType);
ConversionResult<aidlaudiocommon::AudioDeviceAddress> convertDeviceAddressToAidl(
const std::string& xsdcAddress);
ConversionResult<aidlaudiocommon::AudioMode> convertTelephonyModeToAidl(