Commit 42d87c5d authored by bauerb's avatar bauerb Committed by Commit bot

Move onBindViewHolder from NewTabPageViewHolder to NewTabPageItem.

This moves NewTabPageItem further away from being a generic base class for holding the data shown in the RecyclerView, and will allow pushing the responsibility to update the view into the merged item/group interface.

BUG=616090

Review-Url: https://codereview.chromium.org/2320573002
Cr-Commit-Position: refs/heads/master@{#417291}
parent 4ed808a8
...@@ -18,4 +18,9 @@ class AboveTheFoldItem extends SingleItemGroup { ...@@ -18,4 +18,9 @@ class AboveTheFoldItem extends SingleItemGroup {
public int getType() { public int getType() {
return NewTabPageItem.VIEW_TYPE_ABOVE_THE_FOLD; return NewTabPageItem.VIEW_TYPE_ABOVE_THE_FOLD;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
// Nothing to do.
}
} }
...@@ -81,10 +81,14 @@ class ActionItem implements NewTabPageItem { ...@@ -81,10 +81,14 @@ class ActionItem implements NewTabPageItem {
}); });
} }
@Override public void onBindViewHolder(ActionItem item) {
public void onBindViewHolder(NewTabPageItem item) { mActionListItem = item;
super.onBindViewHolder(item);
mActionListItem = (ActionItem) item;
} }
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
assert holder instanceof ViewHolder;
((ViewHolder) holder).onBindViewHolder(this);
}
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.ntp.cards; package org.chromium.chrome.browser.ntp.cards;
import android.support.annotation.CallSuper;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
...@@ -113,12 +114,10 @@ public class CardViewHolder extends NewTabPageViewHolder { ...@@ -113,12 +114,10 @@ public class CardViewHolder extends NewTabPageViewHolder {
/** /**
* Called when the NTP cards adapter is requested to update the currently visible ViewHolder * Called when the NTP cards adapter is requested to update the currently visible ViewHolder
* with data. {@link CardViewHolder}'s implementation must be called by subclasses. * with data.
*
* @param item The NewTabPageListItem object that holds the data for this ViewHolder
*/ */
@Override @CallSuper
public void onBindViewHolder(NewTabPageItem item) { protected void onBindViewHolder() {
// Reset the peek status to avoid recycled view holders to be peeking at the wrong moment. // Reset the peek status to avoid recycled view holders to be peeking at the wrong moment.
if (getAdapterPosition() != mRecyclerView.getNewTabPageAdapter().getFirstCardPosition()) { if (getAdapterPosition() != mRecyclerView.getNewTabPageAdapter().getFirstCardPosition()) {
// Not the first card, we can't peek anyway. // Not the first card, we can't peek anyway.
......
...@@ -24,6 +24,11 @@ public class Footer extends SingleItemGroup { ...@@ -24,6 +24,11 @@ public class Footer extends SingleItemGroup {
return NewTabPageItem.VIEW_TYPE_FOOTER; return NewTabPageItem.VIEW_TYPE_FOOTER;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
// Nothing to do (the footer view is static).
}
/** /**
* The {@code ViewHolder} for the {@link Footer}. * The {@code ViewHolder} for the {@link Footer}.
*/ */
......
...@@ -275,7 +275,7 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> ...@@ -275,7 +275,7 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
@Override @Override
public void onBindViewHolder(NewTabPageViewHolder holder, final int position) { public void onBindViewHolder(NewTabPageViewHolder holder, final int position) {
holder.onBindViewHolder(getItems().get(position)); getItems().get(position).onBindViewHolder(holder);
} }
@Override @Override
......
...@@ -78,4 +78,10 @@ public interface NewTabPageItem { ...@@ -78,4 +78,10 @@ public interface NewTabPageItem {
*/ */
@ViewType @ViewType
public int getType(); public int getType();
/**
* Update the given {@link NewTabPageViewHolder} with data from this item.
* @param holder The {@link NewTabPageViewHolder} to update.
*/
void onBindViewHolder(NewTabPageViewHolder holder);
} }
\ No newline at end of file
...@@ -22,15 +22,6 @@ public class NewTabPageViewHolder extends RecyclerView.ViewHolder { ...@@ -22,15 +22,6 @@ public class NewTabPageViewHolder extends RecyclerView.ViewHolder {
super(itemView); super(itemView);
} }
/**
* Called when the NTP cards adapter is requested to update the currently visible
* {@link ViewHolder} with data. The default implementation does nothing.
*
* @param item The {@link NewTabPageItem} that holds the data for this {@link ViewHolder}
*/
public void onBindViewHolder(NewTabPageItem item) {
}
/** /**
* Whether this item can be swiped and dismissed. The default implementation disallows it. * Whether this item can be swiped and dismissed. The default implementation disallows it.
* @return {@code true} if the item can be swiped and dismissed, {@code false} otherwise. * @return {@code true} if the item can be swiped and dismissed, {@code false} otherwise.
......
...@@ -25,4 +25,10 @@ class ProgressItem implements NewTabPageItem { ...@@ -25,4 +25,10 @@ class ProgressItem implements NewTabPageItem {
public void setVisible(boolean visible) { public void setVisible(boolean visible) {
mVisible = visible; mVisible = visible;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
assert holder instanceof ProgressViewHolder;
((ProgressViewHolder) holder).onBindViewHolder(this);
}
} }
...@@ -22,9 +22,8 @@ public class ProgressViewHolder extends NewTabPageViewHolder { ...@@ -22,9 +22,8 @@ public class ProgressViewHolder extends NewTabPageViewHolder {
mProgressIndicator = (ProgressIndicatorView) itemView.findViewById(R.id.snippets_progress); mProgressIndicator = (ProgressIndicatorView) itemView.findViewById(R.id.snippets_progress);
} }
@Override public void onBindViewHolder(ProgressItem item) {
public void onBindViewHolder(NewTabPageItem item) { mListItem = item;
mListItem = (ProgressItem) item;
updateDisplay(); updateDisplay();
} }
......
...@@ -35,4 +35,9 @@ public class SpacingItem extends SingleItemGroup { ...@@ -35,4 +35,9 @@ public class SpacingItem extends SingleItemGroup {
public int getType() { public int getType() {
return NewTabPageItem.VIEW_TYPE_SPACING; return NewTabPageItem.VIEW_TYPE_SPACING;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
// Nothing to do.
}
} }
\ No newline at end of file
...@@ -47,22 +47,19 @@ public abstract class StatusItem implements NewTabPageItem { ...@@ -47,22 +47,19 @@ public abstract class StatusItem implements NewTabPageItem {
mActionView = (Button) itemView.findViewById(R.id.status_action_button); mActionView = (Button) itemView.findViewById(R.id.status_action_button);
} }
@Override public void onBindViewHolder(final StatusItem item) {
public void onBindViewHolder(NewTabPageItem item) { super.onBindViewHolder();
assert item instanceof StatusItem;
super.onBindViewHolder(item);
final StatusItem listItem = (StatusItem) item; mTitleView.setText(item.mHeaderStringId);
mTitleView.setText(listItem.mHeaderStringId); mBodyView.setText(item.mDescriptionStringId);
mBodyView.setText(listItem.mDescriptionStringId);
if (listItem.hasAction()) { if (item.hasAction()) {
mActionView.setText(listItem.mActionStringId); mActionView.setText(item.mActionStringId);
mActionView.setOnClickListener(new OnClickListener() { mActionView.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
listItem.performAction(v.getContext()); item.performAction(v.getContext());
} }
}); });
mActionView.setVisibility(View.VISIBLE); mActionView.setVisibility(View.VISIBLE);
...@@ -188,4 +185,10 @@ public abstract class StatusItem implements NewTabPageItem { ...@@ -188,4 +185,10 @@ public abstract class StatusItem implements NewTabPageItem {
public int getType() { public int getType() {
return NewTabPageItem.VIEW_TYPE_STATUS; return NewTabPageItem.VIEW_TYPE_STATUS;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
assert holder instanceof ViewHolder;
((ViewHolder) holder).onBindViewHolder(this);
}
} }
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.ntp.snippets; package org.chromium.chrome.browser.ntp.snippets;
import org.chromium.chrome.browser.ntp.cards.NewTabPageItem; import org.chromium.chrome.browser.ntp.cards.NewTabPageItem;
import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder;
/** /**
* Represents the data for a header of a group of snippets * Represents the data for a header of a group of snippets
...@@ -36,4 +37,10 @@ public class SectionHeader implements NewTabPageItem { ...@@ -36,4 +37,10 @@ public class SectionHeader implements NewTabPageItem {
public String getHeaderText() { public String getHeaderText() {
return mHeaderText; return mHeaderText;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
assert holder instanceof SectionHeaderViewHolder;
((SectionHeaderViewHolder) holder).onBindViewHolder(this);
}
} }
\ No newline at end of file
...@@ -10,7 +10,6 @@ import android.widget.TextView; ...@@ -10,7 +10,6 @@ import android.widget.TextView;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.UiConfig; import org.chromium.chrome.browser.ntp.UiConfig;
import org.chromium.chrome.browser.ntp.cards.MarginResizer; import org.chromium.chrome.browser.ntp.cards.MarginResizer;
import org.chromium.chrome.browser.ntp.cards.NewTabPageItem;
import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView; import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder; import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder;
import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.browser.util.MathUtils;
...@@ -22,8 +21,6 @@ public class SectionHeaderViewHolder extends NewTabPageViewHolder { ...@@ -22,8 +21,6 @@ public class SectionHeaderViewHolder extends NewTabPageViewHolder {
private static final double SCROLL_HEADER_HEIGHT_PERCENTAGE = 0.7; private static final double SCROLL_HEADER_HEIGHT_PERCENTAGE = 0.7;
private final int mMaxSnippetHeaderHeight; private final int mMaxSnippetHeaderHeight;
private final int mMaxPeekPadding;
private final NewTabPageRecyclerView mRecyclerView;
private SectionHeader mHeaderListItem; private SectionHeader mHeaderListItem;
...@@ -32,17 +29,11 @@ public class SectionHeaderViewHolder extends NewTabPageViewHolder { ...@@ -32,17 +29,11 @@ public class SectionHeaderViewHolder extends NewTabPageViewHolder {
.inflate(R.layout.new_tab_page_snippets_header, recyclerView, false)); .inflate(R.layout.new_tab_page_snippets_header, recyclerView, false));
mMaxSnippetHeaderHeight = itemView.getResources().getDimensionPixelSize( mMaxSnippetHeaderHeight = itemView.getResources().getDimensionPixelSize(
R.dimen.snippets_article_header_height); R.dimen.snippets_article_header_height);
mMaxPeekPadding = itemView.getResources().getDimensionPixelSize(
R.dimen.snippets_padding_and_peeking_card_height);
mRecyclerView = recyclerView;
MarginResizer.createWithViewAdapter(itemView, config); MarginResizer.createWithViewAdapter(itemView, config);
} }
@Override public void onBindViewHolder(SectionHeader header) {
public void onBindViewHolder(NewTabPageItem header) { mHeaderListItem = header;
mHeaderListItem = (SectionHeader) header;
((TextView) itemView).setText(mHeaderListItem.getHeaderText()); ((TextView) itemView).setText(mHeaderListItem.getHeaderText());
updateDisplay(0, false); updateDisplay(0, false);
} }
......
...@@ -8,6 +8,7 @@ import android.graphics.Bitmap; ...@@ -8,6 +8,7 @@ import android.graphics.Bitmap;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.ntp.NewTabPageUma; import org.chromium.chrome.browser.ntp.NewTabPageUma;
import org.chromium.chrome.browser.ntp.cards.NewTabPageItem; import org.chromium.chrome.browser.ntp.cards.NewTabPageItem;
import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder;
import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCardLayout.ContentSuggestionsCardLayoutEnum; import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCardLayout.ContentSuggestionsCardLayoutEnum;
/** /**
...@@ -95,6 +96,12 @@ public class SnippetArticle implements NewTabPageItem { ...@@ -95,6 +96,12 @@ public class SnippetArticle implements NewTabPageItem {
return NewTabPageItem.VIEW_TYPE_SNIPPET; return NewTabPageItem.VIEW_TYPE_SNIPPET;
} }
@Override
public void onBindViewHolder(NewTabPageViewHolder holder) {
assert holder instanceof SnippetArticleViewHolder;
((SnippetArticleViewHolder) holder).onBindViewHolder(this);
}
/** /**
* Returns this article's thumbnail as a {@link Bitmap}. Can return {@code null} as it is * Returns this article's thumbnail as a {@link Bitmap}. Can return {@code null} as it is
* initially unset. * initially unset.
......
...@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.ntp.UiConfig; ...@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.ntp.UiConfig;
import org.chromium.chrome.browser.ntp.cards.CardViewHolder; import org.chromium.chrome.browser.ntp.cards.CardViewHolder;
import org.chromium.chrome.browser.ntp.cards.DisplayStyleObserverAdapter; import org.chromium.chrome.browser.ntp.cards.DisplayStyleObserverAdapter;
import org.chromium.chrome.browser.ntp.cards.ImpressionTracker; import org.chromium.chrome.browser.ntp.cards.ImpressionTracker;
import org.chromium.chrome.browser.ntp.cards.NewTabPageItem;
import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView; import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.components.variations.VariationsAssociatedData; import org.chromium.components.variations.VariationsAssociatedData;
...@@ -291,9 +290,8 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi ...@@ -291,9 +290,8 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi
mPublisherTextView.setLayoutParams(params); mPublisherTextView.setLayoutParams(params);
} }
@Override public void onBindViewHolder(SnippetArticle article) {
public void onBindViewHolder(NewTabPageItem article) { super.onBindViewHolder();
super.onBindViewHolder(article);
mArticle = (SnippetArticle) article; mArticle = (SnippetArticle) article;
updateLayout(); updateLayout();
......
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