Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java |
| index ee707031eb1d11075098289c351d2c33d21edbf3..67752034b1dbaa8aa408c7a99f2d626c0f96c496 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java |
| @@ -49,6 +49,9 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| /** Position of the TimedItem in the list, or {@link #INVALID_POSITION} if not shown. */ |
| private int mPosition = INVALID_POSITION; |
| + private boolean mIsFirstInGroup; |
| + private boolean mIsLastInGroup; |
| + |
| /** See {@link #mPosition}. */ |
| private final void setPosition(int position) { |
| mPosition = position; |
| @@ -59,6 +62,29 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| return mPosition; |
| } |
| + /** |
| + * @param isFirst Whether this item is the first in its group. |
| + * @param isLast Whether this item is the last in its group. |
| + */ |
| + public final void setIsFirstOrLastInGroup(boolean isFirst, boolean isLast) { |
|
gone
2017/01/27 18:48:52
bit of a mouthful... maybe just add a dedicated se
Theresa
2017/01/27 23:34:45
Done.
|
| + mIsFirstInGroup = isFirst; |
| + mIsLastInGroup = isLast; |
| + } |
| + |
| + /** |
| + * @return Whether this item is the first in its group. |
| + */ |
| + public boolean isFirstInGroup() { |
| + return mIsFirstInGroup; |
| + } |
| + |
| + /** |
| + * @return Whether this item is the last in its group. |
| + */ |
| + public boolean isLastInGroup() { |
| + return mIsLastInGroup; |
| + } |
| + |
| /** @return The timestamp for this item. */ |
| public abstract long getTimestamp(); |
| @@ -71,7 +97,10 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| public abstract long getStableId(); |
| } |
| - private static class DateViewHolder extends RecyclerView.ViewHolder { |
| + /** |
| + * A {@link RecyclerView.ViewHolder} that displays a date header. |
| + */ |
| + public static class DateViewHolder extends RecyclerView.ViewHolder { |
| private TextView mTextView; |
| public DateViewHolder(View view) { |
| @@ -79,6 +108,9 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| if (view instanceof TextView) mTextView = (TextView) view; |
| } |
| + /** |
| + * @param date The date that this DateViewHolder should display. |
| + */ |
| public void setDate(Date date) { |
| // Calender.getInstance() may take long time to run, so Calendar object should be reused |
| // as much as possible. |
| @@ -145,9 +177,11 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| mIndex = index; |
| sortIfNeeded(); |
| - for (TimedItem item : mItems) { |
| + for (int i = 0; i < mItems.size(); i++) { |
| index += 1; |
| + TimedItem item = mItems.get(i); |
| item.setPosition(index); |
| + item.setIsFirstOrLastInGroup(i == 0, i == mItems.size() - 1); |
| } |
| } |
| @@ -251,6 +285,15 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| } |
| /** |
| + * Creates a {@link DateViewHolder} in the given view parent. |
| + * @see #onCreateViewHolder(ViewGroup, int) |
|
gone
2017/01/27 18:48:52
See {@link #onCreateViewHolder(ViewGroup, int)}.
Theresa
2017/01/27 23:34:45
Done.
|
| + */ |
| + protected DateViewHolder createDateViewHolder(ViewGroup parent) { |
| + return new DateViewHolder(LayoutInflater.from(parent.getContext()).inflate( |
| + getTimedItemViewResId(), parent, false)); |
| + } |
| + |
| + /** |
| * Binds the {@link ViewHolder} with the given {@link TimedItem}. |
| * @see #onBindViewHolder(ViewHolder, int) |
| */ |
| @@ -415,8 +458,7 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
| @Override |
| public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
| if (viewType == TYPE_DATE) { |
| - return new DateViewHolder(LayoutInflater.from(parent.getContext()).inflate( |
| - getTimedItemViewResId(), parent, false)); |
| + return createDateViewHolder(parent); |
| } else if (viewType == TYPE_NORMAL) { |
| return createViewHolder(parent); |
| } else if (viewType == TYPE_HEADER) { |