Merge ea5127ca58d684361c9020cc0fbbe423472fc6cd on remote branch

Change-Id: I6cb611c7b47184c8e7c96367173e426004f556ae
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index fc9b449..73e6c83 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -21,7 +21,7 @@
 
   <uses-sdk
     android:minSdkVersion="24"
-    android:targetSdkVersion="28"/>
+    android:targetSdkVersion="29"/>
 
   <uses-permission android:name="android.permission.CALL_PHONE"/>
   <uses-permission android:name="android.permission.READ_CONTACTS"/>
diff --git a/assets/quantum/AndroidManifest.xml b/assets/quantum/AndroidManifest.xml
index f574665..4cfcd97 100644
--- a/assets/quantum/AndroidManifest.xml
+++ b/assets/quantum/AndroidManifest.xml
@@ -16,6 +16,6 @@
   -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.google.android.assets.quantum">
-  <uses-sdk android:targetSdkVersion="28" />
+  <uses-sdk android:targetSdkVersion="29" />
   <application/>
 </manifest>
diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml
index c3cd1e2..0b64f2d 100644
--- a/java/com/android/dialer/app/AndroidManifest.xml
+++ b/java/com/android/dialer/app/AndroidManifest.xml
@@ -56,7 +56,7 @@
 
   <uses-sdk
     android:minSdkVersion="24"
-    android:targetSdkVersion="28"/>
+    android:targetSdkVersion="29"/>
 
   <application>
 
diff --git a/java/com/android/dialer/assisteddialing/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
index 3825c50..0c2302b 100644
--- a/java/com/android/dialer/assisteddialing/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
@@ -17,6 +17,6 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
 </manifest>
diff --git a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
index b0a1011..63d13fb 100644
--- a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
@@ -17,7 +17,7 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
   <application>
     <activity
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
index 01f05b5..b906431 100644
--- a/java/com/android/dialer/binary/google/AndroidManifest.xml
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -21,7 +21,7 @@
 
   <uses-sdk
     android:minSdkVersion="24"
-    android:targetSdkVersion="28"/>
+    android:targetSdkVersion="29"/>
 
   <uses-permission android:name="android.permission.CALL_PHONE"/>
   <uses-permission android:name="android.permission.READ_CONTACTS"/>
diff --git a/java/com/android/dialer/calllog/AndroidManifest.xml b/java/com/android/dialer/calllog/AndroidManifest.xml
index 27e11a0..a487233 100644
--- a/java/com/android/dialer/calllog/AndroidManifest.xml
+++ b/java/com/android/dialer/calllog/AndroidManifest.xml
@@ -18,7 +18,7 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
   <application>
 
diff --git a/java/com/android/dialer/calllog/config/AndroidManifest.xml b/java/com/android/dialer/calllog/config/AndroidManifest.xml
index 2d447af..73a0f1f 100644
--- a/java/com/android/dialer/calllog/config/AndroidManifest.xml
+++ b/java/com/android/dialer/calllog/config/AndroidManifest.xml
@@ -18,7 +18,7 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
   <application>
 
diff --git a/java/com/android/dialer/promotion/impl/AndroidManifest.xml b/java/com/android/dialer/promotion/impl/AndroidManifest.xml
index c938b9a..209072b 100644
--- a/java/com/android/dialer/promotion/impl/AndroidManifest.xml
+++ b/java/com/android/dialer/promotion/impl/AndroidManifest.xml
@@ -18,6 +18,6 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
 </manifest>
diff --git a/java/com/android/dialer/shortcuts/AndroidManifest.xml b/java/com/android/dialer/shortcuts/AndroidManifest.xml
index c0f07bf..826ad9c 100644
--- a/java/com/android/dialer/shortcuts/AndroidManifest.xml
+++ b/java/com/android/dialer/shortcuts/AndroidManifest.xml
@@ -18,7 +18,7 @@
 
   <uses-sdk
     android:minSdkVersion="24"
-    android:targetSdkVersion="28"/>
+    android:targetSdkVersion="29"/>
 
   <application>
 
diff --git a/java/com/android/dialer/spannable/AndroidManifest.xml b/java/com/android/dialer/spannable/AndroidManifest.xml
index 0b05144..afc1675 100644
--- a/java/com/android/dialer/spannable/AndroidManifest.xml
+++ b/java/com/android/dialer/spannable/AndroidManifest.xml
@@ -18,5 +18,5 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 </manifest>
diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index 4a26b46..56952e8 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -19,7 +19,7 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
   <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
   <!-- We use this to disable the status bar buttons of home, back and recent
diff --git a/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java b/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
index 06169c2..7f69a66 100644
--- a/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
+++ b/java/com/android/incallui/answer/impl/AnswerVideoCallScreen.java
@@ -22,6 +22,7 @@
 import android.support.v4.app.Fragment;
 import android.view.TextureView;
 import android.view.View;
+import android.view.View.OnLayoutChangeListener;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.FragmentUtils;
 import com.android.dialer.common.LogUtil;
@@ -30,6 +31,7 @@
 import com.android.incallui.video.protocol.VideoCallScreenDelegate;
 import com.android.incallui.video.protocol.VideoCallScreenDelegateFactory;
 import com.android.incallui.videosurface.bindings.VideoSurfaceBindings;
+import com.android.incallui.videosurface.protocol.VideoSurfaceTexture;
 import com.android.incallui.QtiCallUtils;
 
 /** Shows a video preview for an incoming call. */
@@ -38,6 +40,7 @@
   @NonNull private final Fragment fragment;
   @NonNull private final TextureView textureView;
   @NonNull private final VideoCallScreenDelegate delegate;
