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") { ...@@ -278,6 +278,7 @@ android_library("chrome_java") {
"//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java", "//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java",
"//chrome/browser/android/thin_webview:factory_java", "//chrome/browser/android/thin_webview:factory_java",
"//chrome/browser/android/thin_webview:java", "//chrome/browser/android/thin_webview:java",
"//chrome/browser/download/android:java",
"//chrome/browser/image_fetcher:java", "//chrome/browser/image_fetcher:java",
"//chrome/browser/ui/android/widget:java", "//chrome/browser/ui/android/widget:java",
"//chrome/browser/util/android:java", "//chrome/browser/util/android:java",
......
...@@ -614,8 +614,6 @@ chrome_java_sources = [ ...@@ -614,8 +614,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUiFactory.java", "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/DownloadBackgroundTask.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadTaskScheduler.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/engagement/SiteEngagementService.java",
"java/src/org/chromium/chrome/browser/explore_sites/CategoryCardAdapter.java", "java/src/org/chromium/chrome/browser/explore_sites/CategoryCardAdapter.java",
"java/src/org/chromium/chrome/browser/explore_sites/CategoryCardViewHolderFactory.java", "java/src/org/chromium/chrome/browser/explore_sites/CategoryCardViewHolderFactory.java",
......
...@@ -3,6 +3,7 @@ include_rules = [ ...@@ -3,6 +3,7 @@ include_rules = [
"+chrome/browser/android/thin_webview/java", "+chrome/browser/android/thin_webview/java",
"+chrome/browser/ui/android/widget", "+chrome/browser/ui/android/widget",
"+chrome/browser/download/android/java",
"+chrome/browser/util/android/java", "+chrome/browser/util/android/java",
"+chrome/lib/lifecycle/public", "+chrome/lib/lifecycle/public",
"+chrome/lib/image_fetcher/public", "+chrome/lib/image_fetcher/public",
......
...@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download; ...@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import org.chromium.base.annotations.CalledByNative; 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.DownloadState;
import org.chromium.components.download.ResumeMode; import org.chromium.components.download.ResumeMode;
import org.chromium.components.offline_items_collection.ContentId; import org.chromium.components.offline_items_collection.ContentId;
......
...@@ -41,7 +41,6 @@ import org.chromium.chrome.browser.download.DownloadManagerBridge.DownloadEnqueu ...@@ -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.UmaBackgroundDownload;
import org.chromium.chrome.browser.download.DownloadNotificationUmaHelper.UmaDownloadResumption; import org.chromium.chrome.browser.download.DownloadNotificationUmaHelper.UmaDownloadResumption;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory; 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.externalnav.ExternalNavigationDelegateImpl;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.media.MediaViewerUtils; import org.chromium.chrome.browser.media.MediaViewerUtils;
...@@ -87,10 +86,9 @@ import java.util.concurrent.RejectedExecutionException; ...@@ -87,10 +86,9 @@ import java.util.concurrent.RejectedExecutionException;
* handles all Android DownloadManager interactions. And DownloadManagerService should not know * handles all Android DownloadManager interactions. And DownloadManagerService should not know
* download Id issued by Android DownloadManager. * download Id issued by Android DownloadManager.
*/ */
public class DownloadManagerService public class DownloadManagerService implements DownloadController.DownloadNotificationService,
implements DownloadController.DownloadNotificationService, NetworkChangeNotifierAutoDetect.Observer,
NetworkChangeNotifierAutoDetect.Observer, DownloadServiceDelegate, DownloadServiceDelegate, ProfileManager.Observer {
BackendProvider.DownloadDelegate, ProfileManager.Observer {
// Download status. // Download status.
@IntDef({DownloadStatus.IN_PROGRESS, DownloadStatus.COMPLETE, DownloadStatus.FAILED, @IntDef({DownloadStatus.IN_PROGRESS, DownloadStatus.COMPLETE, DownloadStatus.FAILED,
DownloadStatus.CANCELLED, DownloadStatus.INTERRUPTED}) DownloadStatus.CANCELLED, DownloadStatus.INTERRUPTED})
...@@ -1174,7 +1172,6 @@ public class DownloadManagerService ...@@ -1174,7 +1172,6 @@ public class DownloadManagerService
* @param isOffTheRecord Whether the download is off the record. * @param isOffTheRecord Whether the download is off the record.
* @param externallyRemoved If the file is externally removed by other applications. * @param externallyRemoved If the file is externally removed by other applications.
*/ */
@Override
public void removeDownload( public void removeDownload(
final String downloadGuid, boolean isOffTheRecord, boolean externallyRemoved) { final String downloadGuid, boolean isOffTheRecord, boolean externallyRemoved) {
mHandler.post(() -> { mHandler.post(() -> {
...@@ -1196,7 +1193,6 @@ public class DownloadManagerService ...@@ -1196,7 +1193,6 @@ public class DownloadManagerService
* @param mimeType MIME type of the file. * @param mimeType MIME type of the file.
* @return Whether the download is openable by the browser. * @return Whether the download is openable by the browser.
*/ */
@Override
public boolean isDownloadOpenableInBrowser(boolean isOffTheRecord, String mimeType) { public boolean isDownloadOpenableInBrowser(boolean isOffTheRecord, String mimeType) {
// TODO(qinmin): for audio and video, check if the codec is supported by Chrome. // TODO(qinmin): for audio and video, check if the codec is supported by Chrome.
return isSupportedMimeType(mimeType); return isSupportedMimeType(mimeType);
...@@ -1598,14 +1594,12 @@ public class DownloadManagerService ...@@ -1598,14 +1594,12 @@ public class DownloadManagerService
} }
/** Adds a new DownloadObserver to the list. */ /** Adds a new DownloadObserver to the list. */
@Override
public void addDownloadObserver(DownloadObserver observer) { public void addDownloadObserver(DownloadObserver observer) {
mDownloadObservers.addObserver(observer); mDownloadObservers.addObserver(observer);
DownloadSharedPreferenceHelper.getInstance().addObserver(observer); DownloadSharedPreferenceHelper.getInstance().addObserver(observer);
} }
/** Removes a DownloadObserver from the list. */ /** Removes a DownloadObserver from the list. */
@Override
public void removeDownloadObserver(DownloadObserver observer) { public void removeDownloadObserver(DownloadObserver observer) {
mDownloadObservers.removeObserver(observer); mDownloadObservers.removeObserver(observer);
DownloadSharedPreferenceHelper.getInstance().removeObserver(observer); DownloadSharedPreferenceHelper.getInstance().removeObserver(observer);
...@@ -1618,7 +1612,6 @@ public class DownloadManagerService ...@@ -1618,7 +1612,6 @@ public class DownloadManagerService
* *
* @param isOffTheRecord Whether or not to get downloads for the off the record profile. * @param isOffTheRecord Whether or not to get downloads for the off the record profile.
*/ */
@Override
public void getAllDownloads(boolean isOffTheRecord) { public void getAllDownloads(boolean isOffTheRecord) {
DownloadManagerServiceJni.get().getAllDownloads( DownloadManagerServiceJni.get().getAllDownloads(
getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord); getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord);
...@@ -1628,7 +1621,6 @@ public class DownloadManagerService ...@@ -1628,7 +1621,6 @@ public class DownloadManagerService
* Fires an Intent that alerts the DownloadNotificationService that an action must be taken * Fires an Intent that alerts the DownloadNotificationService that an action must be taken
* for a particular item. * for a particular item.
*/ */
@Override
public void broadcastDownloadAction(DownloadItem downloadItem, String action) { public void broadcastDownloadAction(DownloadItem downloadItem, String action) {
Context appContext = ContextUtils.getApplicationContext(); Context appContext = ContextUtils.getApplicationContext();
Intent intent = DownloadNotificationFactory.buildActionIntent(appContext, action, Intent intent = DownloadNotificationFactory.buildActionIntent(appContext, action,
...@@ -1638,7 +1630,6 @@ public class DownloadManagerService ...@@ -1638,7 +1630,6 @@ public class DownloadManagerService
appContext.startService(intent); appContext.startService(intent);
} }
@Override
public void renameDownload(ContentId id, String name, public void renameDownload(ContentId id, String name,
Callback<Integer /*RenameResult*/> callback, boolean isOffTheRecord) { Callback<Integer /*RenameResult*/> callback, boolean isOffTheRecord) {
DownloadManagerServiceJni.get().renameDownload(getNativeDownloadManagerService(), DownloadManagerServiceJni.get().renameDownload(getNativeDownloadManagerService(),
...@@ -1674,7 +1665,6 @@ public class DownloadManagerService ...@@ -1674,7 +1665,6 @@ public class DownloadManagerService
* Checks if the files associated with any downloads have been removed by an external action. * 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. * @param isOffTheRecord Whether or not to check downloads for the off the record profile.
*/ */
@Override
public void checkForExternallyRemovedDownloads(boolean isOffTheRecord) { public void checkForExternallyRemovedDownloads(boolean isOffTheRecord) {
DownloadManagerServiceJni.get().checkForExternallyRemovedDownloads( DownloadManagerServiceJni.get().checkForExternallyRemovedDownloads(
getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord); getNativeDownloadManagerService(), DownloadManagerService.this, isOffTheRecord);
...@@ -2059,7 +2049,6 @@ public class DownloadManagerService ...@@ -2059,7 +2049,6 @@ public class DownloadManagerService
* @param downloadGuid Download GUID. * @param downloadGuid Download GUID.
* @param isOffTheRecord Whether the download is off the record. * @param isOffTheRecord Whether the download is off the record.
*/ */
@Override
public void updateLastAccessTime(String downloadGuid, boolean isOffTheRecord) { public void updateLastAccessTime(String downloadGuid, boolean isOffTheRecord) {
if (TextUtils.isEmpty(downloadGuid)) return; if (TextUtils.isEmpty(downloadGuid)) return;
......
...@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download; ...@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.download;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
import org.chromium.chrome.browser.init.ChromeBrowserInitializer; import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
import java.util.ArrayList; import java.util.ArrayList;
......
...@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.ChromeFeatureList; ...@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory; 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.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.media.MediaViewerUtils; import org.chromium.chrome.browser.media.MediaViewerUtils;
import org.chromium.chrome.browser.offlinepages.DownloadUiActionFlags; import org.chromium.chrome.browser.offlinepages.DownloadUiActionFlags;
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
package org.chromium.chrome.browser.download.home.metrics; package org.chromium.chrome.browser.download.home.metrics;
import org.chromium.base.metrics.RecordHistogram; 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.FilterCoordinator;
import org.chromium.chrome.browser.download.home.filter.Filters.FilterType; 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. * 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 @@ ...@@ -5,15 +5,12 @@
package org.chromium.chrome.browser.download.ui; package org.chromium.chrome.browser.download.ui;
import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.test.util.CallbackHelper; 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.ContentId;
import org.chromium.components.offline_items_collection.LaunchLocation; import org.chromium.components.offline_items_collection.LaunchLocation;
import org.chromium.components.offline_items_collection.LegacyHelpers; import org.chromium.components.offline_items_collection.LegacyHelpers;
...@@ -27,80 +24,10 @@ import org.chromium.components.offline_items_collection.VisualsCallback; ...@@ -27,80 +24,10 @@ import org.chromium.components.offline_items_collection.VisualsCallback;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Locale; import java.util.Locale;
/** Stubs out backends used by the Download Home UI. */ /** Stubs out backends used by the Download Home UI. */
public class StubbedProvider implements BackendProvider { public class StubbedProvider {
/** 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) {}
}
/** Stubs out the OfflineContentProvider. */ /** Stubs out the OfflineContentProvider. */
public class StubbedOfflineContentProvider implements OfflineContentProvider { public class StubbedOfflineContentProvider implements OfflineContentProvider {
public final CallbackHelper addCallback = new CallbackHelper(); public final CallbackHelper addCallback = new CallbackHelper();
...@@ -180,12 +107,10 @@ public class StubbedProvider implements BackendProvider { ...@@ -180,12 +107,10 @@ public class StubbedProvider implements BackendProvider {
private static final long ONE_GIGABYTE = 1024L * 1024L * 1024L; private static final long ONE_GIGABYTE = 1024L * 1024L * 1024L;
private final Handler mHandler; private final Handler mHandler;
private final StubbedDownloadDelegate mDownloadDelegate;
private final StubbedOfflineContentProvider mOfflineContentProvider; private final StubbedOfflineContentProvider mOfflineContentProvider;
public StubbedProvider() { public StubbedProvider() {
mHandler = new Handler(Looper.getMainLooper()); mHandler = new Handler(Looper.getMainLooper());
mDownloadDelegate = new StubbedDownloadDelegate();
mOfflineContentProvider = new StubbedOfflineContentProvider(); mOfflineContentProvider = new StubbedOfflineContentProvider();
} }
...@@ -235,5 +160,4 @@ public class StubbedProvider implements BackendProvider { ...@@ -235,5 +160,4 @@ public class StubbedProvider implements BackendProvider {
private static long dateToEpoch(String dateStr) throws Exception { private static long dateToEpoch(String dateStr) throws Exception {
return new SimpleDateFormat("yyyyMMdd HH:mm", Locale.getDefault()).parse(dateStr).getTime(); 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 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.chrome.browser.download.ui; package org.chromium.chrome.browser.download;
import android.text.TextUtils; 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