<?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 volumeGroup="oem_traffic_anouncement">
            <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 volumeGroup="oem_adas_2">
            <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 volumeGroup="oem_adas_3">
            <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 volumeGroup="media_car_audio_type_3">
            <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 volumeGroup="media_car_audio_type_7">
            <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 volumeGroup="speech">
            <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 volumeGroup="system">
            <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" volumeGroup="media">
            <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 volumeGroup="speech">
            <Usage value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
        </AttributesGroup>
    </ProductStrategy>
    <ProductStrategy name="voice_call">
        <AttributesGroup streamType="AUDIO_STREAM_VOICE_CALL" volumeGroup="phone">
            <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION"/> </Attributes>
            <Attributes> <Usage value="AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING"/> </Attributes>
        </AttributesGroup>
        <AttributesGroup streamType="AUDIO_STREAM_BLUETOOTH_SCO" volumeGroup="phone">
            <Attributes> <Flags value="AUDIO_FLAG_SCO"/> </Attributes>
        </AttributesGroup>
    </ProductStrategy>
    <ProductStrategy name="alarm">
        <AttributesGroup streamType="AUDIO_STREAM_ALARM" volumeGroup="ring">
            <Usage value="AUDIO_USAGE_ALARM"/>
        </AttributesGroup>
    </ProductStrategy>
    <ProductStrategy name="ring">
        <AttributesGroup streamType="AUDIO_STREAM_RING" volumeGroup="ring">
            <Usage value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/>
        </AttributesGroup>
    </ProductStrategy>
    <ProductStrategy name="notification">
        <AttributesGroup streamType="AUDIO_STREAM_NOTIFICATION" volumeGroup="ring">
            <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" volumeGroup="system">
            <Usage value="AUDIO_USAGE_ASSISTANCE_SONIFICATION"/>
        </AttributesGroup>
    </ProductStrategy>
    <ProductStrategy name="tts">
        <!-- TTS stream MUST BE MANAGED OUTSIDE default product strategy if NO DEDICATED OUTPUT
             for TTS, otherwise when beacon happens, default strategy is ... muted.
             If it is media, it is annoying... -->
        <AttributesGroup streamType="AUDIO_STREAM_TTS" volumeGroup="tts">
            <Attributes> <Flags value="AUDIO_FLAG_BEACON"/> </Attributes>
        </AttributesGroup>
    </ProductStrategy>

    <!-- Routing Strategy rerouting may be removed as following media??? -->
    <ProductStrategy name="rerouting">
        <AttributesGroup streamType="AUDIO_STREAM_REROUTING" volumeGroup="rerouting">
            <Attributes></Attributes>
        </AttributesGroup>
    </ProductStrategy>

    <!-- Patch stream needs full scale volume, define it otherwise switch to default... -->
    <ProductStrategy name="patch">
        <AttributesGroup streamType="AUDIO_STREAM_PATCH" volumeGroup="patch">
            <Attributes></Attributes>
        </AttributesGroup>
    </ProductStrategy>

</ProductStrategies>

