Commit 54ca57b6 authored by Mehran Mahmoudi's avatar Mehran Mahmoudi Committed by Commit Bot

[Paint Preview] Match scroll position on exit

This CL matches the scroll position of the live tab to that of the
player on exiting paint preview.

Bug: 1121654
Change-Id: I8f36d827979418d5480811ffa367b22bf24fce19
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2375930Reviewed-by: default avatarCalder Kitagawa <ckitagawa@chromium.org>
Commit-Queue: Mehran Mahmoudi <mahmoudi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801530}
parent b2ed46df
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.paint_preview; package org.chromium.chrome.browser.paint_preview;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Point;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.view.View; import android.view.View;
...@@ -181,6 +182,11 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData { ...@@ -181,6 +182,11 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
mInitializing = false; mInitializing = false;
if (mTab == null || mPlayerManager == null) return; if (mTab == null || mPlayerManager == null) return;
Point scrollPosition = mPlayerManager.getScrollPosition();
if (mTab.getWebContents() != null && scrollPosition != null) {
mTab.getWebContents().getEventForwarder().scrollTo(scrollPosition.x, scrollPosition.y);
}
mTab.getTabViewManager().removeTabViewProvider(this); mTab.getTabViewManager().removeTabViewProvider(this);
mPlayerManager.destroy(); mPlayerManager.destroy();
mPlayerManager = null; mPlayerManager = null;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.components.paintpreview.player; package org.chromium.components.paintpreview.player;
import android.content.Context; import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -90,6 +91,16 @@ public class PlayerManager { ...@@ -90,6 +91,16 @@ public class PlayerManager {
mPlayerGestureListener.setUserFrustrationDetector(userFrustrationDetector); mPlayerGestureListener.setUserFrustrationDetector(userFrustrationDetector);
} }
/**
* @return Current scroll position of the main frame. null if the player is not
* initialized.
*/
public Point getScrollPosition() {
if (mRootFrameCoordinator == null) return null;
return mRootFrameCoordinator.getScrollPosition();
}
/** /**
* Called by {@link PlayerCompositorDelegateImpl} when the compositor is initialized. This * Called by {@link PlayerCompositorDelegateImpl} when the compositor is initialized. This
* method initializes a sub-component for each frame and adds the view for the root frame to * method initializes a sub-component for each frame and adds the view for the root frame to
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.components.paintpreview.player.frame; package org.chromium.components.paintpreview.player.frame;
import android.content.Context; import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.util.Size; import android.util.Size;
import android.view.View; import android.view.View;
...@@ -63,6 +64,14 @@ public class PlayerFrameCoordinator { ...@@ -63,6 +64,14 @@ public class PlayerFrameCoordinator {
PropertyModelChangeProcessor.create(model, mView, PlayerFrameViewBinder::bind); PropertyModelChangeProcessor.create(model, mView, PlayerFrameViewBinder::bind);
} }
public Point getScrollPosition() {
Rect viewPortRect = mMediator.getViewport().asRect();
float scaleFactor = mMediator.getViewport().getScale();
if (scaleFactor == 0) scaleFactor = 1;
return new Point(
(int) (viewPortRect.left / scaleFactor), (int) (viewPortRect.top / scaleFactor));
}
/** /**
* Adds a child {@link PlayerFrameCoordinator} to this class. * Adds a child {@link PlayerFrameCoordinator} to this class.
* @param subFrame The sub-frame's {@link PlayerFrameCoordinator}. * @param subFrame The sub-frame's {@link PlayerFrameCoordinator}.
...@@ -76,7 +85,7 @@ public class PlayerFrameCoordinator { ...@@ -76,7 +85,7 @@ public class PlayerFrameCoordinator {
/** /**
* @return The mediator associated with this component. * @return The mediator associated with this component.
*/ */
public PlayerFrameMediator getMediator() { private PlayerFrameMediator getMediator() {
return mMediator; return mMediator;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment