Show IMS Conference StatusHints in InCall.

A lot of this logic for figuring out what label should be shown seems
like it should be determined in the presenter, rather than passing
through all this information to the fragment, but it can be cleaned up
at another time.

+ minor layout tweak.

Bug: 20181703
Change-Id: I392ce7cffc8c05eb94859892e899ce7c693895aa
diff --git a/res/layout/primary_call_info.xml b/res/layout/primary_call_info.xml
index 8f0c0e2..207b95b 100644
--- a/res/layout/primary_call_info.xml
+++ b/res/layout/primary_call_info.xml
@@ -44,7 +44,8 @@
         <ImageView android:id="@+id/callStateIcon"
             android:layout_width="16dp"
             android:layout_height="match_parent"
-            android:layout_marginEnd="8dp"
+            android:layout_marginStart="6dp"
+            android:layout_marginEnd="10dp"
             android:tint="@color/incall_accent_color"
             android:alpha="0.0"
             android:scaleType="center"
diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java
index 28f449b..4fa9d7e 100644
--- a/src/com/android/incallui/CallCardFragment.java
+++ b/src/com/android/incallui/CallCardFragment.java
@@ -489,10 +489,12 @@
             String connectionLabel,
             Drawable callStateIcon,
             String gatewayNumber,
-            boolean isWifi) {
+            boolean isWifi,
+            boolean isConference) {
         boolean isGatewayCall = !TextUtils.isEmpty(gatewayNumber);
         CharSequence callStateLabel = getCallStateLabelFromState(state, videoState,
-                sessionModificationState, disconnectCause, connectionLabel, isGatewayCall, isWifi);
+                sessionModificationState, disconnectCause, connectionLabel, isGatewayCall, isWifi,
+                isConference);
 
         Log.v(this, "setCallState " + callStateLabel);
         Log.v(this, "DisconnectCause " + disconnectCause.toString());
@@ -658,15 +660,17 @@
      *         3. Incoming calls will only display "Incoming via..." for accounts.
      *         4. Video calls, and session modification states (eg. requesting video).
      *         5. Incoming and active Wi-Fi calls will show label provided by hint.
+     *
+     * TODO: Move this to the CallCardPresenter.
      */
     private CharSequence getCallStateLabelFromState(int state, int videoState,
             int sessionModificationState, DisconnectCause disconnectCause, String label,
-            boolean isGatewayCall, boolean isWifi) {
+            boolean isGatewayCall, boolean isWifi, boolean isConference) {
         final Context context = getView().getContext();
         CharSequence callStateLabel = null;  // Label to display as part of the call banner
 
-        boolean isSpecialCall = label != null;
-        boolean isAccount = isSpecialCall && !isGatewayCall;
+        boolean hasSuggestedLabel = label != null;
+        boolean isAccount = hasSuggestedLabel && !isGatewayCall;
 
         switch  (state) {
             case Call.State.IDLE:
@@ -675,7 +679,7 @@
             case Call.State.ACTIVE:
                 // We normally don't show a "call state label" at all in this state
                 // (but we can use the call state label to display the provider name).
-                if (isAccount || isWifi) {
+                if ((isAccount || isWifi || isConference) && hasSuggestedLabel) {
                     callStateLabel = label;
                 } else if (sessionModificationState
                         == Call.SessionModificationState.REQUEST_FAILED) {
@@ -692,7 +696,7 @@
                 break;
             case Call.State.CONNECTING:
             case Call.State.DIALING:
-                if (isSpecialCall && !isWifi) {
+                if (hasSuggestedLabel && !isWifi) {
                     callStateLabel = context.getString(R.string.calling_via_template, label);
                 } else {
                     callStateLabel = context.getString(R.string.card_title_dialing);
@@ -703,7 +707,7 @@
                 break;
             case Call.State.INCOMING:
             case Call.State.CALL_WAITING:
-                if (isWifi) {
+                if (isWifi && hasSuggestedLabel) {
                     callStateLabel = label;
                 } else if (isAccount) {
                     callStateLabel = context.getString(R.string.incoming_via_template, label);
diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java
index d7e39d8..d890523 100644
--- a/src/com/android/incallui/CallCardPresenter.java
+++ b/src/com/android/incallui/CallCardPresenter.java
@@ -244,7 +244,8 @@
                     null,
                     null,
                     null,
-                    false /* isWifi */);
+                    false /* isWifi */,
+                    false /* isConference */);
             getUi().showHdAudioIndicator(false);
         }
 
@@ -300,7 +301,8 @@
                     getConnectionLabel(),
                     getCallStateIcon(),
                     getGatewayNumber(),
-                    primaryCallCan(Details.CAPABILITY_WIFI));
+                    primaryCallCan(Details.CAPABILITY_WIFI),
+                    mPrimary.isConferenceCall());
 
             boolean showHdAudioIndicator =
                     isPrimaryCallActive() && primaryCallCan(Details.CAPABILITY_HIGH_DEF_AUDIO);
@@ -738,7 +740,8 @@
                 String providerLabel, boolean isConference);
         void setCallState(int state, int videoState, int sessionModificationState,
                 DisconnectCause disconnectCause, String connectionLabel,
-                Drawable connectionIcon, String gatewayNumber, boolean isWifi);
+                Drawable connectionIcon, String gatewayNumber, boolean isWifi,
+                boolean isConference);
         void setPrimaryCallElapsedTime(boolean show, long duration);
         void setPrimaryName(String name, boolean nameIsNumber);
         void setPrimaryImage(Drawable image);