Add support for showing auto-delete timers in minutes

This commit is contained in:
Torsten Grote
2021-02-22 09:57:18 -03:00
parent ee6664ce9d
commit b24f2a1818
3 changed files with 77 additions and 7 deletions

View File

@@ -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);
}
}

View File

@@ -174,6 +174,10 @@
<string name="auto_delete_msg_you_disabled">Your messages will not disappear. %1$s</string>
<!-- The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more." -->
<string name="auto_delete_msg_contact_enabled">%1$s\'s messages will disappear after %2$s. %3$s</string>
<plurals name="duration_minutes">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="duration_hours">
<item quantity="one">%d hour</item>
<item quantity="other">%d hours</item>

View File

@@ -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();