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

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: findbugs 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 f9313f62523eb1b3699c40dd5ecfda17117d6d67..8573e3ce53b2aebd4a66b9d68b4584af2d674ef1 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
@@ -51,6 +51,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;
@@ -65,6 +67,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_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";
/**
@@ -575,13 +585,97 @@ public class DownloadUtils {
}
/**
+ * 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(
David Trainor- moved to gerrit 2017/05/09 05:36:01 Should this just create the string completely and
shaktisahu 2017/05/09 19:04:31 Yes, the strings are different for notifications a
+ 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.
* @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) {
@@ -609,9 +703,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