diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index 78cb2a4dc..aa3826c4c 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -124,6 +124,10 @@ public class ListHabitsMenu extends BaseMenu adapter.setOrder(HabitList.Order.BY_NAME); return true; + case R.id.actionSortScore: + adapter.setOrder(HabitList.Order.BY_SCORE); + return true; + default: return false; } diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitList.java b/app/src/main/java/org/isoron/uhabits/models/HabitList.java index 78673ad0d..444a5824c 100644 --- a/app/src/main/java/org/isoron/uhabits/models/HabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/HabitList.java @@ -240,6 +240,7 @@ public abstract class HabitList implements Iterable { BY_NAME, BY_COLOR, + BY_SCORE, BY_POSITION } } diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java b/app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java index 7ccfb1e82..601852122 100644 --- a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java @@ -161,9 +161,16 @@ public class MemoryHabitList extends HabitList else return c1.compareTo(c2); }; + Comparator scoreComparator = (h1, h2) -> { + int s1 = h1.getScores().getTodayValue(); + int s2 = h2.getScores().getTodayValue(); + return Integer.compare(s2, s1); + }; + if (order == BY_POSITION) return null; if (order == BY_NAME) return nameComparator; if (order == BY_COLOR) return colorComparator; + if (order == BY_SCORE) return scoreComparator; throw new IllegalStateException(); } diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java b/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java index c901ebae6..da8a6aee5 100644 --- a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java @@ -277,6 +277,15 @@ public class SQLiteHabitList extends HabitList habits.add(habit); } + if(order == Order.BY_SCORE) + { + Collections.sort(habits, (lhs, rhs) -> { + int s1 = lhs.getScores().getTodayValue(); + int s2 = rhs.getScores().getTodayValue(); + return Integer.compare(s2, s1); + }); + } + return habits; } @@ -289,6 +298,7 @@ public class SQLiteHabitList extends HabitList break; case BY_NAME: + case BY_SCORE: query.append("order by name "); break; diff --git a/app/src/main/res/menu/list_habits.xml b/app/src/main/res/menu/list_habits.xml index 574fab101..66ea0b7da 100644 --- a/app/src/main/res/menu/list_habits.xml +++ b/app/src/main/res/menu/list_habits.xml @@ -59,6 +59,10 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 763565762..9d3f32315 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -201,4 +201,5 @@ Manually By name By color + By score \ No newline at end of file