calls: add conference support

Change-Id: Ib72f0fa032a19aca867e155ade3df114854bae19
diff --git a/ring-android/app/src/main/res/layout/frag_call.xml b/ring-android/app/src/main/res/layout/frag_call.xml
index 3f65cd1..1df29bd 100644
--- a/ring-android/app/src/main/res/layout/frag_call.xml
+++ b/ring-android/app/src/main/res/layout/frag_call.xml
@@ -53,10 +53,14 @@
                 android:layout_height="wrap_content"
                 android:layout_alignParentEnd="true"
                 android:layout_alignParentBottom="true"
-                android:layout_margin="12dp"
+                android:layout_marginStart="12dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginEnd="12dp"
+                android:layout_marginBottom="12dp"
                 android:visibility="gone"
                 app:cardCornerRadius="16dp"
-                app:cardPreventCornerOverlap="false">
+                app:cardPreventCornerOverlap="false"
+                tools:visibility="visible">
 
                 <cx.ring.views.AutoFitTextureView
                     android:id="@+id/preview_surface"
@@ -75,23 +79,26 @@
             android:clipToPadding="false"
             android:fitsSystemWindows="true">
 
-            <LinearLayout
+            <com.google.android.flexbox.FlexboxLayout
                 android:id="@+id/contact_bubble_layout"
-                android:layout_width="match_parent"
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_centerInParent="true"
-                android:gravity="center"
                 android:orientation="vertical"
-                android:visibility="invisible">
+                android:visibility="visible"
+                app:flexDirection="column"
+                app:flexWrap="wrap"
+                tools:visibility="gone">
 
                 <RelativeLayout
-                    android:layout_width="match_parent"
+                    android:layout_width="230dp"
                     android:layout_height="230dp">
 
                     <com.rodolfonavalon.shaperipplelibrary.ShapeRipple
                         android:id="@+id/shape_ripple"
-                        android:layout_width="match_parent"
+                        android:layout_width="wrap_content"
                         android:layout_height="match_parent"
+                        android:layout_centerInParent="true"
                         app:enable_color_transition="true"
                         app:ripple_color="@color/white"
                         app:ripple_count="3"
@@ -106,90 +113,95 @@
                         tools:src="@drawable/ic_contact_picture_fallback" />
                 </RelativeLayout>
 
-                <TextView
-                    android:id="@+id/contact_bubble_txt"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="middle"
-                    android:gravity="center_horizontal"
-                    android:paddingStart="32dp"
-                    android:paddingEnd="32dp"
-                    android:singleLine="true"
-                    android:textAppearance="?android:attr/textAppearanceLarge"
-                    android:textColor="@color/text_color_primary_dark"
-                    tools:text="Contact Name" />
-
-                <TextView
-                    android:id="@+id/contact_bubble_num_txt"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="middle"
-                    android:gravity="center_horizontal"
-                    android:paddingStart="32dp"
-                    android:paddingEnd="32dp"
-                    android:singleLine="true"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:textColor="@color/text_color_secondary_dark"
-                    android:visibility="gone"
-                    tools:text="ring:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-                    tools:visibility="visible" />
-
-                <TextView
-                    android:id="@+id/call_status_txt"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:gravity="center_horizontal"
-                    android:paddingStart="32dp"
-                    android:paddingEnd="32dp"
-                    android:textColor="@color/text_color_primary_dark"
-                    android:textSize="16sp"
-                    tools:text="Connecting" />
-            </LinearLayout>
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@+id/contact_bubble_layout"
-                android:layout_centerHorizontal="true"
-                android:orientation="horizontal"
-                tools:visibility="gone">
-
-                <com.google.android.material.floatingactionbutton.FloatingActionButton
-                    android:id="@+id/call_refuse_btn"
+                <LinearLayout
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_margin="16dp"
-                    android:contentDescription="@string/action_call_decline"
-                    android:onClick="@{() -> presenter.refuseClicked()}"
-                    android:tint="@color/white"
-                    android:visibility="gone"
-                    app:backgroundTint="@color/error_red"
-                    app:elevation="6dp"
-                    app:fabSize="normal"
-                    app:pressedTranslationZ="12dp"
-                    app:rippleColor="@android:color/white"
-                    app:srcCompat="@drawable/baseline_call_end_24"
-                    app:useCompatPadding="true" />
+                    android:gravity="center_horizontal"
+                    android:orientation="vertical">
 
