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

Unified 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: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadItemGroup.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadItemGroup.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadItemGroup.java
new file mode 100644
index 0000000000000000000000000000000000000000..2de0af02b69f5b81c08feccf79f51e2391476639
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadItemGroup.java
@@ -0,0 +1,172 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.download.ui;
+
+import org.chromium.chrome.browser.widget.DateDividedAdapter;
+import org.chromium.chrome.browser.widget.DateDividedAdapter.TimedItem;
+
+/**
+ * A bucket of downloaded items with the same date.
+ */
+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
+ private int mNumOfflinePages;
gone 2017/02/02 23:59:48 mNumSuggestedOfflinePages or mNumAutomaticallyDown
shaktisahu 2017/02/04 18:57:42 Done.
+ private boolean mOfflinePagesExpanded;
gone 2017/02/02 23:59:48 mIsSuggestedOfflinePagesSectionExpanded / isSugges
shaktisahu 2017/02/04 18:57:42 Done.
+
+ // 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.
+ private TimedItem mOfflineHeader;
+
+ public DownloadItemGroup(long timestamp) {
+ super(timestamp);
+ mNumOfflinePages = 0;
+ mOfflinePagesExpanded = false;
+
+ 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.
+ private Long mStableId;
+
+ @Override
+ public long getTimestamp() {
+ return getDate().getTime();
+ }
+
+ @Override
+ public long getStableId() {
+ if (mStableId == null) {
+ // Generate a stable ID based on timestamp.
+ mStableId = getTimestamp() & 0x0FFFFFFFF;
+ mStableId = (mStableId << 32) + ~(getTimestamp() & 0x0FFFFFFFF);
gone 2017/02/02 23:59:47 This should be more consistent with the stable IDs
shaktisahu 2017/02/04 18:57:42 Done.
+ }
+ return mStableId;
+ }
+ };
+ }
+
+ public boolean offlinePageExpanded() {
+ return mOfflinePagesExpanded;
+ }
+
+ public void setOfflinePageExpanded(boolean expanded) {
+ mOfflinePagesExpanded = expanded;
+ }
+
+ public int getOfflinePageCount() {
+ return mNumOfflinePages;
+ }
+
+ @Override
+ public void addItem(TimedItem item) {
+ super.addItem(item);
+ if (item.isOfflinePage()) {
+ mNumOfflinePages++;
+ }
+ }
+
+ @Override
+ public void removeItem(TimedItem item) {
+ super.removeItem(item);
+ if (item.isOfflinePage()) {
+ mNumOfflinePages--;
+ }
+ }
+
+ @Override
+ protected void setPositionForItems(int startIndex) {
+ int index = startIndex;
+ boolean firstOfflineItem = false;
+ for (TimedItem item : mItems) {
+ if (item.isOfflinePage()) {
+ if (!firstOfflineItem) {
+ index += 1;
+ firstOfflineItem = true;
+ }
+ if (!offlinePageExpanded()) continue;
+ }
+ item.setPosition(index);
+ index += 1;
+ }
+ }
+
+ @Override
+ public int size() {
+ int size = super.size();
+
+ if (mNumOfflinePages > 0) {
+ size += 1;
+ if (!offlinePageExpanded()) {
+ size -= mNumOfflinePages;
+ }
+ }
+
+ return size;
+ }
+
+ public long getOfflinePagesFileSize() {
+ long size = 0;
+ for (TimedItem item : mItems) {
+ if (item.isOfflinePage()) {
+ size += ((DownloadHistoryItemWrapper) item).getFileSize();
+ }
+ }
+ return size;
+ }
+
+ 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.
+ return index == (mItems.size() - mNumOfflinePages + 1) && mNumOfflinePages > 0;
+ }
+
+ @Override
+ public TimedItem getItemAt(int index) {
+ // 0 is allocated to the date header. The list header has no items.
+ if (index == 0) return null;
+
+ sortIfNeeded();
+
+ // If the offline pages would start at the beginning of the group
+ /*if (mNumOfflinePages > 0) {
+ if (index == 1) return mOfflineHeader;
+
+ if (offlinePageExpanded()) {
+ return mItems.get(index - 2);
+ } else {
+ int newIndex = index - 2 + mNumOfflinePages;
+ return mItems.get(newIndex);
+ }
+ } else {
+ return mItems.get(index - 1);
+ }*/
+
+ // Offline pages start at the end of the group.
+ if (index <= mItems.size() - mNumOfflinePages) {
+ return mItems.get(index - 1);
+ } else {
+ if (mNumOfflinePages > 0 && index == mItems.size() - mNumOfflinePages + 1) {
+ return mOfflineHeader;
+ } else if (offlinePageExpanded()) {
+ return mItems.get(index - 2);
+ } else {
+ System.out.println("shakti, index " + index + " total " + mItems.size()
+ + " offline " + mNumOfflinePages + " expanded " + offlinePageExpanded());
+ assert false;
+ return null;
+ }
+ }
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (isOfflineHeader(position)) {
+ return DateDividedAdapter.TYPE_OFFLINE_HEADER;
+ } else {
+ return DateDividedAdapter.TYPE_NORMAL;
+ }
+ }
+
+ @Override
+ public int compareItem(TimedItem lhs, TimedItem rhs) {
+ if (lhs.isOfflinePage() && !rhs.isOfflinePage()) return 1;
+ if (!lhs.isOfflinePage() && rhs.isOfflinePage()) return -1;
+
+ return super.compareItem(lhs, rhs);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698