IMS-VT: VT Quality selection from UI

1. Display message on UI for the negotiated video
resolution as indicated via PARAM_READY event.
2. Mapping of negotiated resolution and corresponding
video quality is done.

Change-Id: I62ede1d95be2fdf7e3b802510069d1c3ae14c6a8
CRs-Fixed: 1083131
diff --git a/InCallUI/src/com/android/incallui/QtiCallUtils.java b/InCallUI/src/com/android/incallui/QtiCallUtils.java
index 6f99b2b..7543c6e 100644
--- a/InCallUI/src/com/android/incallui/QtiCallUtils.java
+++ b/InCallUI/src/com/android/incallui/QtiCallUtils.java
@@ -45,9 +45,11 @@
 import android.telecom.InCallService.VideoCall;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.util.Size;
 
 import java.lang.reflect.*;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import org.codeaurora.internal.IExtTelephony;
 import org.codeaurora.ims.QtiCallConstants;
@@ -59,6 +61,9 @@
 public class QtiCallUtils {
 
     private static String LOG_TAG = "QtiCallUtils";
+    private static int VIDEO_QUALITY_UNKNOWN = -1;
+    private static final HashMap<Size, Integer>
+            VIDEO_QUALITY_TABLE = new HashMap<Size, Integer>();
 
     /**
      * Edit number variables for  deflect/call transfer feature.
@@ -69,6 +74,17 @@
             "com.qti.editnumber.INTENT_ACTION_DIALOG_DISMISS";
     private static String mEditNumberCallId;
 
+    static {
+        VIDEO_QUALITY_TABLE.put(new Size(320,240), VideoProfile.QUALITY_LOW);
+        VIDEO_QUALITY_TABLE.put(new Size(240,320), VideoProfile.QUALITY_LOW);
+        VIDEO_QUALITY_TABLE.put(new Size(352,288), VideoProfile.QUALITY_LOW);
+        VIDEO_QUALITY_TABLE.put(new Size(288,352), VideoProfile.QUALITY_LOW);
+        VIDEO_QUALITY_TABLE.put(new Size(640,480), VideoProfile.QUALITY_MEDIUM);
+        VIDEO_QUALITY_TABLE.put(new Size(480,640), VideoProfile.QUALITY_MEDIUM);
+        VIDEO_QUALITY_TABLE.put(new Size(960,720), VideoProfile.QUALITY_HIGH);
+        VIDEO_QUALITY_TABLE.put(new Size(720,960), VideoProfile.QUALITY_HIGH);
+    }
+
     /**
      * Private constructor for QtiCallUtils as we don't want to instantiate this class
      */
@@ -107,6 +123,14 @@
         }
     }
 
+    public static int sizeToVideoQuality(int width, int height) {
+        Size size = new Size(width, height);
+        if (VIDEO_QUALITY_TABLE.containsKey(size)) {
+            return VIDEO_QUALITY_TABLE.get(size);
+        }
+        return VIDEO_QUALITY_UNKNOWN;
+    }
+
     /**
      * Returns the call session resource id given the call session event
      */
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index df05a34..8ff4c05 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -1246,6 +1246,18 @@
         }
 
         mPreviewSurfaceState = PreviewSurfaceState.CAPABILITIES_RECEIVED;
+        Point previewDimensions = ui.getPreviewSize();
+
+        if (QtiImsExtUtils.isCarrierOneSupported() &&
+                QtiImsExtUtils.shallCheckSupportForHighVideoQuality(mContext) &&
+                previewDimensions != null &&
+                (previewDimensions.x != width || previewDimensions.y != height)) {
+            QtiCallUtils.displayToast(mContext, (mContext.getResources().getString(
+                    R.string.video_quality_changed) + mContext.getResources().getString(
+                    QtiCallUtils.getVideoQualityResourceId(
+                    QtiCallUtils.sizeToVideoQuality(width, height)))));
+        }
+
         changePreviewDimensions(width, height);
         ui.setPreviewRotation(mDeviceOrientation);