mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
@@ -319,6 +319,12 @@ public class HabitCardListAdapter
|
|||||||
preferences.setDefaultOrder(order);
|
preferences.setDefaultOrder(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HabitList.Order getOrder()
|
||||||
|
{
|
||||||
|
return cache.getOrder();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects or deselects the item at a given position.
|
* Selects or deselects the item at a given position.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -244,9 +244,12 @@ public abstract class HabitList implements Iterable<Habit>
|
|||||||
|
|
||||||
public enum Order
|
public enum Order
|
||||||
{
|
{
|
||||||
BY_NAME,
|
BY_NAME_ASC,
|
||||||
BY_COLOR,
|
BY_NAME_DESC,
|
||||||
BY_SCORE,
|
BY_COLOR_ASC,
|
||||||
|
BY_COLOR_DESC,
|
||||||
|
BY_SCORE_ASC,
|
||||||
|
BY_SCORE_DESC,
|
||||||
BY_POSITION
|
BY_POSITION
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,37 +120,49 @@ public class MemoryHabitList extends HabitList
|
|||||||
|
|
||||||
private Comparator<Habit> getComparatorByOrder(Order order)
|
private Comparator<Habit> getComparatorByOrder(Order order)
|
||||||
{
|
{
|
||||||
Comparator<Habit> nameComparator =
|
Comparator<Habit> nameComparatorAsc =
|
||||||
(h1, h2) -> h1.getName().compareTo(h2.getName());
|
(h1, h2) -> h1.getName().compareTo(h2.getName());
|
||||||
|
|
||||||
Comparator<Habit> colorComparator = (h1, h2) ->
|
Comparator<Habit> nameComparatorDesc =
|
||||||
|
(h1, h2) -> nameComparatorAsc.compare(h2, h1);
|
||||||
|
|
||||||
|
Comparator<Habit> colorComparatorAsc = (h1, h2) ->
|
||||||
{
|
{
|
||||||
Integer c1 = h1.getColor();
|
Integer c1 = h1.getColor();
|
||||||
Integer c2 = h2.getColor();
|
Integer c2 = h2.getColor();
|
||||||
if (c1.equals(c2)) return nameComparator.compare(h1, h2);
|
if (c1.equals(c2)) return nameComparatorAsc.compare(h1, h2);
|
||||||
else return c1.compareTo(c2);
|
else return c1.compareTo(c2);
|
||||||
};
|
};
|
||||||
|
|
||||||
Comparator<Habit> scoreComparator = (h1, h2) ->
|
Comparator<Habit> colorComparatorDesc =
|
||||||
|
(h1, h2) -> colorComparatorAsc.compare(h2, h1);
|
||||||
|
|
||||||
|
Comparator<Habit> scoreComparatorDesc = (h1, h2) ->
|
||||||
{
|
{
|
||||||
Double s1 = h1.getScores().getTodayValue();
|
Double s1 = h1.getScores().getTodayValue();
|
||||||
Double s2 = h2.getScores().getTodayValue();
|
Double s2 = h2.getScores().getTodayValue();
|
||||||
if (s1.equals(s2)) return nameComparator.compare(h1, h2);
|
if (s1.equals(s2)) return nameComparatorAsc.compare(h1, h2);
|
||||||
else return s2.compareTo(s1);
|
else return s2.compareTo(s1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Comparator<Habit> scoreComparatorAsc =
|
||||||
|
(h1, h2) -> scoreComparatorDesc.compare(h2, h1);
|
||||||
|
|
||||||
Comparator<Habit> positionComparator = (h1, h2) ->
|
Comparator<Habit> positionComparator = (h1, h2) ->
|
||||||
{
|
{
|
||||||
Integer p1 = h1.getPosition();
|
Integer p1 = h1.getPosition();
|
||||||
Integer p2 = h2.getPosition();
|
Integer p2 = h2.getPosition();
|
||||||
if (p1.equals(p2)) return nameComparator.compare(h1, h2);
|
if (p1.equals(p2)) return nameComparatorAsc.compare(h1, h2);
|
||||||
else return p1.compareTo(p2);
|
else return p1.compareTo(p2);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (order == BY_POSITION) return positionComparator;
|
if (order == BY_POSITION) return positionComparator;
|
||||||
if (order == BY_NAME) return nameComparator;
|
if (order == BY_NAME_ASC) return nameComparatorAsc;
|
||||||
if (order == BY_COLOR) return colorComparator;
|
if (order == BY_NAME_DESC) return nameComparatorDesc;
|
||||||
if (order == BY_SCORE) return scoreComparator;
|
if (order == BY_COLOR_ASC) return colorComparatorAsc;
|
||||||
|
if (order == BY_COLOR_DESC) return colorComparatorDesc;
|
||||||
|
if (order == BY_SCORE_DESC) return scoreComparatorDesc;
|
||||||
|
if (order == BY_SCORE_ASC) return scoreComparatorAsc;
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,11 @@ public class ListHabitsMenuBehavior
|
|||||||
|
|
||||||
public void onSortByColor()
|
public void onSortByColor()
|
||||||
{
|
{
|
||||||
adapter.setOrder(HabitList.Order.BY_COLOR);
|
if (adapter.getOrder() != HabitList.Order.BY_COLOR_ASC) {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_COLOR_ASC);
|
||||||
|
} else {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_COLOR_DESC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSortByManually()
|
public void onSortByManually()
|
||||||
@@ -107,12 +111,20 @@ public class ListHabitsMenuBehavior
|
|||||||
|
|
||||||
public void onSortByScore()
|
public void onSortByScore()
|
||||||
{
|
{
|
||||||
adapter.setOrder(HabitList.Order.BY_SCORE);
|
if (adapter.getOrder() != HabitList.Order.BY_SCORE_DESC) {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_SCORE_DESC);
|
||||||
|
} else {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_SCORE_ASC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSortByName()
|
public void onSortByName()
|
||||||
{
|
{
|
||||||
adapter.setOrder(HabitList.Order.BY_NAME);
|
if (adapter.getOrder() != HabitList.Order.BY_NAME_ASC) {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_NAME_ASC);
|
||||||
|
} else {
|
||||||
|
adapter.setOrder(HabitList.Order.BY_NAME_DESC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onToggleNightMode()
|
public void onToggleNightMode()
|
||||||
@@ -137,6 +149,8 @@ public class ListHabitsMenuBehavior
|
|||||||
void setFilter(HabitMatcher build);
|
void setFilter(HabitMatcher build);
|
||||||
|
|
||||||
void setOrder(HabitList.Order order);
|
void setOrder(HabitList.Order order);
|
||||||
|
|
||||||
|
HabitList.Order getOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Screen
|
public interface Screen
|
||||||
|
|||||||
@@ -144,7 +144,13 @@ public class HabitListTest extends BaseUnitTest
|
|||||||
assertThat(list.getByPosition(2), equalTo(h4));
|
assertThat(list.getByPosition(2), equalTo(h4));
|
||||||
assertThat(list.getByPosition(3), equalTo(h2));
|
assertThat(list.getByPosition(3), equalTo(h2));
|
||||||
|
|
||||||
list.setOrder(BY_NAME);
|
list.setOrder(BY_NAME_DESC);
|
||||||
|
assertThat(list.getByPosition(0), equalTo(h4));
|
||||||
|
assertThat(list.getByPosition(1), equalTo(h3));
|
||||||
|
assertThat(list.getByPosition(2), equalTo(h2));
|
||||||
|
assertThat(list.getByPosition(3), equalTo(h1));
|
||||||
|
|
||||||
|
list.setOrder(BY_NAME_ASC);
|
||||||
assertThat(list.getByPosition(0), equalTo(h1));
|
assertThat(list.getByPosition(0), equalTo(h1));
|
||||||
assertThat(list.getByPosition(1), equalTo(h2));
|
assertThat(list.getByPosition(1), equalTo(h2));
|
||||||
assertThat(list.getByPosition(2), equalTo(h3));
|
assertThat(list.getByPosition(2), equalTo(h3));
|
||||||
@@ -154,12 +160,18 @@ public class HabitListTest extends BaseUnitTest
|
|||||||
list.add(h1);
|
list.add(h1);
|
||||||
assertThat(list.getByPosition(0), equalTo(h1));
|
assertThat(list.getByPosition(0), equalTo(h1));
|
||||||
|
|
||||||
list.setOrder(BY_COLOR);
|
list.setOrder(BY_COLOR_ASC);
|
||||||
assertThat(list.getByPosition(0), equalTo(h3));
|
assertThat(list.getByPosition(0), equalTo(h3));
|
||||||
assertThat(list.getByPosition(1), equalTo(h4));
|
assertThat(list.getByPosition(1), equalTo(h4));
|
||||||
assertThat(list.getByPosition(2), equalTo(h1));
|
assertThat(list.getByPosition(2), equalTo(h1));
|
||||||
assertThat(list.getByPosition(3), equalTo(h2));
|
assertThat(list.getByPosition(3), equalTo(h2));
|
||||||
|
|
||||||
|
list.setOrder(BY_COLOR_DESC);
|
||||||
|
assertThat(list.getByPosition(0), equalTo(h2));
|
||||||
|
assertThat(list.getByPosition(1), equalTo(h1));
|
||||||
|
assertThat(list.getByPosition(2), equalTo(h4));
|
||||||
|
assertThat(list.getByPosition(3), equalTo(h3));
|
||||||
|
|
||||||
list.setOrder(BY_POSITION);
|
list.setOrder(BY_POSITION);
|
||||||
assertThat(list.getByPosition(0), equalTo(h3));
|
assertThat(list.getByPosition(0), equalTo(h3));
|
||||||
assertThat(list.getByPosition(1), equalTo(h1));
|
assertThat(list.getByPosition(1), equalTo(h1));
|
||||||
@@ -284,7 +296,7 @@ public class HabitListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void testReorder_onSortedList() throws Exception
|
public void testReorder_onSortedList() throws Exception
|
||||||
{
|
{
|
||||||
habitList.setOrder(BY_SCORE);
|
habitList.setOrder(BY_SCORE_DESC);
|
||||||
Habit h1 = habitsArray.get(1);
|
Habit h1 = habitsArray.get(1);
|
||||||
Habit h2 = habitsArray.get(2);
|
Habit h2 = habitsArray.get(2);
|
||||||
thrown.expect(IllegalStateException.class);
|
thrown.expect(IllegalStateException.class);
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ public class PreferencesTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_POSITION));
|
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_POSITION));
|
||||||
|
|
||||||
prefs.setDefaultOrder(HabitList.Order.BY_SCORE);
|
prefs.setDefaultOrder(HabitList.Order.BY_SCORE_DESC);
|
||||||
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_SCORE));
|
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_SCORE_DESC));
|
||||||
|
|
||||||
storage.putString("pref_default_order", "BOGUS");
|
storage.putString("pref_default_order", "BOGUS");
|
||||||
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_POSITION));
|
assertThat(prefs.getDefaultOrder(), equalTo(HabitList.Order.BY_POSITION));
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
behavior.onSortByColor();
|
behavior.onSortByColor();
|
||||||
verify(adapter).setOrder(orderCaptor.capture());
|
verify(adapter).setOrder(orderCaptor.capture());
|
||||||
assertThat(orderCaptor.getValue(), equalTo(BY_COLOR));
|
assertThat(orderCaptor.getValue(), equalTo(BY_COLOR_ASC));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -120,7 +120,7 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
behavior.onSortByScore();
|
behavior.onSortByScore();
|
||||||
verify(adapter).setOrder(orderCaptor.capture());
|
verify(adapter).setOrder(orderCaptor.capture());
|
||||||
assertThat(orderCaptor.getValue(), equalTo(BY_SCORE));
|
assertThat(orderCaptor.getValue(), equalTo(BY_SCORE_DESC));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -128,7 +128,7 @@ public class ListHabitsMenuBehaviorTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
behavior.onSortByName();
|
behavior.onSortByName();
|
||||||
verify(adapter).setOrder(orderCaptor.capture());
|
verify(adapter).setOrder(orderCaptor.capture());
|
||||||
assertThat(orderCaptor.getValue(), equalTo(BY_NAME));
|
assertThat(orderCaptor.getValue(), equalTo(BY_NAME_ASC));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user