diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java index a3150e150..c41e8838b 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java @@ -31,6 +31,11 @@ import static org.isoron.uhabits.core.utils.StringUtils.defaultToStringStyle; * While repetitions simply record that the habit was performed at a given date, * a checkmark provides more information, such as whether a repetition was * expected at that day or not. + *

+ *

+ * Note that the priority comparator in + * {@link org.isoron.uhabits.core.models.memory.MemoryHabitList} + * relies on SKIP > YES_MANUAL > YES_AUTO > NO. *

* Checkmarks are computed automatically from the list of repetitions. */ diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java index 1b06cdb73..baccbb877 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java @@ -252,6 +252,6 @@ public abstract class HabitList implements Iterable BY_SCORE_DESC, BY_PRIORITY_ASC, BY_PRIORITY_DESC, - BY_POSITION; + BY_POSITION } } diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java index 497833c64..3bcc611b1 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java @@ -40,6 +40,9 @@ public class MemoryHabitList extends HabitList @NonNull private Order order = Order.BY_POSITION; + @NonNull + private Order previousOrder = Order.BY_POSITION; + @Nullable private MemoryHabitList parent = null; @@ -113,14 +116,27 @@ public class MemoryHabitList extends HabitList @Override public synchronized void setOrder(@NonNull Order order) { + this.previousOrder = this.order; this.order = order; - this.comparator = getComparatorByOrder(order); + this.comparator = getComposedComparatorByOrder(order, this.previousOrder); resort(); getObservable().notifyListeners(); } - private Comparator getComparatorByOrder(Order order) + private Comparator getComposedComparatorByOrder(Order firstOrder, Order secondOrder) { + return (h1, h2) -> { + int firstResult = getComparatorByOrder(firstOrder).compare(h1, h2); + + if (firstResult != 0 || secondOrder == null) { + return firstResult; + } + + return getComparatorByOrder(secondOrder).compare(h1, h2); + }; + } + + private Comparator getComparatorByOrder(Order order) { Comparator nameComparatorAsc = (h1, h2) -> h1.getName().compareTo(h2.getName()); diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java index 2ca3ba6c5..03c281982 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java @@ -128,10 +128,10 @@ public class ListHabitsMenuBehavior } public void onSortByPriority() { - if (adapter.getOrder() != HabitList.Order.BY_PRIORITY_DESC) { - adapter.setOrder(HabitList.Order.BY_PRIORITY_DESC); - } else { + if (adapter.getOrder() != HabitList.Order.BY_PRIORITY_ASC) { adapter.setOrder(HabitList.Order.BY_PRIORITY_ASC); + } else { + adapter.setOrder(HabitList.Order.BY_PRIORITY_DESC); } } diff --git a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java index f4a7a8125..202d8b7ab 100644 --- a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java +++ b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java @@ -136,7 +136,7 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest { behavior.onSortByPriority(); verify(adapter).setOrder(orderCaptor.capture()); - assertThat(orderCaptor.getValue(), equalTo(BY_PRIORITY_DESC)); + assertThat(orderCaptor.getValue(), equalTo(BY_PRIORITY_ASC)); } @Test