<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2013 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
  -->

<!-- In-call onscreen touch UI elements, used on some platforms.

     This layout is a fullscreen overlay, drawn on top of the
     non-touch-sensitive parts of the in-call UI (i.e. the call card).

     The top-level View here is a InCallTouchUi (FrameLayout) with 2 children:
       (1) inCallControls: the widgets visible while a regular call (or calls) is in progress
       (2) incomingCallWidget: the UI displayed while an incoming call is ringing
     In usual cases, one of these is visible at any given moment.
     One exception is when incomingCallWidget is fading-out. At that moment, we show
     inCallControls beneath incomingCallWidget for smoother transition.
     -->

<!-- Main cluster of onscreen buttons on the lower part of the screen. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bottomButtons"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_margin="0dp"
    android:padding="0dp"
    android:background="@color/button_background_color"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:animateLayoutChanges="true" >

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom|center_horizontal"
        android:baselineAligned="false">

        <!-- This row only ever shows either 4 or 5 buttons. This may depend on whether the device
             supports "Hold" (i.e. 4 buttons on CDMA devices, 5 buttons on GSM devices.) or whether
             it is in a video call.

             There are a couple of *pairs* of buttons that share a single "slot", namely Hold/Swap
             and Add/Merge.  For these, the code in InCallTouchUi is responsible for making sure
             that at any point exactly one of the pair is VISIBLE and the other is GONE.

             If there are more than 5 buttons eligible to be shown, the presenter is responsible for
             collapsing those options into an overflow menu, which appears as one of the buttons
             in the row instead. -->

        <!-- FAR LEFT SLOT ===================================================================== -->

        <!-- "Audio mode". this is a multi-mode button that can behave either like a simple
             "compound button" with two states *or* like an action button that brings up a popup
             menu; see btn_compound_audio.xml and CallButtonFragment.updateAudioButtons(). -->
        <ToggleButton android:id="@+id/audioButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_audio"
            android:contentDescription="@string/audio_mode_speaker" />

        <!-- MIDDLE LEFT SLOT ================================================================== -->

        <!-- "Mute" -->
        <ToggleButton android:id="@+id/muteButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_mute"
            android:contentDescription="@string/onscreenMuteText" />

        <!-- CENTER SLOT ======================================================================= -->

        <!-- "Dialpad" -->
        <ToggleButton android:id="@+id/dialpadButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_dialpad"
            android:contentDescription="@string/onscreenShowDialpadText" />

        <!-- MIDDLE RIGHT SLOT ================================================================= -->

        <!-- This slot is either "Hold" or "Swap", depending on the state of the call. One or the
             other of these must always be set to GONE. -->

        <!-- "Hold" -->
        <ToggleButton android:id="@+id/holdButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_hold"
            android:contentDescription="@string/onscreenHoldText_unselected" />

        <!-- "Swap" (or "Manage calls" in some CDMA states) -->
        <ImageButton android:id="@+id/swapButton"
            style="@style/InCallButton"
            android:background="@drawable/btn_swap"
            android:contentDescription="@string/onscreenSwapCallsText"
            android:visibility="gone" />

        <!-- "Change to video call" -->
        <ImageButton android:id="@+id/changeToVideoButton"
            style="@style/InCallButton"
            android:background="@drawable/btn_change_to_video"
            android:contentDescription="@string/onscreenVideoCallText"
            android:visibility="gone" />

        <!-- "Switch camera" for video calls. -->
        <ToggleButton android:id="@+id/switchCameraButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_video_switch"
            android:contentDescription="@string/onscreenSwitchCameraText"
            android:visibility="gone" />

        <!-- FAR RIGHT SLOT ==================================================================== -->

        <!-- This slot is either "Add" or "Merge", depending on the state of the call.  One or the
             other of these must always be set to GONE. -->

        <!-- "Turn off camera" for video calls. -->
        <ToggleButton android:id="@+id/pauseVideoButton"
            style="@style/InCallCompoundButton"
            android:background="@drawable/btn_compound_video_off"
            android:contentDescription="@string/onscreenPauseVideoText"
            android:visibility="gone" />

        <!-- "Add Call" -->
        <ImageButton android:id="@+id/addButton"
            style="@style/InCallButton"
            android:background="@drawable/btn_add"
            android:contentDescription="@string/onscreenAddCallText"
            android:visibility="gone" />

        <!-- "Merge calls". This button is used only on GSM devices, where we know that "Add" and
             "Merge" are never available at the same time. The "Merge" button for CDMA devices is
             "cdmaMergeButton" above. -->
        <ImageButton android:id="@+id/mergeButton"
            style="@style/InCallButton"
            android:background="@drawable/btn_merge"
            android:contentDescription="@string/onscreenMergeCallsText"
            android:visibility="gone" />

        <!-- "Overflow" -->
        <ImageButton android:id="@+id/overflowButton"
            style="@style/InCallButton"
            android:background="@drawable/btn_overflow"
            android:contentDescription="@string/onscreenOverflowText"
            android:visibility="gone" />

        <!-- "Manage conference button (Video Call) " -->
        <ImageButton android:id="@+id/manageVideoCallConferenceButton"
            style="@style/InCallButton"
            android:background="@drawable/ic_group_white_24dp"
            android:contentDescription="@string/onscreenManageConferenceText"
            android:visibility="gone" />

    </LinearLayout>

</LinearLayout>
