OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 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.widget.DateDividedAdapter; | |
8 import org.chromium.chrome.browser.widget.DateDividedAdapter.TimedItem; | |
9 | |
10 /** | |
11 * A bucket of downloaded items with the same date. | |
12 */ | |
13 public class DownloadItemGroup extends DateDividedAdapter.ItemGroup { | |
gone
2017/02/02 23:59:48
This is confusing because the user can download of
shaktisahu
2017/02/04 18:57:42
Okay. I renamed everything with *OfflinePage* here
| |
14 private int mNumOfflinePages; | |
gone
2017/02/02 23:59:48
mNumSuggestedOfflinePages or mNumAutomaticallyDown
shaktisahu
2017/02/04 18:57:42
Done.
| |
15 private boolean mOfflinePagesExpanded; | |
gone
2017/02/02 23:59:48
mIsSuggestedOfflinePagesSectionExpanded / isSugges
shaktisahu
2017/02/04 18:57:42
Done.
| |
16 | |
17 // The header for the group containing offline pages. | |
gone
2017/02/02 23:59:48
1) Don't say there's a "group" inside a "group".
2
shaktisahu
2017/02/04 18:57:42
Done.
| |
18 private TimedItem mOfflineHeader; | |
19 | |
20 public DownloadItemGroup(long timestamp) { | |
21 super(timestamp); | |
22 mNumOfflinePages = 0; | |
23 mOfflinePagesExpanded = false; | |
24 | |
25 mOfflineHeader = new TimedItem() { | |
gone
2017/02/02 23:59:47
This should only be created when it's actually nec
shaktisahu
2017/02/04 18:57:42
Done.
| |
26 private Long mStableId; | |
27 | |
28 @Override | |
29 public long getTimestamp() { | |
30 return getDate().getTime(); | |
31 } | |
32 | |
33 @Override | |
34 public long getStableId() { | |
35 if (mStableId == null) { | |
36 // Generate a stable ID based on timestamp. | |
37 mStableId = getTimestamp() & 0x0FFFFFFFF; | |
38 mStableId = (mStableId << 32) + ~(getTimestamp() & 0x0FFFFFF FF); | |
gone
2017/02/02 23:59:47
This should be more consistent with the stable IDs
shaktisahu
2017/02/04 18:57:42
Done.
| |
39 } | |
40 return mStableId; | |
41 } | |
42 }; | |
43 } | |
44 | |
45 public boolean offlinePageExpanded() { | |
46 return mOfflinePagesExpanded; | |
47 } | |
48 | |
49 public void setOfflinePageExpanded(boolean expanded) { | |
50 mOfflinePagesExpanded = expanded; | |
51 } | |
52 | |
53 public int getOfflinePageCount() { | |
54 return mNumOfflinePages; | |
55 } | |
56 | |
57 @Override | |
58 public void addItem(TimedItem item) { | |
59 super.addItem(item); | |
60 if (item.isOfflinePage()) { | |
61 mNumOfflinePages++; | |
62 } | |
63 } | |
64 | |
65 @Override | |
66 public void removeItem(TimedItem item) { | |
67 super.removeItem(item); | |
68 if (item.isOfflinePage()) { | |
69 mNumOfflinePages--; | |
70 } | |
71 } | |
72 | |
73 @Override | |
74 protected void setPositionForItems(int startIndex) { | |
75 int index = startIndex; | |
76 boolean firstOfflineItem = false; | |
77 for (TimedItem item : mItems) { | |
78 if (item.isOfflinePage()) { | |
79 if (!firstOfflineItem) { | |
80 index += 1; | |
81 firstOfflineItem = true; | |
82 } | |
83 if (!offlinePageExpanded()) continue; | |
84 } | |
85 item.setPosition(index); | |
86 index += 1; | |
87 } | |
88 } | |
89 | |
90 @Override | |
91 public int size() { | |
92 int size = super.size(); | |
93 | |
94 if (mNumOfflinePages > 0) { | |
95 size += 1; | |
96 if (!offlinePageExpanded()) { | |
97 size -= mNumOfflinePages; | |
98 } | |
99 } | |
100 | |
101 return size; | |
102 } | |
103 | |
104 public long getOfflinePagesFileSize() { | |
105 long size = 0; | |
106 for (TimedItem item : mItems) { | |
107 if (item.isOfflinePage()) { | |
108 size += ((DownloadHistoryItemWrapper) item).getFileSize(); | |
109 } | |
110 } | |
111 return size; | |
112 } | |
113 | |
114 public boolean isOfflineHeader(int index) { | |
gone
2017/02/02 23:59:47
This is used only here. Make it private.
shaktisahu
2017/02/04 18:57:42
Done.
| |
115 return index == (mItems.size() - mNumOfflinePages + 1) && mNumOfflinePag es > 0; | |
116 } | |
117 | |
118 @Override | |
119 public TimedItem getItemAt(int index) { | |
120 // 0 is allocated to the date header. The list header has no items. | |
121 if (index == 0) return null; | |
122 | |
123 sortIfNeeded(); | |
124 | |
125 // If the offline pages would start at the beginning of the group | |
126 /*if (mNumOfflinePages > 0) { | |
127 if (index == 1) return mOfflineHeader; | |
128 | |
129 if (offlinePageExpanded()) { | |
130 return mItems.get(index - 2); | |
131 } else { | |
132 int newIndex = index - 2 + mNumOfflinePages; | |
133 return mItems.get(newIndex); | |
134 } | |
135 } else { | |
136 return mItems.get(index - 1); | |
137 }*/ | |
138 | |
139 // Offline pages start at the end of the group. | |
140 if (index <= mItems.size() - mNumOfflinePages) { | |
141 return mItems.get(index - 1); | |
142 } else { | |
143 if (mNumOfflinePages > 0 && index == mItems.size() - mNumOfflinePage s + 1) { | |
144 return mOfflineHeader; | |
145 } else if (offlinePageExpanded()) { | |
146 return mItems.get(index - 2); | |
147 } else { | |
148 System.out.println("shakti, index " + index + " total " + mItems .size() | |
149 + " offline " + mNumOfflinePages + " expanded " + offlin ePageExpanded()); | |
150 assert false; | |
151 return null; | |
152 } | |
153 } | |
154 } | |
155 | |
156 @Override | |
157 public int getItemViewType(int position) { | |
158 if (isOfflineHeader(position)) { | |
159 return DateDividedAdapter.TYPE_OFFLINE_HEADER; | |
160 } else { | |
161 return DateDividedAdapter.TYPE_NORMAL; | |
162 } | |
163 } | |
164 | |
165 @Override | |
166 public int compareItem(TimedItem lhs, TimedItem rhs) { | |
167 if (lhs.isOfflinePage() && !rhs.isOfflinePage()) return 1; | |
168 if (!lhs.isOfflinePage() && rhs.isOfflinePage()) return -1; | |
169 | |
170 return super.compareItem(lhs, rhs); | |
171 } | |
172 } | |
OLD | NEW |