audiopolicy: engineconfigurable: add configuration of ProductStrategies
-Update Policy PFW plugin to support product strategies
-Provides example structure/Settings to configure Product Strategies
Test: make
Change-Id: I2493e261f302b78f3b96e17d87fb7028d9cde23e
diff --git a/services/audiopolicy/engine/config/Android.mk b/services/audiopolicy/engine/config/Android.mk
index dbcd1bf..cb35c37 100644
--- a/services/audiopolicy/engine/config/Android.mk
+++ b/services/audiopolicy/engine/config/Android.mk
@@ -39,3 +39,4 @@
libaudiopolicycommon
include $(BUILD_SHARED_LIBRARY)
+
diff --git a/services/audiopolicy/engineconfigurable/config/Android.mk b/services/audiopolicy/engineconfigurable/config/Android.mk
new file mode 100644
index 0000000..dcce8e3
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/Android.mk
@@ -0,0 +1,9 @@
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#######################################################################
+# Recursive call sub-folder Android.mk
+#
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
diff --git a/services/audiopolicy/engineconfigurable/config/example/Android.mk b/services/audiopolicy/engineconfigurable/config/example/Android.mk
new file mode 100644
index 0000000..caf8afa
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/example/Android.mk
@@ -0,0 +1,67 @@
+LOCAL_PATH := $(call my-dir)
+
+##################################################################
+# CONFIGURATION TOP FILE
+##################################################################
+
+ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), phone_configurable)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_configuration_phone.xml
+LOCAL_MODULE_STEM := audio_policy_engine_configuration.xml
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := phone/$(LOCAL_MODULE_STEM)
+
+LOCAL_REQUIRED_MODULES := \
+ audio_policy_engine_product_strategies_phone.xml
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_product_strategies_phone.xml
+LOCAL_MODULE_STEM := audio_policy_engine_product_strategies.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := phone/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+endif # ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), phone_configurable)
+
+
+ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), automotive_configurable)
+
+##################################################################
+# AUTOMOTIVE CONFIGURATION TOP FILE
+##################################################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_configuration_automotive.xml
+LOCAL_MODULE_STEM := audio_policy_engine_configuration.xml
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := automotive/$(LOCAL_MODULE_STEM)
+
+LOCAL_REQUIRED_MODULES := \
+ audio_policy_engine_product_strategies_automotive.xml \
+
+include $(BUILD_PREBUILT)
+
+##################################################################
+# CONFIGURATION FILES
+##################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_product_strategies_automotive.xml
+LOCAL_MODULE_STEM := audio_policy_engine_product_strategies.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := automotive/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+endif #ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), automotive_configurable)
diff --git a/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_configuration.xml b/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_configuration.xml
new file mode 100644
index 0000000..ab61d8a
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_configuration.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<configuration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <xi:include href="audio_policy_engine_product_strategies.xml"/>
+
+</configuration>
+
diff --git a/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_product_strategies.xml b/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_product_strategies.xml
new file mode 100644
index 0000000..543a2f0
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/example/automotive/audio_policy_engine_product_strategies.xml
@@ -0,0 +1,161 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<ProductStrategies>
+ <!-- OEM Usages -->
+ <!-- product_strategy will be defined according this order
+ product_strategy is oem_traffic_anouncement if all the conditions are satisfied for
+ AudioAttributes aa
+
+ int type = 0;
+ if (bundle != null) {
+ type = bundle.getInt(KEY_OEM_TYPE, 0);
+ }
+ if(
+ ( aa.mContentType == AudioAttributes.AUDIO_CONTENT_TYPE_SPEECH ) &&
+ ( aa.mUsage == AudioAttributes.AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE ) &&
+ ( type == 1 ) )
+ -->
+
+ <ProductStrategy name="oem_traffic_anouncement">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_SPEECH"/>
+ <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <!-- traffic_annoucement = 1 -->
+ <Bundle key="oem" value="1"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="oem_strategy_1">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_SPEECH"/>
+ <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <Bundle key="oem" value="2"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="oem_strategy_2">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_SPEECH"/>
+ <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <Bundle key="oem" value="3"/>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Car Usages -->
+ <!-- Keep those lines only for car -->
+ <!-- Check car conditions if any OEM conditions matched -->
+ <!-- As defined by CarAudioAttributesUtil.java -->
+ <!-- product_strategy will be defined according this order
+ product_strategy is radio if all the conditions are satisfied for AudioAttributes aa
+
+ int type = CAR_AUDIO_TYPE_DEFAULT;
+ if (bundle != null) {
+ type = bundle.getInt(KEY_CAR_AUDIO_TYPE, CAR_AUDIO_TYPE_DEFAULT);
+ }
+ if(
+ ( aa.mContentType == AudioAttributes.AUDIO_CONTENT_TYPE_SPEECH ) &&
+ ( aa.mUsage == AudioAttributes.AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE ) &&
+ ( type == CAR_AUDIO_TYPE_RADIO ) )
+ -->
+ <ProductStrategy name="radio">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_MUSIC"/>
+ <Usage value="AUDIO_USAGE_MEDIA"/>
+ <Bundle key="car_audio_type" value="3"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="ext_audio_source">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_MUSIC"/>
+ <Usage value="AUDIO_USAGE_MEDIA"/>
+ <Bundle key="car_audio_type" value="7"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="voice_command">
+ <AttributesGroup>
+ <Attributes>
+ <ContentType value="AUDIO_CONTENT_TYPE_SPEECH"/>
+ <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <!-- CAR_AUDIO_TYPE_VOICE_COMMAND = 1 -->
+ <Bundle key="car_audio_type" value="1"/>
+ </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANT"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="safety_alert">
+ <AttributesGroup>
+ <ContentType value="AUDIO_CONTENT_TYPE_SONIFICATION"/>
+ <Usage value="AUDIO_USAGE_NOTIFICATION"/>
+ <!-- CAR_AUDIO_TYPE_SAFETY_ALERT = 2 -->
+ <Bundle key="car_audio_type" value="2"/>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- To be checked
+ CAR_AUDIO_TYPE_CARSERVICE_BOTTOM
+ CAR_AUDIO_TYPE_CARSERVICE_CAR_PROXY
+ CAR_AUDIO_TYPE_CARSERVICE_MEDIA_MUTE
+ -->
+
+ <!-- Generic Usages -->
+ <ProductStrategy name="music">
+ <AttributesGroup streamType="AUDIO_STREAM_MUSIC">
+ <Attributes> <Usage value="AUDIO_USAGE_MEDIA"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_GAME"/> </Attributes>
+ <!-- Default product strategy has empty attributes -->
+ <Attributes></Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="nav_guidance">
+ <AttributesGroup>
+ <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="voice_call">
+ <AttributesGroup streamType="AUDIO_STREAM_VOICE_CALL">
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/> </Attributes>
+ <Attributes> <Flags value="AUDIO_FLAG_SCO"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="alarm">
+ <AttributesGroup streamType="AUDIO_STREAM_ALARM">
+ <Usage value="AUDIO_USAGE_ALARM"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="ring">
+ <AttributesGroup streamType="AUDIO_STREAM_RING">
+ <Usage value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="notification">
+ <AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION">
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_EVENT"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+ <ProductStrategy name="system">
+ <AttributesGroup streamType="AUDIO_STREAM_SYSTEM">
+ <Usage value="AUDIO_USAGE_ASSISTANCE_SONIFICATION"/>
+ </AttributesGroup>
+ </ProductStrategy>
+
+</ProductStrategies>
+
diff --git a/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_configuration.xml b/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_configuration.xml
new file mode 100644
index 0000000..ab61d8a
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_configuration.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<configuration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <xi:include href="audio_policy_engine_product_strategies.xml"/>
+
+</configuration>
+
diff --git a/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_product_strategies.xml b/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_product_strategies.xml
new file mode 100644
index 0000000..f72e379
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/config/example/phone/audio_policy_engine_product_strategies.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<ProductStrategies>
+
+ <!-- "hidden strategies" like TTS, enforced audible:
+ Shall we expose them here or keep it hard coded -->
+
+ <!-- Used to identify the volume of audio streams for enforced system sounds in certain
+ countries (e.g. camera in Japan)
+ This strategy will only have higher priority than phone if force for system is set to
+ enforced. -->
+
+ <ProductStrategy name="STRATEGY_PHONE">
+ <AttributesGroup streamType="AUDIO_STREAM_VOICE_CALL">
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION"/> </Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_BLUETOOTH_SCO">
+ <Attributes> <Flags value="AUDIO_FLAG_SCO"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_SONIFICATION">
+ <AttributesGroup streamType="AUDIO_STREAM_RING">
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/> </Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_ALARM">
+ <Attributes> <Usage value="AUDIO_USAGE_ALARM"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_ENFORCED_AUDIBLE">
+ <AttributesGroup streamType="AUDIO_STREAM_ENFORCED_AUDIBLE">
+ <Attributes> <Flags value="AUDIO_FLAG_AUDIBILITY_ENFORCED"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_ACCESSIBILITY">
+ <AttributesGroup streamType="AUDIO_STREAM_ACCESSIBILITY">
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_SONIFICATION_RESPECTFUL">
+ <AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION">
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_EVENT"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_MEDIA">
+ <AttributesGroup streamType="AUDIO_STREAM_MUSIC">
+ <Attributes> <Usage value="AUDIO_USAGE_MEDIA"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_GAME"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANT"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/> </Attributes>
+ <Attributes></Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_SYSTEM">
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_SONIFICATION"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_DTMF">
+ <AttributesGroup streamType="AUDIO_STREAM_DTMF">
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Used to identify the volume of audio streams exclusively transmitted through the speaker
+ (TTS) of the device -->
+ <ProductStrategy name="STRATEGY_TRANSMITTED_THROUGH_SPEAKER">
+ <AttributesGroup streamType="AUDIO_STREAM_TTS">
+ <Attributes> <Flags value="AUDIO_FLAG_BEACON"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Routing Strategy rerouting may be removed as following media??? -->
+ <ProductStrategy name="STRATEGY_REROUTING">
+ <AttributesGroup streamType="AUDIO_STREAM_REROUTING">
+ <Attributes></Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Default product strategy has empty attributes -->
+ <ProductStrategy name="STRATEGY_PATCH">
+ <AttributesGroup streamType="AUDIO_STREAM_PATCH">
+ <Attributes></Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+
+</ProductStrategies>
+
diff --git a/services/audiopolicy/engineconfigurable/interface/AudioPolicyPluginInterface.h b/services/audiopolicy/engineconfigurable/interface/AudioPolicyPluginInterface.h
index 2e29a9b..53be275 100644
--- a/services/audiopolicy/engineconfigurable/interface/AudioPolicyPluginInterface.h
+++ b/services/audiopolicy/engineconfigurable/interface/AudioPolicyPluginInterface.h
@@ -16,10 +16,12 @@
#pragma once
+#include <policy.h>
#include <RoutingStrategy.h>
#include <EngineDefinition.h>
#include <Volume.h>
#include <system/audio.h>
+#include <media/AudioCommonTypes.h>
#include <utils/Errors.h>
#include <string>
#include <vector>
@@ -139,6 +141,22 @@
virtual bool setDeviceForInputSource(const audio_source_t &inputSource,
audio_devices_t device) = 0;
+ virtual void setDeviceAddressForProductStrategy(product_strategy_t strategy,
+ const std::string &address) = 0;
+
+ /**
+ * Set the device to be used by a product strategy.
+ *
+ * @param[in] strategy: name of the product strategy for which the device to use has to be set
+ * @param[in] devices; mask of devices to be used for the given strategy.
+ *
+ * @return true if the devices were set correclty for this strategy, false otherwise.
+ */
+ virtual bool setDeviceTypesForProductStrategy(product_strategy_t strategy,
+ audio_devices_t devices) = 0;
+
+ virtual product_strategy_t getProductStrategyByName(const std::string &address) = 0;
+
protected:
virtual ~AudioPolicyPluginInterface() {}
};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Android.mk
index 7631976..a1ebd35 100644
--- a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Android.mk
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Android.mk
@@ -30,103 +30,61 @@
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/parameter-framework
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework
LOCAL_SRC_FILES := $(LOCAL_MODULE).in
+# external/parameter-framework prevents from using debug interface
AUDIO_PATTERN = @TUNING_ALLOWED@
-ifeq ($(TARGET_BUILD_VARIANT),user)
+#ifeq ($(TARGET_BUILD_VARIANT),user)
AUDIO_VALUE = false
-else
-AUDIO_VALUE = true
-endif
+#else
+#AUDIO_VALUE = true
+#endif
-LOCAL_POST_INSTALL_CMD := $(hide) sed -i -e 's|$(AUDIO_PATTERN)|$(AUDIO_VALUE)|g' $(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)
+LOCAL_POST_INSTALL_CMD := $(hide) sed -i -e 's|$(AUDIO_PATTERN)|$(AUDIO_VALUE)|g' $(TARGET_OUT_VENDOR_ETC)/$(LOCAL_MODULE_RELATIVE_PATH)/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
-
-########## Policy PFW Structures #########
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := PolicyClass.xml
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := ETC
-LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/Structure/Policy
-LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := PolicySubsystem.xml
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := ETC
-LOCAL_VENDOR_MODULE := true
-LOCAL_REQUIRED_MODULES := \
- PolicySubsystem-CommonTypes.xml \
- libpolicy-subsystem
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/Structure/Policy
-LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
+########## Policy PFW Common Structures #########
include $(CLEAR_VARS)
LOCAL_MODULE := PolicySubsystem-CommonTypes.xml
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/Structure/Policy
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
-######### Policy PFW Settings #########
include $(CLEAR_VARS)
-LOCAL_MODULE := parameter-framework.policy
-LOCAL_MODULE_STEM := PolicyConfigurableDomains.xml
+LOCAL_MODULE := PolicyClass.xml
+LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Settings/Policy
-LOCAL_REQUIRED_MODULES := \
- policy_criteria.xml \
- policy_criterion_types.xml \
- PolicySubsystem.xml \
- PolicyClass.xml \
- ParameterFrameworkConfigurationPolicy.xml
-
-ifeq ($(pfw_rebuild_settings),true)
-PFW_EDD_FILES := \
- $(LOCAL_PATH)/Settings/device_for_strategy_media.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_phone.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_sonification.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_sonification_respectful.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_dtmf.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_enforced_audible.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_transmitted_through_speaker.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_accessibility.pfw \
- $(LOCAL_PATH)/Settings/device_for_strategy_rerouting.pfw \
- $(LOCAL_PATH)/Settings/strategy_for_stream.pfw \
- $(LOCAL_PATH)/Settings/strategy_for_usage.pfw \
- $(LOCAL_PATH)/Settings/device_for_input_source.pfw \
- $(LOCAL_PATH)/Settings/volumes.pfw
-
-LOCAL_ADDITIONAL_DEPENDENCIES := \
- $(PFW_EDD_FILES)
-
-
-PFW_CRITERION_TYPES_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criterion_types.xml
-PFW_CRITERIA_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criteria.xml
-
-PFW_TOPLEVEL_FILE := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/ParameterFrameworkConfigurationPolicy.xml
-
-PFW_SCHEMAS_DIR := $(PFW_DEFAULT_SCHEMAS_DIR)
-
-include $(BUILD_PFW_SETTINGS)
-else
-# Use the existing file
-LOCAL_SRC_FILES := Settings/$(LOCAL_MODULE_STEM)
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
include $(BUILD_PREBUILT)
-endif # pfw_rebuild_settings
-endif # ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), 0)
+endif #ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION),1)
+
+########## Policy PFW Example Structures #########
+ifeq (0, 1)
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem.xml.common
+LOCAL_MODULE_STEM := PolicySubsystem.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_REQUIRED_MODULES := \
+ PolicySubsystem-CommonTypes.xml \
+ PolicySubsystem-Volume.xml \
+ libpolicy-subsystem \
+
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+endif # ifeq (0, 1)
######### Policy PFW Settings - No Output #########
ifeq (0, 1)
@@ -140,7 +98,7 @@
LOCAL_REQUIRED_MODULES := \
policy_criteria.xml \
policy_criterion_types.xml \
- PolicySubsystem.xml \
+ PolicySubsystem.xml.common \
PolicyClass.xml \
ParameterFrameworkConfigurationPolicy.xml
@@ -168,7 +126,7 @@
LOCAL_REQUIRED_MODULES := \
policy_criteria.xml \
policy_criterion_types.xml \
- PolicySubsystem.xml \
+ PolicySubsystem.xml.common \
PolicyClass.xml \
ParameterFrameworkConfigurationPolicy.xml
@@ -192,10 +150,11 @@
include $(BUILD_PFW_SETTINGS)
-endif # ifeq (1, 0)
-
+endif #ifeq (0, 1)
#######################################################################
# Recursive call sub-folder Android.mk
#######################################################################
include $(call all-makefiles-under,$(LOCAL_PATH))
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Android.mk
new file mode 100644
index 0000000..01839dd
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Android.mk
@@ -0,0 +1,139 @@
+################################################################################################
+#
+# @NOTE:
+# Audio Policy Engine configurable example for generic device build
+#
+# Any vendor shall have its own configuration within the corresponding device folder
+#
+################################################################################################
+
+ifeq ($(BUILD_AUDIO_POLICY_AUTOMOTIVE_CONFIGURATION), 1)
+LOCAL_PATH := $(call my-dir)
+
+PFW_CORE := external/parameter-framework
+PFW_DEFAULT_SCHEMAS_DIR := $(PFW_CORE)/upstream/schemas
+PFW_SCHEMAS_DIR := $(PFW_DEFAULT_SCHEMAS_DIR)
+
+TOOLS := frameworks/av/services/audiopolicy/engineconfigurable/tools
+BUILD_PFW_SETTINGS := $(TOOLS)/build_audio_pfw_settings.mk
+
+
+##################################################################
+# CONFIGURATION FILES
+##################################################################
+
+######### Policy PFW top level file #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := ParameterFrameworkConfigurationPolicy.xml.car
+LOCAL_MODULE_STEM := ParameterFrameworkConfigurationPolicy.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework
+LOCAL_SRC_FILES := ../$(LOCAL_MODULE_STEM).in
+
+AUDIO_PATTERN = @TUNING_ALLOWED@
+ifeq ($(TARGET_BUILD_VARIANT),user)
+AUDIO_VALUE = false
+else
+AUDIO_VALUE = true
+endif
+
+LOCAL_POST_INSTALL_CMD := $(hide) sed -i -e 's|$(AUDIO_PATTERN)|$(AUDIO_VALUE)|g' $(TARGET_OUT_VENDOR_ETC)/$(LOCAL_MODULE_RELATIVE_PATH)/$(LOCAL_MODULE_STEM)
+
+include $(BUILD_PREBUILT)
+
+########## Policy PFW Common Structures #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem-CommonTypes.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := ../Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicyClass.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := ../Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+########## Policy PFW Structures #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem.xml.car
+LOCAL_MODULE_STEM := PolicySubsystem.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_REQUIRED_MODULES := \
+ ProductStrategies.xml.car \
+ PolicySubsystem-Volume.xml \
+ PolicySubsystem-CommonTypes.xml \
+ libpolicy-subsystem
+
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := ProductStrategies.xml.car
+LOCAL_MODULE_STEM := ProductStrategies.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+######### Policy PFW Settings #########
+include $(CLEAR_VARS)
+LOCAL_MODULE := parameter-framework.policy.car
+LOCAL_MODULE_STEM := PolicyConfigurableDomains.xml
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Settings/Policy
+
+PFW_EDD_FILES := \
+ $(LOCAL_PATH)/Settings/device_for_product_strategies.pfw \
+ $(LOCAL_PATH)/../Settings/strategy_for_stream.pfw \
+ $(LOCAL_PATH)/../Settings/strategy_for_usage.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_input_source.pfw \
+ $(LOCAL_PATH)/../Settings/volumes.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_media.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_phone.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_sonification.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_sonification_respectful.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_dtmf.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_enforced_audible.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_transmitted_through_speaker.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_accessibility.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_rerouting.pfw
+
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(PFW_EDD_FILES)
+
+LOCAL_REQUIRED_MODULES := \
+ PolicySubsystem.xml.car \
+ PolicyClass.xml \
+ policy_criteria.xml \
+ policy_criterion_types.xml \
+ ParameterFrameworkConfigurationPolicy.xml.car
+
+PFW_CRITERION_TYPES_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criterion_types.xml
+PFW_CRITERIA_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criteria.xml
+
+PFW_TOPLEVEL_FILE := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/ParameterFrameworkConfigurationPolicy.xml
+
+PFW_SCHEMAS_DIR := $(PFW_DEFAULT_SCHEMAS_DIR)
+
+include $(BUILD_PFW_SETTINGS)
+
+endif #ifeq ($(BUILD_AUDIO_POLICY_AUTOMOTIVE_CONFIGURATION), 1)
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Settings/device_for_product_strategies.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Settings/device_for_product_strategies.pfw
new file mode 100644
index 0000000..196d82c
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Settings/device_for_product_strategies.pfw
@@ -0,0 +1,717 @@
+supDomain: DeviceForProductStrategies
+ supDomain: OemTrafficAnouncement
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/oem_traffic_anouncement/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/oem_traffic_anouncement/device_address = BUS08_OEM1
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS08_OEM1
+
+ component: /Policy/policy/product_strategies/oem_traffic_anouncement/selected_output_devices/mask
+ bus = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/oem_traffic_anouncement/selected_output_devices/mask
+ bus = 0
+
+ supDomain: OemStrategy1
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/oem_strategy_1/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/oem_strategy_1/device_address = BUS08_OEM1
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS08_OEM1
+
+ component: /Policy/policy/product_strategies/oem_strategy_1/selected_output_devices/mask
+ bus = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/oem_strategy_1/selected_output_devices/mask
+ bus = 0
+
+
+
+ supDomain: OemStrategy2
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/oem_strategy_2/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/oem_strategy_2/device_address = BUS08_OEM1
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS08_OEM1
+
+ component: /Policy/policy/product_strategies/oem_strategy_2/selected_output_devices/mask
+ bus = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/oem_strategy_2/selected_output_devices/mask
+ bus = 0
+
+
+
+ supDomain: Radio
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/radio/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/radio/device_address = BUS09_OEM2
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS09_OEM2
+
+ component: /Policy/policy/product_strategies/radio/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/radio/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/radio/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+ supDomain: ExtAudioSource
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/ext_audio_source/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/ext_audio_source/device_address = BUS09_OEM2
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS09_OEM2
+
+ component: /Policy/policy/product_strategies/ext_audio_source/selected_output_devices/mask
+ bus = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/ext_audio_source/selected_output_devices/mask
+ bus = 0
+
+
+
+ supDomain: VoiceCommand
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/voice_command/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/voice_command/device_address = BUS02_VOICE_COMMAND
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS02_VOICE_COMMAND
+
+ component: /Policy/policy/product_strategies/voice_command/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/voice_command/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/voice_command/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: SafetyAlert
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/safety_alert/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/safety_alert/device_address = BUS00_MEDIA
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS00_MEDIA
+
+ component: /Policy/policy/product_strategies/safety_alert/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/safety_alert/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/safety_alert/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: Music
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/music/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/music/device_address = BUS00_MEDIA
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS00_MEDIA
+
+ component: /Policy/policy/product_strategies/music/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/music/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/music/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+
+ supDomain: NavGuidance
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/nav_guidance/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/nav_guidance/device_address = BUS01_NAV_GUIDANCE
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS01_NAV_GUIDANCE
+
+ component: /Policy/policy/product_strategies/nav_guidance/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/nav_guidance/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/nav_guidance/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: VoiceCall
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/voice_call/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/voice_call/device_address = BUS04_CALL
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS04_CALL
+
+ component: /Policy/policy/product_strategies/voice_call/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/voice_call/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/voice_call/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: Alarm
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/alarm/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/alarm/device_address = BUS05_ALARM
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS05_ALARM
+
+ component: /Policy/policy/product_strategies/alarm/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/alarm/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/alarm/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: Ring
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/ring/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/ring/device_address = BUS03_CALL_RING
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS03_CALL_RING
+
+ component: /Policy/policy/product_strategies/ring/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/ring/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/ring/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: Notification
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/notification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/notification/device_address = BUS06_NOTIFICATION
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS06_NOTIFICATION
+
+ component: /Policy/policy/product_strategies/notification/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/notification/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/notification/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
+ supDomain: System
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/system/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/system/device_address = BUS07_SYSTEM_SOUND
+
+ domain: SelectedDevice
+ conf: Bus
+ AvailableOutputDevices Includes Bus
+ AvailableOutputDevicesAddresses Includes BUS07_SYSTEM_SOUND
+
+ component: /Policy/policy/product_strategies/system/selected_output_devices/mask
+ speaker = 0
+ bus = 1
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ component: /Policy/policy/product_strategies/system/selected_output_devices/mask
+ speaker = 1
+ bus = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/system/selected_output_devices/mask
+ speaker = 0
+ bus = 0
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/PolicySubsystem.xml b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/PolicySubsystem.xml
new file mode 100644
index 0000000..9f999b3
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/PolicySubsystem.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<Subsystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/Subsystem.xsd"
+ Name="policy" Type="Policy">
+
+ <ComponentLibrary>
+ <!--#################### GLOBAL COMPONENTS BEGIN ####################-->
+ <!-- Common Types defintion -->
+ <xi:include href="PolicySubsystem-CommonTypes.xml"/>
+ <xi:include href="ProductStrategies.xml"/>
+
+
+ <!--#################### GLOBAL COMPONENTS END ####################-->
+
+ <!--#################### STRATEGY BEGIN ####################-->
+
+ <ComponentType Name="Strategies">
+ <Component Name="media" Type="StrategyConfig" Mapping="Name:STRATEGY_MEDIA"/>
+ <Component Name="phone" Type="StrategyConfig" Mapping="Name:STRATEGY_PHONE"/>
+ <Component Name="sonification" Type="StrategyConfig" Mapping="Name:STRATEGY_SONIFICATION"/>
+ <Component Name="sonification_respectful" Type="StrategyConfig" Mapping="Name:STRATEGY_SONIFICATION_RESPECTFUL"/>
+ <Component Name="dtmf" Type="StrategyConfig" Mapping="Name:STRATEGY_DTMF"/>
+ <Component Name="enforced_audible" Type="StrategyConfig" Mapping="Name:STRATEGY_ENFORCED_AUDIBLE"/>
+ <Component Name="transmitted_through_speaker" Type="StrategyConfig" Mapping="Name:STRATEGY_TRANSMITTED_THROUGH_SPEAKER"/>
+ <Component Name="accessibility" Type="StrategyConfig" Mapping="Name:STRATEGY_ACCESSIBILITY"/>
+ <Component Name="rerouting" Type="StrategyConfig" Mapping=",Name:STRATEGY_REROUTING"/>
+ </ComponentType>
+
+ <!--#################### STRATEGY END ####################-->
+
+ <!--#################### STREAM BEGIN ####################-->
+
+ <ComponentType Name="Streams" Description="associated to audio_stream_type_t definition">
+ <Component Name="voice_call" Type="Stream" Mapping="Name:AUDIO_STREAM_VOICE_CALL"/>
+ <Component Name="system" Type="Stream" Mapping="Name:AUDIO_STREAM_SYSTEM"/>
+ <Component Name="ring" Type="Stream" Mapping="Name:AUDIO_STREAM_RING"/>
+ <Component Name="music" Type="Stream" Mapping="Name:AUDIO_STREAM_MUSIC"/>
+ <Component Name="alarm" Type="Stream" Mapping="Name:AUDIO_STREAM_ALARM"/>
+ <Component Name="notification" Type="Stream" Mapping="Name:AUDIO_STREAM_NOTIFICATION"/>
+ <Component Name="bluetooth_sco" Type="Stream" Mapping="Name:AUDIO_STREAM_BLUETOOTH_SCO"/>
+ <Component Name="enforced_audible" Type="Stream" Mapping="Name:AUDIO_STREAM_ENFORCED_AUDIBLE"
+ Description="Sounds that cannot be muted by user and must be routed to speaker"/>
+ <Component Name="dtmf" Type="Stream" Mapping="Name:AUDIO_STREAM_DTMF"/>
+ <Component Name="tts" Type="Stream" Mapping="Name:AUDIO_STREAM_TTS"
+ Description="Transmitted Through Speaker. Plays over speaker only, silent on other devices"/>
+ <Component Name="accessibility" Type="Stream" Mapping="Name:AUDIO_STREAM_ACCESSIBILITY"
+ Description="For accessibility talk back prompts"/>
+ <Component Name="rerouting" Type="Stream" Mapping="Name:AUDIO_STREAM_REROUTING"
+ Description="For dynamic policy output mixes"/>
+ <Component Name="patch" Type="Stream" Mapping="Name:AUDIO_STREAM_PATCH"
+ Description="For internal audio flinger tracks. Fixed volume"/>
+ </ComponentType>
+
+ <!--#################### STREAM END ####################-->
+
+ <!--#################### USAGE BEGIN ####################-->
+
+ <ComponentType Name="Usages" Description="associated to audio_usage_t definition">
+ <Component Name="unknown" Type="Usage" Mapping="Name:AUDIO_USAGE_UNKNOWN"/>
+ <Component Name="media" Type="Usage" Mapping="Name:AUDIO_USAGE_MEDIA"/>
+ <Component Name="voice_communication" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_VOICE_COMMUNICATION"/>
+ <Component Name="voice_communication_signalling" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/>
+ <Component Name="alarm" Type="Usage" Mapping="Name:AUDIO_USAGE_ALARM"/>
+ <Component Name="notification" Type="Usage" Mapping="Name:AUDIO_USAGE_NOTIFICATION"/>
+ <Component Name="notification_telephony_ringtone" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/>
+ <Component Name="notification_communication_request" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/>
+ <Component Name="notification_communication_instant" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/>
+ <Component Name="notification_communication_delayed" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/>
+ <Component Name="notification_event" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_EVENT"/>
+ <Component Name="assistance_accessibility" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/>
+ <Component Name="assistance_navigation_guidance" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <Component Name="assistance_sonification" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_SONIFICATION"/>
+ <Component Name="game" Type="Usage" Mapping="Name:AUDIO_USAGE_GAME"/>
+ <Component Name="virtual_source" Type="Usage" Mapping="Name:AUDIO_USAGE_VIRTUAL_SOURCE"/>
+ <Component Name="assistant" Type="Usage" Mapping="Name:AUDIO_USAGE_ASSISTANT"/>
+ </ComponentType>
+
+ <!--#################### USAGE END ####################-->
+
+ <!--#################### INPUT SOURCE BEGIN ####################-->
+
+ <ComponentType Name="InputSources" Description="associated to audio_source_t definition,
+ identifier mapping must match the value of the enum">
+ <Component Name="default" Type="InputSource" Mapping="Name:AUDIO_SOURCE_DEFAULT"/>
+ <Component Name="mic" Type="InputSource" Mapping="Name:AUDIO_SOURCE_MIC"/>
+ <Component Name="voice_uplink" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_UPLINK"/>
+ <Component Name="voice_downlink" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_DOWNLINK"/>
+ <Component Name="voice_call" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_CALL"/>
+ <Component Name="camcorder" Type="InputSource" Mapping="Name:AUDIO_SOURCE_CAMCORDER"/>
+ <Component Name="voice_recognition" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_RECOGNITION"/>
+ <Component Name="voice_communication" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_COMMUNICATION"/>
+ <Component Name="remote_submix" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_REMOTE_SUBMIX"/>
+ <Component Name="unprocessed" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_UNPROCESSED"/>
+ <Component Name="fm_tuner" Type="InputSource" Mapping="Name:AUDIO_SOURCE_FM_TUNER"/>
+ <Component Name="hotword" Type="InputSource" Mapping="Name:AUDIO_SOURCE_HOTWORD"/>
+ </ComponentType>
+
+ <!--#################### INPUT SOURCE END ####################-->
+ </ComponentLibrary>
+
+ <InstanceDefinition>
+ <Component Name="streams" Type="Streams"/>
+ <Component Name="strategies" Type="Strategies"/>
+ <Component Name="input_sources" Type="InputSources"/>
+ <Component Name="usages" Type="Usages"/>
+
+ <Component Name="product_strategies" Type="ProductStrategies"/>
+ </InstanceDefinition>
+</Subsystem>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/ProductStrategies.xml b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/ProductStrategies.xml
new file mode 100644
index 0000000..53bba03
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Car/Structure/ProductStrategies.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<ComponentTypeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/ComponentTypeSet.xsd">
+
+ <ComponentType Name="ProductStrategies" Description="">
+ <Component Name="oem_traffic_anouncement" Type="ProductStrategy"/>
+ <Component Name="oem_strategy_1" Type="ProductStrategy"/>
+ <Component Name="oem_strategy_2" Type="ProductStrategy"/>
+
+ <Component Name="radio" Type="ProductStrategy"/>
+ <Component Name="ext_audio_source" Type="ProductStrategy"/>
+ <Component Name="voice_command" Type="ProductStrategy"/>
+ <Component Name="safety_alert" Type="ProductStrategy"/>
+
+ <Component Name="music" Type="ProductStrategy"/>
+ <Component Name="nav_guidance" Type="ProductStrategy"/>
+ <Component Name="voice_call" Type="ProductStrategy"/>
+ <Component Name="alarm" Type="ProductStrategy"/>
+ <Component Name="ring" Type="ProductStrategy"/>
+ <Component Name="notification" Type="ProductStrategy"/>
+ <Component Name="system" Type="ProductStrategy"/>
+ </ComponentType>
+
+</ComponentTypeSet>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Android.mk
new file mode 100644
index 0000000..bc91c6f
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Android.mk
@@ -0,0 +1,105 @@
+################################################################################################
+#
+# @NOTE:
+# Audio Policy Engine configurable example for generic device build
+#
+# Any vendor shall have its own configuration within the corresponding device folder
+#
+################################################################################################
+
+ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), 1)
+
+LOCAL_PATH := $(call my-dir)
+
+PFW_CORE := external/parameter-framework
+PFW_DEFAULT_SCHEMAS_DIR := $(PFW_CORE)/upstream/schemas
+PFW_SCHEMAS_DIR := $(PFW_DEFAULT_SCHEMAS_DIR)
+
+TOOLS := frameworks/av/services/audiopolicy/engineconfigurable/tools
+BUILD_PFW_SETTINGS := $(TOOLS)/build_audio_pfw_settings.mk
+
+##################################################################
+# CONFIGURATION FILES
+##################################################################
+########## Policy PFW Structures #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem.xml.phone
+LOCAL_MODULE_STEM := PolicySubsystem.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_REQUIRED_MODULES := \
+ PolicySubsystem-CommonTypes.xml \
+ ProductStrategies.xml.phone \
+ PolicySubsystem-Volume.xml \
+ libpolicy-subsystem \
+
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := ProductStrategies.xml.phone
+LOCAL_MODULE_STEM := ProductStrategies.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+######### Policy PFW Settings #########
+include $(CLEAR_VARS)
+LOCAL_MODULE := parameter-framework.policy.phone
+LOCAL_MODULE_STEM := PolicyConfigurableDomains.xml
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := parameter-framework/Settings/Policy
+
+PFW_EDD_FILES := \
+ $(LOCAL_PATH)/../Settings/strategy_for_stream.pfw \
+ $(LOCAL_PATH)/../Settings/strategy_for_usage.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_input_source.pfw \
+ $(LOCAL_PATH)/../Settings/volumes.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_media.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_phone.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_sonification.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_sonification_respectful.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_dtmf.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_enforced_audible.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_transmitted_through_speaker.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_accessibility.pfw \
+ $(LOCAL_PATH)/../Settings/device_for_strategy_rerouting.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_media.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_accessibility.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_dtmf.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_enforced_audible.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_phone.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_sonification.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_sonification_respectful.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_rerouting.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_transmitted_through_speaker.pfw \
+ $(LOCAL_PATH)/Settings/device_for_product_strategy_unknown.pfw
+
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(PFW_EDD_FILES)
+
+LOCAL_REQUIRED_MODULES := \
+ PolicySubsystem.xml.phone \
+ PolicyClass.xml \
+ policy_criteria.xml \
+ policy_criterion_types.xml \
+ ParameterFrameworkConfigurationPolicy.xml
+
+PFW_CRITERION_TYPES_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criterion_types.xml
+PFW_CRITERIA_FILE := $(TARGET_OUT_VENDOR_ETC)/policy_criteria.xml
+
+PFW_TOPLEVEL_FILE := $(TARGET_OUT_VENDOR_ETC)/parameter-framework/ParameterFrameworkConfigurationPolicy.xml
+
+PFW_SCHEMAS_DIR := $(PFW_DEFAULT_SCHEMAS_DIR)
+
+include $(BUILD_PFW_SETTINGS)
+
+endif
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_accessibility.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_accessibility.pfw
new file mode 100644
index 0000000..53e93de
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_accessibility.pfw
@@ -0,0 +1,596 @@
+supDomain: DeviceForProductStrategy
+
+ supDomain: Accessibility
+ #
+ # STRATEGY_ACCESSIBILITY follows STRATEGY_PHONE if in call widely speaking
+ # STRATEGY_ACCESSIBILITY follows STRATEGY_MEDIA otherwise
+ #
+ # Other case are handled programmatically has involving activity of streams.
+ #
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ fm = 0
+ speaker_safe = 0
+ telephony_tx = 0
+ ip = 0
+ bus = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+
+ domain: Device
+ conf: RemoteSubmix
+ #
+ # Accessibility follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes RemoteSubmix
+ AvailableOutputDevicesAddresses Includes 0
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 1
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dp
+ #
+ # Accessibility falls through media strategy if not in call (widely speaking)
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpHeadphone
+ #
+ # Accessibility falls through media strategy if not in call (widely speaking)
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # Accessibility falls through media strategy if not in call (widely speaking)
+ #
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: ForceSpeakerWhenNotInCall
+ #
+ # Accessibility follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoCarkit
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothScoCarkit
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoHeadset
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothScoHeadset
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothSco
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothSco
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 1
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadphone
+ ANY
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # accessibility follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 1
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Line
+ ANY
+ #
+ # accessibility falls through Phone strategy if in call
+ # but Line has a lower priority than WiredHeadset in this case.
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Excludes WiredHeadset
+ #
+ # accessibility follows Media strategy if not in call
+ #
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadset
+ ANY
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # accessibility follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 1
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbDevice
+ ANY
+ #
+ # accessibility falls through Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # accessibility follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Excludes UsbAccessory
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ hdmi = 0
+
+ conf: UsbAccessory
+ #
+ # accessibility falls through Phone strategy if in call (widely speaking)
+ # but USB accessory not reachable in call
+ #
+ # accessibility follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ hdmi = 0
+
+ conf: DgtlDockHeadset
+ #
+ # accessibility falls through Phone strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call
+ #
+ # accessibility follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: AuxDigital
+ #
+ # accessibility falls through Phone strategy if in call (widely speaking)
+ # but Hdmi not reachable in call
+ #
+ # accessibility follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 1
+
+ conf: AnlgDockHeadset
+ #
+ # accessibility falls through Phone strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call
+ #
+ # accessibility follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes AnlgDockHeadset
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Earpiece
+ #
+ # accessibility falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes Earpiece
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_sco = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_dtmf.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_dtmf.pfw
new file mode 100644
index 0000000..b8426c6
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_dtmf.pfw
@@ -0,0 +1,625 @@
+supDomain: DeviceForProductStrategies
+ supDomain: Dtmf
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ fm = 0
+ speaker_safe = 0
+ bluetooth_sco_carkit = 0
+ ip = 0
+ bus = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/dtmf/device_address =
+
+ domain: Device2
+ conf: RemoteSubmix
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes RemoteSubmix
+ AvailableOutputDevicesAddresses Includes 0
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 1
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dp
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: ForceSpeakerWhenNotInCall
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceSpeaker
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: BluetoothScoHeadset
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothScoHeadset
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothSco
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothSco
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadphone
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Line
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ # but Line has a lower priority than WiredHeadset in this case.
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Excludes WiredHeadset
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ speaker = 0
+
+ conf: WiredHeadset
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbDevice
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Excludes UsbAccessory
+ ForceUseForCommunication Is ForceSpeaker
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbAccessory
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but USB accessory not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: DgtlDockHeadset
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Hdmi
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but Hdmi not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: AnlgDockHeadset
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Earpiece
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes Earpiece
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Speaker
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ domain: Arc
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes HdmiArc
+
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/hdmi_arc = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/hdmi_arc = 0
+
+ domain: Spdif
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Spdif
+
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/spdif = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/spdif = 0
+
+ domain: AuxLine
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes AuxLine
+
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/aux_line = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/dtmf/selected_output_devices/mask/aux_line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_enforced_audible.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_enforced_audible.pfw
new file mode 100644
index 0000000..2daa9ac
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_enforced_audible.pfw
@@ -0,0 +1,361 @@
+supDomain: DeviceForProductStrategy
+
+ supDomain: EnforcedAudible
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ # no enforced_audible on remote submix (e.g. WFD)
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ bus = 0
+ fm = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+
+ domain: Speaker
+ conf: Selected
+ #
+ # strategy STRATEGY_ENFORCED_AUDIBLE uses same routing policy as STRATEGY_SONIFICATION
+ # except:
+ # - when in call where it doesn't default to STRATEGY_PHONE behavior
+ # - in countries where not enforced in which case it follows STRATEGY_MEDIA
+ #
+ AvailableOutputDevices Includes Speaker
+ ANY
+ ForceUseForSystem Is ForceSystemEnforced
+ ALL
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Excludes RemoteSubmix
+ ANY
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Excludes BluetoothA2dp
+ AvailableOutputDevices Excludes BluetoothA2dpHeadphones
+ AvailableOutputDevices Excludes BluetoothA2dpSpeaker
+ #
+ # Speaker is also the fallback device if any of the device from Device2 domain
+ # is selected.
+ #
+ ALL
+ AvailableOutputDevices Excludes RemoteSubmix
+ AvailableOutputDevices Excludes WiredHeadphone
+ AvailableOutputDevices Excludes Line
+ AvailableOutputDevices Excludes WiredHeadset
+ AvailableOutputDevices Excludes UsbAccessory
+ AvailableOutputDevices Excludes UsbDevice
+ AvailableOutputDevices Excludes DgtlDockHeadset
+ AvailableOutputDevices Excludes Hdmi
+ ANY
+ AvailableOutputDevices Excludes AnlgDockHeadset
+ ForceUseForDock IsNot ForceAnalogDock
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ speaker = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+ AvailableOutputDevicesAddresses Includes 0
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 1
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpHeadphones
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpSpeaker
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: WiredHeadphone
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Line
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+
+ conf: WiredHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbAccessory
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbDevice
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+
+ conf: DgtlDockHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Hdmi
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: AnlgDockHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: NoDevice
+ component: /Policy/policy/product_strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_media.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_media.pfw
new file mode 100644
index 0000000..d6d355c
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_media.pfw
@@ -0,0 +1,340 @@
+supDomain: DeviceForProductStrategy
+ supDomain: Media
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ telephony_tx = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ bus = 0
+ stub = 0
+ /Policy/policy/product_strategies/media/device_address =
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+ AvailableOutputDevicesAddresses Includes 0
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 1
+ line = 0
+
+ conf: BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication IsNot ForceBtSco
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 1
+ remote_submix = 0
+ line = 0
+
+ conf: BluetoothA2dpHeadphone
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication IsNot ForceBtSco
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication IsNot ForceBtSco
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: ForceSpeaker
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Includes Speaker
+ #
+ # If hdmi system audio mode is on, remove speaker out of output list.
+ #
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 1
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 1
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 1
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 1
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: AuxDigital
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 1
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 1
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ #
+ # If hdmi system audio mode is on, remove speaker out of output list.
+ #
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+ ForceUseForCommunication IsNot ForceBtSco
+
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 1
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Default
+ component: /Policy/policy/product_strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ domain: Arc
+ #
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ AvailableOutputDevices Includes HdmiArc
+
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/hdmi_arc = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/hdmi_arc = 0
+
+ domain: Spdif
+ #
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ AvailableOutputDevices Includes Spdif
+
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/spdif = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/spdif = 0
+
+ domain: AuxLine
+ conf: Selected
+ AvailableOutputDevices Includes AuxLine
+
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/aux_line = 1
+
+ conf: NotSelected
+ /Policy/policy/product_strategies/media/selected_output_devices/mask/aux_line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_phone.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_phone.pfw
new file mode 100644
index 0000000..5693d4e
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_phone.pfw
@@ -0,0 +1,483 @@
+supDomain: DeviceForProductStrategy
+ supDomain: Phone
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ # no sonification on remote submix (e.g. WFD)
+ remote_submix = 0
+ hdmi_arc = 0
+ aux_line = 0
+ spdif = 0
+ fm = 0
+ speaker_safe = 0
+ bus = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/phone/device_address =
+
+ domain: Device
+ conf: ScoCarkit
+ AvailableOutputDevices Includes BluetoothScoCarkit
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothScoHeadset
+ AvailableOutputDevices Includes BluetoothScoHeadset
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothSco
+ AvailableOutputDevices Includes BluetoothSco
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dp
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dp
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication Is ForceNone
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication Is ForceNone
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadphone
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes WiredHeadphone
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes WiredHeadset
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ speaker = 0
+
+ conf: UsbDevice
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes UsbDevice
+ ANY
+ ForceUseForCommunication Is ForceBtSco
+ ForceUseForCommunication Is ForceNone
+ ALL
+ ForceUseForCommunication Is ForceSpeaker
+ #
+ # In case of Force Speaker, priority between device and accessory are
+ # inverted compared to Force None or Bt Sco
+ #
+ AvailableOutputDevices Excludes UsbAccessory
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbAccessory
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes UsbAccessory
+ TelephonyMode IsNot InCommunication
+ TelephonyMode IsNot InCall
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: DgtlDockHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes DgtlDockHeadset
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Hdmi
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Hdmi
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: AnlgDockHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes AnlgDockHeadset
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Earpiece
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Earpiece
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Speaker
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Speaker
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: Default
+ #
+ # Fallback on default output device which can be speaker for example
+ #
+ component: /Policy/policy/product_strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_rerouting.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_rerouting.pfw
new file mode 100644
index 0000000..c064c18
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_rerouting.pfw
@@ -0,0 +1,43 @@
+supDomain: DeviceForProductStrategy
+ supDomain: Rerouting
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/rerouting/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/rerouting/device_address =
+
+ domain: SelectedDevice
+ conf: Bus
+ component: /Policy/policy/product_strategies/rerouting/selected_output_devices/mask
+ bus = 1
+
+ conf: Default
+ component: /Policy/policy/product_strategies/rerouting/selected_output_devices/mask
+ bus = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification.pfw
new file mode 100644
index 0000000..c4edeeb
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification.pfw
@@ -0,0 +1,490 @@
+supDomain: DeviceForProductStrategy
+ supDomain: Sonification
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ remote_submix = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ speaker_safe = 0
+ aux_line = 0
+ #
+ # Sonification follows phone strategy if in call but HDMI is not reachable
+ #
+ hdmi = 0
+ bus = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/sonification/device_address =
+
+ domain: Speaker
+
+ conf: Selected
+ AvailableOutputDevices Includes Speaker
+ ANY
+ #
+ # Sonification falls through ENFORCED_AUDIBLE if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ALL
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ForceUseForCommunication Is ForceSpeaker
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Excludes Line
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ speaker = 0
+
+ domain: Device2
+
+ conf: BluetoothA2dp
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dp
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: ScoCarkit
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoCarkit
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: ScoHeadset
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Sco
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothSco
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ #
+ # Sonification follows Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+ ANY
+ #
+ # Sonification follows Phone strategy if in call (widely speaking)
+ # but Line has a lower priority than WiredHeadset in this case.
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Excludes WiredHeadset
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ALL
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ AvailableOutputDevices Excludes UsbAccessory
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ALL
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but USB Accessory not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+ #
+ # Sonification falls through media strategy if not in call
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ #
+ # Sonification falls through media strategy if not in call
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Earpiece
+ #
+ # Sonification Follows Phone Strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Includes Earpiece
+
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: None
+ component: /Policy/policy/product_strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification_respectful.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification_respectful.pfw
new file mode 100644
index 0000000..0a3dd5f
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_sonification_respectful.pfw
@@ -0,0 +1,536 @@
+supDomain: DeviceForProductStrategy
+ supDomain: SonificationRespectful
+ #
+ # Sonificiation Respectful follows:
+ # - If in call: Strategy sonification (that follows phone strategy in call also...)
+ # - If not in call AND a music stream is active remotely: Strategy sonification (that
+ # follows enforced audible, which follows media)
+ # - if not in call and no music stream active remotely and music stream active): strategy
+ # media
+ # - Otherwise follows sonification by replacing speaker with speaker safe if speaker is
+ # selected.
+ #
+ # Case of stream active handled programmatically
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ remote_submix = 0
+ hdmi_arc = 0
+ aux_line = 0
+ spdif = 0
+ fm = 0
+ telephony_tx = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ stub = 0
+ /Policy/policy/product_strategies/sonification_respectful/device_address =
+
+ domain: Speakers
+
+ conf: SpeakerSafe
+ AvailableOutputDevices Includes Speaker
+ AvailableOutputDevices Includes SpeakerSafe
+ #
+ # Follows sonification strategy if not in call and replace speaker by speaker safe
+ # if and only if speaker only selected
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 1
+ speaker = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ ANY
+ #
+ # Follows sonification strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ALL
+ #
+ # Follows Phone Strategy if call
+ #
+ ForceUseForCommunication Is ForceSpeaker
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Excludes Line
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 0
+ speaker = 1
+
+ conf: None
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 0
+ speaker = 0
+
+ domain: Device2
+ conf: BluetoothA2dp
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoCarkit
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoCarkit
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothSco
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothSco
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadphone
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 1
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Line
+ ANY
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ # but Line has a lower priority than WiredHeadset in this case.
+ #
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Excludes WiredHeadset
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadphone
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadset
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 1
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbDevice
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Excludes UsbAccessory
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ hdmi = 0
+
+ conf: UsbAccessory
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but UsbAccessory not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ hdmi = 0
+
+ conf: DgtlDockHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: AuxDigital
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but HDMI not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 1
+
+ conf: AnlgDockHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Earpiece
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Includes Earpiece
+
+ component: /Policy/policy/product_strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_transmitted_through_speaker.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_transmitted_through_speaker.pfw
new file mode 100644
index 0000000..3fc7670
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_transmitted_through_speaker.pfw
@@ -0,0 +1,43 @@
+supDomain: DeviceForProductStrategy
+ supDomain: TransmittedThroughSpeaker
+ domain: UnreacheableDevices
+ conf: Calibration
+ component: /Policy/policy/product_strategies/transmitted_through_speaker/selected_output_devices/mask
+ remote_submix = 0
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ ip = 0
+ bus = 0
+ stub = 0
+ /Policy/policy/product_strategies/transmitted_through_speaker/device_address =
+
+ domain: Speaker
+ conf: Selected
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/product_strategies/transmitted_through_speaker/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/product_strategies/transmitted_through_speaker/selected_output_devices/mask
+ speaker = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_unknown.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_unknown.pfw
new file mode 100644
index 0000000..c46cf56
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Settings/device_for_product_strategy_unknown.pfw
@@ -0,0 +1,36 @@
+supDomain: DeviceForProductStrategy
+ supDomain: Unknown
+ domain: UnreachableDevices
+ conf: calibration
+ component: /Policy/policy/product_strategies/unknown/selected_output_devices/mask
+ earpiece = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ remote_submix = 0
+ telephony_tx = 0
+ line = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ aux_line = 0
+ speaker_safe = 0
+ ip = 0
+ proxy = 0
+ usb_headset = 0
+ bus = 0
+ stub = 0
+ /Policy/policy/product_strategies/unknown/device_address =
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/PolicySubsystem.xml b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/PolicySubsystem.xml
new file mode 100644
index 0000000..9f999b3
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/PolicySubsystem.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<Subsystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/Subsystem.xsd"
+ Name="policy" Type="Policy">
+
+ <ComponentLibrary>
+ <!--#################### GLOBAL COMPONENTS BEGIN ####################-->
+ <!-- Common Types defintion -->
+ <xi:include href="PolicySubsystem-CommonTypes.xml"/>
+ <xi:include href="ProductStrategies.xml"/>
+
+
+ <!--#################### GLOBAL COMPONENTS END ####################-->
+
+ <!--#################### STRATEGY BEGIN ####################-->
+
+ <ComponentType Name="Strategies">
+ <Component Name="media" Type="StrategyConfig" Mapping="Name:STRATEGY_MEDIA"/>
+ <Component Name="phone" Type="StrategyConfig" Mapping="Name:STRATEGY_PHONE"/>
+ <Component Name="sonification" Type="StrategyConfig" Mapping="Name:STRATEGY_SONIFICATION"/>
+ <Component Name="sonification_respectful" Type="StrategyConfig" Mapping="Name:STRATEGY_SONIFICATION_RESPECTFUL"/>
+ <Component Name="dtmf" Type="StrategyConfig" Mapping="Name:STRATEGY_DTMF"/>
+ <Component Name="enforced_audible" Type="StrategyConfig" Mapping="Name:STRATEGY_ENFORCED_AUDIBLE"/>
+ <Component Name="transmitted_through_speaker" Type="StrategyConfig" Mapping="Name:STRATEGY_TRANSMITTED_THROUGH_SPEAKER"/>
+ <Component Name="accessibility" Type="StrategyConfig" Mapping="Name:STRATEGY_ACCESSIBILITY"/>
+ <Component Name="rerouting" Type="StrategyConfig" Mapping=",Name:STRATEGY_REROUTING"/>
+ </ComponentType>
+
+ <!--#################### STRATEGY END ####################-->
+
+ <!--#################### STREAM BEGIN ####################-->
+
+ <ComponentType Name="Streams" Description="associated to audio_stream_type_t definition">
+ <Component Name="voice_call" Type="Stream" Mapping="Name:AUDIO_STREAM_VOICE_CALL"/>
+ <Component Name="system" Type="Stream" Mapping="Name:AUDIO_STREAM_SYSTEM"/>
+ <Component Name="ring" Type="Stream" Mapping="Name:AUDIO_STREAM_RING"/>
+ <Component Name="music" Type="Stream" Mapping="Name:AUDIO_STREAM_MUSIC"/>
+ <Component Name="alarm" Type="Stream" Mapping="Name:AUDIO_STREAM_ALARM"/>
+ <Component Name="notification" Type="Stream" Mapping="Name:AUDIO_STREAM_NOTIFICATION"/>
+ <Component Name="bluetooth_sco" Type="Stream" Mapping="Name:AUDIO_STREAM_BLUETOOTH_SCO"/>
+ <Component Name="enforced_audible" Type="Stream" Mapping="Name:AUDIO_STREAM_ENFORCED_AUDIBLE"
+ Description="Sounds that cannot be muted by user and must be routed to speaker"/>
+ <Component Name="dtmf" Type="Stream" Mapping="Name:AUDIO_STREAM_DTMF"/>
+ <Component Name="tts" Type="Stream" Mapping="Name:AUDIO_STREAM_TTS"
+ Description="Transmitted Through Speaker. Plays over speaker only, silent on other devices"/>
+ <Component Name="accessibility" Type="Stream" Mapping="Name:AUDIO_STREAM_ACCESSIBILITY"
+ Description="For accessibility talk back prompts"/>
+ <Component Name="rerouting" Type="Stream" Mapping="Name:AUDIO_STREAM_REROUTING"
+ Description="For dynamic policy output mixes"/>
+ <Component Name="patch" Type="Stream" Mapping="Name:AUDIO_STREAM_PATCH"
+ Description="For internal audio flinger tracks. Fixed volume"/>
+ </ComponentType>
+
+ <!--#################### STREAM END ####################-->
+
+ <!--#################### USAGE BEGIN ####################-->
+
+ <ComponentType Name="Usages" Description="associated to audio_usage_t definition">
+ <Component Name="unknown" Type="Usage" Mapping="Name:AUDIO_USAGE_UNKNOWN"/>
+ <Component Name="media" Type="Usage" Mapping="Name:AUDIO_USAGE_MEDIA"/>
+ <Component Name="voice_communication" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_VOICE_COMMUNICATION"/>
+ <Component Name="voice_communication_signalling" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/>
+ <Component Name="alarm" Type="Usage" Mapping="Name:AUDIO_USAGE_ALARM"/>
+ <Component Name="notification" Type="Usage" Mapping="Name:AUDIO_USAGE_NOTIFICATION"/>
+ <Component Name="notification_telephony_ringtone" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/>
+ <Component Name="notification_communication_request" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/>
+ <Component Name="notification_communication_instant" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/>
+ <Component Name="notification_communication_delayed" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/>
+ <Component Name="notification_event" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_NOTIFICATION_EVENT"/>
+ <Component Name="assistance_accessibility" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/>
+ <Component Name="assistance_navigation_guidance" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+ <Component Name="assistance_sonification" Type="Usage"
+ Mapping="Name:AUDIO_USAGE_ASSISTANCE_SONIFICATION"/>
+ <Component Name="game" Type="Usage" Mapping="Name:AUDIO_USAGE_GAME"/>
+ <Component Name="virtual_source" Type="Usage" Mapping="Name:AUDIO_USAGE_VIRTUAL_SOURCE"/>
+ <Component Name="assistant" Type="Usage" Mapping="Name:AUDIO_USAGE_ASSISTANT"/>
+ </ComponentType>
+
+ <!--#################### USAGE END ####################-->
+
+ <!--#################### INPUT SOURCE BEGIN ####################-->
+
+ <ComponentType Name="InputSources" Description="associated to audio_source_t definition,
+ identifier mapping must match the value of the enum">
+ <Component Name="default" Type="InputSource" Mapping="Name:AUDIO_SOURCE_DEFAULT"/>
+ <Component Name="mic" Type="InputSource" Mapping="Name:AUDIO_SOURCE_MIC"/>
+ <Component Name="voice_uplink" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_UPLINK"/>
+ <Component Name="voice_downlink" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_DOWNLINK"/>
+ <Component Name="voice_call" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_CALL"/>
+ <Component Name="camcorder" Type="InputSource" Mapping="Name:AUDIO_SOURCE_CAMCORDER"/>
+ <Component Name="voice_recognition" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_RECOGNITION"/>
+ <Component Name="voice_communication" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_VOICE_COMMUNICATION"/>
+ <Component Name="remote_submix" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_REMOTE_SUBMIX"/>
+ <Component Name="unprocessed" Type="InputSource"
+ Mapping="Name:AUDIO_SOURCE_UNPROCESSED"/>
+ <Component Name="fm_tuner" Type="InputSource" Mapping="Name:AUDIO_SOURCE_FM_TUNER"/>
+ <Component Name="hotword" Type="InputSource" Mapping="Name:AUDIO_SOURCE_HOTWORD"/>
+ </ComponentType>
+
+ <!--#################### INPUT SOURCE END ####################-->
+ </ComponentLibrary>
+
+ <InstanceDefinition>
+ <Component Name="streams" Type="Streams"/>
+ <Component Name="strategies" Type="Strategies"/>
+ <Component Name="input_sources" Type="InputSources"/>
+ <Component Name="usages" Type="Usages"/>
+
+ <Component Name="product_strategies" Type="ProductStrategies"/>
+ </InstanceDefinition>
+</Subsystem>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/ProductStrategies.xml b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/ProductStrategies.xml
new file mode 100644
index 0000000..4cbb3da
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Phone/Structure/ProductStrategies.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<ComponentTypeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/ComponentTypeSet.xsd">
+
+ <ComponentType Name="ProductStrategies" Description="">
+ <Component Name="accessibility" Type="ProductStrategy"/>
+ <Component Name="enforced_audible" Type="ProductStrategy"/>
+ <Component Name="transmitted_through_speaker" Type="ProductStrategy"/>
+
+ <Component Name="media" Type="ProductStrategy"/>
+ <Component Name="phone" Type="ProductStrategy"/>
+ <Component Name="dtmf" Type="ProductStrategy"/>
+
+ <Component Name="sonification" Type="ProductStrategy"/>
+ <Component Name="sonification_respectful" Type="ProductStrategy"/>
+ <Component Name="rerouting" Type="ProductStrategy"/>
+ <Component Name="unknown" Type="ProductStrategy"/>
+ </ComponentType>
+
+</ComponentTypeSet>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Structure/PolicySubsystem-CommonTypes.xml b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Structure/PolicySubsystem-CommonTypes.xml
index daa7f68..3197387 100644
--- a/services/audiopolicy/engineconfigurable/parameter-framework/examples/Structure/PolicySubsystem-CommonTypes.xml
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/examples/Structure/PolicySubsystem-CommonTypes.xml
@@ -202,4 +202,14 @@
<!--#################### INPUT SOURCE COMMON TYPES END ####################-->
+ <!--#################### PRODUCT STRATEGY COMMON TYPES BEGIN ####################-->
+
+ <ComponentType Name="ProductStrategy" Mapping="ProductStrategy">
+ <Component Name="selected_output_devices" Type="OutputDevicesMask"/>
+ <StringParameter Name="device_address" MaxLength="256"
+ Description="if any, device address associated"/>
+ </ComponentType>
+
+ <!--#################### PRODUCT STRATEGY COMMON TYPES END ####################-->
+
</ComponentTypeSet>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk
index a37db1e..e7a56e1 100644
--- a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk
@@ -11,7 +11,8 @@
Strategy.cpp \
InputSource.cpp \
Stream.cpp \
- Usage.cpp
+ Usage.cpp \
+ ProductStrategy.cpp
LOCAL_CFLAGS += \
-Wall \
@@ -22,7 +23,7 @@
LOCAL_C_INCLUDES := \
frameworks/av/services/audiopolicy/engineconfigurable/include \
- frameworks/av/services/audiopolicy/engineconfigurable/interface \
+ frameworks/av/services/audiopolicy/engineconfigurable/interface
LOCAL_SHARED_LIBRARIES := \
libaudiopolicyengineconfigurable \
@@ -31,7 +32,9 @@
liblog \
LOCAL_HEADER_LIBRARIES := \
- libaudiopolicycommon
+ libaudiopolicycommon \
+ libaudioclient_headers \
+ libbase_headers
LOCAL_MULTILIB := $(AUDIOSERVER_MULTILIB)
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp
index 7374fc3..ba6063a 100644
--- a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp
@@ -21,6 +21,7 @@
#include "Stream.h"
#include "InputSource.h"
#include "Usage.h"
+#include "ProductStrategy.h"
#include <AudioPolicyPluginInterface.h>
#include <AudioPolicyEngineInstance.h>
#include <utils/Log.h>
@@ -39,6 +40,7 @@
const char *const PolicySubsystem::mStrategyComponentName = "Strategy";
const char *const PolicySubsystem::mInputSourceComponentName = "InputSource";
const char *const PolicySubsystem::mUsageComponentName = "Usage";
+const char *const PolicySubsystem::mProductStrategyComponentName = "ProductStrategy";
PolicySubsystem::PolicySubsystem(const std::string &name, core::log::Logger &logger)
: CSubsystem(name, logger),
@@ -82,6 +84,10 @@
mInputSourceComponentName,
(1 << MappingKeyName))
);
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<ProductStrategy>(
+ mProductStrategyComponentName, 0)
+ );
}
// Retrieve Route interface
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h
index 822eeb9..72f3252 100644
--- a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h
@@ -56,4 +56,5 @@
static const char *const mStrategyComponentName;
static const char *const mInputSourceComponentName;
static const char *const mUsageComponentName;
+ static const char *const mProductStrategyComponentName;
};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.cpp
new file mode 100644
index 0000000..bb29ef1
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 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 "ProductStrategy.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+
+using std::string;
+using android::product_strategy_t;
+
+ProductStrategy::ProductStrategy(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context,
+ core::log::Logger& logger)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ logger,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context)
+{
+ ALOG_ASSERT(instanceConfigurableElement != nullptr, "Invalid Configurable Element");
+ mPolicySubsystem = static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem());
+ ALOG_ASSERT(mPolicySubsystem != nullptr, "Invalid Policy Subsystem");
+
+ mPolicyPluginInterface = mPolicySubsystem->getPolicyPluginInterface();
+ ALOG_ASSERT(mPolicyPluginInterface != nullptr, "Invalid Policy Plugin Interface");
+
+ std::string name(instanceConfigurableElement->getName());
+ mId = mPolicyPluginInterface->getProductStrategyByName(name);
+
+ ALOG_ASSERT(mId != PRODUCT_STRATEGY_INVALID, "Product Strategy %s not found", name.c_str());
+
+ ALOGE("Product Strategy %s added", name.c_str());
+}
+
+bool ProductStrategy::sendToHW(string & /*error*/)
+{
+ Device deviceParams;
+ blackboardRead(&deviceParams, sizeof(deviceParams));
+
+ mPolicyPluginInterface->setDeviceTypesForProductStrategy(mId, deviceParams.applicableDevice);
+ mPolicyPluginInterface->setDeviceAddressForProductStrategy(mId, deviceParams.deviceAddress);
+ return true;
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.h
new file mode 100644
index 0000000..244f082
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/ProductStrategy.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <AudioPolicyPluginInterface.h>
+#include <policy.h>
+#include <string>
+
+class PolicySubsystem;
+
+class ProductStrategy : public CFormattedSubsystemObject
+{
+private:
+ static const uint32_t mMaxStringSize = 257; /**< max string size (plus zero terminal). */
+
+ struct Device
+ {
+ uint32_t applicableDevice; /**< applicable device for this strategy. */
+ char deviceAddress[mMaxStringSize]; /**< device address associated with this strategy. */
+ } __attribute__((packed));
+
+public:
+ ProductStrategy(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context,
+ core::log::Logger& logger);
+
+protected:
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ android::product_strategy_t mId;
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+};
diff --git a/services/audiopolicy/engineconfigurable/src/Engine.cpp b/services/audiopolicy/engineconfigurable/src/Engine.cpp
index 815de25..caa1ec9 100644
--- a/services/audiopolicy/engineconfigurable/src/Engine.cpp
+++ b/services/audiopolicy/engineconfigurable/src/Engine.cpp
@@ -353,6 +353,27 @@
}
}
+void Engine::setDeviceAddressForProductStrategy(product_strategy_t strategy,
+ const std::string &address)
+{
+ if (getProductStrategies().find(strategy) == getProductStrategies().end()) {
+ ALOGE("%s: Trying to set address %s on invalid strategy %d", __FUNCTION__, address.c_str(),
+ strategy);
+ return;
+ }
+ getProductStrategies().at(strategy)->setDeviceAddress(address);
+}
+
+bool Engine::setDeviceTypesForProductStrategy(product_strategy_t strategy, audio_devices_t devices)
+{
+ if (getProductStrategies().find(strategy) == getProductStrategies().end()) {
+ ALOGE("%s: set device %d on invalid strategy %d", __FUNCTION__, devices, strategy);
+ return false;
+ }
+ getProductStrategies().at(strategy)->setDeviceTypes(devices);
+ return true;
+}
+
template <>
AudioPolicyManagerInterface *Engine::queryInterface()
{
diff --git a/services/audiopolicy/engineconfigurable/src/Engine.h b/services/audiopolicy/engineconfigurable/src/Engine.h
index aebf27d..05fecf0 100644
--- a/services/audiopolicy/engineconfigurable/src/Engine.h
+++ b/services/audiopolicy/engineconfigurable/src/Engine.h
@@ -119,6 +119,16 @@
{
return setPropertyForKey<audio_devices_t, audio_source_t>(device, inputSource);
}
+ void setDeviceAddressForProductStrategy(product_strategy_t strategy,
+ const std::string &address) override;
+
+ bool setDeviceTypesForProductStrategy(product_strategy_t strategy,
+ audio_devices_t devices) override;
+
+ product_strategy_t getProductStrategyByName(const std::string &name) override
+ {
+ return EngineBase::getProductStrategyByName(name);
+ }
private:
/* Copy facilities are put private to disable copy. */
diff --git a/services/audiopolicy/engineconfigurable/wrapper/Android.mk b/services/audiopolicy/engineconfigurable/wrapper/Android.mk
index b71a53c..7e93a99 100644
--- a/services/audiopolicy/engineconfigurable/wrapper/Android.mk
+++ b/services/audiopolicy/engineconfigurable/wrapper/Android.mk
@@ -25,7 +25,6 @@
LOCAL_SHARED_LIBRARIES := \
libparameter \
libmedia_helper \
- libicuuc \
libxml2
LOCAL_HEADER_LIBRARIES := \
diff --git a/services/audiopolicy/enginedefault/config/Android.mk b/services/audiopolicy/enginedefault/config/Android.mk
new file mode 100644
index 0000000..dcce8e3
--- /dev/null
+++ b/services/audiopolicy/enginedefault/config/Android.mk
@@ -0,0 +1,9 @@
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#######################################################################
+# Recursive call sub-folder Android.mk
+#
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
diff --git a/services/audiopolicy/enginedefault/config/example/Android.mk b/services/audiopolicy/enginedefault/config/example/Android.mk
new file mode 100644
index 0000000..04561b8
--- /dev/null
+++ b/services/audiopolicy/enginedefault/config/example/Android.mk
@@ -0,0 +1,32 @@
+LOCAL_PATH := $(call my-dir)
+
+##################################################################
+# CONFIGURATION TOP FILE
+##################################################################
+
+ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), phone_configurable)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_configuration_phone.xml
+LOCAL_MODULE_STEM := audio_policy_engine_configuration.xml
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := phone/$(LOCAL_MODULE_STEM)
+
+LOCAL_REQUIRED_MODULES := \
+ audio_policy_engine_product_strategies_phone.xml
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := audio_policy_engine_product_strategies_phone.xml
+LOCAL_MODULE_STEM := audio_policy_engine_product_strategies.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_VENDOR_MODULE := true
+LOCAL_SRC_FILES := phone/$(LOCAL_MODULE_STEM)
+include $(BUILD_PREBUILT)
+
+endif # ifeq ($(BUILD_AUDIO_POLICY_EXAMPLE_CONFIGURATION), phone_configurable)
diff --git a/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_configuration.xml b/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_configuration.xml
new file mode 100644
index 0000000..ab61d8a
--- /dev/null
+++ b/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_configuration.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<configuration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <xi:include href="audio_policy_engine_product_strategies.xml"/>
+
+</configuration>
+
diff --git a/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_product_strategies.xml b/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_product_strategies.xml
new file mode 100644
index 0000000..f72e379
--- /dev/null
+++ b/services/audiopolicy/enginedefault/config/example/phone/audio_policy_engine_product_strategies.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<ProductStrategies>
+
+ <!-- "hidden strategies" like TTS, enforced audible:
+ Shall we expose them here or keep it hard coded -->
+
+ <!-- Used to identify the volume of audio streams for enforced system sounds in certain
+ countries (e.g. camera in Japan)
+ This strategy will only have higher priority than phone if force for system is set to
+ enforced. -->
+
+ <ProductStrategy name="STRATEGY_PHONE">
+ <AttributesGroup streamType="AUDIO_STREAM_VOICE_CALL">
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION"/> </Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_BLUETOOTH_SCO">
+ <Attributes> <Flags value="AUDIO_FLAG_SCO"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_SONIFICATION">
+ <AttributesGroup streamType="AUDIO_STREAM_RING">
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/> </Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_ALARM">
+ <Attributes> <Usage value="AUDIO_USAGE_ALARM"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_ENFORCED_AUDIBLE">
+ <AttributesGroup streamType="AUDIO_STREAM_ENFORCED_AUDIBLE">
+ <Attributes> <Flags value="AUDIO_FLAG_AUDIBILITY_ENFORCED"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_ACCESSIBILITY">
+ <AttributesGroup streamType="AUDIO_STREAM_ACCESSIBILITY">
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_SONIFICATION_RESPECTFUL">
+ <AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION">
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_NOTIFICATION_EVENT"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_MEDIA">
+ <AttributesGroup streamType="AUDIO_STREAM_MUSIC">
+ <Attributes> <Usage value="AUDIO_USAGE_MEDIA"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_GAME"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANT"/> </Attributes>
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/> </Attributes>
+ <Attributes></Attributes>
+ </AttributesGroup>
+ <AttributesGroup streamType="AUDIO_STREAM_SYSTEM">
+ <Attributes> <Usage value="AUDIO_USAGE_ASSISTANCE_SONIFICATION"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <ProductStrategy name="STRATEGY_DTMF">
+ <AttributesGroup streamType="AUDIO_STREAM_DTMF">
+ <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Used to identify the volume of audio streams exclusively transmitted through the speaker
+ (TTS) of the device -->
+ <ProductStrategy name="STRATEGY_TRANSMITTED_THROUGH_SPEAKER">
+ <AttributesGroup streamType="AUDIO_STREAM_TTS">
+ <Attributes> <Flags value="AUDIO_FLAG_BEACON"/> </Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Routing Strategy rerouting may be removed as following media??? -->
+ <ProductStrategy name="STRATEGY_REROUTING">
+ <AttributesGroup streamType="AUDIO_STREAM_REROUTING">
+ <Attributes></Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+ <!-- Default product strategy has empty attributes -->
+ <ProductStrategy name="STRATEGY_PATCH">
+ <AttributesGroup streamType="AUDIO_STREAM_PATCH">
+ <Attributes></Attributes>
+ </AttributesGroup>
+ </ProductStrategy>
+
+
+</ProductStrategies>
+