Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1000)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java

Issue 2861863002: offline_items_collection : Added helper class to determine progress (Closed)
Patch Set: comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java
index eb4121a93189a143bcbf3b105af1f064b2b12a28..14bde6da9602449ea016cfbf96144e3011c9c6ca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadNotificationService.java
@@ -56,11 +56,11 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.LegacyHelpers;
+import org.chromium.components.offline_items_collection.OfflineItem.Progress;
import org.chromium.content.browser.BrowserStartupController;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.TimeUnit;
/**
* Service responsible for creating and updating download notifications even after
@@ -111,9 +111,6 @@ public class DownloadNotificationService extends Service {
"Chrome.NotificationBundleIconIdExtra";
private static final int STARTING_NOTIFICATION_ID = 1000000;
private static final int MAX_RESUMPTION_ATTEMPT_LEFT = 5;
- @VisibleForTesting static final long SECONDS_PER_MINUTE = TimeUnit.MINUTES.toSeconds(1);
- @VisibleForTesting static final long SECONDS_PER_HOUR = TimeUnit.HOURS.toSeconds(1);
- @VisibleForTesting static final long SECONDS_PER_DAY = TimeUnit.DAYS.toSeconds(1);
private static final String KEY_AUTO_RESUMPTION_ATTEMPT_LEFT = "ResumptionAttemptLeft";
private static final String KEY_NEXT_DOWNLOAD_NOTIFICATION_ID = "NextDownloadNotificationId";
@@ -738,8 +735,7 @@ public class DownloadNotificationService extends Service {
* Adds or updates an in-progress download notification.
* @param id The {@link ContentId} of the download.
* @param fileName File name of the download.
- * @param percentage Percentage completed. Value should be between 0 to 100 if the
- * percentage can be determined, or -1 if it is unknown.
+ * @param progress The current download progress.
* @param bytesReceived Total number of bytes received.
* @param timeRemainingInMillis Remaining download time in milliseconds.
* @param startTime Time when download started.
@@ -750,10 +746,10 @@ public class DownloadNotificationService extends Service {
* @param icon A {@link Bitmap} to be used as the large icon for display.
*/
@VisibleForTesting
- public void notifyDownloadProgress(ContentId id, String fileName, int percentage,
+ public void notifyDownloadProgress(ContentId id, String fileName, Progress progress,
long bytesReceived, long timeRemainingInMillis, long startTime, boolean isOffTheRecord,
boolean canDownloadWhileMetered, boolean isTransient, Bitmap icon) {
- updateActiveDownloadNotification(id, fileName, percentage, bytesReceived,
+ updateActiveDownloadNotification(id, fileName, progress, bytesReceived,
timeRemainingInMillis, startTime, isOffTheRecord, canDownloadWhileMetered, false,
isTransient, icon);
}
@@ -770,9 +766,8 @@ public class DownloadNotificationService extends Service {
*/
private void notifyDownloadPending(ContentId id, String fileName, boolean isOffTheRecord,
boolean canDownloadWhileMetered, boolean isTransient, Bitmap icon) {
- updateActiveDownloadNotification(id, fileName,
- DownloadItem.INDETERMINATE_DOWNLOAD_PERCENTAGE, 0, 0, 0, isOffTheRecord,
- canDownloadWhileMetered, true, isTransient, icon);
+ updateActiveDownloadNotification(id, fileName, Progress.createIndeterminateProgress(), 0, 0,
+ 0, isOffTheRecord, canDownloadWhileMetered, true, isTransient, icon);
}
/**
@@ -780,8 +775,7 @@ public class DownloadNotificationService extends Service {
* progress or pending.
* @param id The {@link ContentId} of the download.
* @param fileName File name of the download.
- * @param percentage Percentage completed. Value should be between 0 to 100 if the
- * percentage can be determined, or -1 if it is unknown.
+ * @param progress The current download progress.
* @param bytesReceived Total number of bytes received.
* @param timeRemainingInMillis Remaining download time in milliseconds or -1 if it is
* unknown.
@@ -793,23 +787,21 @@ public class DownloadNotificationService extends Service {
* downloads home.
* @param icon A {@link Bitmap} to be used as the large icon for display.
*/
- private void updateActiveDownloadNotification(ContentId id, String fileName, int percentage,
+ private void updateActiveDownloadNotification(ContentId id, String fileName, Progress progress,
long bytesReceived, long timeRemainingInMillis, long startTime, boolean isOffTheRecord,
boolean canDownloadWhileMetered, boolean isDownloadPending, boolean isTransient,
Bitmap icon) {
- boolean indeterminate =
- (percentage == DownloadItem.INDETERMINATE_DOWNLOAD_PERCENTAGE) || isDownloadPending;
+ boolean indeterminate = (progress.isIndeterminate() || isDownloadPending);
String contentText = null;
if (isDownloadPending) {
contentText = mContext.getResources().getString(R.string.download_notification_pending);
- } else if (indeterminate) {
+ } else if (indeterminate || timeRemainingInMillis < 0) {
// TODO(dimich): Enable the byte count back in M59. See bug 704049 for more info and
// details of what was temporarily reverted (for M58).
contentText = mContext.getResources().getString(R.string.download_started);
} else {
- contentText = timeRemainingInMillis < 0
- ? mContext.getResources().getString(R.string.download_started)
- : formatRemainingTime(mContext, timeRemainingInMillis);
+ contentText = DownloadUtils.getTimeOrFilesLeftString(
+ mContext, progress, timeRemainingInMillis);
}
int resId = isDownloadPending ? R.drawable.ic_download_pending
: android.R.drawable.stat_sys_download;
@@ -819,11 +811,11 @@ public class DownloadNotificationService extends Service {
// Avoid animations while the download isn't progressing.
if (!isDownloadPending) {
- builder.setProgress(100, percentage, indeterminate);
+ builder.setProgress(100, indeterminate ? -1 : progress.getPercentage(), indeterminate);
}
if (!indeterminate && !LegacyHelpers.isLegacyOfflinePage(id)) {
- String percentText = DownloadUtils.getPercentageString(percentage);
+ String percentText = DownloadUtils.getPercentageString(progress.getPercentage());
if (Build.VERSION.CODENAME.equals("N")
|| Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
builder.setSubText(percentText);
@@ -1423,56 +1415,4 @@ public class DownloadNotificationService extends Service {
editor.apply();
return notificationId;
}
-
- /**
- * Format remaining time for the given millis, in the following format:
- * 5 hours; will include 1 unit, can go down to seconds precision.
- * This is similar to what android.java.text.Formatter.formatShortElapsedTime() does. Don't use
- * ui::TimeFormat::Simple() as it is very expensive.
- *
- * @param context the application context.
- * @param millis the remaining time in milli seconds.
- * @return the formatted remaining time.
- */
- public static String formatRemainingTime(Context context, long millis) {
- long secondsLong = millis / 1000;
-
- int days = 0;
- int hours = 0;
- int minutes = 0;
- if (secondsLong >= SECONDS_PER_DAY) {
- days = (int) (secondsLong / SECONDS_PER_DAY);
- secondsLong -= days * SECONDS_PER_DAY;
- }
- if (secondsLong >= SECONDS_PER_HOUR) {
- hours = (int) (secondsLong / SECONDS_PER_HOUR);
- secondsLong -= hours * SECONDS_PER_HOUR;
- }
- if (secondsLong >= SECONDS_PER_MINUTE) {
- minutes = (int) (secondsLong / SECONDS_PER_MINUTE);
- secondsLong -= minutes * SECONDS_PER_MINUTE;
- }
- int seconds = (int) secondsLong;
-
- if (days >= 2) {
- days += (hours + 12) / 24;
- return context.getString(R.string.remaining_duration_days, days);
- } else if (days > 0) {
- return context.getString(R.string.remaining_duration_one_day);
- } else if (hours >= 2) {
- hours += (minutes + 30) / 60;
- return context.getString(R.string.remaining_duration_hours, hours);
- } else if (hours > 0) {
- return context.getString(R.string.remaining_duration_one_hour);
- } else if (minutes >= 2) {
- minutes += (seconds + 30) / 60;
- return context.getString(R.string.remaining_duration_minutes, minutes);
- } else if (minutes > 0) {
- return context.getString(R.string.remaining_duration_one_minute);
- } else if (seconds == 1) {
- return context.getString(R.string.remaining_duration_one_second);
- } else {
- return context.getString(R.string.remaining_duration_seconds, seconds);
- }
- }
}

Powered by Google App Engine
This is Rietveld 408576698