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

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: Some fix 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.
13 */
14 public class DownloadItemGroup extends DateDividedAdapter.ItemGroup {
15 private int mNumSuggestedOfflinePages;
16 private boolean mIsSuggestedOfflinePagesSectionExpanded;
17
18 /** The header representing the offline pages that are automatically downloa ded */
19 private TimedItem mSuggestedOfflinePagesHeader;
20
21 public DownloadItemGroup(long timestamp) {
22 super(timestamp);
23 mNumSuggestedOfflinePages = 0;
24 mIsSuggestedOfflinePagesSectionExpanded = false;
25 }
26
27 public boolean isSuggestedOfflinePagesSectionExpanded() {
28 return mIsSuggestedOfflinePagesSectionExpanded;
29 }
30
31 public void setIsSuggestedOfflinePagesSectionExpanded(boolean expanded) {
32 mIsSuggestedOfflinePagesSectionExpanded = expanded;
33 }
34
35 public int getSuggestedOfflinePageCount() {
Theresa 2017/02/03 19:53:06 nit: public methods need JavaDocs
shaktisahu 2017/02/04 18:57:43 Done.
36 return mNumSuggestedOfflinePages;
37 }
38
39 private TimedItem getSuggestedOfflinePagesHeader() {
40 if (mSuggestedOfflinePagesHeader == null) {
41 mSuggestedOfflinePagesHeader = new TimedItem() {
42 private Long mStableId;
43
44 @Override
45 public long getTimestamp() {
46 return getDate().getTime();
47 }
48
49 @Override
50 public long getStableId() {
51 if (mStableId == null) {
52 // Generate a stable ID based on timestamp.
53 mStableId = 0xFFFFFFFF00000000L + getTimestamp() & 0x0FF FFFFFF;
54 }
55 return mStableId;
56 }
57 };
58 }
59 return mSuggestedOfflinePagesHeader;
60 }
61
62 @Override
63 public void addItem(TimedItem item) {
64 super.addItem(item);
65 if (isSuggestedOfflinePage(item)) {
66 mNumSuggestedOfflinePages++;
67 }
68 }
69
70 @Override
71 public void removeItem(TimedItem item) {
72 super.removeItem(item);
73 if (isSuggestedOfflinePage(item)) {
74 mNumSuggestedOfflinePages--;
75 }
76 }
77
78 @Override
79 protected void setPositionForItems(int startIndex) {
80 int index = startIndex;
81 boolean firstSuggestedItem = false;
82 for (TimedItem item : mItems) {
83 if (isSuggestedOfflinePage(item)) {
84 if (!firstSuggestedItem) {
85 index += 1;
Theresa 2017/02/03 19:53:06 A comment here explaining why we skip a position f
shaktisahu 2017/02/04 18:57:43 Done.
86 firstSuggestedItem = true;
87 }
88 if (!isSuggestedOfflinePagesSectionExpanded()) continue;
Theresa 2017/02/03 19:53:06 Should we break if the suggested offline page sect
shaktisahu 2017/02/04 18:57:43 Done. Yes.
89 }
90 item.setPosition(index);
91 index += 1;
92 }
93 }
94
95 @Override
96 public int size() {
97 int size = super.size();
98 if (mNumSuggestedOfflinePages > 0) {
Theresa 2017/02/03 19:53:06 Do we add everything to the adapter whether or not
shaktisahu 2017/02/04 18:57:43 We only add the visible items to the adapter. The
99 size += 1;
100 if (!isSuggestedOfflinePagesSectionExpanded()) {
101 size -= mNumSuggestedOfflinePages;
102 }
103 }
104
105 return size;
106 }
107
108 public long getSuggestedOfflinePagesFileSize() {
109 long size = 0;
110 for (TimedItem item : mItems) {
111 if (isSuggestedOfflinePage(item)) {
112 size += ((DownloadHistoryItemWrapper) item).getFileSize();
113 }
114 }
115 return size;
116 }
117
118 private boolean isSuggestedOfflinePagesSectionHeader(int index) {
119 return index == (mItems.size() - mNumSuggestedOfflinePages + 1)
120 && mNumSuggestedOfflinePages > 0;
121 }
122
123 @Override
124 public TimedItem getItemAt(int index) {
125 // 0 is allocated to the date header. The list header has no items.
126 if (index == 0) return null;
127
128 sortIfNeeded();
129
130 // The suggested pages start at the end of the group.
131 if (index <= mItems.size() - mNumSuggestedOfflinePages) {
132 return mItems.get(index - 1);
133 } else {
134 if (mNumSuggestedOfflinePages > 0
135 && index == mItems.size() - mNumSuggestedOfflinePages + 1) {
136 return getSuggestedOfflinePagesHeader();
137 } else if (isSuggestedOfflinePagesSectionExpanded()) {
138 return mItems.get(index - 2);
139 } else {
140 assert false;
141 return null;
142 }
143 }
144 }
145
146 @Override
147 public int getItemViewType(int position) {
148 if (isSuggestedOfflinePagesSectionHeader(position)) {
149 return DateDividedAdapter.TYPE_SUGGESTED_OFFLINE_PAGES_HEADER;
150 } else {
151 return DateDividedAdapter.TYPE_NORMAL;
152 }
153 }
154
155 @Override
156 public int compareItem(TimedItem lhs, TimedItem rhs) {
157 if (isSuggestedOfflinePage(lhs) && !isSuggestedOfflinePage(rhs)) return 1;
158 if (!isSuggestedOfflinePage(lhs) && isSuggestedOfflinePage(rhs)) return -1;
159
160 return super.compareItem(lhs, rhs);
161 }
162
163 private boolean isSuggestedOfflinePage(TimedItem timedItem) {
164 if (timedItem instanceof OfflinePageItemWrapper) {
165 return ((OfflinePageItemWrapper) timedItem).isSuggested();
166 }
167
168 return false;
169 }
170 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698