More callback events added to AlarmVH. Toast message confirmation when upcoming alarm is dismissed.
This commit is contained in:
parent
ffb6f40fd0
commit
e2449bb11e
@ -6,6 +6,7 @@ import android.text.SpannableString;
|
|||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.text.style.RelativeSizeSpan;
|
import android.text.style.RelativeSizeSpan;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
@ -22,7 +23,9 @@ import com.philliphsu.clock2.util.AlarmUtils;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
|
import butterknife.OnCheckedChanged;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
|
import butterknife.OnTouch;
|
||||||
|
|
||||||
import static android.view.View.GONE;
|
import static android.view.View.GONE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
@ -65,11 +68,24 @@ public class AlarmViewHolder extends BaseViewHolder<Alarm> implements AlarmCount
|
|||||||
|
|
||||||
@OnClick(R.id.dismiss)
|
@OnClick(R.id.dismiss)
|
||||||
void dismiss() {
|
void dismiss() {
|
||||||
|
// TOneverDO: AlarmUtils.cancelAlarm() otherwise it will be called twice
|
||||||
|
mSwitch.setPressed(true); // needed so the OnCheckedChange event calls through
|
||||||
|
bindSwitch(false); // fires OnCheckedChange to do the binding for you
|
||||||
|
/*
|
||||||
AlarmUtils.cancelAlarm(getContext(), getAlarm());
|
AlarmUtils.cancelAlarm(getContext(), getAlarm());
|
||||||
|
if (!getAlarm().isEnabled()) {
|
||||||
|
// TOneverDO: mSwitch.setPressed(true);
|
||||||
|
bindSwitch(false); // will fire OnCheckedChange, but switch isn't set as pressed so nothing happens.
|
||||||
|
bindCountdown(false, -1);
|
||||||
|
}
|
||||||
bindDismissButton(false, ""); // Will be set to correct text the next time we bind.
|
bindDismissButton(false, ""); // Will be set to correct text the next time we bind.
|
||||||
// If cancelAlarm() modified the alarm's fields, then it will save changes for you.
|
// If cancelAlarm() modified the alarm's fields, then it will save changes for you.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Changed in favor or OnCheckedChange
|
||||||
|
/*
|
||||||
|
@Deprecated
|
||||||
@OnClick(R.id.on_off_switch)
|
@OnClick(R.id.on_off_switch)
|
||||||
void toggle() {
|
void toggle() {
|
||||||
Alarm alarm = getAlarm();
|
Alarm alarm = getAlarm();
|
||||||
@ -85,6 +101,36 @@ public class AlarmViewHolder extends BaseViewHolder<Alarm> implements AlarmCount
|
|||||||
}
|
}
|
||||||
save(); // TODO: Problem! If cancelAlarm() saves the repo, this is a redundant call!
|
save(); // TODO: Problem! If cancelAlarm() saves the repo, this is a redundant call!
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
@OnTouch(R.id.on_off_switch)
|
||||||
|
boolean slide(MotionEvent event) {
|
||||||
|
if (event.getActionMasked() == MotionEvent.ACTION_MOVE) {
|
||||||
|
mSwitch.setPressed(true); // needed so the OnCheckedChange event calls through
|
||||||
|
}
|
||||||
|
return false; // proceed as usual
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnCheckedChanged(R.id.on_off_switch)
|
||||||
|
void toggle(boolean checked) {
|
||||||
|
if (mSwitch.isPressed()) { // needed to distinguish automatic calls when VH binds from actual presses
|
||||||
|
// don't need to toggle the switch state
|
||||||
|
Alarm alarm = getAlarm();
|
||||||
|
alarm.setEnabled(checked);
|
||||||
|
if (alarm.isEnabled()) {
|
||||||
|
// TODO: On Moto X, upcoming notification doesn't post immediately
|
||||||
|
AlarmUtils.scheduleAlarm(getContext(), alarm);
|
||||||
|
bindCountdown(true, alarm.ringsIn());
|
||||||
|
bindDismissButton(alarm);
|
||||||
|
} else {
|
||||||
|
AlarmUtils.cancelAlarm(getContext(), alarm); // might save repo
|
||||||
|
bindCountdown(false, -1);
|
||||||
|
bindDismissButton(false, "");
|
||||||
|
}
|
||||||
|
save(); // TODO: Problem! If cancelAlarm() saves the repo, this is a redundant call!
|
||||||
|
mSwitch.setPressed(false); // clear the pressed focus, esp. if setPressed(true) was called manually
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void bindTime(Date date) {
|
private void bindTime(Date date) {
|
||||||
String time = DateFormat.getTimeFormat(getContext()).format(date);
|
String time = DateFormat.getTimeFormat(getContext()).format(date);
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import static android.app.PendingIntent.FLAG_NO_CREATE;
|
|||||||
import static android.app.PendingIntent.getActivity;
|
import static android.app.PendingIntent.getActivity;
|
||||||
import static com.philliphsu.clock2.util.DateFormatUtils.formatTime;
|
import static com.philliphsu.clock2.util.DateFormatUtils.formatTime;
|
||||||
import static com.philliphsu.clock2.util.Preconditions.checkNotNull;
|
import static com.philliphsu.clock2.util.Preconditions.checkNotNull;
|
||||||
|
import static java.util.concurrent.TimeUnit.HOURS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Phillip Hsu on 6/3/2016.
|
* Created by Phillip Hsu on 6/3/2016.
|
||||||
@ -50,7 +51,7 @@ public final class AlarmUtils {
|
|||||||
// device is asleep. Otherwise, it will not go off until the device is turned back on.
|
// device is asleep. Otherwise, it will not go off until the device is turned back on.
|
||||||
long ringAt = alarm.isSnoozed() ? alarm.snoozingUntil() : alarm.ringsAt();
|
long ringAt = alarm.isSnoozed() ? alarm.snoozingUntil() : alarm.ringsAt();
|
||||||
// If snoozed, upcoming note posted immediately.
|
// If snoozed, upcoming note posted immediately.
|
||||||
am.set(AlarmManager.RTC_WAKEUP, ringAt - hoursBeforeUpcoming(context) * 3600000,
|
am.set(AlarmManager.RTC_WAKEUP, ringAt - HOURS.toMillis(hoursBeforeUpcoming(context)),
|
||||||
notifyUpcomingAlarmIntent(context, alarm, false));
|
notifyUpcomingAlarmIntent(context, alarm, false));
|
||||||
am.setExact(AlarmManager.RTC_WAKEUP, ringAt, alarmIntent(context, alarm, false));
|
am.setExact(AlarmManager.RTC_WAKEUP, ringAt, alarmIntent(context, alarm, false));
|
||||||
|
|
||||||
@ -91,6 +92,12 @@ public final class AlarmUtils {
|
|||||||
save(c);
|
save(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (a.ringsIn() <= HOURS.toMillis(hoursBeforeUpcoming(c))) {
|
||||||
|
String time = formatTime(c, a.ringsAt());
|
||||||
|
String text = c.getString(R.string.upcoming_alarm_dismissed, time);
|
||||||
|
Toast.makeText(c, text, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
|
||||||
// If service is not running, nothing happens
|
// If service is not running, nothing happens
|
||||||
// TODO: Since RingtoneService is a bound service, will this destroy the service after returning?
|
// TODO: Since RingtoneService is a bound service, will this destroy the service after returning?
|
||||||
// Note that if a stopped service still has ServiceConnection objects bound to it with the
|
// Note that if a stopped service still has ServiceConnection objects bound to it with the
|
||||||
|
|||||||
@ -36,6 +36,8 @@
|
|||||||
<string name="abbrev_hours">%1$dh</string>
|
<string name="abbrev_hours">%1$dh</string>
|
||||||
<string name="abbrev_minutes">%2$dm</string>
|
<string name="abbrev_minutes">%2$dm</string>
|
||||||
<string name="abbrev_less_than_one_minute"><1m</string>
|
<string name="abbrev_less_than_one_minute"><1m</string>
|
||||||
|
|
||||||
|
<string name="upcoming_alarm_dismissed">%1$s alarm dismissed.</string>
|
||||||
<!-- ======================================================================================= -->
|
<!-- ======================================================================================= -->
|
||||||
|
|
||||||
<!-- ==================================== NOTIFICATIONS ==================================== -->
|
<!-- ==================================== NOTIFICATIONS ==================================== -->
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user