Allow user to sort by priority

pull/660/head
Quentin Hibon 5 years ago
parent 2d488a67f2
commit e7f9ae9a99

@ -104,6 +104,11 @@ class ListHabitsMenu @Inject constructor(
return true
}
R.id.actionSortPriority -> {
behavior.onSortByPriority()
return true
}
else -> return false
}
}

@ -65,6 +65,10 @@
<item
android:id="@+id/actionSortScore"
android:title="@string/by_score"/>
<item
android:id="@+id/actionSortPriority"
android:title="@string/by_priority"/>
</menu>
</item>
</menu>

@ -159,6 +159,7 @@
<string name="by_name">By name</string>
<string name="by_color">By color</string>
<string name="by_score">By score</string>
<string name="by_priority">By priority</string>
<string name="export">Export</string>
<string name="long_press_to_edit">Press-and-hold to change the value</string>
<string name="change_value">Change value</string>

@ -250,6 +250,8 @@ public abstract class HabitList implements Iterable<Habit>
BY_COLOR_DESC,
BY_SCORE_ASC,
BY_SCORE_DESC,
BY_POSITION
BY_PRIORITY_ASC,
BY_PRIORITY_DESC,
BY_POSITION;
}
}

@ -157,6 +157,24 @@ public class MemoryHabitList extends HabitList
else return p1.compareTo(p2);
};
Comparator<Habit> priorityComparatorDesc = (h1, h2) ->
{
if (h1.isCompletedToday() != h2.isCompletedToday()) {
return h1.isCompletedToday() ? -1 : 1;
}
if (h1.isNumerical() != h2.isNumerical()) {
return h1.isNumerical() ? -1 : 1;
}
Integer v1 = h1.getCheckmarks().getToday().getValue();
Integer v2 = h2.getCheckmarks().getToday().getValue();
return v2.compareTo(v1);
};
Comparator<Habit> priorityComparatorAsc = (h1, h2) -> priorityComparatorDesc.compare(h2, h1);
if (order == BY_POSITION) return positionComparator;
if (order == BY_NAME_ASC) return nameComparatorAsc;
if (order == BY_NAME_DESC) return nameComparatorDesc;
@ -164,6 +182,8 @@ public class MemoryHabitList extends HabitList
if (order == BY_COLOR_DESC) return colorComparatorDesc;
if (order == BY_SCORE_DESC) return scoreComparatorDesc;
if (order == BY_SCORE_ASC) return scoreComparatorAsc;
if (order == BY_PRIORITY_DESC) return priorityComparatorDesc;
if (order == BY_PRIORITY_ASC) return priorityComparatorAsc;
throw new IllegalStateException();
}

@ -127,6 +127,14 @@ public class ListHabitsMenuBehavior
}
}
public void onSortByPriority() {
if (adapter.getOrder() != HabitList.Order.BY_PRIORITY_ASC) {
adapter.setOrder(HabitList.Order.BY_PRIORITY_ASC);
} else {
adapter.setOrder(HabitList.Order.BY_PRIORITY_DESC);
}
}
public void onToggleNightMode()
{
themeSwitcher.toggleNightMode();

@ -131,6 +131,14 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest
assertThat(orderCaptor.getValue(), equalTo(BY_NAME_ASC));
}
@Test
public void testOnSortPriority()
{
behavior.onSortByPriority();
verify(adapter).setOrder(orderCaptor.capture());
assertThat(orderCaptor.getValue(), equalTo(BY_PRIORITY_DESC));
}
@Test
public void testOnToggleShowArchived()
{

Loading…
Cancel
Save