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"