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 {
@Override
public boolean shouldCaptureThumbnail() {
// TODO(twellington): add more logic to this method that also takes into account other
// UI changes that should trigger a thumbnail capture.
return mNewTabPageLayout.shouldCaptureThumbnail();
return mNewTabPageLayout.shouldCaptureThumbnail() || mMediator.shouldCaptureThumbnail();
}
@Override
public void captureThumbnail(Canvas canvas) {
mNewTabPageLayout.onPreCaptureThumbnail();
ViewUtils.captureBitmap(mRootView, canvas);
mMediator.onThumbnailCaptured();
}
/** @return The {@link Stream} that this class holds. */
......
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.feed;
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.Stream;
......@@ -27,8 +28,14 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
private final PrefChangeRegistrar mPrefChangeRegistrar;
private ScrollListener mStreamScrollListener;
private ContentChangedListener mStreamContentChangedListener;
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.
*/
......@@ -44,7 +51,9 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
/** Clears any dependencies. */
void destroy() {
mCoordinator.getStream().removeScrollListener(mStreamScrollListener);
Stream stream = mCoordinator.getStream();
stream.removeScrollListener(mStreamScrollListener);
stream.removeOnContentChangedListener(mStreamContentChangedListener);
mPrefChangeRegistrar.destroy();
}
......@@ -61,6 +70,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mSnapScrollHelper.handleScroll();
});
Stream stream = mCoordinator.getStream();
mStreamScrollListener = new ScrollListener() {
@Override
public void onScrollStateChanged(int state) {}
......@@ -70,7 +80,10 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mSnapScrollHelper.handleScroll();
}
};
mCoordinator.getStream().addScrollListener(mStreamScrollListener);
stream.addScrollListener(mStreamScrollListener);
mStreamContentChangedListener = () -> mStreamContentChanged = true;
stream.addOnContentChangedListener(mStreamContentChangedListener);
Resources res = mCoordinator.getSectionHeaderView().getResources();
mSectionHeader =
......@@ -78,7 +91,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE),
this::onSectionHeaderToggled);
mCoordinator.getSectionHeaderView().setHeader(mSectionHeader);
mCoordinator.getStream().setStreamContentVisibility(mSectionHeader.isExpanded());
stream.setStreamContentVisibility(mSectionHeader.isExpanded());
}
/** Update whether the section header should be expanded. */
......@@ -101,6 +114,21 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
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.
@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