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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadItemGroup.java

Issue 2670083002: [Download Home] Displaying offline page bundle per day (Closed)
Patch Set: Theresa's comments Created 3 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.download.ui;
6
7 import org.chromium.chrome.browser.download.ui.DownloadHistoryItemWrapper.Offlin ePageItemWrapper;
8 import org.chromium.chrome.browser.widget.DateDividedAdapter;
9 import org.chromium.chrome.browser.widget.DateDividedAdapter.TimedItem;
10
11 /**
12 * A bucket of downloaded items with the same date. It also holds the suggested offline items which
13 * are shown at the end of the list for that date.
14 */
15 public class DownloadItemGroup extends DateDividedAdapter.ItemGroup {
16 private int mNumSuggestedOfflinePages;
17 private boolean mIsSuggestedOfflinePagesSectionExpanded;
18
19 /** The header representing the offline pages that are automatically downloa ded */
20 private TimedItem mSuggestedOfflinePagesHeader;
21
22 public DownloadItemGroup(long timestamp) {
23 super(timestamp);
24 mNumSuggestedOfflinePages = 0;
gone 2017/02/10 02:31:44 ints are automatically initialized to 0.
shaktisahu 2017/02/10 21:30:24 Done.
25 mIsSuggestedOfflinePagesSectionExpanded = false;
gone 2017/02/10 02:31:45 booleans are automatically initialized to false.
shaktisahu 2017/02/10 21:30:24 Done.
26 }
27
28 /** @return Whether the suggested pages are expanded. */
29 public boolean isSuggestedOfflinePagesSectionExpanded() {
30 return mIsSuggestedOfflinePagesSectionExpanded;
31 }
32
33 /**
34 * Expands or collapses the suggested offline pages.
35 * @param expanded Whether the suggested pages should be shown.
36 */
37 public void setIsSuggestedOfflinePagesSectionExpanded(boolean expanded) {
38 mIsSuggestedOfflinePagesSectionExpanded = expanded;
39 }
40
41 /** @return The total number of suggested pages for this date. */
42 public int getSuggestedOfflinePageCount() {
gone 2017/02/10 02:31:44 Make this accessor match the variable name.
shaktisahu 2017/02/10 21:30:24 Done.
43 return mNumSuggestedOfflinePages;
44 }
45
46 private TimedItem getSuggestedOfflinePagesHeader() {
47 if (mSuggestedOfflinePagesHeader == null) {
48 mSuggestedOfflinePagesHeader = new TimedItem() {
49 private Long mStableId;
50
51 @Override
52 public long getTimestamp() {
53 return getDate().getTime();
54 }
55
56 @Override
57 public long getStableId() {
58 if (mStableId == null) {
59 // Generate a stable ID based on timestamp.
60 mStableId = 0xFFFFFFFF00000000L + getTimestamp() & 0x0FF FFFFFF;
gone 2017/02/10 02:31:44 Add parentheses around the & to make the order of
shaktisahu 2017/02/10 21:30:24 Done.
61 }
62 return mStableId;
63 }
64 };
65 }
66
67 return mSuggestedOfflinePagesHeader;
68 }
69
70 @Override
71 public void addItem(TimedItem item) {
72 super.addItem(item);
73 if (isSuggestedOfflinePage(item)) {
74 mNumSuggestedOfflinePages++;
75 }
76 }
77
78 @Override
79 public void removeItem(TimedItem item) {
80 super.removeItem(item);
81 if (isSuggestedOfflinePage(item)) {
82 mNumSuggestedOfflinePages--;
83 }
84 }
85
86 /**
87 * The visible items for the group are set to their respective positions in the list view.
88 * Invisible (collpased) items are skipped.
89 */
90 @Override
91 protected void setPositionForItems(int startIndex) {
92 int index = startIndex;
93 boolean firstSuggestedItem = true;
gone 2017/02/10 02:31:44 use "isFirstSuggestedItem"; "firstSuggestedItem" m
shaktisahu 2017/02/10 21:30:24 Done.
94 for (TimedItem item : mItems) {
95 if (isSuggestedOfflinePage(item)) {
96 // Skip one position for the header at the beginning of the sugg ested items section.
97 if (firstSuggestedItem) {
98 index += 1;
99 firstSuggestedItem = false;
100 }
101 if (!isSuggestedOfflinePagesSectionExpanded()) break;
gone 2017/02/10 02:31:44 This check only needs to be done for the first sug
shaktisahu 2017/02/10 21:30:24 Done.
102 }
103 item.setPosition(index);
104 index += 1;
105 }
106 }
107
108 @Override
109 protected void setPositionForFirstAndLastInGroup() {
110 TimedItem first = mItems.get(0);
111 first.setIsFirstInGroup(true);
112
113 TimedItem last = mItems.get(mItems.size() - 1);
114 if (!isSuggestedOfflinePagesSectionExpanded() && mNumSuggestedOfflinePag es > 0) {
115 last = getSuggestedOfflinePagesHeader();
116 }
117
118 last.setIsLastInGroup(true);
119 }
120
121 @Override
122 public int size() {
123 int size = super.size();
124
125 // The size should match the number of rows in the list view. So, adjust the size depending
126 // on whether the suggested items section is expanded or collapsed.
gone 2017/02/10 02:31:44 Have you considered just not adding the suggested
shaktisahu 2017/02/10 21:30:24 That would still require adding the suggested page
gone 2017/02/10 22:49:52 It'd be consistent with how we handle filters, tho
Theresa 2017/02/13 19:15:00 +1 -- I'd also be interested in seeing if this can
127 if (mNumSuggestedOfflinePages > 0) {
128 // First item of the suggested pages section is the section header.
129 size += 1;
130 if (!isSuggestedOfflinePagesSectionExpanded()) {
131 size -= mNumSuggestedOfflinePages;
132 }
133 }
134
135 return size;
136 }
137
138 /** @return The total file size of the suggested pages for this date. */
139 public long getSuggestedOfflinePagesFileSize() {
140 long size = 0;
141 for (TimedItem item : mItems) {
142 if (isSuggestedOfflinePage(item)) {
143 size += ((DownloadHistoryItemWrapper) item).getFileSize();
144 }
145 }
146 return size;
147 }
148
149 private int getSuggestedOfflinePagesSectionHeaderPosition() {
150 return mItems.size() - mNumSuggestedOfflinePages + 1;
151 }
152
153 private boolean isSuggestedOfflinePagesSectionHeader(int index) {
154 return index == getSuggestedOfflinePagesSectionHeaderPosition()
155 && mNumSuggestedOfflinePages > 0;
156 }
157
158 @Override
159 protected TimedItem getItemAtInner(int index) {
160 // The suggested pages start at the end of the group.
161 // So, the ordering of the items in this list is :
162 // date header, regular items, suggested pages header, suggested pages ( if expanded).
163 int suggestedSectionHeaderIndex = getSuggestedOfflinePagesSectionHeaderP osition();
164 if (index < suggestedSectionHeaderIndex) {
165 return mItems.get(index - 1);
Theresa 2017/02/10 00:55:12 nit: would it make sense for this to be return sup
shaktisahu 2017/02/10 21:30:24 hmm... I think, it seems more readable to keep thi
166 } else if (index == suggestedSectionHeaderIndex) {
167 assert mNumSuggestedOfflinePages > 0;
168 return getSuggestedOfflinePagesHeader();
169 } else {
170 assert isSuggestedOfflinePagesSectionExpanded();
171 return mItems.get(index - 2);
172 }
173 }
174
175 @Override
176 public int getItemViewType(int position) {
177 if (isSuggestedOfflinePagesSectionHeader(position)) {
178 return DateDividedAdapter.TYPE_SUBSECTION_HEADER;
179 } else {
180 return super.getItemViewType(position);
181 }
182 }
183
184 @Override
185 public int compareItem(TimedItem lhs, TimedItem rhs) {
186 if (isSuggestedOfflinePage(lhs) && !isSuggestedOfflinePage(rhs)) return 1;
187 if (!isSuggestedOfflinePage(lhs) && isSuggestedOfflinePage(rhs)) return -1;
188
189 return super.compareItem(lhs, rhs);
190 }
191
192 private boolean isSuggestedOfflinePage(TimedItem timedItem) {
193 if (timedItem instanceof OfflinePageItemWrapper) {
194 return ((OfflinePageItemWrapper) timedItem).isSuggested();
195 }
196
197 return false;
198 }
199 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698