diff --git a/api/src/com/todoroo/andlib/sql/Order.java b/api/src/com/todoroo/andlib/sql/Order.java index e863912ab..70479da90 100644 --- a/api/src/com/todoroo/andlib/sql/Order.java +++ b/api/src/com/todoroo/andlib/sql/Order.java @@ -7,8 +7,12 @@ package com.todoroo.andlib.sql; import static com.todoroo.andlib.sql.SqlConstants.SPACE; +import java.util.ArrayList; +import java.util.List; + public class Order { private final Object expression; + private final List secondaryExpressions; private final OrderType orderType; private Order(Object expression) { @@ -18,6 +22,7 @@ public class Order { private Order(Object expression, OrderType orderType) { this.expression = expression; this.orderType = orderType; + this.secondaryExpressions = new ArrayList(); } public static Order asc(Object expression) { @@ -28,9 +33,26 @@ public class Order { return new Order(expression, OrderType.DESC); } + public void addSecondaryExpression(Order secondary) { + secondaryExpressions.add(secondary); + } + + public void removeSecondaryExpression(Order secondary) { + secondaryExpressions.remove(secondary); + } + @Override public String toString() { - return expression + SPACE + orderType; + StringBuilder sb = new StringBuilder(); + sb.append(expression.toString()) + .append(SPACE) + .append(orderType.toString()); + + for (Order secondary : secondaryExpressions) { + sb.append(", ").append(secondary.toString()); //$NON-NLS-1$ + } + + return sb.toString(); } public Order reverse() { diff --git a/api/src/com/todoroo/astrid/core/SortHelper.java b/api/src/com/todoroo/astrid/core/SortHelper.java index 1c5b1555d..bba27bdf0 100644 --- a/api/src/com/todoroo/astrid/core/SortHelper.java +++ b/api/src/com/todoroo/astrid/core/SortHelper.java @@ -93,20 +93,23 @@ public class SortHelper { case SORT_DUE: order = Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), Functions.now() + "*2", adjustedDueDateFunction()) + "+" + Task.IMPORTANCE + - "+3*" + Task.COMPLETION_DATE + ", " + Task.TITLE); + "+3*" + Task.COMPLETION_DATE); break; case SORT_IMPORTANCE: order = Order.asc(Task.IMPORTANCE + "*" + (2*DateUtilities.now()) + //$NON-NLS-1$ "+" + Functions.caseStatement(Task.DUE_DATE.eq(0), //$NON-NLS-1$ 2 * DateUtilities.now(), - Task.DUE_DATE) + "+8*" + Task.COMPLETION_DATE + ", " + Task.TITLE); + Task.DUE_DATE) + "+8*" + Task.COMPLETION_DATE); break; case SORT_MODIFIED: - order = Order.desc(Task.MODIFICATION_DATE + ", " + Task.TITLE); + order = Order.desc(Task.MODIFICATION_DATE); break; default: order = defaultTaskOrder(); } + if (sortType != SORT_ALPHA) + order.addSecondaryExpression(Order.asc(Task.TITLE)); + return order; } @@ -119,7 +122,7 @@ public class SortHelper { return Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), Functions.now() + "*2", adjustedDueDateFunction()) + " + " + (2 * DateUtilities.ONE_DAY) + " * " + - Task.IMPORTANCE + " + 2*" + Task.COMPLETION_DATE + ", " + Task.TITLE); + Task.IMPORTANCE + " + 2*" + Task.COMPLETION_DATE); } @SuppressWarnings("nls")