diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
index 26b1e3fe8..c8b223ab1 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
@@ -171,7 +171,7 @@ public class UiUtils {
/**
* Returns the given duration in a human-friendly format. For example,
* "7 days" or "1 hour". Returns only the largest meaningful unit of time,
- * from days up to hours.
+ * from days up to minutes.
*/
public static String formatDuration(Context ctx, long millis) {
Resources r = ctx.getResources();
@@ -182,11 +182,20 @@ public class UiUtils {
r.getQuantityString(R.plurals.duration_days, days, days);
if (rest < HOUR_IN_MILLIS / 2) return dayStr;
else return dayStr + " " + formatDuration(ctx, rest);
+ } else if (millis >= HOUR_IN_MILLIS) {
+ int hours = (int) (millis / HOUR_IN_MILLIS);
+ int rest = (int) (millis % HOUR_IN_MILLIS);
+ String hourStr =
+ r.getQuantityString(R.plurals.duration_hours, hours, hours);
+ if (rest < MINUTE_IN_MILLIS / 2) return hourStr;
+ else return hourStr + " " + formatDuration(ctx, rest);
} else {
- int hours = (int) ((millis + HOUR_IN_MILLIS / 2) / HOUR_IN_MILLIS);
- // anything less than one hour is shown as one hour
- if (hours < 1) hours = 1;
- return r.getQuantityString(R.plurals.duration_hours, hours, hours);
+ int minutes =
+ (int) ((millis + MINUTE_IN_MILLIS / 2) / MINUTE_IN_MILLIS);
+ // anything less than one minute is shown as one minute
+ if (minutes < 1) minutes = 1;
+ return r.getQuantityString(R.plurals.duration_minutes, minutes,
+ minutes);
}
}
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index fea7e7af0..698320fc5 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -174,6 +174,10 @@
Your messages will not disappear. %1$s
%1$s\'s messages will disappear after %2$s. %3$s
+
+ - %d minute
+ - %d minutes
+
- %d hour
- %d hours
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/util/UiUtilsFormatDurationTest.java b/briar-android/src/test/java/org/briarproject/briar/android/util/UiUtilsFormatDurationTest.java
index eb056cf56..7d282aae9 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/util/UiUtilsFormatDurationTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/util/UiUtilsFormatDurationTest.java
@@ -12,12 +12,14 @@ import org.junit.Test;
import static java.util.concurrent.TimeUnit.DAYS;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MINUTES;
+import static java.util.concurrent.TimeUnit.SECONDS;
import static org.briarproject.briar.android.util.UiUtils.formatDuration;
public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
private final Context ctx;
private final Resources r;
+ private final int strMinutes = R.plurals.duration_minutes;
private final int strHours = R.plurals.duration_hours;
private final int strDays = R.plurals.duration_days;
@@ -27,6 +29,12 @@ public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
r = context.mock(Resources.class);
}
+ @Test
+ public void testOneMinute() {
+ expectMinuteString(1);
+ formatDuration(ctx, MINUTES.toMillis(1));
+ }
+
@Test
public void testOneHour() {
expectHourString(1);
@@ -39,12 +47,44 @@ public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
formatDuration(ctx, DAYS.toMillis(1));
}
+ @Test
+ public void test10Seconds() {
+ // capped to 1min
+ expectMinuteString(1);
+ formatDuration(ctx, SECONDS.toMillis(10));
+ }
+
+ @Test
+ public void test100Seconds() {
+ expectMinuteString(2);
+ formatDuration(ctx, SECONDS.toMillis(100));
+ }
+
+ @Test
+ public void test2Minutes() {
+ expectMinuteString(2);
+ formatDuration(ctx, MINUTES.toMillis(2));
+ }
+
@Test
public void test10Minutes() {
- expectHourString(1);
+ expectMinuteString(10);
formatDuration(ctx, MINUTES.toMillis(10));
}
+ @Test
+ public void test130Minutes() {
+ expectHourString(2);
+ expectMinuteString(10);
+ formatDuration(ctx, MINUTES.toMillis(130));
+ }
+
+ @Test
+ public void test13Hours() {
+ expectHourString(13);
+ formatDuration(ctx, HOURS.toMillis(13));
+ }
+
@Test
public void testSevenDays() {
expectDayString(7);
@@ -67,7 +107,7 @@ public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
@Test
public void testSevenDays40Minutes() {
expectDayString(7);
- expectHourString(1);
+ expectMinuteString(40);
formatDuration(ctx, DAYS.toMillis(7) + MINUTES.toMillis(40));
}
@@ -92,6 +132,23 @@ public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
formatDuration(ctx, DAYS.toMillis(2) + HOURS.toMillis(13));
}
+ @Test
+ public void test7Days23Hours55Minutes() {
+ expectDayString(7);
+ expectHourString(23);
+ expectMinuteString(55);
+ formatDuration(ctx,
+ DAYS.toMillis(7) + HOURS.toMillis(23) + MINUTES.toMillis(55));
+ }
+
+ private void expectMinuteString(int minutes) {
+ context.checking(new Expectations() {{
+ oneOf(ctx).getResources();
+ will(returnValue(r));
+ oneOf(r).getQuantityString(strMinutes, minutes, minutes);
+ }});
+ }
+
private void expectHourString(int hours) {
context.checking(new Expectations() {{
oneOf(ctx).getResources();