diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt index 47dfec5ee..a88473d1c 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt @@ -111,6 +111,11 @@ class ListHabitsMenu @Inject constructor( return true } + R.id.actionSortScoreAsc -> { + behavior.onSortByScoreAsc() + return true + } + else -> return false } } diff --git a/android/uhabits-android/src/main/res/menu/list_habits.xml b/android/uhabits-android/src/main/res/menu/list_habits.xml index 7f8e46731..876704c93 100644 --- a/android/uhabits-android/src/main/res/menu/list_habits.xml +++ b/android/uhabits-android/src/main/res/menu/list_habits.xml @@ -65,6 +65,10 @@ + + diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index af088952a..8f3dfab39 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -220,6 +220,7 @@ By name By color By score + By lowest score Download Export Press-and-hold to change the value 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 ae843e8da..0d75d8be0 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 @@ -245,6 +245,7 @@ public abstract class HabitList implements Iterable BY_NAME, BY_COLOR, BY_SCORE, - BY_POSITION + BY_POSITION, + BY_SCORE_ASC } } 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 80a6d514a..91bda94b2 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 @@ -151,6 +151,7 @@ public class MemoryHabitList extends HabitList if (order == BY_NAME) return nameComparator; if (order == BY_COLOR) return colorComparator; if (order == BY_SCORE) return scoreComparator; + if (order == BY_SCORE_ASC) return scoreComparator.reversed(); throw new IllegalStateException(); } 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 1a2912452..da14eb02a 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 @@ -115,6 +115,11 @@ public class ListHabitsMenuBehavior adapter.setOrder(HabitList.Order.BY_SCORE); } + public void onSortByScoreAsc() + { + adapter.setOrder(HabitList.Order.BY_SCORE_ASC); + } + public void onSortByName() { adapter.setOrder(HabitList.Order.BY_NAME); 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 429878df5..16760f1a6 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 @@ -123,6 +123,14 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest assertThat(orderCaptor.getValue(), equalTo(BY_SCORE)); } + @Test + public void testOnSortScoreAsc() + { + behavior.onSortByScoreAsc(); + verify(adapter).setOrder(orderCaptor.capture()); + assertThat(orderCaptor.getValue(), equalTo(BY_SCORE_ASC)); + } + @Test public void testOnSortName() { diff --git a/core/src/main/common/org/isoron/uhabits/i18n/Strings.kt b/core/src/main/common/org/isoron/uhabits/i18n/Strings.kt index 823ac364c..52b9d0871 100644 --- a/core/src/main/common/org/isoron/uhabits/i18n/Strings.kt +++ b/core/src/main/common/org/isoron/uhabits/i18n/Strings.kt @@ -17,6 +17,7 @@ open class Strings() { open val by_color = "By color" open val by_name = "By name" open val by_score = "By score" + open val by_score_asc = "By lowest score" open val calendar = "Calendar" open val cancel = "Cancel" open val change_value = "Change value"