-                <com.google.android.material.floatingactionbutton.FloatingActionButton
-                    android:id="@+id/call_accept_btn"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="16dp"
-                    android:contentDescription="@string/action_call_accept"
-                    android:onClick="@{() -> presenter.acceptClicked()}"
-                    android:visibility="gone"
-                    app:backgroundTint="@color/green_500"
-                    app:elevation="6dp"
-                    app:fabSize="normal"
-                    app:pressedTranslationZ="12dp"
-                    app:rippleColor="@android:color/white"
-                    app:srcCompat="@drawable/baseline_call_24"
-                    app:useCompatPadding="true" />
+                    <TextView
+                        android:id="@+id/contact_bubble_txt"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:ellipsize="middle"
+                        android:gravity="center_horizontal"
+                        android:paddingStart="32dp"
+                        android:paddingEnd="32dp"
+                        android:singleLine="true"
+                        android:textAppearance="?android:attr/textAppearanceLarge"
+                        android:textColor="@color/text_color_primary_dark"
+                        tools:text="Contact Name" />
 
-            </LinearLayout>
+                    <TextView
+                        android:id="@+id/contact_bubble_num_txt"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:ellipsize="middle"
+                        android:gravity="center_horizontal"
+                        android:paddingStart="32dp"
+                        android:paddingEnd="32dp"
+                        android:singleLine="true"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:textColor="@color/text_color_secondary_dark"
+                        android:visibility="gone"
+                        tools:text="ring:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+                        tools:visibility="visible" />
 
-            <LinearLayout
+                    <TextView
+                        android:id="@+id/call_status_txt"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_horizontal"
+                        android:paddingStart="32dp"
+                        android:paddingEnd="32dp"
+                        android:textColor="@color/text_color_primary_dark"
+                        android:textSize="16sp"
+                        tools:text="Connecting" />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="horizontal"
+                        tools:visibility="visible">
+
+                        <com.google.android.material.floatingactionbutton.FloatingActionButton
+                            android:id="@+id/call_refuse_btn"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_margin="16dp"
+                            android:contentDescription="@string/action_call_decline"
+                            android:onClick="@{() -> presenter.refuseClicked()}"
+                            android:tint="@color/white"
+                            android:visibility="visible"
+                            app:backgroundTint="@color/error_red"
+                            app:elevation="6dp"
+                            app:fabSize="normal"
+                            app:pressedTranslationZ="12dp"
+                            app:rippleColor="@android:color/white"
+                            app:srcCompat="@drawable/baseline_call_end_24"
+                            app:useCompatPadding="true" />
+
+                        <com.google.android.material.floatingactionbutton.FloatingActionButton
+                            android:id="@+id/call_accept_btn"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_margin="16dp"
+                            android:contentDescription="@string/action_call_accept"
+                            android:onClick="@{() -> presenter.acceptClicked()}"
+                            android:visibility="visible"
+                            app:backgroundTint="@color/green_500"
+                            app:elevation="6dp"
+                            app:fabSize="normal"
+                            app:pressedTranslationZ="12dp"
+                            app:rippleColor="@android:color/white"
+                            app:srcCompat="@drawable/baseline_call_24"
+                            app:useCompatPadding="true" />
+                    </LinearLayout>
+
+                </LinearLayout>
+            </com.google.android.flexbox.FlexboxLayout>
+
+            <com.google.android.flexbox.FlexboxLayout
                 android:id="@+id/call_control_group"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -200,6 +212,8 @@
                 android:gravity="center"
                 android:orientation="vertical"
                 android:visibility="gone"
+                app:flexDirection="column_reverse"
+                app:flexWrap="wrap"
                 tools:visibility="visible">
 
                 <ImageButton
@@ -214,6 +228,17 @@
                     android:tint="@color/white"
                     app:srcCompat="@drawable/baseline_camera_front_24" />
 
+                <ImageButton
+                    android:id="@+id/call_conference_add"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="12dp"
+                    android:background="@drawable/call_button_background"
+                    android:onClick="@{() -> presenter.addParticipant()}"
+                    android:padding="16dp"
+                    android:tint="@color/white"
+                    app:srcCompat="@drawable/baseline_person_add_24" />
+
                 <cx.ring.views.CheckableImageButton
                     android:id="@+id/call_mic_btn"
                     android:layout_width="wrap_content"
@@ -239,7 +264,17 @@
                     android:tint="@color/white"
                     app:srcCompat="@drawable/baseline_volume_up_24" />
 
-            </LinearLayout>
+            </com.google.android.flexbox.FlexboxLayout>
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/conf_control_group"
+                android:layout_alignParentEnd="true"
+                android:layout_alignParentTop="true"
+                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+                tools:listitem="@layout/item_conference_participant"
+                tools:itemCount="4" />
 
             <EditText
                 android:id="@+id/dialpad_edit_text"