Index: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java |
index e676700312eedc3b0a00b7a15d3fdf98b381d1c9..3c1c9c0c34aeae8e2ceddb1654a0b75a98f61fcc 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSnackbarController.java |
@@ -5,8 +5,8 @@ |
package org.chromium.chrome.browser.download; |
import android.app.Activity; |
+import android.app.NotificationManager; |
import android.content.Context; |
-import android.util.Pair; |
import org.chromium.base.ApplicationStatus; |
import org.chromium.chrome.R; |
@@ -18,9 +18,22 @@ import org.chromium.content.browser.DownloadInfo; |
* Class for displaying a snackbar when a download completes. |
*/ |
public class DownloadSnackbarController implements SnackbarManager.SnackbarController { |
+ public static final int INVALID_NOTIFICATION_ID = -1; |
private static final int SNACKBAR_DURATION_IN_MILLISECONDS = 5000; |
private final Context mContext; |
+ private static class ActionDataInfo { |
+ public final DownloadInfo downloadInfo; |
+ public final int notificationId; |
+ public final long systemDownloadId; |
+ |
+ ActionDataInfo(DownloadInfo downloadInfo, int notificationId, long systemDownloadId) { |
+ this.downloadInfo = downloadInfo; |
+ this.notificationId = notificationId; |
+ this.systemDownloadId = systemDownloadId; |
+ } |
+ } |
+ |
public DownloadSnackbarController(Context context) { |
mContext = context; |
} |
@@ -32,11 +45,15 @@ public class DownloadSnackbarController implements SnackbarManager.SnackbarContr |
DownloadManagerService.openDownloadsPage(mContext); |
return; |
} |
- Pair<DownloadInfo, Long> download = (Pair<DownloadInfo, Long>) actionData; |
+ ActionDataInfo download = (ActionDataInfo) actionData; |
DownloadManagerService manager = DownloadManagerService.getDownloadManagerService(mContext); |
- manager.openDownloadedContent(download.second); |
- manager.cancelNotification( |
- download.first.getNotificationId(), download.first.getDownloadGuid()); |
+ manager.openDownloadedContent(download.systemDownloadId); |
+ if (download.notificationId != INVALID_NOTIFICATION_ID) { |
+ NotificationManager notificationManager = |
+ (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); |
+ notificationManager.cancel( |
+ DownloadNotificationService.NOTIFICATION_NAMESPACE, download.notificationId); |
+ } |
} |
@Override |
@@ -47,24 +64,25 @@ public class DownloadSnackbarController implements SnackbarManager.SnackbarContr |
* Called to display the download succeeded snackbar. |
* |
* @param downloadInfo Info of the download. |
+ * @param notificationId Notification Id of the successful download. |
* @param downloadId Id of the download from Android DownloadManager. |
* @param canBeResolved Whether the download can be resolved to any activity. |
*/ |
public void onDownloadSucceeded( |
- DownloadInfo downloadInfo, final long downloadId, boolean canBeResolved) { |
+ DownloadInfo downloadInfo, int notificationId, long downloadId, boolean canBeResolved) { |
if (getSnackbarManager() == null) return; |
Snackbar snackbar = Snackbar.make( |
mContext.getString(R.string.download_succeeded_message, downloadInfo.getFileName()), |
this, Snackbar.TYPE_NOTIFICATION); |
// TODO(qinmin): Coalesce snackbars if multiple downloads finish at the same time. |
snackbar.setDuration(SNACKBAR_DURATION_IN_MILLISECONDS).setSingleLine(false); |
- Pair<DownloadInfo, Long> actionData = null; |
+ ActionDataInfo info = null; |
if (canBeResolved) { |
- actionData = Pair.create(downloadInfo, downloadId); |
+ info = new ActionDataInfo(downloadInfo, notificationId, downloadId); |
} |
// Show downloads app if the download cannot be resolved to any activity. |
snackbar.setAction( |
- mContext.getString(R.string.open_downloaded_label), actionData); |
+ mContext.getString(R.string.open_downloaded_label), info); |
getSnackbarManager().showSnackbar(snackbar); |
} |