Created DurationUtils and toast message shows after scheduling alarm
This commit is contained in:
parent
3c3b9bf129
commit
24a9d5e2d6
@ -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
|
||||||
|
|||||||
125
app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java
Normal file
125
app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java
Normal 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 };
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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"><1m</string>
|
||||||
<!-- ======================================================================================= -->
|
<!-- ======================================================================================= -->
|
||||||
|
|
||||||
<!-- ==================================== NOTIFICATIONS ==================================== -->
|
<!-- ==================================== NOTIFICATIONS ==================================== -->
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user