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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java

Issue 2562123003: [Android History] Add clear browsing data button and privacy disclaimers (Closed)
Patch Set: Fix test Created 4 years 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/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 003498dfac2ddc17d37384982a0356d1681fc094..1a2f7b128934d3b1663328a55361201713fb6e3d 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
@@ -105,6 +105,12 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
}
}
+ protected static class HeaderViewHolder extends RecyclerView.ViewHolder {
+ public HeaderViewHolder(View itemView) {
+ super(itemView);
+ }
+ }
+
/**
* A bucket of items with the same date.
*/
@@ -116,6 +122,7 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
private int mIndex;
private boolean mIsSorted;
+ private boolean mIsHeader;
gone 2016/12/12 19:14:13 "Header" is a little too generic because the dates
Theresa 2016/12/12 20:09:04 Done.
public ItemGroup(TimedItem item) {
mDate = new Date(item.getTimestamp());
@@ -161,11 +168,16 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
* @return The size of this group.
*/
public int size() {
+ if (mIsHeader) return 1;
+
// Plus 1 to account for the date header.
return mItems.size() + 1;
}
public TimedItem getItemAt(int index) {
+ // If this is the header, there is only one item.
gone 2016/12/12 19:14:13 What happens if you don't add this clause? I wond
Theresa 2016/12/12 20:09:04 Done.
+ if (mIsHeader) return mItems.get(0);
+
// 0 is allocated to the date header.
if (index == 0) return null;
@@ -205,8 +217,10 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
public static final int TYPE_DATE = 0;
public static final int TYPE_NORMAL = 1;
+ public static final int TYPE_HEADER = 2;
gone 2016/12/12 19:14:13 TYPE_HEADER should be 0 since it's at the top. I
Theresa 2016/12/12 20:09:04 Done.
private int mSize;
+ private boolean mHasHeader;
private SortedSet<ItemGroup> mGroups = new TreeSet<>(new Comparator<ItemGroup>() {
@Override
public int compare(ItemGroup lhs, ItemGroup rhs) {
@@ -221,6 +235,14 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
protected abstract ViewHolder createViewHolder(ViewGroup parent);
/**
+ * Creates a {@link HeaderViewHolder} in the given parent.
+ * @see #onCreateViewHolder(ViewGroup, int)
+ */
+ protected HeaderViewHolder createHeader(ViewGroup parent) {
+ return null;
+ }
+
+ /**
* Binds the {@link ViewHolder} with the given {@link TimedItem}.
* @see #onBindViewHolder(ViewHolder, int)
*/
@@ -236,12 +258,6 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
* Loads a list of {@link TimedItem}s to this adapter. Any previous data will be removed.
*/
public void loadItems(List<? extends TimedItem> timedItems) {
- mSize = 0;
-
- // Unset the positions of all items in the list.
- for (ItemGroup group : mGroups) group.resetPosition();
- mGroups.clear();
-
for (TimedItem timedItem : timedItems) {
Date date = new Date(timedItem.getTimestamp());
boolean found = false;
@@ -272,12 +288,40 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
}
/**
+ * Adds a header as the first group in this adapter.
+ */
+ public void addHeader() {
+ ItemGroup header = new ItemGroup(new TimedItem() {
+ @Override
+ public long getTimestamp() {
+ return Long.MAX_VALUE;
+ }
+
+ @Override
+ public long getStableId() {
+ return Long.MAX_VALUE;
+ }
+ });
+ header.mIsHeader = true;
+
+ mGroups.add(header);
gone 2016/12/12 19:14:13 Should assert the size is 0 at this point. The ad
Theresa 2016/12/12 20:09:04 Done.
+ mSize++;
+ mHasHeader = true;
+ }
+
+ /**
* Removes all items from this adapter.
+ * @param notifyDataSetChanged Whether to notify that the data set has been changed.
*/
- public void clear() {
+ public void clear(boolean notifyDataSetChanged) {
mSize = 0;
+ mHasHeader = false;
+
+ // Unset the positions of all items in the list.
+ for (ItemGroup group : mGroups) group.resetPosition();
mGroups.clear();
- notifyDataSetChanged();
+
+ if (notifyDataSetChanged) notifyDataSetChanged();
}
@Override
@@ -301,7 +345,7 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
@Override
public final int getItemViewType(int position) {
Pair<ItemGroup, Integer> pair = getGroupAt(position);
- return pair.second == 0 ? TYPE_DATE : TYPE_NORMAL;
+ return pair.second == -1 ? TYPE_HEADER : pair.second == 0 ? TYPE_DATE : TYPE_NORMAL;
gone 2016/12/12 19:14:13 1) Should just expand this into a set of condition
Theresa 2016/12/12 20:09:04 Done. I made TYPE_HEADER = -1.
}
@Override
@@ -311,6 +355,8 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
getTimedItemViewResId(), parent, false));
} else if (viewType == TYPE_NORMAL) {
return createViewHolder(parent);
+ } else if (viewType == TYPE_HEADER) {
+ return createHeader(parent);
}
gone 2016/12/12 19:14:13 Should assert false at this point; I don't know ho
Theresa 2016/12/12 20:09:04 Done.
return null;
}
@@ -320,7 +366,7 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
Pair<Date, TimedItem> pair = getItemAt(position);
if (holder instanceof DateViewHolder) {
((DateViewHolder) holder).setDate(pair.first);
- } else {
+ } else if (!(holder instanceof HeaderViewHolder)) {
gone 2016/12/12 19:14:13 null !instanceof HeaderViewHolder, so this would l
Theresa 2016/12/12 20:09:04 I don't think that null can be passed in for the h
bindViewHolderForTimedItem(holder, pair.second);
}
}
@@ -336,6 +382,10 @@ public abstract class DateDividedAdapter extends Adapter<RecyclerView.ViewHolder
protected Pair<ItemGroup, Integer> getGroupAt(int position) {
// TODO(ianwen): Optimize the performance if the number of groups becomes too large.
int i = position;
gone 2016/12/12 19:14:13 Move the int i line down to the for loop area.
Theresa 2016/12/12 20:09:04 Done.
+ if (mHasHeader && position == 0) {
+ return new Pair<>(mGroups.first(), -1);
+ }
+
for (ItemGroup group : mGroups) {
if (i >= group.size()) {
i -= group.size();

Powered by Google App Engine
This is Rietveld 408576698