Commit a1ec8acb authored by David Trainor's avatar David Trainor Committed by Commit Bot

Remove Download Home dependencies (config, glue)

This patch removes download home dependencies from the DownloadGlue
class and the DownloadManagerUiConfig class.

- For DownloadGlue, a LegacyDownloadProvider interface is exposed and
passed through.  This allows the implementation to still live publicly
until we can remove the whole chain.

- For DownloadManagerUiConfig, pull out the component that reads from
ChromeFeatureList and move it to a helper class to build the config from
feature flags.

Bug: 1025395
Change-Id: I8c36f2dcab192ff3f93aeb0ee2a99c01b568af5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1919909
Commit-Queue: David Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735540}
parent ca7932ce
......@@ -538,9 +538,13 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorFactory.java",
"java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorImpl.java",
"java/src/org/chromium/chrome/browser/download/home/DownloadManagerUiConfig.java",
"java/src/org/chromium/chrome/browser/download/home/DownloadManagerUiConfigHelper.java",
"java/src/org/chromium/chrome/browser/download/home/FaviconProvider.java",
"java/src/org/chromium/chrome/browser/download/home/FaviconProviderImpl.java",
"java/src/org/chromium/chrome/browser/download/home/FileDeletionQueue.java",
"java/src/org/chromium/chrome/browser/download/home/JustNowProvider.java",
"java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProvider.java",
"java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProviderImpl.java",
"java/src/org/chromium/chrome/browser/download/home/OfflineItemSource.java",
"java/src/org/chromium/chrome/browser/download/home/StableIds.java",
"java/src/org/chromium/chrome/browser/download/home/empty/EmptyCoordinator.java",
......@@ -565,8 +569,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/home/filter/chips/ChipsCoordinator.java",
"java/src/org/chromium/chrome/browser/download/home/filter/chips/ChipsProvider.java",
"java/src/org/chromium/chrome/browser/download/home/filter/chips/ChipsViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/glue/DownloadGlue.java",
"java/src/org/chromium/chrome/browser/download/home/glue/FileDeletionQueue.java",
"java/src/org/chromium/chrome/browser/download/home/glue/OfflineContentProviderGlue.java",
"java/src/org/chromium/chrome/browser/download/home/glue/ThumbnailRequestGlue.java",
"java/src/org/chromium/chrome/browser/download/home/list/BatchListModel.java",
......
......@@ -58,13 +58,13 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/display_cutout/DisplayCutoutControllerTest.java",
"junit/src/org/chromium/chrome/browser/download/DownloadResumptionSchedulerTest.java",
"junit/src/org/chromium/chrome/browser/download/DownloadSharedPreferenceEntryTest.java",
"junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/DeleteUndoOfflineItemFilterTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/FiltersTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/OffTheRecordOfflineItemFilterTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/OfflineItemFilterTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/SearchOfflineItemFilterTest.java",
"junit/src/org/chromium/chrome/browser/download/home/filter/TypeOfflineItemFilterTest.java",
"junit/src/org/chromium/chrome/browser/download/home/glue/FileDeletionQueueTest.java",
"junit/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java",
"junit/src/org/chromium/chrome/browser/download/home/list/ItemUtilsTest.java",
"junit/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java",
......
......@@ -13,6 +13,7 @@ import org.chromium.chrome.browser.SnackbarActivity;
import org.chromium.chrome.browser.download.home.DownloadManagerCoordinator;
import org.chromium.chrome.browser.download.home.DownloadManagerCoordinatorFactory;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfigHelper;
import org.chromium.chrome.browser.download.home.filter.Filters;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorNotificationBridgeUiFactory;
import org.chromium.chrome.browser.util.IntentUtils;
......@@ -58,8 +59,9 @@ public class DownloadActivity extends SnackbarActivity implements ModalDialogMan
getIntent(), IntentHandler.EXTRA_PARENT_COMPONENT);
mPermissionDelegate =
new ActivityAndroidPermissionDelegate(new WeakReference<Activity>(this));
DownloadManagerUiConfig config =
new DownloadManagerUiConfig.Builder()
DownloadManagerUiConfigHelper.fromFlags()
.setIsOffTheRecord(isOffTheRecord)
.setIsSeparateActivity(true)
.setShowPaginationHeaders(DownloadUtils.shouldShowPaginationHeaders())
......
......@@ -13,6 +13,7 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.download.home.DownloadManagerCoordinator;
import org.chromium.chrome.browser.download.home.DownloadManagerCoordinatorFactory;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfigHelper;
import org.chromium.chrome.browser.ui.native_page.BasicNativePage;
import org.chromium.chrome.browser.ui.native_page.NativePageHost;
import org.chromium.chrome.browser.util.UrlConstants;
......@@ -35,13 +36,13 @@ public class DownloadPage extends BasicNativePage implements DownloadManagerCoor
super(host);
ThreadUtils.assertOnUiThread();
DownloadManagerUiConfig config =
new DownloadManagerUiConfig.Builder()
DownloadManagerUiConfigHelper.fromFlags()
.setIsOffTheRecord(activity.getCurrentTabModel().isIncognito())
.setIsSeparateActivity(false)
.setShowPaginationHeaders(DownloadUtils.shouldShowPaginationHeaders())
.build();
mDownloadCoordinator = DownloadManagerCoordinatorFactory.create(activity, config,
activity.getSnackbarManager(), activity.getComponentName(),
activity.getModalDialogManager());
......
......@@ -26,9 +26,11 @@ public class DownloadManagerCoordinatorFactory {
public static DownloadManagerCoordinator create(Activity activity,
DownloadManagerUiConfig config, SnackbarManager snackbarManager,
ComponentName parentComponent, ModalDialogManager modalDialogManager) {
Profile profile = Profile.getLastUsedProfile();
Profile profile = Profile.getMainProfile();
LegacyDownloadProvider legacyProvider =
config.useNewDownloadPath ? new LegacyDownloadProviderImpl() : null;
return new DownloadManagerCoordinatorImpl(activity, config, snackbarManager,
modalDialogManager, TrackerFactory.getTrackerForProfile(profile),
new FaviconProviderImpl(profile));
new FaviconProviderImpl(profile), legacyProvider);
}
}
......@@ -53,14 +53,14 @@ class DownloadManagerCoordinatorImpl
/** Builds a {@link DownloadManagerCoordinatorImpl} instance. */
public DownloadManagerCoordinatorImpl(Activity activity, DownloadManagerUiConfig config,
SnackbarManager snackbarManager, ModalDialogManager modalDialogManager, Tracker tracker,
FaviconProvider faviconProvider) {
FaviconProvider faviconProvider, LegacyDownloadProvider legacyProvider) {
mActivity = activity;
mDeleteCoordinator = new DeleteUndoCoordinator(snackbarManager);
mSelectionDelegate = new SelectionDelegate<ListItem>();
mListCoordinator = new DateOrderedListCoordinator(mActivity, config,
OfflineContentAggregatorFactory.get(), mDeleteCoordinator::showSnackbar,
mSelectionDelegate, this::notifyFilterChanged, createDateOrderedListObserver(),
modalDialogManager, faviconProvider);
OfflineContentAggregatorFactory.get(), legacyProvider,
mDeleteCoordinator::showSnackbar, mSelectionDelegate, this::notifyFilterChanged,
createDateOrderedListObserver(), modalDialogManager, faviconProvider);
mToolbarCoordinator = new ToolbarCoordinator(mActivity, this, mListCoordinator,
mSelectionDelegate, config.isSeparateActivity, tracker);
......
......@@ -8,7 +8,6 @@ import static org.chromium.chrome.browser.util.ConversionUtils.BYTES_PER_MEGABYT
import org.chromium.base.ContextUtils;
import org.chromium.base.SysUtils;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.ui.base.DeviceFormFactor;
/** Provides the configuration params required by the download home UI. */
......@@ -80,6 +79,8 @@ public class DownloadManagerUiConfig {
private static final int IN_MEMORY_THUMBNAIL_CACHE_SIZE_BYTES = 15 * BYTES_PER_MEGABYTE;
private static final float MAX_THUMBNAIL_SCALE_FACTOR = 1.5f; /* hdpi scale factor. */
private boolean mIsOffTheRecord;
private boolean mIsSeparateActivity;
private boolean mUseGenericViewTypes;
......@@ -87,18 +88,15 @@ public class DownloadManagerUiConfig {
private boolean mUseNewDownloadPath;
private boolean mUseNewDownloadPathThumbnails;
private int mInMemoryThumbnailCacheSizeBytes = IN_MEMORY_THUMBNAIL_CACHE_SIZE_BYTES;
private float mMaxThumbnailScaleFactor = 1.5f; /* hdpi scale factor. */
private long mJustNowThresholdSeconds;
private float mMaxThumbnailScaleFactor = MAX_THUMBNAIL_SCALE_FACTOR;
private long mJustNowThresholdSeconds = JUST_NOW_THRESHOLD_SECONDS;
private boolean mSupportsGrouping;
private boolean mShowPaginationHeaders;
public Builder() {
readParamsFromFinch();
mSupportFullWidthImages = !DeviceFormFactor.isNonMultiDisplayContextOnTablet(
ContextUtils.getApplicationContext());
mUseGenericViewTypes = SysUtils.isLowEndDevice();
mUseNewDownloadPath = ChromeFeatureList.isEnabled(
ChromeFeatureList.DOWNLOAD_OFFLINE_CONTENT_PROVIDER);
}
public Builder setIsOffTheRecord(boolean isOffTheRecord) {
......@@ -146,14 +144,13 @@ public class DownloadManagerUiConfig {
return this;
}
public DownloadManagerUiConfig build() {
return new DownloadManagerUiConfig(this);
public Builder setSupportsGrouping(boolean supportsGrouping) {
mSupportsGrouping = supportsGrouping;
return this;
}
private void readParamsFromFinch() {
mJustNowThresholdSeconds = JUST_NOW_THRESHOLD_SECONDS;
mSupportsGrouping =
ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_INDEXING_DOWNLOAD_HOME);
public DownloadManagerUiConfig build() {
return new DownloadManagerUiConfig(this);
}
}
}
// Copyright 2019 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.home;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
/** Helper class to build default or base {@link DownloadManagerUiConfig.Builder} instances. */
public class DownloadManagerUiConfigHelper {
private DownloadManagerUiConfigHelper() {}
/** Creates a {@link DownloadManagerUiConfig.Builder} based on feature flags. */
public static DownloadManagerUiConfig.Builder fromFlags() {
return new DownloadManagerUiConfig.Builder()
.setUseNewDownloadPath(ChromeFeatureList.isEnabled(
ChromeFeatureList.DOWNLOAD_OFFLINE_CONTENT_PROVIDER))
.setSupportsGrouping(ChromeFeatureList.isEnabled(
ChromeFeatureList.CONTENT_INDEXING_DOWNLOAD_HOME));
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
// 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.home.glue;
package org.chromium.chrome.browser.download.home;
import androidx.annotation.VisibleForTesting;
......
// Copyright 2018 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.home;
import org.chromium.base.Callback;
import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.OfflineContentProvider;
import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.offline_items_collection.ShareCallback;
import org.chromium.components.offline_items_collection.VisualsCallback;
import java.util.ArrayList;
/**
* An interface to use to talk to the legacy download provider path. This is meant to be used until
* the old download path can be removed and we no longer need this bridge/conversion route for
* download home.
*/
public interface LegacyDownloadProvider {
/** Adds {@code observer} to get simulated OfflineContentProvider updates. */
void addObserver(OfflineContentProvider.Observer observer);
/** Removes {@code observer} from getting simulated OfflineContentProvider updates. */
void removeObserver(OfflineContentProvider.Observer observer);
/** To be called when this class can be torn down and will no longer be used. */
void destroy();
// OfflineContentProvider (glue) implementation.
/** @see OfflineContentProvider#openItem(ContentId) */
void openItem(OfflineItem item);
/** @see OfflineContentProvider#removeItem(ContentId) */
void removeItem(OfflineItem item);
/** @see OfflineContentProvider#cancelDownload(ContentId) */
void cancelDownload(OfflineItem item);
/** @see OfflineContentProvider#pauseDownload(ContentId) */
void pauseDownload(OfflineItem item);
/** @see OfflineContentProvider#resumeDownload(ContentId, boolean) */
void resumeDownload(OfflineItem item, boolean hasUserGesture);
/** @see OfflineContentProvider#getItemById(ContentId, Callback) */
void getItemById(ContentId id, Callback<OfflineItem> callback);
/** @see OfflineContentProvider#getAllItems(Callback) */
void getAllItems(Callback<ArrayList<OfflineItem>> callback, boolean offTheRecord);
/** @see OfflineContentProvider#getVisualsForItem(ContentId, VisualsCallback) */
void getVisualsForItem(ContentId id, VisualsCallback callback);
/** @see OfflineContentProvider#getShareInfoForItem(ContentId, ShareCallback) */
void getShareInfoForItem(OfflineItem item, ShareCallback callback);
/** @see OfflineContentProvider#renameItem(ContentId, String, Callback)*/
void renameItem(OfflineItem item, String name, Callback</*RenameResult*/ Integer> callback);
}
\ No newline at end of file
......@@ -2,12 +2,13 @@
// 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.home.glue;
package org.chromium.chrome.browser.download.home;
import android.text.TextUtils;
import org.chromium.base.Callback;
import org.chromium.base.CollectionUtil;
import org.chromium.base.ObserverList;
import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.download.DownloadInfo;
import org.chromium.chrome.browser.download.DownloadItem;
......@@ -18,6 +19,7 @@ import org.chromium.chrome.browser.download.DownloadUtils;
import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.LegacyHelpers;
import org.chromium.components.offline_items_collection.OfflineContentProvider;
import org.chromium.components.offline_items_collection.OfflineContentProvider.Observer;
import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.offline_items_collection.OfflineItemShareInfo;
import org.chromium.components.offline_items_collection.ShareCallback;
......@@ -33,33 +35,27 @@ import java.util.List;
* that need to happen in Java before hitting the service and (2) converting from
* {@link DownloadItem}s to {@link OfflineItem}s.
*/
public class DownloadGlue implements DownloadObserver {
private final ArrayList < Callback < ArrayList<OfflineItem>>> mRequests = new ArrayList<>();
private final ArrayList < Callback < ArrayList<OfflineItem>>> mOffTheRecordRequests =
class LegacyDownloadProviderImpl implements DownloadObserver, LegacyDownloadProvider {
private final ArrayList<Callback<ArrayList<OfflineItem>>> mRequests = new ArrayList<>();
private final ArrayList<Callback<ArrayList<OfflineItem>>> mOffTheRecordRequests =
new ArrayList<>();
private final OfflineContentProvider.Observer mDelegate;
private final ObserverList<OfflineContentProvider.Observer> mObservers = new ObserverList<>();
/** Creates an instance of a {@link DownloadGlue}. */
public DownloadGlue(OfflineContentProvider.Observer delegate) {
mDelegate = delegate;
/** Creates an instance of a {@link LegacyDownloadProvider}. */
public LegacyDownloadProviderImpl() {
DownloadManagerService.getDownloadManagerService().addDownloadObserver(this);
}
/**
* Called to tear down the connections to singletons. This needs to be called when this class
* is no longer in use.
*/
public void destroy() {
DownloadManagerService.getDownloadManagerService().removeDownloadObserver(this);
}
// DownloadObserver (OfflineContentProvider.Observer glue) implementation.
/** @see OfflineContentProvider.Observer#onItemsAdded(ArrayList) */
@Override
public void onDownloadItemCreated(DownloadItem item) {
if (!canShowDownloadItem(item)) return;
mDelegate.onItemsAdded(CollectionUtil.newArrayList(DownloadItem.createOfflineItem(item)));
for (OfflineContentProvider.Observer observer : mObservers) {
observer.onItemsAdded(
CollectionUtil.newArrayList(DownloadItem.createOfflineItem(item)));
}
}
/** @see OfflineContentProvider.Observer#onItemUpdated(OfflineItem) */
......@@ -68,7 +64,9 @@ public class DownloadGlue implements DownloadObserver {
if (!canShowDownloadItem(item)) return;
OfflineItem offlineItem = DownloadItem.createOfflineItem(item);
mDelegate.onItemUpdated(offlineItem, null);
for (OfflineContentProvider.Observer observer : mObservers) {
observer.onItemUpdated(offlineItem, null);
}
if (offlineItem.externallyRemoved) {
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> removeItem(offlineItem));
......@@ -78,12 +76,14 @@ public class DownloadGlue implements DownloadObserver {
/** @see OfflineContentProvider.Observer#onItemRemoved(ContentId) */
@Override
public void onDownloadItemRemoved(String guid, boolean isOffTheRecord) {
mDelegate.onItemRemoved(LegacyHelpers.buildLegacyContentId(false, guid));
for (OfflineContentProvider.Observer observer : mObservers) {
observer.onItemRemoved(LegacyHelpers.buildLegacyContentId(false, guid));
}
}
@Override
public void onAllDownloadsRetrieved(List<DownloadItem> items, boolean offTheRecord) {
List < Callback < ArrayList<OfflineItem>>> list =
List<Callback<ArrayList<OfflineItem>>> list =
offTheRecord ? mOffTheRecordRequests : mRequests;
if (list.isEmpty()) return;
......@@ -94,7 +94,7 @@ public class DownloadGlue implements DownloadObserver {
}
// Copy the list and clear the original in case the callbacks are reentrant.
List < Callback < ArrayList<OfflineItem>>> listCopy = new ArrayList<>(list);
List<Callback<ArrayList<OfflineItem>>> listCopy = new ArrayList<>(list);
list.clear();
for (Callback<ArrayList<OfflineItem>> callback : listCopy) callback.onResult(offlineItems);
......@@ -103,34 +103,49 @@ public class DownloadGlue implements DownloadObserver {
@Override
public void onAddOrReplaceDownloadSharedPreferenceEntry(ContentId id) {}
// OfflineContentProvider glue implementation.
/** @see OfflineContentProvider#openItem(ContentId) */
// LegacyDownloadProvider implementation.
@Override
public void addObserver(Observer observer) {
mObservers.addObserver(observer);
}
@Override
public void removeObserver(Observer observer) {
mObservers.removeObserver(observer);
}
@Override
public void destroy() {
DownloadManagerService.getDownloadManagerService().removeDownloadObserver(this);
}
@Override
public void openItem(OfflineItem item) {
// TODO(shaktisahu): May be pass metrics as a param.
DownloadManagerService.getDownloadManagerService().openDownload(
item.id, item.isOffTheRecord, DownloadOpenSource.DOWNLOAD_HOME);
}
/** @see OfflineContentProvider#removeItem(ContentId) */
@Override
public void removeItem(OfflineItem item) {
DownloadManagerService.getDownloadManagerService().removeDownload(
item.id.id, item.isOffTheRecord, item.externallyRemoved);
FileDeletionQueue.get().delete(item.filePath);
}
/** @see OfflineContentProvider#cancelDownload(ContentId) */
@Override
public void cancelDownload(OfflineItem item) {
DownloadManagerService.getDownloadManagerService().cancelDownload(
item.id, item.isOffTheRecord);
}
/** @see OfflineContentProvider#pauseDownload(ContentId) */
@Override
public void pauseDownload(OfflineItem item) {
DownloadManagerService.getDownloadManagerService().pauseDownload(
item.id, item.isOffTheRecord);
}
/** @see OfflineContentProvider#resumeDownload(ContentId, boolean) */
@Override
public void resumeDownload(OfflineItem item, boolean hasUserGesture) {
DownloadInfo.Builder builder = DownloadInfo.builderFromOfflineItem(item, null);
......@@ -150,15 +165,15 @@ public class DownloadGlue implements DownloadObserver {
}
}
/** @see OfflineContentProvider#getItemById(ContentId, Callback) */
@Override
public void getItemById(ContentId id, Callback<OfflineItem> callback) {
assert false : "Not supported.";
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> callback.onResult(null));
}
/** @see OfflineContentProvider#getAllItems(Callback) */
@Override
public void getAllItems(Callback<ArrayList<OfflineItem>> callback, boolean offTheRecord) {
List < Callback < ArrayList<OfflineItem>>> list =
List<Callback<ArrayList<OfflineItem>>> list =
offTheRecord ? mOffTheRecordRequests : mRequests;
list.add(callback);
......@@ -166,12 +181,12 @@ public class DownloadGlue implements DownloadObserver {
DownloadManagerService.getDownloadManagerService().getAllDownloads(offTheRecord);
}
/** @see OfflineContentProvider#getVisualsForItem(ContentId, VisualsCallback) */
@Override
public void getVisualsForItem(ContentId id, VisualsCallback callback) {
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> callback.onVisualsAvailable(id, null));
}
/** @see OfflineContentProvider#getShareInfoForItem(ContentId, ShareCallback) */
@Override
public void getShareInfoForItem(OfflineItem item, ShareCallback callback) {
OfflineItemShareInfo info = new OfflineItemShareInfo();
info.uri = DownloadUtils.getUriForItem(item.filePath);
......@@ -179,7 +194,7 @@ public class DownloadGlue implements DownloadObserver {
UiThreadTaskTraits.DEFAULT, () -> callback.onShareInfoAvailable(item.id, info));
}
/** @see OfflineContentProvider#renameItem(ContentId, String, Callback)*/
@Override
public void renameItem(
OfflineItem item, String name, Callback</*RenameResult*/ Integer> callback) {
DownloadManagerService.getDownloadManagerService().renameDownload(
......
......@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.download.home.glue;
import org.chromium.base.Callback;
import org.chromium.base.ObserverList;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.LegacyDownloadProvider;
import org.chromium.chrome.browser.thumbnail.generator.ThumbnailProvider;
import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.LaunchLocation;
......@@ -33,19 +34,20 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
private final boolean mUseNewDownloadPathThumbnails;
private final DownloadGlue mDownloadProvider;
private final LegacyDownloadProvider mLegacyProvider;
private Query mOutstandingQuery;
/** Creates an {@link OfflineContentProviderGlue} instance. */
public OfflineContentProviderGlue(
OfflineContentProvider provider, DownloadManagerUiConfig config) {
public OfflineContentProviderGlue(OfflineContentProvider provider,
LegacyDownloadProvider legacyProvider, DownloadManagerUiConfig config) {
mProvider = provider;
mIncludeOffTheRecord = config.isOffTheRecord;
mDownloadProvider = config.useNewDownloadPath ? null : new DownloadGlue(this);
mLegacyProvider = legacyProvider;
mUseNewDownloadPathThumbnails = config.useNewDownloadPathThumbnails;
mProvider.addObserver(this);
if (mLegacyProvider != null) mLegacyProvider.addObserver(this);
}
/**
......@@ -53,7 +55,10 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
* is no longer in use.
*/
public void destroy() {
if (mDownloadProvider != null) mDownloadProvider.destroy();
if (mLegacyProvider != null) {
mLegacyProvider.removeObserver(this);
mLegacyProvider.destroy();
}
mProvider.removeObserver(this);
}
......@@ -62,8 +67,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
// easy use without this layer (we would only pass ID through).
/** @see OfflineContentProvider#openItem(ContentId) */
public void openItem(OfflineItem item) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.openItem(item);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.openItem(item);
} else {
mProvider.openItem(LaunchLocation.DOWNLOAD_HOME, item.id);
}
......@@ -71,8 +76,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#removeItem(ContentId) */
public void removeItem(OfflineItem item) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.removeItem(item);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.removeItem(item);
} else {
mProvider.removeItem(item.id);
}
......@@ -80,8 +85,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#cancelDownload(ContentId) */
public void cancelDownload(OfflineItem item) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.cancelDownload(item);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.cancelDownload(item);
} else {
mProvider.cancelDownload(item.id);
}
......@@ -89,8 +94,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#pauseDownload(ContentId) */
public void pauseDownload(OfflineItem item) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.pauseDownload(item);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.pauseDownload(item);
} else {
mProvider.pauseDownload(item.id);
}
......@@ -98,8 +103,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#resumeDownload(ContentId) */
public void resumeDownload(OfflineItem item, boolean hasUserGesture) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.resumeDownload(item, hasUserGesture);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.resumeDownload(item, hasUserGesture);
} else {
mProvider.resumeDownload(item.id, hasUserGesture);
}
......@@ -107,8 +112,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#getItemById(ContentId, Callback) */
public void getItemById(ContentId id, Callback<OfflineItem> callback) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(id)) {
mDownloadProvider.getItemById(id, callback);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(id)) {
mLegacyProvider.getItemById(id, callback);
} else {
mProvider.getItemById(id, callback);
}
......@@ -142,8 +147,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#getShareInfoForItem(ContentId, ShareCallback) */
public void getShareInfoForItem(OfflineItem item, ShareCallback callback) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.getShareInfoForItem(item, callback);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.getShareInfoForItem(item, callback);
} else {
mProvider.getShareInfoForItem(item.id, callback);
}
......@@ -152,8 +157,8 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
/** @see OfflineContentProvider#renameItem(ContentId, String, Callback) */
public void renameItem(
OfflineItem item, String targetName, Callback</*RenameResult*/ Integer> callback) {
if (mDownloadProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mDownloadProvider.renameItem(item, targetName, callback);
if (mLegacyProvider != null && LegacyHelpers.isLegacyDownload(item.id)) {
mLegacyProvider.renameItem(item, targetName, callback);
} else {
mProvider.renameItem(item.id, targetName, callback);
}
......@@ -205,16 +210,15 @@ public class OfflineContentProviderGlue implements OfflineContentProvider.Observ
public Query() {
mDownloadProviderOffTheRecordResponded = !mIncludeOffTheRecord;
if (mDownloadProvider == null) {
if (mLegacyProvider == null) {
mDownloadProviderResponded = true;
mDownloadProviderOffTheRecordResponded = true;
} else {
if (mIncludeOffTheRecord) {
mDownloadProvider.getAllItems(
mLegacyProvider.getAllItems(
items -> addOffTheRecordDownloads(items), true /* offTheRecord */);
}
mDownloadProvider.getAllItems(
items -> addDownloads(items), false /* offTheRecord */);
mLegacyProvider.getAllItems(items -> addDownloads(items), false /* offTheRecord */);
}
mProvider.getAllItems(items -> addOfflineItems(items));
......
......@@ -17,6 +17,7 @@ import org.chromium.base.Log;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.FaviconProvider;
import org.chromium.chrome.browser.download.home.LegacyDownloadProvider;
import org.chromium.chrome.browser.download.home.StableIds;
import org.chromium.chrome.browser.download.home.empty.EmptyCoordinator;
import org.chromium.chrome.browser.download.home.filter.FilterCoordinator;
......@@ -92,6 +93,7 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
* @param context The {@link Context} to use to build the views.
* @param config The {@link DownloadManagerUiConfig} to provide UI configuration params.
* @param provider The {@link OfflineContentProvider} to visually represent.
* @param legacyProvider A legacy version of a provider for downloads.
* @param deleteController A class to manage whether or not items can be deleted.
* @param filterObserver A {@link FilterCoordinator.Observer} that should be notified of
* filter changes. This is meant to be used for external components that
......@@ -99,8 +101,8 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
* @param dateOrderedListObserver A {@link DateOrderedListObserver}.
*/
public DateOrderedListCoordinator(Context context, DownloadManagerUiConfig config,
OfflineContentProvider provider, DeleteController deleteController,
SelectionDelegate<ListItem> selectionDelegate,
OfflineContentProvider provider, LegacyDownloadProvider legacyProvider,
DeleteController deleteController, SelectionDelegate<ListItem> selectionDelegate,
FilterCoordinator.Observer filterObserver,
DateOrderedListObserver dateOrderedListObserver, ModalDialogManager modalDialogManager,
FaviconProvider faviconProvider) {
......@@ -112,9 +114,9 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
new DateOrderedListView(context, config, decoratedModel, dateOrderedListObserver);
mRenameDialogManager = new RenameDialogManager(context, modalDialogManager);
mMediator = new DateOrderedListMediator(provider, faviconProvider, this::startShareIntent,
deleteController, this::startRename, selectionDelegate, config,
dateOrderedListObserver, model);
mMediator = new DateOrderedListMediator(provider, legacyProvider, faviconProvider,
this::startShareIntent, deleteController, this::startRename, selectionDelegate,
config, dateOrderedListObserver, model);
mEmptyCoordinator = new EmptyCoordinator(context, mMediator.getEmptySource());
......
......@@ -17,6 +17,7 @@ import org.chromium.chrome.browser.GlobalDiscardableReferencePool;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.FaviconProvider;
import org.chromium.chrome.browser.download.home.JustNowProvider;
import org.chromium.chrome.browser.download.home.LegacyDownloadProvider;
import org.chromium.chrome.browser.download.home.OfflineItemSource;
import org.chromium.chrome.browser.download.home.filter.DeleteUndoOfflineItemFilter;
import org.chromium.chrome.browser.download.home.filter.Filters.FilterType;
......@@ -145,6 +146,7 @@ class DateOrderedListMediator {
* Creates an instance of a DateOrderedListMediator that will push {@code provider} into
* {@code model}.
* @param provider The {@link OfflineContentProvider} to visually represent.
* @param legacyProvider A legacy version of a provider for downloads.
* @param faviconProvider The {@link FaviconProvider} to handle favicon requests.
* @param deleteController A class to manage whether or not items can be deleted.
* @param shareController A class responsible for sharing downloaded item {@link
......@@ -154,7 +156,8 @@ class DateOrderedListMediator {
* @param dateOrderedListObserver An observer of the list and recycler view.
* @param model The {@link ListItemModel} to push {@code provider} into.
*/
public DateOrderedListMediator(OfflineContentProvider provider, FaviconProvider faviconProvider,
public DateOrderedListMediator(OfflineContentProvider provider,
LegacyDownloadProvider legacyProvider, FaviconProvider faviconProvider,
ShareController shareController, DeleteController deleteController,
RenameController renameController, SelectionDelegate<ListItem> selectionDelegate,
DownloadManagerUiConfig config, DateOrderedListObserver dateOrderedListObserver,
......@@ -172,7 +175,7 @@ class DateOrderedListMediator {
// TODO(shaktisahu): Look into replacing mutator chain by
// sorter -> label adder -> property setter -> paginator -> model
mProvider = new OfflineContentProviderGlue(provider, config);
mProvider = new OfflineContentProviderGlue(provider, legacyProvider, config);
mFaviconProvider = faviconProvider;
mShareController = shareController;
mModel = model;
......
......@@ -134,7 +134,7 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
private void setUpUi() {
FilterCoordinator.setPrefetchUserSettingValueForTesting(true);
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder()
DownloadManagerUiConfig config = DownloadManagerUiConfigHelper.fromFlags()
.setIsOffTheRecord(false)
.setIsSeparateActivity(true)
.setUseNewDownloadPath(true)
......@@ -148,7 +148,8 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
FaviconProvider faviconProvider = (url, faviconSizePx, callback) -> {};
mDownloadCoordinator = new DownloadManagerCoordinatorImpl(getActivity(), config,
mSnackbarManager, mModalDialogManager, mTracker, faviconProvider);
mSnackbarManager, mModalDialogManager, mTracker, faviconProvider,
/* LegacyDownloadProvider */ null);
getActivity().setContentView(mDownloadCoordinator.getView());
mDownloadCoordinator.updateForUrl(UrlConstants.DOWNLOADS_URL);
......
......@@ -2,7 +2,7 @@
// 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.home.glue;
package org.chromium.chrome.browser.download.home;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
......
......@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.download.home.list.ListItem.OfflineItemListIt
import org.chromium.chrome.browser.download.home.list.ListItem.SectionHeaderListItem;
import org.chromium.chrome.browser.download.home.list.mutator.DateOrderedListMutator;
import org.chromium.chrome.browser.download.home.list.mutator.ListMutationController;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.offline_items_collection.OfflineItemFilter;
import org.chromium.components.offline_items_collection.OfflineItemState;
......@@ -38,8 +37,6 @@ import org.chromium.ui.modelutil.ListObservable.ListObserver;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/** Unit tests for the DateOrderedListMutator class. */
@RunWith(BaseRobolectricTestRunner.class)
......@@ -59,10 +56,6 @@ public class DateOrderedListMutatorTest {
@Before
public void setUp() {
mModel = new ListItemModel();
Map<String, Boolean> testFeatures = new HashMap<>();
testFeatures.put(ChromeFeatureList.DOWNLOAD_OFFLINE_CONTENT_PROVIDER, true);
testFeatures.put(ChromeFeatureList.CONTENT_INDEXING_DOWNLOAD_HOME, false);
ChromeFeatureList.setTestFeatures(testFeatures);
}
@After
......@@ -879,7 +872,10 @@ public class DateOrderedListMutatorTest {
}
private DateOrderedListMutator createMutatorWithoutJustNowProvider() {
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder().build();
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder()
.setUseNewDownloadPath(true)
.setSupportsGrouping(false)
.build();
JustNowProvider justNowProvider = new JustNowProvider(config) {
@Override
public boolean isJustNowItem(OfflineItem item) {
......@@ -893,7 +889,10 @@ public class DateOrderedListMutatorTest {
}
private DateOrderedListMutator createMutatorWithJustNowProvider() {
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder().build();
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder()
.setUseNewDownloadPath(true)
.setSupportsGrouping(false)
.build();
JustNowProvider justNowProvider = new JustNowProvider(config);
DateOrderedListMutator mutator =
new DateOrderedListMutator(mSource, mModel, justNowProvider);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment