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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java

Issue 2511303002: [Downloads] Add support for tracking incomplete downloads (Closed)
Patch Set: Remove unnecessary function Created 4 years, 1 month 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/DownloadHistoryAdapter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java
index 53bf51c9fad132f57e01edee344a99d725f35aa7..0fd802e9502dc27e98a7f004ed8ea70c33d03ad4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java
@@ -9,6 +9,7 @@ import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.ViewGroup;
+import org.chromium.base.ObserverList;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
@@ -28,6 +29,11 @@ import java.util.List;
/** Bridges the user's download history and the UI used to display it. */
public class DownloadHistoryAdapter extends DateDividedAdapter implements DownloadUiObserver {
+ /** Alerted about changes to internal state. */
+ static interface TestObserver {
+ abstract void onDownloadItemCreated(DownloadItem item);
+ }
+
private class BackendItemsImpl extends BackendItems {
@Override
public DownloadHistoryItemWrapper removeItem(String guid) {
@@ -61,6 +67,7 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
private final ComponentName mParentComponent;
private final boolean mShowOffTheRecord;
private final LoadingStateDelegate mLoadingDelegate;
+ private final ObserverList<TestObserver> mObservers = new ObserverList<>();
private BackendProvider mBackendProvider;
private OfflinePageDownloadBridge.Observer mOfflinePageObserver;
@@ -100,10 +107,7 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
int[] itemCounts = new int[DownloadFilter.FILTER_BOUNDARY];
for (DownloadItem item : result) {
- // Don't display any incomplete downloads, yet.
DownloadItemWrapper wrapper = createDownloadItemWrapper(item);
- if (!wrapper.isComplete()) continue;
-
if (addDownloadHistoryItemWrapper(wrapper)) itemCounts[wrapper.getFilterType()]++;
}
@@ -199,39 +203,47 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
holder.getItemView().displayItem(mBackendProvider, item);
}
- /**
- * Updates the list when new information about a download comes in.
- */
- public void onDownloadItemUpdated(DownloadItem item) {
- if (item.getDownloadInfo().isOffTheRecord() && !mShowOffTheRecord) return;
+ /** Called when a new DownloadItem has been created by the native DownloadManager. */
+ public void onDownloadItemCreated(DownloadItem item) {
+ boolean isOffTheRecord = item.getDownloadInfo().isOffTheRecord();
+ if (isOffTheRecord && !mShowOffTheRecord) return;
+
+ BackendItems list = getDownloadItemList(isOffTheRecord);
+ assert list.findItemIndex(item.getId()) == BackendItems.INVALID_INDEX;
- // The adapter currently only cares about completion events.
DownloadItemWrapper wrapper = createDownloadItemWrapper(item);
- if (!wrapper.isComplete()) return;
+ boolean wasAdded = addDownloadHistoryItemWrapper(wrapper);
+ if (wasAdded && wrapper.isVisibleToUser(mFilter)) filter(mFilter);
- // Check if the item had already been deleted.
- if (updateDeletedFileMap(wrapper)) return;
+ for (TestObserver observer : mObservers) observer.onDownloadItemCreated(item);
+ }
- BackendItems list = getDownloadItemList(wrapper.isOffTheRecord());
- int index = list.findItemIndex(item.getId());
+ /** Updates the list when new information about a download comes in. */
+ public void onDownloadItemUpdated(DownloadItem item) {
+ DownloadItemWrapper newWrapper = createDownloadItemWrapper(item);
+ if (newWrapper.isOffTheRecord() && !mShowOffTheRecord) return;
+
+ // Check if the item has already been deleted.
+ if (updateDeletedFileMap(newWrapper)) return;
+ BackendItems list = getListForItem(newWrapper);
+ int index = list.findItemIndex(item.getId());
if (index == BackendItems.INVALID_INDEX) {
- // TODO(dfalcantara): Prevent this pathway from happening by listening for the creation
- // of DownloadItems.
- addDownloadHistoryItemWrapper(wrapper);
- } else {
- DownloadHistoryItemWrapper previousWrapper = list.get(index);
- // If the previous item was selected, the updated item should be selected as well.
- if (getSelectionDelegate().isItemSelected(previousWrapper)) {
- getSelectionDelegate().toggleSelectionForItem(previousWrapper);
- getSelectionDelegate().toggleSelectionForItem(wrapper);
- }
- // Update the old one.
- list.set(index, wrapper);
- mFilePathsToItemsMap.replaceItem(wrapper);
+ assert false : "Tried to update DownloadItem that didn't exist.";
+ return;
}
- filter(mFilter);
+ // Update the old one.
+ DownloadHistoryItemWrapper existingWrapper = list.get(index);
+ boolean isUpdated = existingWrapper.replaceItem(item);
+
+ if (existingWrapper.isVisibleToUser(mFilter)) {
+ if (existingWrapper.getPosition() == TimedItem.INVALID_POSITION) {
+ filter(mFilter);
+ } else if (isUpdated) {
+ notifyItemChanged(existingWrapper.getPosition());
+ }
+ }
}
/**
@@ -263,26 +275,15 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
sDeletedFileTracker.decrementInstanceCount();
}
- /**
- * @param items The items to remove from this adapter. This should be used to remove items
- * from the adapter during deletions.
- */
- void removeItemsFromAdapter(List<DownloadHistoryItemWrapper> items) {
- for (DownloadHistoryItemWrapper item : items) {
- getListForItem(item).remove(item);
- mFilePathsToItemsMap.removeItem(item);
- }
+ /** Marks that certain items are about to be deleted. */
+ void markItemsForDeletion(List<DownloadHistoryItemWrapper> items) {
+ for (DownloadHistoryItemWrapper item : items) item.setIsDeletionPending(true);
filter(mFilter);
}
- /**
- * @param items The items to add to this adapter. This should be used to add items back to the
- * adapter when undoing deletions.
- */
- void reAddItemsToAdapter(List<DownloadHistoryItemWrapper> items) {
- for (DownloadHistoryItemWrapper item : items) {
- addDownloadHistoryItemWrapper(item);
- }
+ /** Marks that items that were about to be deleted are not being deleted anymore. */
+ void unmarkItemsForDeletion(List<DownloadHistoryItemWrapper> items) {
+ for (DownloadHistoryItemWrapper item : items) item.setIsDeletionPending(false);
filter(mFilter);
}
@@ -295,6 +296,16 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
return mFilePathsToItemsMap.getItemsForFilePath(filePath);
}
+ /** Registers a {@link TestObserver} to monitor internal changes. */
+ void registerObserverForTest(TestObserver observer) {
+ mObservers.addObserver(observer);
+ }
+
+ /** Unregisters a {@link TestObserver} that was monitoring internal changes. */
+ void unregisterObserverForTest(TestObserver observer) {
+ mObservers.removeObserver(observer);
+ }
+
private DownloadDelegate getDownloadDelegate() {
return mBackendProvider.getDownloadDelegate();
}
@@ -338,12 +349,11 @@ public class DownloadHistoryAdapter extends DateDividedAdapter implements Downlo
@Override
public void onItemUpdated(OfflinePageDownloadItem item) {
int index = mOfflinePageItems.findItemIndex(item.getGuid());
- if (index != BackendItems.INVALID_INDEX) {
- OfflinePageItemWrapper wrapper = createOfflinePageItemWrapper(item);
- mOfflinePageItems.set(index, wrapper);
- mFilePathsToItemsMap.replaceItem(wrapper);
- updateDisplayedItems();
- }
+ assert index != BackendItems.INVALID_INDEX;
+
+ DownloadHistoryItemWrapper existingWrapper = mOfflinePageItems.get(index);
+ existingWrapper.replaceItem(item);
+ updateDisplayedItems();
}
/** Re-filter the items if needed. */

Powered by Google App Engine
This is Rietveld 408576698