From feb3c9845999d91ceb7e66cf699279acd4d93830 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 29 Dec 2020 20:21:38 -0600 Subject: [PATCH] Convert HabitMatcher, Reminder and Streak to Kotlin --- .../uhabits/core/models/HabitMatcher.java | 66 ------------ .../uhabits/core/models/HabitMatcher.kt | 40 +++++++ .../core/models/HabitMatcherBuilder.java | 53 ---------- .../core/models/HabitMatcherBuilder.kt | 48 +++++++++ .../isoron/uhabits/core/models/Reminder.java | 100 ------------------ .../isoron/uhabits/core/models/Reminder.kt | 30 ++++++ .../isoron/uhabits/core/models/Streak.java | 98 ----------------- .../org/isoron/uhabits/core/models/Streak.kt | 38 +++++++ 8 files changed, 156 insertions(+), 317 deletions(-) delete mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java create mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.kt delete mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java create mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.kt delete mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java create mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.kt delete mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java create mode 100644 android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.kt diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java deleted file mode 100644 index d2b1801b2..000000000 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.core.models; - -public class HabitMatcher -{ - public static final HabitMatcher WITH_ALARM = new HabitMatcherBuilder() - .setArchivedAllowed(true) - .setReminderRequired(true) - .build(); - - private final boolean archivedAllowed; - - private final boolean reminderRequired; - - private final boolean completedAllowed; - - public HabitMatcher(boolean allowArchived, - boolean reminderRequired, - boolean completedAllowed) - { - this.archivedAllowed = allowArchived; - this.reminderRequired = reminderRequired; - this.completedAllowed = completedAllowed; - } - - public boolean isArchivedAllowed() - { - return archivedAllowed; - } - - public boolean isCompletedAllowed() - { - return completedAllowed; - } - - public boolean isReminderRequired() - { - return reminderRequired; - } - - public boolean matches(Habit habit) - { - if (!isArchivedAllowed() && habit.isArchived()) return false; - if (isReminderRequired() && !habit.hasReminder()) return false; - if (!isCompletedAllowed() && habit.isCompletedToday()) return false; - return true; - } -} diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.kt b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.kt new file mode 100644 index 000000000..5d0e244c2 --- /dev/null +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.kt @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.core.models + +data class HabitMatcher( + val isArchivedAllowed: Boolean = false, + val isReminderRequired: Boolean = false, + val isCompletedAllowed: Boolean = true, +) { + fun matches(habit: Habit): Boolean { + if (!isArchivedAllowed && habit.isArchived) return false + if (isReminderRequired && !habit.hasReminder()) return false + if (!isCompletedAllowed && habit.isCompletedToday()) return false + return true + } + + companion object { + @JvmField + val WITH_ALARM = HabitMatcherBuilder() + .setArchivedAllowed(true) + .setReminderRequired(true) + .build() + } +} \ No newline at end of file diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java deleted file mode 100644 index 9939816e2..000000000 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.core.models; - -public class HabitMatcherBuilder -{ - private boolean archivedAllowed = false; - - private boolean reminderRequired = false; - - private boolean completedAllowed = true; - - public HabitMatcher build() - { - return new HabitMatcher(archivedAllowed, reminderRequired, - completedAllowed); - } - - public HabitMatcherBuilder setArchivedAllowed(boolean archivedAllowed) - { - this.archivedAllowed = archivedAllowed; - return this; - } - - public HabitMatcherBuilder setCompletedAllowed(boolean completedAllowed) - { - this.completedAllowed = completedAllowed; - return this; - } - - public HabitMatcherBuilder setReminderRequired(boolean reminderRequired) - { - this.reminderRequired = reminderRequired; - return this; - } -} \ No newline at end of file diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.kt b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.kt new file mode 100644 index 000000000..d8fc1690e --- /dev/null +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.kt @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.core.models + +class HabitMatcherBuilder { + private var archivedAllowed = false + private var reminderRequired = false + private var completedAllowed = true + + fun build(): HabitMatcher { + return HabitMatcher( + isArchivedAllowed = archivedAllowed, + isReminderRequired = reminderRequired, + isCompletedAllowed = completedAllowed, + ) + } + + fun setArchivedAllowed(archivedAllowed: Boolean): HabitMatcherBuilder { + this.archivedAllowed = archivedAllowed + return this + } + + fun setCompletedAllowed(completedAllowed: Boolean): HabitMatcherBuilder { + this.completedAllowed = completedAllowed + return this + } + + fun setReminderRequired(reminderRequired: Boolean): HabitMatcherBuilder { + this.reminderRequired = reminderRequired + return this + } +} \ No newline at end of file diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java deleted file mode 100644 index 6b2cf8278..000000000 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.core.models; - -import androidx.annotation.*; - -import org.apache.commons.lang3.builder.*; -import org.isoron.uhabits.core.utils.*; - -import static org.isoron.uhabits.core.utils.StringUtils.*; - -public final class Reminder -{ - private final int hour; - - private final int minute; - - private final WeekdayList days; - - public Reminder(int hour, int minute, @NonNull WeekdayList days) - { - this.hour = hour; - this.minute = minute; - this.days = days; - } - - @NonNull - public WeekdayList getDays() - { - return days; - } - - public int getHour() - { - return hour; - } - - public int getMinute() - { - return minute; - } - - public long getTimeInMillis() - { - return DateUtils.getUpcomingTimeInMillis(hour, minute); - } - - @Override - public boolean equals(Object o) - { - if (this == o) return true; - - if (o == null || getClass() != o.getClass()) return false; - - Reminder reminder = (Reminder) o; - - return new EqualsBuilder() - .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(); - } - - @Override - public String toString() - { - return new ToStringBuilder(this, defaultToStringStyle()) - .append("hour", hour) - .append("minute", minute) - .append("days", days) - .toString(); - } -} diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.kt b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.kt new file mode 100644 index 000000000..a95207821 --- /dev/null +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.core.models + +import org.isoron.uhabits.core.utils.* + +data class Reminder( + val hour: Int, + val minute: Int, + val days: WeekdayList, +) { + val timeInMillis: Long + get() = DateUtils.getUpcomingTimeInMillis(hour, minute) +} \ No newline at end of file diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java deleted file mode 100644 index b30bbea59..000000000 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.core.models; - -import org.apache.commons.lang3.builder.*; - -import static org.isoron.uhabits.core.utils.StringUtils.defaultToStringStyle; - -public final class Streak -{ - private final Timestamp start; - - private final Timestamp end; - - public Streak(Timestamp start, Timestamp end) - { - this.start = start; - this.end = end; - } - - public int compareLonger(Streak other) - { - if (this.getLength() != other.getLength()) - return Long.signum(this.getLength() - other.getLength()); - - return compareNewer(other); - } - - public int compareNewer(Streak other) - { - return end.compareTo(other.end); - } - - public Timestamp getEnd() - { - return end; - } - - public int getLength() - { - return start.daysUntil(end) + 1; - } - - public Timestamp getStart() - { - return start; - } - - @Override - public String toString() - { - return new ToStringBuilder(this, defaultToStringStyle()) - .append("start", start) - .append("end", end) - .toString(); - } - - @Override - public boolean equals(Object o) - { - if (this == o) return true; - - if (o == null || getClass() != o.getClass()) return false; - - Streak streak = (Streak) o; - - return new EqualsBuilder() - .append(start, streak.start) - .append(end, streak.end) - .isEquals(); - } - - @Override - public int hashCode() - { - return new HashCodeBuilder(17, 37) - .append(start) - .append(end) - .toHashCode(); - } -} diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.kt b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.kt new file mode 100644 index 000000000..08a9b85f9 --- /dev/null +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.kt @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.core.models + +import java.lang.Long.* + +data class Streak( + val start: Timestamp, + val end: Timestamp, +) { + fun compareLonger(other: Streak): Int { + return if (length != other.length) signum(length - other.length.toLong()) + else compareNewer(other) + } + + fun compareNewer(other: Streak): Int { + return end.compareTo(other.end) + } + + val length: Int + get() = start.daysUntil(end) + 1 +} \ No newline at end of file