+  private static final float ASPECT_RATIO_MATCH_THRESHOLD = 0.1f;
 
   public AnswerVideoCallScreen(
       @NonNull String callId, @NonNull Fragment fragment, @NonNull View view) {
@@ -60,14 +63,31 @@
 
   @Override
   public void onVideoScreenStart() {
-    LogUtil.i("AnswerVideoCallScreen.onStart", null);
+    LogUtil.i("AnswerVideoCallScreen.onVideoScreenStart", null);
     delegate.onVideoCallScreenUiReady(this);
     DialerCall call = QtiCallUtils.getIncomingCall();
     if (QtiCallUtils.isVideoCrs(call)) {
-        LogUtil.i("AnswerVideoCallScreen.onStart, video CRS, create remote surface", null);
+        LogUtil.i("AnswerVideoCallScreen.onVideoScreenStart", "create remote surface for CRS");
         delegate.getRemoteVideoSurfaceTexture().attachToTextureView(textureView);
+        textureView.addOnLayoutChangeListener(
+            new OnLayoutChangeListener() {
+              @Override
+              public void onLayoutChange(
+                  View v,
+                  int left,
+                  int top,
+                  int right,
+                  int bottom,
+                  int oldLeft,
+                  int oldTop,
+                  int oldRight,
+                  int oldBottom) {
+              LogUtil.i("AnswerVideoCallScreen.onLayoutChange", "remoteTextureView layout changed");
+              updateRemoteVideoScaling();
+              }
+            });
     } else {
-        LogUtil.i("AnswerVideoCallScreen.onStart, no video CRS, create local surface", null);
+        LogUtil.i("AnswerVideoCallScreen.onVideoScreenStart", "no video CRS, create local surface");
         delegate.getLocalVideoSurfaceTexture().attachToTextureView(textureView);
     }
   }
@@ -95,7 +115,13 @@
   }
 
   @Override
-  public void onRemoteVideoDimensionsChanged() {}
+  public void onRemoteVideoDimensionsChanged() {
+    LogUtil.i("AnswerVideoCallScreen.onRemoteVideoDimensionsChanged", null);
+    DialerCall call = QtiCallUtils.getIncomingCall();
+    if (QtiCallUtils.isVideoCrs(call)) {
+      updateRemoteVideoScaling();
+    }
+  }
 
   @Override
   public void onLocalVideoOrientationChanged() {
@@ -147,6 +173,34 @@
     }
   }
 
+  private void updateRemoteVideoScaling() {
+    if (textureView.getWidth() == 0 || textureView.getHeight() == 0) {
+      LogUtil.i("AnswerVideoCallScreen.updateRemoteVideoScaling",
+             "view layout hasn't finished yet");
+      return;
+    }
+
+    VideoSurfaceTexture remoteVideoSurfaceTexture =
+        delegate.getRemoteVideoSurfaceTexture();
+    Point videoSize = remoteVideoSurfaceTexture.getSourceVideoDimensions();
+    if (videoSize == null) {
+      LogUtil.i("AnswerVideoCallScreen.updateRemoteVideoScaling", "video size is null");
+      return;
+    }
+    // If the video and display aspect ratio's are close then scale video to fill display
+    float videoAspectRatio = ((float) videoSize.x) / videoSize.y;
+    float displayAspectRatio =
+        ((float) textureView.getWidth()) / textureView.getHeight();
+    float delta = Math.abs(videoAspectRatio - displayAspectRatio);
+    float sum = videoAspectRatio + displayAspectRatio;
+    if (delta / sum < ASPECT_RATIO_MATCH_THRESHOLD) {
+      VideoSurfaceBindings.scaleVideoAndFillView(textureView, videoSize.x, videoSize.y, 0);
+    } else {
+      VideoSurfaceBindings.scaleVideoMaintainingAspectRatio(
+          textureView, videoSize.x, videoSize.y);
+    }
+  }
+
   private boolean isLandscape() {
     return fragment.getResources().getConfiguration().orientation
         == Configuration.ORIENTATION_LANDSCAPE;
diff --git a/java/com/android/incallui/autoresizetext/AndroidManifest.xml b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
index f6eb34b..9bff6f2 100644
--- a/java/com/android/incallui/autoresizetext/AndroidManifest.xml
+++ b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
@@ -19,7 +19,7 @@
 
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 
   <application />
 </manifest>
diff --git a/java/com/android/incallui/video/protocol/AndroidManifest.xml b/java/com/android/incallui/video/protocol/AndroidManifest.xml
index f58284e..c73ce10 100644
--- a/java/com/android/incallui/video/protocol/AndroidManifest.xml
+++ b/java/com/android/incallui/video/protocol/AndroidManifest.xml
@@ -18,5 +18,5 @@
     package="com.android.incallui.video.protocol">
   <uses-sdk
       android:minSdkVersion="24"
-      android:targetSdkVersion="28"/>
+      android:targetSdkVersion="29"/>
 </manifest>
diff --git a/java/com/android/voicemail/AndroidManifest.xml b/java/com/android/voicemail/AndroidManifest.xml
index d39dfee..ccd89a9 100644
--- a/java/com/android/voicemail/AndroidManifest.xml
+++ b/java/com/android/voicemail/AndroidManifest.xml
@@ -18,7 +18,7 @@
 
   <uses-sdk
     android:minSdkVersion="24"
-    android:targetSdkVersion="28"/>
+    android:targetSdkVersion="29"/>
 
   <!-- Applications using this module should merge these permissions using android_manifest_merge -->