Created DurationUtils and toast message shows after scheduling alarm

This commit is contained in:
Phillip Hsu 2016-06-06 02:19:20 -07:00
parent 3c3b9bf129
commit 24a9d5e2d6
3 changed files with 147 additions and 0 deletions

View File

@ -26,6 +26,7 @@ import com.philliphsu.clock2.BaseActivity;
import com.philliphsu.clock2.DaysOfWeek; import com.philliphsu.clock2.DaysOfWeek;
import com.philliphsu.clock2.R; import com.philliphsu.clock2.R;
import com.philliphsu.clock2.model.AlarmsRepository; import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.util.DurationUtils;
import java.util.Date; import java.util.Date;
@ -421,6 +422,9 @@ public class EditAlarmActivity extends BaseActivity implements
@Override @Override
public void scheduleAlarm(Alarm alarm) { public void scheduleAlarm(Alarm alarm) {
AlarmUtils.scheduleAlarm(this, alarm); AlarmUtils.scheduleAlarm(this, alarm);
String message = getString(R.string.alarm_set_for,
DurationUtils.toString(this, alarm.ringsIn(), false /*abbreviate?*/));
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
} }
@Override @Override

View File

@ -0,0 +1,125 @@
package com.philliphsu.clock2.util;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import com.philliphsu.clock2.R;
import java.util.concurrent.TimeUnit;
/**
* Created by Phillip Hsu on 6/6/2016.
*/
public class DurationUtils {
public static String toString(Context context, long millis, boolean abbreviate) {
long[] fields = breakdown(millis);
long numHours = fields[0];
long numMins = fields[1];
long numSecs = fields[2]; // only considered for rounding of minutes
if (numSecs >= 31) {
numMins++;
}
@StringRes int res;
if (abbreviate) {
if (numHours == 0) {
if (numMins == 0) {
res = R.string.abbrev_less_than_one_minute; // TODO: verify formatArgs can be passed in but are ignored
} else {
res = R.string.abbrev_minutes;
}
} else {
if (numMins == 0) {
res = R.string.abbrev_hours;
} else {
res = R.string.abbrev_hours_and_minutes;
}
}
} else {
if (numHours == 0) {
if (numMins == 0) {
res = R.string.less_than_one_minute; // TODO: verify formatArgs can be passed in but are ignored
} else if (numMins == 1) {
res = R.string.minute;
} else {
res = R.string.minutes;
}
} else {
if (numHours == 1) {
if (numMins == 0) {
res = R.string.hour;
} else if (numMins == 1) {
res = R.string.hour_and_minute;
} else {
res = R.string.hour_and_minutes;
}
} else {
if (numMins == 0) {
res = R.string.hours;
} else if (numMins == 1) {
res = R.string.hours_and_minute;
} else {
res = R.string.hours_and_minutes;
}
}
}
}
return context.getString(res, numHours, numMins);
}
/**
* Equivalent to
* {@link #breakdown(long, TimeUnit, boolean)
* breakdown(millis, TimeUnit.MILLISECONDS, true)},
* which rounds milliseconds. Callers who use this are probably not
* concerned about displaying the milliseconds value.
*/
public static long[] breakdown(long millis) {
return breakdown(millis, TimeUnit.MILLISECONDS, true);
}
/**
* Equivalent to
* {@link #breakdown(long, TimeUnit, boolean) breakdown(t, unit, false)},
* i.e. does not round milliseconds.
*/
public static long[] breakdown(long t, @NonNull TimeUnit unit) {
return breakdown(t, unit, false);
}
/**
* Returns a breakdown of a given time into its values
* in hours, minutes, seconds and milliseconds.
* @param t the time to break down
* @param unit the {@link TimeUnit} the given time is expressed in
* @param roundMillis whether rounding of milliseconds is desired
* @return a {@code long[]} of the values in hours, minutes, seconds
* and milliseconds in that order
*/
public static long[] breakdown(long t, @NonNull TimeUnit unit, boolean roundMillis) {
long hours = unit.toHours(t);
long minutes = unit.toMinutes(t) % 60;
long seconds = unit.toSeconds(t) % 60;
long msecs = unit.toMillis(t) % 1000;
if (roundMillis) {
if (msecs >= 500) {
seconds++;
msecs = 0;
if (seconds == 60) {
minutes++;
seconds = 0;
if (minutes == 60) {
hours++;
minutes = 0;
}
}
}
}
return new long[] { hours, minutes, seconds, msecs };
}
}

View File

@ -16,6 +16,24 @@
<string name="title_snoozing_until">Snoozing until %1$s</string> <string name="title_snoozing_until">Snoozing until %1$s</string>
<string name="dismiss_now">Dismiss now</string> <string name="dismiss_now">Dismiss now</string>
<string name="done_snoozing">Done snoozing</string> <string name="done_snoozing">Done snoozing</string>
<string name="alarm_set_for">Alarm set for %1$s from now.</string>
<!-- ======================================================================================= -->
<!-- ==================================== TOASTS ==================================== -->
<string name="hour_and_minute">%1$d hour and %2$d minute</string>
<string name="hour_and_minutes">%1$d hour and %2$d minutes</string>
<string name="hours_and_minute">%1$d hours and %2$d minute</string>
<string name="hours_and_minutes">%1$d hours and %2$d minutes</string>
<string name="hour">%1$d hour</string>
<string name="hours">%1$d hours</string>
<string name="minute">%2$d minute</string>
<string name="minutes">%2$d minutes</string>
<string name="less_than_one_minute">less than 1 minute</string>
<string name="abbrev_hours_and_minutes">%1$dh %2$dm</string>
<string name="abbrev_hours">%1$dh</string>
<string name="abbrev_minutes">%2$dm</string>
<string name="abbrev_less_than_one_minute">&lt;1m</string>
<!-- ======================================================================================= --> <!-- ======================================================================================= -->
<!-- ==================================== NOTIFICATIONS ==================================== --> <!-- ==================================== NOTIFICATIONS ==================================== -->