Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3515)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java

Issue 2006203002: Fix that NewTabPage.Snippets.CardShown was recorded too early/often. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: A minor polish Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
index 6887bbd20f6487ac68a9f422e78a0c574e10a505..dc7c8abd503da0e413e29e8fb5f93240cf1d8a4a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.ntp.snippets;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
@@ -16,6 +17,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
@@ -51,6 +53,8 @@ public class SnippetArticleViewHolder extends NewTabPageViewHolder implements Vi
private FetchImageCallback mImageCallback;
private long mPublishTimestampMilliseconds;
private float mScore;
+ private SnippetArticle mArticle;
+ private ViewTreeObserver.OnPreDrawListener mPreDrawObserver;
public String mUrl;
public int mPosition;
@@ -72,7 +76,7 @@ public class SnippetArticleViewHolder extends NewTabPageViewHolder implements Vi
* @param cardView The View for the snippet card
* @param manager The SnippetsManager object used to open an article
*/
- public SnippetArticleViewHolder(View cardView, NewTabPageManager manager) {
+ public SnippetArticleViewHolder(final View cardView, NewTabPageManager manager) {
super(cardView);
mNewTabPageManager = manager;
@@ -81,15 +85,32 @@ public class SnippetArticleViewHolder extends NewTabPageViewHolder implements Vi
mHeadlineTextView = (TextView) cardView.findViewById(R.id.article_headline);
mPublisherTextView = (TextView) cardView.findViewById(R.id.article_publisher);
mArticleSnippetTextView = (TextView) cardView.findViewById(R.id.article_snippet);
+
+ mPreDrawObserver = new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ if (mArticle != null && !mArticle.impressionTracked()) {
+ Rect r = new Rect(0, 0, cardView.getWidth(), cardView.getHeight());
+ cardView.getParent().getChildVisibleRect(cardView, r, null);
+ // Track impression if at least one third of the snippet is shown.
+ if (r.height() >= cardView.getHeight() / 3) mArticle.trackImpression();
+ }
+ // Proceed with the current drawing pass.
+ return true;
+ }
+ };
+
+ // Listen to onPreDraw only if this view is potentially visible (attached to the window).
cardView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
- RecordHistogram.recordSparseSlowlyHistogram(
- "NewTabPage.Snippets.CardShown", mPosition);
+ cardView.getViewTreeObserver().addOnPreDrawListener(mPreDrawObserver);
}
@Override
- public void onViewDetachedFromWindow(View v) {}
+ public void onViewDetachedFromWindow(View v) {
+ cardView.getViewTreeObserver().removeOnPreDrawListener(mPreDrawObserver);
+ }
});
}
@@ -120,33 +141,33 @@ public class SnippetArticleViewHolder extends NewTabPageViewHolder implements Vi
@Override
public void onBindViewHolder(NewTabPageListItem article) {
- SnippetArticle item = (SnippetArticle) article;
+ mArticle = (SnippetArticle) article;
- mHeadlineTextView.setText(item.mTitle);
- String publisherAttribution = String.format(PUBLISHER_FORMAT_STRING, item.mPublisher,
- DateUtils.getRelativeTimeSpanString(
- item.mTimestamp, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS));
+ mHeadlineTextView.setText(mArticle.mTitle);
+ String publisherAttribution = String.format(PUBLISHER_FORMAT_STRING, mArticle.mPublisher,
+ DateUtils.getRelativeTimeSpanString(mArticle.mTimestamp, System.currentTimeMillis(),
+ DateUtils.MINUTE_IN_MILLIS));
mPublisherTextView.setText(BidiFormatter.getInstance().unicodeWrap(publisherAttribution));
- mArticleSnippetTextView.setText(item.mPreviewText);
- mUrl = item.mUrl;
- mPosition = item.mPosition;
- mPublishTimestampMilliseconds = item.mTimestamp;
- mScore = item.mScore;
+ mArticleSnippetTextView.setText(mArticle.mPreviewText);
+ mUrl = mArticle.mUrl;
+ mPosition = mArticle.mPosition;
+ mPublishTimestampMilliseconds = mArticle.mTimestamp;
+ mScore = mArticle.mScore;
// If there's still a pending thumbnail fetch, cancel it.
cancelImageFetch();
// If the article has a thumbnail already, reuse it. Otherwise start a fetch.
- if (item.getThumbnailBitmap() != null) {
- mThumbnailView.setImageBitmap(item.getThumbnailBitmap());
+ if (mArticle.getThumbnailBitmap() != null) {
+ mThumbnailView.setImageBitmap(mArticle.getThumbnailBitmap());
} else {
mThumbnailView.setImageResource(R.drawable.ic_snippet_thumbnail_placeholder);
- mImageCallback = new FetchImageCallback(this, item);
- mNewTabPageManager.fetchSnippetImage(item, mImageCallback);
+ mImageCallback = new FetchImageCallback(this, mArticle);
+ mNewTabPageManager.fetchSnippetImage(mArticle, mImageCallback);
}
- updateFavicon(item);
+ updateFavicon(mArticle);
}
private static class FetchImageCallback extends Callback<Bitmap> {

Powered by Google App Engine
This is Rietveld 408576698