diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index f190c647e..c7a501d0c 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -130,6 +130,11 @@ public class HabitCardListAdapter return selected.isEmpty(); } + public boolean isSortable() + { + return cache.getOrder() == HabitList.Order.BY_POSITION; + } + /** * Notify the adapter that it has been attached to a ListView. */ diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java index fb059be95..fbb4e51a6 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java @@ -107,6 +107,11 @@ public class HabitCardListCache implements CommandRunner.Listener return data.habits.size(); } + public HabitList.Order getOrder() + { + return filteredHabits.getOrder(); + } + public int getScore(long habitId) { return data.scores.get(habitId); diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java index b193da2c9..fab2680eb 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java @@ -168,7 +168,7 @@ public class HabitCardListView extends RecyclerView { int position = holder.getAdapterPosition(); if (controller != null) controller.onItemLongClick(position); - touchHelper.startDrag(holder); + if(adapter.isSortable()) touchHelper.startDrag(holder); } @Override 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 bd67b839f..78673ad0d 100644 --- a/app/src/main/java/org/isoron/uhabits/models/HabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/HabitList.java @@ -33,13 +33,6 @@ import java.util.*; */ public abstract class HabitList implements Iterable { - public enum Order - { - BY_NAME, - BY_COLOR, - BY_POSITION - } - private ModelObservable observable; @NonNull @@ -55,9 +48,7 @@ public abstract class HabitList implements Iterable public HabitList() { observable = new ModelObservable(); - filter = new HabitMatcherBuilder() - .setArchivedAllowed(true) - .build(); + filter = new HabitMatcherBuilder().setArchivedAllowed(true).build(); } protected HabitList(@NonNull HabitMatcher filter) @@ -113,6 +104,15 @@ public abstract class HabitList implements Iterable return observable; } + public abstract Order getOrder(); + + /** + * Changes the order of the elements on the list. + * + * @param order the new order criterea + */ + public abstract void setOrder(@NonNull Order order); + /** * Returns the index of the given habit in the list, or -1 if the list does * not contain the habit. @@ -156,7 +156,7 @@ public abstract class HabitList implements Iterable public void repair() { - for(Habit h : this) + for (Habit h : this) { h.getCheckmarks().invalidateNewerThan(0); h.getStreaks().invalidateNewerThan(0); @@ -164,13 +164,6 @@ public abstract class HabitList implements Iterable } } - /** - * Changes the order of the elements on the list. - * - * @param order the new order criterea - */ - public abstract void setOrder(Order order); - /** * Returns the number of habits in this list. * @@ -242,4 +235,11 @@ public abstract class HabitList implements Iterable csv.close(); } + + public enum Order + { + BY_NAME, + BY_COLOR, + 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 aa835d1a8..7ccfb1e82 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 @@ -37,16 +37,21 @@ public class MemoryHabitList extends HabitList private Comparator comparator = null; + @NonNull + private Order order; + public MemoryHabitList() { super(); list = new LinkedList<>(); + order = Order.BY_POSITION; } protected MemoryHabitList(@NonNull HabitMatcher matcher) { super(matcher); list = new LinkedList<>(); + order = Order.BY_POSITION; } @Override @@ -92,6 +97,12 @@ public class MemoryHabitList extends HabitList return habits; } + @Override + public Order getOrder() + { + return order; + } + @Override public int indexOf(@NonNull Habit h) { @@ -119,8 +130,9 @@ public class MemoryHabitList extends HabitList } @Override - public void setOrder(Order order) + public void setOrder(@NonNull Order order) { + this.order = order; this.comparator = getComparatorByOrder(order); resort(); } 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 4dcd03705..c901ebae6 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 @@ -129,6 +129,19 @@ public class SQLiteHabitList extends HabitList return new SQLiteHabitList(modelFactory, filter, order); } + @Override + @NonNull + public Order getOrder() + { + return order; + } + + @Override + public void setOrder(@NonNull Order order) + { + this.order = order; + } + @Override public int indexOf(@NonNull Habit h) { @@ -222,6 +235,13 @@ public class SQLiteHabitList extends HabitList getObservable().notifyListeners(); } + @Override + public void repair() + { + super.repair(); + rebuildOrder(); + } + @Override public int size() { @@ -273,7 +293,7 @@ public class SQLiteHabitList extends HabitList break; case BY_COLOR: - query.append("order by color "); + query.append("order by color, name "); break; default: @@ -306,17 +326,4 @@ public class SQLiteHabitList extends HabitList appendOrderBy(query); return query.toString(); } - - @Override - public void repair() - { - super.repair(); - rebuildOrder(); - } - - @Override - public void setOrder(Order order) - { - this.order = order; - } }