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);