chromium/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotifier.java

// Copyright 2015 The Chromium Authors
// 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;

import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.PendingState;

/** Class for reporting the status of a download. */
public interface DownloadNotifier {
    /**
     * Add a download successful notification.
     * @param downloadInfo info about the successful download.
     * @param systemDownloadId The system download ID assigned to the download.
     * @param canResolve Whether the download can be resolved to any activity.
     * @param isSupportedMimeType Whether the MIME type can be viewed inside browser.
     */
    void notifyDownloadSuccessful(
            DownloadInfo downloadInfo,
            long systemDownloadId,
            boolean canResolve,
            boolean isSupportedMimeType);

    /**
     * Add a download failed notification.
     * @param downloadInfo info about the failed download.
     */
    void notifyDownloadFailed(DownloadInfo downloadInfo);

    /**
     * Update the download progress notification.
     * @param downloadInfo info about in progress download.
     * @param startTimeInMillis the startTime of the download, measured in milliseconds, between the
     *        current time and midnight, January 1, 1970 UTC. Useful to keep progress notifications
     *        sorted by time.
     * @param canDownloadWhileMetered Wheter the download can take place on metered network.
     */
    void notifyDownloadProgress(
            DownloadInfo downloadInfo, long startTimeInMillis, boolean mCanDownloadWhileMetered);

    /**
     * Update the download notification to paused.
     * @param downloadInfo info about in progress download.
     */
    void notifyDownloadPaused(DownloadInfo downloadInfo);

    /**
     * Update the download notification to paused.
     * @param downloadInfo info about in progress download.
     * @param isAutoResumable Whether the download can be auto resumed when network is available.
     * @param pendingState Reason download is pending
     */
    void notifyDownloadInterrupted(
            DownloadInfo downloadInfo, boolean isAutoResumable, @PendingState int pendingState);

    /**
     * Cancel the notification for a download.
     * @param id The {@link ContentId} of the download.
     */
    void notifyDownloadCanceled(ContentId id);

    /**
     * Remove the download notification for an already finished download.
     * @param notificationId The id of the download notification.
     * @param downloadInfo   Info about the removed download.
     */
    void removeDownloadNotification(int notificationId, DownloadInfo downloadInfo);
}