mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-11 04:18:33 +00:00
Show expiration time exactly as set instead of rounding.
This commit is contained in:
parent
4482391574
commit
70977e5228
@ -1,14 +1,17 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.util.ExpirationUtil;
|
import org.thoughtcrime.securesms.util.ExpirationUtil;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
|
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
|
||||||
|
|
||||||
public class ExpirationDialog extends AlertDialog {
|
public class ExpirationDialog extends AlertDialog {
|
||||||
@ -36,7 +39,7 @@ public class ExpirationDialog extends AlertDialog {
|
|||||||
builder.setView(view);
|
builder.setView(view);
|
||||||
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||||
int selected = ((NumberPickerView)view.findViewById(R.id.expiration_number_picker)).getValue();
|
int selected = ((NumberPickerView)view.findViewById(R.id.expiration_number_picker)).getValue();
|
||||||
listener.onClick(context.getResources().getIntArray(R.array.expiration_times)[selected]);
|
listener.onClick(getExpirationTimes(context, currentExpiration)[selected]);
|
||||||
});
|
});
|
||||||
builder.setNegativeButton(android.R.string.cancel, null);
|
builder.setNegativeButton(android.R.string.cancel, null);
|
||||||
builder.show();
|
builder.show();
|
||||||
@ -47,7 +50,7 @@ public class ExpirationDialog extends AlertDialog {
|
|||||||
final View view = inflater.inflate(R.layout.expiration_dialog, null);
|
final View view = inflater.inflate(R.layout.expiration_dialog, null);
|
||||||
final NumberPickerView numberPickerView = view.findViewById(R.id.expiration_number_picker);
|
final NumberPickerView numberPickerView = view.findViewById(R.id.expiration_number_picker);
|
||||||
final TextView textView = view.findViewById(R.id.expiration_details);
|
final TextView textView = view.findViewById(R.id.expiration_details);
|
||||||
final int[] expirationTimes = context.getResources().getIntArray(R.array.expiration_times);
|
final int[] expirationTimes = getExpirationTimes(context, currentExpiration);
|
||||||
final String[] expirationDisplayValues = new String[expirationTimes.length];
|
final String[] expirationDisplayValues = new String[expirationTimes.length];
|
||||||
|
|
||||||
int selectedIndex = expirationTimes.length - 1;
|
int selectedIndex = expirationTimes.length - 1;
|
||||||
@ -80,6 +83,19 @@ public class ExpirationDialog extends AlertDialog {
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int[] getExpirationTimes(Context context, int currentExpiration) {
|
||||||
|
int[] expirationTimes = context.getResources().getIntArray(R.array.expiration_times);
|
||||||
|
int location = Arrays.binarySearch(expirationTimes, currentExpiration);
|
||||||
|
if (location < 0) {
|
||||||
|
int[] temp = Arrays.copyOf(expirationTimes, expirationTimes.length + 1);
|
||||||
|
temp[temp.length - 1] = currentExpiration;
|
||||||
|
Arrays.sort(temp);
|
||||||
|
expirationTimes = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return expirationTimes;
|
||||||
|
}
|
||||||
|
|
||||||
public interface OnClickListener {
|
public interface OnClickListener {
|
||||||
public void onClick(int expirationTime);
|
public void onClick(int expirationTime);
|
||||||
}
|
}
|
||||||
|
@ -2,49 +2,101 @@ package org.thoughtcrime.securesms.util;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.annotation.PluralsRes;
|
||||||
|
import androidx.annotation.StringRes;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class ExpirationUtil {
|
public final class ExpirationUtil {
|
||||||
|
|
||||||
|
private static final int SECONDS_IN_WEEK = (int) TimeUnit.DAYS.toSeconds(7);
|
||||||
|
private static final int SECONDS_IN_DAY = (int) TimeUnit.DAYS.toSeconds(1);
|
||||||
|
private static final int SECONDS_IN_HOUR = (int) TimeUnit.HOURS.toSeconds(1);
|
||||||
|
private static final int SECONDS_IN_MINUTE = (int) TimeUnit.MINUTES.toSeconds(1);
|
||||||
|
|
||||||
public static String getExpirationDisplayValue(Context context, int expirationTime) {
|
public static String getExpirationDisplayValue(Context context, int expirationTime) {
|
||||||
if (expirationTime <= 0) {
|
if (expirationTime <= 0) {
|
||||||
return context.getString(R.string.expiration_off);
|
return context.getString(R.string.expiration_off);
|
||||||
} else if (expirationTime < TimeUnit.MINUTES.toSeconds(1)) {
|
|
||||||
return context.getResources().getQuantityString(R.plurals.expiration_seconds, expirationTime, expirationTime);
|
|
||||||
} else if (expirationTime < TimeUnit.HOURS.toSeconds(1)) {
|
|
||||||
int minutes = expirationTime / (int)TimeUnit.MINUTES.toSeconds(1);
|
|
||||||
return context.getResources().getQuantityString(R.plurals.expiration_minutes, minutes, minutes);
|
|
||||||
} else if (expirationTime < TimeUnit.DAYS.toSeconds(1)) {
|
|
||||||
int hours = expirationTime / (int)TimeUnit.HOURS.toSeconds(1);
|
|
||||||
return context.getResources().getQuantityString(R.plurals.expiration_hours, hours, hours);
|
|
||||||
} else if (expirationTime < TimeUnit.DAYS.toSeconds(7)) {
|
|
||||||
int days = expirationTime / (int)TimeUnit.DAYS.toSeconds(1);
|
|
||||||
return context.getResources().getQuantityString(R.plurals.expiration_days, days, days);
|
|
||||||
} else {
|
|
||||||
int weeks = expirationTime / (int)TimeUnit.DAYS.toSeconds(7);
|
|
||||||
return context.getResources().getQuantityString(R.plurals.expiration_weeks, weeks, weeks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String displayValue = "";
|
||||||
|
|
||||||
|
int secondsRemaining = expirationTime;
|
||||||
|
|
||||||
|
int weeks = secondsRemaining / SECONDS_IN_WEEK;
|
||||||
|
displayValue = getDisplayValue(context, displayValue, R.plurals.expiration_weeks, weeks);
|
||||||
|
secondsRemaining = secondsRemaining - weeks * SECONDS_IN_WEEK;
|
||||||
|
|
||||||
|
int days = secondsRemaining / SECONDS_IN_DAY;
|
||||||
|
displayValue = getDisplayValue(context, displayValue, R.plurals.expiration_days, days);
|
||||||
|
secondsRemaining = secondsRemaining - days * SECONDS_IN_DAY;
|
||||||
|
|
||||||
|
int hours = secondsRemaining / SECONDS_IN_HOUR;
|
||||||
|
displayValue = getDisplayValue(context, displayValue, R.plurals.expiration_hours, hours);
|
||||||
|
secondsRemaining = secondsRemaining - hours * SECONDS_IN_HOUR;
|
||||||
|
|
||||||
|
int minutes = secondsRemaining / SECONDS_IN_MINUTE;
|
||||||
|
displayValue = getDisplayValue(context, displayValue, R.plurals.expiration_minutes, minutes);
|
||||||
|
secondsRemaining = secondsRemaining - minutes * SECONDS_IN_MINUTE;
|
||||||
|
|
||||||
|
displayValue = getDisplayValue(context, displayValue, R.plurals.expiration_seconds, secondsRemaining);
|
||||||
|
|
||||||
|
return displayValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getDisplayValue(Context context, String currentValue, @PluralsRes int plurals, int duration) {
|
||||||
|
if (duration > 0) {
|
||||||
|
String durationString = context.getResources().getQuantityString(plurals, duration, duration);
|
||||||
|
if (currentValue.isEmpty()) {
|
||||||
|
return durationString;
|
||||||
|
} else {
|
||||||
|
return context.getString(R.string.expiration_combined, currentValue, durationString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return currentValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getExpirationAbbreviatedDisplayValue(Context context, int expirationTime) {
|
public static String getExpirationAbbreviatedDisplayValue(Context context, int expirationTime) {
|
||||||
if (expirationTime < TimeUnit.MINUTES.toSeconds(1)) {
|
if (expirationTime <= 0) {
|
||||||
return context.getResources().getString(R.string.expiration_seconds_abbreviated, expirationTime);
|
return context.getString(R.string.expiration_off);
|
||||||
} else if (expirationTime < TimeUnit.HOURS.toSeconds(1)) {
|
|
||||||
int minutes = expirationTime / (int)TimeUnit.MINUTES.toSeconds(1);
|
|
||||||
return context.getResources().getString(R.string.expiration_minutes_abbreviated, minutes);
|
|
||||||
} else if (expirationTime < TimeUnit.DAYS.toSeconds(1)) {
|
|
||||||
int hours = expirationTime / (int)TimeUnit.HOURS.toSeconds(1);
|
|
||||||
return context.getResources().getString(R.string.expiration_hours_abbreviated, hours);
|
|
||||||
} else if (expirationTime < TimeUnit.DAYS.toSeconds(7)) {
|
|
||||||
int days = expirationTime / (int)TimeUnit.DAYS.toSeconds(1);
|
|
||||||
return context.getResources().getString(R.string.expiration_days_abbreviated, days);
|
|
||||||
} else {
|
|
||||||
int weeks = expirationTime / (int)TimeUnit.DAYS.toSeconds(7);
|
|
||||||
return context.getResources().getString(R.string.expiration_weeks_abbreviated, weeks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String displayValue = "";
|
||||||
|
|
||||||
|
int secondsRemaining = expirationTime;
|
||||||
|
|
||||||
|
int weeks = secondsRemaining / SECONDS_IN_WEEK;
|
||||||
|
displayValue = getAbbreviatedDisplayValue(context, displayValue, R.string.expiration_weeks_abbreviated, weeks);
|
||||||
|
secondsRemaining = secondsRemaining - weeks * SECONDS_IN_WEEK;
|
||||||
|
|
||||||
|
int days = secondsRemaining / SECONDS_IN_DAY;
|
||||||
|
displayValue = getAbbreviatedDisplayValue(context, displayValue, R.string.expiration_days_abbreviated, days);
|
||||||
|
secondsRemaining = secondsRemaining - days * SECONDS_IN_DAY;
|
||||||
|
|
||||||
|
int hours = secondsRemaining / SECONDS_IN_HOUR;
|
||||||
|
displayValue = getAbbreviatedDisplayValue(context, displayValue, R.string.expiration_hours_abbreviated, hours);
|
||||||
|
secondsRemaining = secondsRemaining - hours * SECONDS_IN_HOUR;
|
||||||
|
|
||||||
|
int minutes = secondsRemaining / SECONDS_IN_MINUTE;
|
||||||
|
displayValue = getAbbreviatedDisplayValue(context, displayValue, R.string.expiration_minutes_abbreviated, minutes);
|
||||||
|
secondsRemaining = secondsRemaining - minutes * SECONDS_IN_MINUTE;
|
||||||
|
|
||||||
|
displayValue = getAbbreviatedDisplayValue(context, displayValue, R.string.expiration_seconds_abbreviated, secondsRemaining);
|
||||||
|
|
||||||
|
return displayValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getAbbreviatedDisplayValue(Context context, String currentValue, @StringRes int abbreviation, int duration) {
|
||||||
|
if (duration > 0) {
|
||||||
|
String durationString = context.getString(abbreviation, duration);
|
||||||
|
if (currentValue.isEmpty()) {
|
||||||
|
return durationString;
|
||||||
|
} else {
|
||||||
|
return context.getString(R.string.expiration_combined, currentValue, durationString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return currentValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,32 +130,36 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/disappearing_messages_row"
|
android:id="@+id/disappearing_messages_row"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/group_manage_fragment_row_height"
|
android:layout_height="wrap_content"
|
||||||
android:background="?selectableItemBackground"
|
android:background="?selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:orientation="horizontal">
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/group_manage_fragment_row_height"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_weight="2"
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center_vertical|start"
|
android:gravity="center_vertical|start"
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
android:text="@string/ManageGroupActivity_disappearing_messages"
|
android:text="@string/ManageRecipientActivity_disappearing_messages"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/Signal.Text.Body" />
|
android:textAppearance="@style/Signal.Text.Body" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/disappearing_messages"
|
android:id="@+id/disappearing_messages"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:layout_weight="1"
|
||||||
android:minWidth="48dp"
|
android:minWidth="48dp"
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
|
android:gravity="end"
|
||||||
android:textAppearance="@style/Signal.Text.Body"
|
android:textAppearance="@style/Signal.Text.Body"
|
||||||
android:textColor="@color/ultramarine_text_button"
|
android:textColor="@color/ultramarine_text_button"
|
||||||
tools:text="Off" />
|
tools:text="Off" />
|
||||||
|
@ -226,17 +226,20 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/disappearing_messages_row"
|
android:id="@+id/disappearing_messages_row"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/group_manage_fragment_row_height"
|
android:layout_height="wrap_content"
|
||||||
android:background="?selectableItemBackground"
|
android:background="?selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:orientation="horizontal">
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/group_manage_fragment_row_height"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_weight="2"
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center_vertical|start"
|
android:gravity="center_vertical|start"
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
@ -246,12 +249,13 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/disappearing_messages"
|
android:id="@+id/disappearing_messages"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:layout_weight="1"
|
||||||
android:minWidth="48dp"
|
android:minWidth="48dp"
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
||||||
|
android:gravity="end"
|
||||||
android:textAppearance="@style/Signal.Text.Body"
|
android:textAppearance="@style/Signal.Text.Body"
|
||||||
android:textColor="@color/ultramarine_text_button"
|
android:textColor="@color/ultramarine_text_button"
|
||||||
tools:text="Off" />
|
tools:text="Off" />
|
||||||
|
@ -1587,6 +1587,7 @@
|
|||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<string name="expiration_weeks_abbreviated">%dw</string>
|
<string name="expiration_weeks_abbreviated">%dw</string>
|
||||||
|
<string name="expiration_combined">%1$s %2$s</string>
|
||||||
|
|
||||||
<!-- unverified safety numbers -->
|
<!-- unverified safety numbers -->
|
||||||
<string name="IdentityUtil_unverified_banner_one">Your safety number with %s has changed and is no longer verified</string>
|
<string name="IdentityUtil_unverified_banner_one">Your safety number with %s has changed and is no longer verified</string>
|
||||||
|
@ -0,0 +1,148 @@
|
|||||||
|
package org.thoughtcrime.securesms.util;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
|
import org.mockito.stubbing.Answer;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
import org.thoughtcrime.securesms.R;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.mockito.Matchers.anyInt;
|
||||||
|
import static org.mockito.Matchers.anyString;
|
||||||
|
import static org.mockito.Matchers.eq;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE, application = Application.class)
|
||||||
|
public class ExpirationUtilTest {
|
||||||
|
|
||||||
|
private static int SECONDS_IN_WEEK = (int) TimeUnit.DAYS.toSeconds(7);
|
||||||
|
private static int SECONDS_IN_DAY = (int) TimeUnit.DAYS.toSeconds(1);
|
||||||
|
private static int SECONDS_IN_HOUR = (int) TimeUnit.HOURS.toSeconds(1);
|
||||||
|
private static int SECONDS_IN_MINUTE = (int) TimeUnit.MINUTES.toSeconds(1);
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
context = ApplicationProvider.getApplicationContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsSeconds_whenEvenSecondUnderMinute() {
|
||||||
|
assertEquals(1 + " second", ExpirationUtil.getExpirationDisplayValue(context, 1));
|
||||||
|
for (int seconds = 2; seconds < 60; seconds++) {
|
||||||
|
assertEquals(seconds + " seconds", ExpirationUtil.getExpirationDisplayValue(context, seconds));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsMinutes_whenEvenMinuteUnderHour() {
|
||||||
|
assertEquals(1 + " minute", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.MINUTES.toSeconds(1)));
|
||||||
|
for (int minutes = 2; minutes < 60; minutes++) {
|
||||||
|
assertEquals(minutes + " minutes", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.MINUTES.toSeconds(minutes)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsHours_whenEvenHourUnderDay() {
|
||||||
|
assertEquals(1 + " hour", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.HOURS.toSeconds(1)));
|
||||||
|
for (int hours = 2; hours < 24; hours++) {
|
||||||
|
assertEquals(hours + " hours", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.HOURS.toSeconds(hours)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsDays_whenEvenDayUnderWeek() {
|
||||||
|
assertEquals(1 + " day", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.DAYS.toSeconds(1)));
|
||||||
|
for (int days = 2; days < 7; days++) {
|
||||||
|
assertEquals(days + " days", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.DAYS.toSeconds(days)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsWeeks_whenEvenWeek() {
|
||||||
|
assertEquals(1 + " week", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.DAYS.toSeconds(7)));
|
||||||
|
for (int weeks = 2; weeks < 52; weeks++) {
|
||||||
|
assertEquals(weeks + " weeks", ExpirationUtil.getExpirationDisplayValue(context, (int) TimeUnit.DAYS.toSeconds(7 * weeks)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsBreakdown_whenLargerThanWeek() {
|
||||||
|
assertEquals("1 week 1 day",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_DAY));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 hour",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_HOUR));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 minute",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_MINUTE));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + 1));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 day 1 hour",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_DAY + SECONDS_IN_HOUR));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 day 1 hour 1 minute",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_DAY + SECONDS_IN_HOUR + SECONDS_IN_MINUTE));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 day 1 hour 1 minute 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_DAY + SECONDS_IN_HOUR + SECONDS_IN_MINUTE + 1));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 hour 1 minute",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_HOUR + SECONDS_IN_MINUTE));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 hour 1 minute 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_HOUR + SECONDS_IN_MINUTE + 1));
|
||||||
|
|
||||||
|
assertEquals("1 week 1 minute 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_WEEK + SECONDS_IN_MINUTE + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsBreakdown_whenLargerThanDay() {
|
||||||
|
assertEquals("1 day 1 hour",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_DAY + SECONDS_IN_HOUR));
|
||||||
|
|
||||||
|
assertEquals("1 day 1 minute",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_DAY + SECONDS_IN_MINUTE));
|
||||||
|
|
||||||
|
assertEquals("1 day 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_DAY + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsBreakdown_whenLargerThanHour() {
|
||||||
|
assertEquals("1 hour 1 minute",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_HOUR + SECONDS_IN_MINUTE));
|
||||||
|
|
||||||
|
assertEquals("1 hour 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_HOUR + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAsBreakdown_whenLargerThanMinute() {
|
||||||
|
assertEquals("1 minute 1 second",
|
||||||
|
ExpirationUtil.getExpirationDisplayValue(context, SECONDS_IN_MINUTE + 1));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user