Commit 12f38923 authored by Min Qin's avatar Min Qin Committed by Commit Bot

refactor chrome/browser/download/ui

DownloadFilter is used by non-UI code and should be moved out.
BackendProvider is not needed and can be removed.

BUG=1013759

Change-Id: I88d346e9035171fff4d371c77df3812e93a857b6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865537Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706919}
parent f8c0ec59
......@@ -278,6 +278,7 @@ android_library("chrome_java") {
"//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java",
"//chrome/browser/android/thin_webview:factory_java",
"//chrome/browser/android/thin_webview:java",
"//chrome/browser/download/android:java",
"//chrome/browser/image_fetcher:java",
"//chrome/browser/ui/android/widget:java",
"//chrome/browser/util/android:java",
......
......@@ -614,8 +614,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUiFactory.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadBackgroundTask.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadTaskScheduler.java",
"java/src/org/chromium/chrome/browser/download/ui/BackendProvider.java",
"java/src/org/chromium/chrome/browser/download/ui/DownloadFilter.java",
"java/src/org/chromium/chrome/browser/engagement/SiteEngagementService.java",
"java/src/org/chromium/chrome/browser/explore_sites/CategoryCardAdapter.java",
"java/src/org/chromium/chrome/browser/explore_sites/CategoryCardViewHolderFactory.java",
......
......@@ -3,6 +3,7 @@ include_rules = [
"+chrome/browser/android/thin_webview/java",
"+chrome/browser/ui/android/widget",
"+chrome/browser/download/android/java",
"+chrome/browser/util/android/java",
"+chrome/lib/lifecycle/public",
"+chrome/lib/image_fetcher/public",
......
......@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download;
import android.graphics.Bitmap;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
import org.chromium.components.download.DownloadState;
import org.chromium.components.download.ResumeMode;
import org.chromium.components.offline_items_collection.ContentId;
......
......@@ -41,7 +41,6 @@ import org.chromium.chrome.browser.download.DownloadManagerBridge.DownloadEnqueu
import org.chromium.chrome.browser.download.DownloadNotificationUmaHelper.UmaBackgroundDownload;
import org.chromium.chrome.browser.download.DownloadNotificationUmaHelper.UmaDownloadResumption;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.download.ui.BackendProvider;
import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.media.MediaViewerUtils;
......@@ -87,10 +86,9 @@ import java.util.concurrent.RejectedExecutionException;
* handles all Android DownloadManager interactions. And DownloadManagerService should not know
* download Id issued by Android DownloadManager.
*/
public class DownloadManagerService
implements DownloadController.DownloadNotificationService,
NetworkChangeNotifierAutoDetect.Observer, DownloadServiceDelegate,
BackendProvider.DownloadDelegate, ProfileManager.Observer {
public class DownloadManagerService implements DownloadController.DownloadNotificationService,
NetworkChangeNotifierAutoDetect.Observer,
DownloadServiceDelegate, ProfileManager.Observer {
// Download status.
@IntDef({DownloadStatus.IN_PROGRESS, DownloadStatus.COMPLETE, DownloadStatus.FAILED,
DownloadStatus.CANCELLED, DownloadStatus.INTERRUPTED})
......@@ -1174,7 +1172,6 @@ public class DownloadManagerService
* @param isOffTheRecord Whether the download is off the record.
* @param externallyRemoved If the file is externally removed by other applications.
*/
@Override
public void removeDownload(
final String downloadGuid, boolean isOffTheRecord, boolean externallyRemoved) {
mHandler.post(() -> {
......@@ -1196,7 +1193,6 @@ public class DownloadManagerService
* @param mimeType MIME type of the file.
* @return Whether the download is openable by the browser.
*/
@Override
public boolean isDownloadOpenableInBrowser(boolean isOffTheRecord, String mimeType) {
// TODO(qinmin): for audio and video, check if the codec is supported by Chrome.
return isSupportedMimeType(mimeType);
......@@ -1598,14 +1594,12 @@ public class DownloadManagerService
}
/** Adds a new DownloadObserver to the list. */
@Override
public void addDownloadObserver(DownloadObserver observer) {
mDownloadObservers.addObserver(observer);
DownloadSharedPreferenceHelper.getInstance().addObserver(observer);
}
/** Removes a DownloadObserver from the list. */
@Override
public void removeDownloadObserver(DownloadObserver observer) {
mDownloadObservers.removeObserver(observer);
DownloadSharedPreferenceHelper.getInstance().removeObserver(observer);
......@@ -1618,7 +1612,6 @@ public class DownloadManagerService
*
* @param isOffTheRecord Whether or not to get downloads for the off the record profile.
*/
@Override
public void getAllDownloads(boolean isOffTheRecord) {
DownloadManagerServiceJni.get().getAllDownloads(
getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord);
......@@ -1628,7 +1621,6 @@ public class DownloadManagerService
* Fires an Intent that alerts the DownloadNotificationService that an action must be taken
* for a particular item.
*/
@Override
public void broadcastDownloadAction(DownloadItem downloadItem, String action) {
Context appContext = ContextUtils.getApplicationContext();
Intent intent = DownloadNotificationFactory.buildActionIntent(appContext, action,
......@@ -1638,7 +1630,6 @@ public class DownloadManagerService
appContext.startService(intent);
}
@Override
public void renameDownload(ContentId id, String name,
Callback<Integer /*RenameResult*/> callback, boolean isOffTheRecord) {
DownloadManagerServiceJni.get().renameDownload(getNativeDownloadManagerService(),
......@@ -1674,7 +1665,6 @@ public class DownloadManagerService
* Checks if the files associated with any downloads have been removed by an external action.
* @param isOffTheRecord Whether or not to check downloads for the off the record profile.
*/
@Override
public void checkForExternallyRemovedDownloads(boolean isOffTheRecord) {
DownloadManagerServiceJni.get().checkForExternallyRemovedDownloads(
getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord);
......@@ -2059,7 +2049,6 @@ public class DownloadManagerService
* @param downloadGuid Download GUID.
* @param isOffTheRecord Whether the download is off the record.
*/
@Override
public void updateLastAccessTime(String downloadGuid, boolean isOffTheRecord) {
if (TextUtils.isEmpty(downloadGuid)) return;
......
......@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
import java.util.ArrayList;
......
......@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.media.MediaViewerUtils;
import org.chromium.chrome.browser.offlinepages.DownloadUiActionFlags;
......
......@@ -5,9 +5,9 @@
package org.chromium.chrome.browser.download.home.metrics;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.download.DownloadFilter;
import org.chromium.chrome.browser.download.home.filter.FilterCoordinator;
import org.chromium.chrome.browser.download.home.filter.Filters.FilterType;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
/**
* Helper class to log filter changes as the occur.
......
// 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.base.Callback;
import org.chromium.chrome.browser.download.DownloadItem;
import org.chromium.chrome.browser.download.DownloadManagerService;
import org.chromium.chrome.browser.download.DownloadManagerService.DownloadObserver;
import org.chromium.components.offline_items_collection.ContentId;
/**
* Provides classes that need to be interacted with by the download UI. This interface will be
* removed once {@link OfflineContentProvider} is enabled for downloads.
*/
public interface BackendProvider {
/** Interacts with the Downloads backend. */
public static interface DownloadDelegate {
/** See {@link DownloadManagerService#addDownloadObserver}. */
void addDownloadObserver(DownloadObserver observer);
/** See {@link DownloadManagerService#removeDownloadObserver}. */
void removeDownloadObserver(DownloadObserver observer);
/** See {@link DownloadManagerService#getAllDownloads}. */
void getAllDownloads(boolean isOffTheRecord);
/** See {@link DownloadManagerService#broadcastDownloadAction}. */
void broadcastDownloadAction(DownloadItem downloadItem, String action);
/** See {@link DownloadManagerService#checkForExternallyRemovedDownloads}. */
void checkForExternallyRemovedDownloads(boolean isOffTheRecord);
/** See {@link DownloadManagerService#removeDownload}. */
void removeDownload(String guid, boolean isOffTheRecord, boolean externallyRemoved);
/** See {@link DownloadManagerService#isDownloadOpenableInBrowser}. */
boolean isDownloadOpenableInBrowser(boolean isOffTheRecord, String mimeType);
/** See {@link DownloadManagerService#updateLastAccessTime}. */
void updateLastAccessTime(String downloadGuid, boolean isOffTheRecord);
/** See {@link DownloadManagerService#renameDownload}. */
void renameDownload(ContentId id, String name, Callback<Integer /*RenameResult*/> callback,
boolean isOffTheRecord);
}
}
......@@ -5,15 +5,12 @@
package org.chromium.chrome.browser.download.ui;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import android.os.Handler;
import android.os.Looper;
import org.chromium.base.Callback;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.chrome.browser.download.DownloadItem;
import org.chromium.chrome.browser.download.DownloadManagerService.DownloadObserver;
import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.LaunchLocation;
import org.chromium.components.offline_items_collection.LegacyHelpers;
......@@ -27,80 +24,10 @@ import org.chromium.components.offline_items_collection.VisualsCallback;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/** Stubs out backends used by the Download Home UI. */
public class StubbedProvider implements BackendProvider {
/** Stubs out the DownloadManagerService. */
public class StubbedDownloadDelegate implements DownloadDelegate {
public final CallbackHelper addCallback = new CallbackHelper();
public final CallbackHelper removeCallback = new CallbackHelper();
public final CallbackHelper checkExternalCallback = new CallbackHelper();
public final CallbackHelper removeDownloadCallback = new CallbackHelper();
public final List<DownloadItem> regularItems = new ArrayList<>();
public final List<DownloadItem> offTheRecordItems = new ArrayList<>();
private DownloadObserver mObserver;
@Override
public void addDownloadObserver(DownloadObserver observer) {
addCallback.notifyCalled();
assertNull(mObserver);
mObserver = observer;
}
@Override
public void removeDownloadObserver(DownloadObserver observer) {
removeCallback.notifyCalled();
mObserver = null;
}
@Override
public void getAllDownloads(final boolean isOffTheRecord) {
mHandler.post(new Runnable() {
@Override
public void run() {
mObserver.onAllDownloadsRetrieved(
isOffTheRecord ? offTheRecordItems : regularItems, isOffTheRecord);
}
});
}
@Override
public void broadcastDownloadAction(DownloadItem downloadItem, String action) {}
@Override
public void checkForExternallyRemovedDownloads(boolean isOffTheRecord) {
checkExternalCallback.notifyCalled();
}
@Override
public void removeDownload(
final String guid, final boolean isOffTheRecord, boolean externallyRemoved) {
mHandler.post(new Runnable() {
@Override
public void run() {
mObserver.onDownloadItemRemoved(guid, isOffTheRecord);
removeDownloadCallback.notifyCalled();
}
});
}
@Override
public boolean isDownloadOpenableInBrowser(boolean isOffTheRecord, String mimeType) {
return false;
}
@Override
public void updateLastAccessTime(String downloadGuid, boolean isOffTheRecord) {}
@Override
public void renameDownload(ContentId id, String name,
Callback<Integer /*RenameResult*/> callback, boolean isOffTheRecord) {}
}
public class StubbedProvider {
/** Stubs out the OfflineContentProvider. */
public class StubbedOfflineContentProvider implements OfflineContentProvider {
public final CallbackHelper addCallback = new CallbackHelper();
......@@ -180,12 +107,10 @@ public class StubbedProvider implements BackendProvider {
private static final long ONE_GIGABYTE = 1024L * 1024L * 1024L;
private final Handler mHandler;
private final StubbedDownloadDelegate mDownloadDelegate;
private final StubbedOfflineContentProvider mOfflineContentProvider;
public StubbedProvider() {
mHandler = new Handler(Looper.getMainLooper());
mDownloadDelegate = new StubbedDownloadDelegate();
mOfflineContentProvider = new StubbedOfflineContentProvider();
}
......@@ -235,5 +160,4 @@ public class StubbedProvider implements BackendProvider {
private static long dateToEpoch(String dateStr) throws Exception {
return new SimpleDateFormat("yyyyMMdd HH:mm", Locale.getDefault()).parse(dateStr).getTime();
}
}
# 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.
import("//build/config/android/rules.gni")
android_library("java") {
java_files =
[ "java/src/org/chromium/chrome/browser/download/DownloadFilter.java" ]
deps = [
"//base:base_java",
]
}
......@@ -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.ui;
package org.chromium.chrome.browser.download;
import android.text.TextUtils;
......
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