From ed336cbda4f1a56895b88cb2874be320ec3ab4b5 Mon Sep 17 00:00:00 2001 From: Sekine Yasuaki Date: Tue, 4 Jul 2017 16:50:09 +0900 Subject: Fix to update peer dimensions when video screen resumes foreground [Issue/Cause of defect] If partner device is rotated during video screen of target device is in background, and then resumes to foreground, partner image will be shown with incorrect dimensions. Because when video screen goes to background, VideoCallPresenter stops checking CVO(Coordination of Video Orientation) of partner device. And when video screen is resumed to foreground, there is no logic to update partner image with latest peer dimensions. [How to fix] Even if video screen is in background, CVO(peer dimensions) is notified to DialerCall. Therefore DialerCall should store the dimensions. And when video screen resumes to fore, VideoCallPresenter should update the screen with correct(latest) peer dimensions. Test: manual - Checked that the partner image is shown with correct dimensions. Bug: 111575038 Change-Id: I32ff5407f1222b232b47a35e7083a473be67b468 --- java/com/android/incallui/VideoCallPresenter.java | 11 +++++++++++ java/com/android/incallui/call/DialerCall.java | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java index 5bdcd7a73..1700d530d 100644 --- a/java/com/android/incallui/VideoCallPresenter.java +++ b/java/com/android/incallui/VideoCallPresenter.java @@ -323,6 +323,17 @@ public class VideoCallPresenter InCallPresenter.InCallState inCallState = InCallPresenter.getInstance().getInCallState(); onStateChange(inCallState, inCallState, CallList.getInstance()); isVideoCallScreenUiReady = true; + + Point sourceVideoDimensions = getRemoteVideoSurfaceTexture().getSourceVideoDimensions(); + if (sourceVideoDimensions != null && primaryCall != null) { + int width = primaryCall.getPeerDimensionWidth(); + int height = primaryCall.getPeerDimensionHeight(); + boolean updated = DialerCall.UNKNOWN_PEER_DIMENSIONS != width + && DialerCall.UNKNOWN_PEER_DIMENSIONS != height; + if (updated && (sourceVideoDimensions.x != width || sourceVideoDimensions.y != height)) { + onUpdatePeerDimensions(primaryCall, width, height); + } + } } /** Called when the user interface is no longer ready to be used. */ diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java index 1f4e49ad8..f9afd2d54 100644 --- a/java/com/android/incallui/call/DialerCall.java +++ b/java/com/android/incallui/call/DialerCall.java @@ -126,6 +126,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa private static int idCounter = 0; + public static final int UNKNOWN_PEER_DIMENSIONS = -1; + /** * A counter used to append to restricted/private/hidden calls so that users can identify them in * a conversation. This value is reset in {@link CallList#onCallRemoved(Context, Call)} when there @@ -386,6 +388,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa }; private long timeAddedMs; + private int peerDimensionWidth = UNKNOWN_PEER_DIMENSIONS; + private int peerDimensionHeight = UNKNOWN_PEER_DIMENSIONS; public DialerCall( Context context, @@ -1558,6 +1562,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa @Override public void onPeerDimensionsChanged(int width, int height) { + peerDimensionWidth = width; + peerDimensionHeight = height; InCallVideoCallCallbackNotifier.getInstance().peerDimensionsChanged(this, width, height); } @@ -1974,4 +1980,14 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa public interface CannedTextResponsesLoadedListener { void onCannedTextResponsesLoaded(DialerCall call); } + + /** Gets peer dimension width. */ + public int getPeerDimensionWidth() { + return peerDimensionWidth; + } + + /** Gets peer dimension height. */ + public int getPeerDimensionHeight() { + return peerDimensionHeight; + } } -- cgit v1.2.3