Merge branch 'feature/custom-snooze' into dev

This commit is contained in:
2017-12-06 21:42:04 -06:00
16 changed files with 265 additions and 74 deletions

View File

@@ -22,8 +22,9 @@ package org.isoron.uhabits.core.models;
import android.support.annotation.*;
import org.apache.commons.lang3.builder.*;
import org.isoron.uhabits.core.utils.*;
import static org.isoron.uhabits.core.utils.StringUtils.defaultToStringStyle;
import static org.isoron.uhabits.core.utils.StringUtils.*;
public final class Reminder
{
@@ -56,6 +57,11 @@ public final class Reminder
return minute;
}
public long getTimeInMillis()
{
return DateUtils.getUpcomingTimeInMillis(hour, minute);
}
@Override
public boolean equals(Object o)
{
@@ -66,29 +72,29 @@ public final class Reminder
Reminder reminder = (Reminder) o;
return new EqualsBuilder()
.append(hour, reminder.hour)
.append(minute, reminder.minute)
.append(days, reminder.days)
.isEquals();
.append(hour, reminder.hour)
.append(minute, reminder.minute)
.append(days, reminder.days)
.isEquals();
}
@Override
public int hashCode()
{
return new HashCodeBuilder(17, 37)
.append(hour)
.append(minute)
.append(days)
.toHashCode();
.append(hour)
.append(minute)
.append(days)
.toHashCode();
}
@Override
public String toString()
{
return new ToStringBuilder(this, defaultToStringStyle())
.append("hour", hour)
.append("minute", minute)
.append("days", days)
.toString();
.append("hour", hour)
.append("minute", minute)
.append("days", days)
.toString();
}
}

View File

@@ -24,9 +24,6 @@ import android.support.annotation.*;
import org.isoron.uhabits.core.*;
import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.utils.*;
import java.util.*;
import javax.inject.*;
@@ -60,14 +57,17 @@ public class ReminderScheduler implements CommandRunner.Listener
scheduleAll();
}
public void schedule(@NonNull Habit habit, @Nullable Long reminderTime)
public void schedule(@NonNull Habit habit)
{
Long reminderTime = habit.getReminder().getTimeInMillis();
scheduleAtTime(habit, reminderTime);
}
public void scheduleAtTime(@NonNull Habit habit, @NonNull Long reminderTime)
{
if (!habit.hasReminder()) return;
if (habit.isArchived()) return;
Reminder reminder = habit.getReminder();
if (reminderTime == null) reminderTime = getReminderTime(reminder);
long timestamp = getStartOfDay(removeTimezone(reminderTime));
sys.scheduleShowReminder(reminderTime, habit, timestamp);
}
@@ -76,7 +76,7 @@ public class ReminderScheduler implements CommandRunner.Listener
HabitList reminderHabits =
habitList.getFiltered(HabitMatcher.WITH_ALARM);
for (Habit habit : reminderHabits)
schedule(habit, null);
schedule(habit);
}
public void startListening()
@@ -89,19 +89,11 @@ public class ReminderScheduler implements CommandRunner.Listener
commandRunner.removeListener(this);
}
@NonNull
private Long getReminderTime(@NonNull Reminder reminder)
public void scheduleMinutesFromNow(Habit habit, long minutes)
{
Calendar calendar = DateUtils.getStartOfTodayCalendar();
calendar.set(Calendar.HOUR_OF_DAY, reminder.getHour());
calendar.set(Calendar.MINUTE, reminder.getMinute());
calendar.set(Calendar.SECOND, 0);
Long time = calendar.getTimeInMillis();
if (DateUtils.getLocalTime() > time)
time += DateUtils.DAY_LENGTH;
return applyTimezone(time);
long now = applyTimezone(getLocalTime());
long reminderTime = now + minutes * 60 * 1000;
scheduleAtTime(habit, reminderTime);
}
public interface SystemScheduler

View File

@@ -240,6 +240,20 @@ public abstract class DateUtils
}
}
public static long getUpcomingTimeInMillis(int hour, int minute)
{
Calendar calendar = DateUtils.getStartOfTodayCalendar();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
Long time = calendar.getTimeInMillis();
if (DateUtils.getLocalTime() > time)
time += DateUtils.DAY_LENGTH;
return applyTimezone(time);
}
public enum TruncateField
{
MONTH, WEEK_NUMBER, YEAR, QUARTER