Commit 1b5bbb47 authored by Becky Zhou's avatar Becky Zhou Committed by Commit Bot

[Feed] Capture thumbnail for Feed NTP

Bug: 860037
Change-Id: I1df221b8ec11c212c1fb4db0f7430f9daadaaa54
Reviewed-on: https://chromium-review.googlesource.com/1158995Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Becky Zhou <huayinz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579942}
parent 9ca21585
...@@ -254,15 +254,14 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate { ...@@ -254,15 +254,14 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate {
@Override @Override
public boolean shouldCaptureThumbnail() { public boolean shouldCaptureThumbnail() {
// TODO(twellington): add more logic to this method that also takes into account other return mNewTabPageLayout.shouldCaptureThumbnail() || mMediator.shouldCaptureThumbnail();
// UI changes that should trigger a thumbnail capture.
return mNewTabPageLayout.shouldCaptureThumbnail();
} }
@Override @Override
public void captureThumbnail(Canvas canvas) { public void captureThumbnail(Canvas canvas) {
mNewTabPageLayout.onPreCaptureThumbnail(); mNewTabPageLayout.onPreCaptureThumbnail();
ViewUtils.captureBitmap(mRootView, canvas); ViewUtils.captureBitmap(mRootView, canvas);
mMediator.onThumbnailCaptured();
} }
/** @return The {@link Stream} that this class holds. */ /** @return The {@link Stream} that this class holds. */
......
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.feed; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.feed;
import android.content.res.Resources; import android.content.res.Resources;
import com.google.android.libraries.feed.api.stream.ContentChangedListener;
import com.google.android.libraries.feed.api.stream.ScrollListener; import com.google.android.libraries.feed.api.stream.ScrollListener;
import com.google.android.libraries.feed.api.stream.Stream; import com.google.android.libraries.feed.api.stream.Stream;
...@@ -27,8 +28,14 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -27,8 +28,14 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
private final PrefChangeRegistrar mPrefChangeRegistrar; private final PrefChangeRegistrar mPrefChangeRegistrar;
private ScrollListener mStreamScrollListener; private ScrollListener mStreamScrollListener;
private ContentChangedListener mStreamContentChangedListener;
private SectionHeader mSectionHeader; private SectionHeader mSectionHeader;
private boolean mStreamContentChanged;
private int mThumbnailWidth;
private int mThumbnailHeight;
private int mThumbnailScrollY;
/** /**
* @param feedNewTabPage The {@link FeedNewTabPage} that interacts with this class. * @param feedNewTabPage The {@link FeedNewTabPage} that interacts with this class.
*/ */
...@@ -44,7 +51,9 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -44,7 +51,9 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
/** Clears any dependencies. */ /** Clears any dependencies. */
void destroy() { void destroy() {
mCoordinator.getStream().removeScrollListener(mStreamScrollListener); Stream stream = mCoordinator.getStream();
stream.removeScrollListener(mStreamScrollListener);
stream.removeOnContentChangedListener(mStreamContentChangedListener);
mPrefChangeRegistrar.destroy(); mPrefChangeRegistrar.destroy();
} }
...@@ -61,6 +70,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -61,6 +70,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mSnapScrollHelper.handleScroll(); mSnapScrollHelper.handleScroll();
}); });
Stream stream = mCoordinator.getStream();
mStreamScrollListener = new ScrollListener() { mStreamScrollListener = new ScrollListener() {
@Override @Override
public void onScrollStateChanged(int state) {} public void onScrollStateChanged(int state) {}
...@@ -70,7 +80,10 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -70,7 +80,10 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mSnapScrollHelper.handleScroll(); mSnapScrollHelper.handleScroll();
} }
}; };
mCoordinator.getStream().addScrollListener(mStreamScrollListener); stream.addScrollListener(mStreamScrollListener);
mStreamContentChangedListener = () -> mStreamContentChanged = true;
stream.addOnContentChangedListener(mStreamContentChangedListener);
Resources res = mCoordinator.getSectionHeaderView().getResources(); Resources res = mCoordinator.getSectionHeaderView().getResources();
mSectionHeader = mSectionHeader =
...@@ -78,7 +91,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -78,7 +91,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE), PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE),
this::onSectionHeaderToggled); this::onSectionHeaderToggled);
mCoordinator.getSectionHeaderView().setHeader(mSectionHeader); mCoordinator.getSectionHeaderView().setHeader(mSectionHeader);
mCoordinator.getStream().setStreamContentVisibility(mSectionHeader.isExpanded()); stream.setStreamContentVisibility(mSectionHeader.isExpanded());
} }
/** Update whether the section header should be expanded. */ /** Update whether the section header should be expanded. */
...@@ -101,6 +114,21 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -101,6 +114,21 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mCoordinator.getSectionHeaderView().updateIconDrawable(); mCoordinator.getSectionHeaderView().updateIconDrawable();
} }
/** Whether a new thumbnail should be captured. */
boolean shouldCaptureThumbnail() {
return mStreamContentChanged || mCoordinator.getView().getWidth() != mThumbnailWidth
|| mCoordinator.getView().getHeight() != mThumbnailHeight
|| getVerticalScrollOffset() != mThumbnailScrollY;
}
/** Reset all the properties for thumbnail capturing after a new thumbnail is captured. */
void onThumbnailCaptured() {
mThumbnailWidth = mCoordinator.getView().getWidth();
mThumbnailHeight = mCoordinator.getView().getHeight();
mThumbnailScrollY = getVerticalScrollOffset();
mStreamContentChanged = false;
}
// ScrollDelegate interface. // ScrollDelegate interface.
@Override @Override
......
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