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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.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/DownloadUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
index dd0cf29ad4d2c7de933852f00521b5b0d36ddb5f..fa24c4ffa14d52293ee6bea2115b1027598e5356 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
@@ -52,6 +52,8 @@ import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.components.feature_engagement_tracker.EventConstants;
import org.chromium.components.feature_engagement_tracker.FeatureEngagementTracker;
+import org.chromium.components.offline_items_collection.OfflineItem.Progress;
+import org.chromium.components.offline_items_collection.OfflineItemProgressUnit;
import org.chromium.content_public.browser.DownloadState;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.ui.base.DeviceFormFactor;
@@ -66,6 +68,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
+import java.util.concurrent.TimeUnit;
/**
* A class containing some utility static methods.
@@ -93,6 +96,13 @@ public class DownloadUtils {
private static final long BYTES_PER_MEGABYTE = 1024 * 1024;
private static final long BYTES_PER_GIGABYTE = 1024 * 1024 * 1024;
+ @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);
+
@VisibleForTesting
static final String ELLIPSIS = "\u2026";
@@ -581,13 +591,97 @@ public class DownloadUtils {
}
/**
- * Determine what String to show for a given download.
+ * Creates a string that shows the time left or number of files left.
+ * @param context The application context.
+ * @param progress The download progress.
+ * @param timeRemainingInMillis The remaining time in milli seconds.
+ * @return Formatted string representing the time left or the number of files left.
+ */
+ public static String getTimeOrFilesLeftString(
+ Context context, Progress progress, long timeRemainingInMillis) {
+ if (progress.unit == OfflineItemProgressUnit.FILES) {
+ return formatRemainingFiles(context, progress);
+ } else {
+ return formatRemainingTime(context, timeRemainingInMillis);
+ }
+ }
+
+ /**
+ * Creates a string that represents the number of files left to be downloaded.
+ * @param progress Current download progress.
+ * @return String representing the number of files left.
+ */
+ public static String formatRemainingFiles(Context context, Progress progress) {
+ int filesLeft = (int) (progress.max - progress.value);
+ if (filesLeft == 1) {
+ return context.getResources().getString(R.string.one_file_left);
+ } else {
+ return context.getResources().getString(R.string.files_left, filesLeft);
+ }
+ }
+
+ /**
+ * 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.
+ */
+ @VisibleForTesting
+ 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);
+ }
+ }
+
+ /**
+ * Determine what String to show for a given download in download home.
* @param item Download to check the status of.
- * @return ID of a String resource to use, or 0 if the status couldn't be determined.
+ * @return String representing the current download status.
*/
public static String getStatusString(DownloadItem item) {
Context context = ContextUtils.getApplicationContext();
DownloadInfo info = item.getDownloadInfo();
+ Progress progress = info.getProgress();
int state = info.state();
if (state == DownloadState.COMPLETE) {
@@ -615,9 +709,8 @@ public class DownloadUtils {
long bytes = info.getBytesReceived();
return DownloadUtils.getStringForDownloadedBytes(context, bytes);
} else {
- // Count down the time.
- long msRemaining = info.getTimeRemainingInMillis();
- return DownloadNotificationService.formatRemainingTime(context, msRemaining);
+ // Count down the time or number of files.
+ return getTimeOrFilesLeftString(context, progress, info.getTimeRemainingInMillis());
}
}

Powered by Google App Engine
This is Rietveld 408576698