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..da379763aac45652d550a98a73658cef2557e42d 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,34 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
return mPosition; |
} |
+ /** |
+ * @param isFirst Whether this item is the first in its group. |
+ */ |
+ public final void setIsFirstInGroup(boolean isFirst) { |
+ mIsFirstInGroup = isFirst; |
+ } |
+ |
+ /** |
+ * @param isLast Whether this item is the last in its group. |
+ */ |
+ public final void setIsLastInGroup(boolean isLast) { |
+ 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 +102,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 +113,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 +182,12 @@ 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.setIsFirstInGroup(i == 0); |
+ item.setIsLastInGroup(i == mItems.size() - 1); |
} |
} |
@@ -244,13 +284,22 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder |
/** |
* Creates a {@link BasicViewHolder} in the given view parent for the footer. |
- * @see #onCreateViewHolder(ViewGroup, int) |
+ * See {@link #onCreateViewHolder(ViewGroup, int)}. |
*/ |
protected BasicViewHolder createFooter(ViewGroup parent) { |
return null; |
} |
/** |
+ * Creates a {@link DateViewHolder} in the given view parent. |
+ * @see #onCreateViewHolder(ViewGroup, int) |
+ */ |
+ 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 +464,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) { |