mirror of https://github.com/tasks/tasks
New sort selection activity now works, updates the task list as you'd expect.
parent
796d26955b
commit
0ced4fc3d9
@ -1,30 +1,37 @@
|
|||||||
package com.todoroo.andlib.sql;
|
package com.todoroo.andlib.sql;
|
||||||
|
|
||||||
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
|
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
|
||||||
|
|
||||||
public class Order {
|
public class Order {
|
||||||
private final Object expression;
|
private final Object expression;
|
||||||
private final OrderType orderType;
|
private final OrderType orderType;
|
||||||
|
|
||||||
private Order(Object expression) {
|
private Order(Object expression) {
|
||||||
this(expression, OrderType.ASC);
|
this(expression, OrderType.ASC);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Order(Object expression, OrderType orderType) {
|
private Order(Object expression, OrderType orderType) {
|
||||||
this.expression = expression;
|
this.expression = expression;
|
||||||
this.orderType = orderType;
|
this.orderType = orderType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Order asc(Object expression) {
|
public static Order asc(Object expression) {
|
||||||
return new Order(expression);
|
return new Order(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Order desc(Object expression) {
|
public static Order desc(Object expression) {
|
||||||
return new Order(expression, OrderType.DESC);
|
return new Order(expression, OrderType.DESC);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return expression + SPACE + orderType;
|
return expression + SPACE + orderType;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public Order reverse() {
|
||||||
|
if(orderType == OrderType.ASC)
|
||||||
|
return new Order(expression, OrderType.DESC);
|
||||||
|
else
|
||||||
|
return new Order(expression, OrderType.ASC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,146 +1,151 @@
|
|||||||
package com.todoroo.astrid.widget;
|
package com.todoroo.astrid.widget;
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.appwidget.AppWidgetManager;
|
import android.appwidget.AppWidgetManager;
|
||||||
import android.appwidget.AppWidgetProvider;
|
import android.appwidget.AppWidgetProvider;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
|
|
||||||
import com.timsu.astrid.R;
|
import com.timsu.astrid.R;
|
||||||
import com.todoroo.andlib.data.TodorooCursor;
|
import com.todoroo.andlib.data.TodorooCursor;
|
||||||
import com.todoroo.andlib.service.Autowired;
|
import com.todoroo.andlib.service.Autowired;
|
||||||
import com.todoroo.andlib.service.ContextManager;
|
import com.todoroo.andlib.service.ContextManager;
|
||||||
import com.todoroo.andlib.service.DependencyInjectionService;
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
||||||
import com.todoroo.andlib.utility.DateUtilities;
|
import com.todoroo.andlib.utility.DateUtilities;
|
||||||
import com.todoroo.astrid.activity.TaskEditActivity;
|
import com.todoroo.astrid.activity.SortSelectionActivity;
|
||||||
import com.todoroo.astrid.activity.TaskListActivity;
|
import com.todoroo.astrid.activity.TaskEditActivity;
|
||||||
import com.todoroo.astrid.api.Filter;
|
import com.todoroo.astrid.activity.TaskListActivity;
|
||||||
import com.todoroo.astrid.core.CoreFilterExposer;
|
import com.todoroo.astrid.api.Filter;
|
||||||
import com.todoroo.astrid.dao.Database;
|
import com.todoroo.astrid.core.CoreFilterExposer;
|
||||||
import com.todoroo.astrid.model.Task;
|
import com.todoroo.astrid.dao.Database;
|
||||||
import com.todoroo.astrid.service.AstridDependencyInjector;
|
import com.todoroo.astrid.model.Task;
|
||||||
import com.todoroo.astrid.service.TaskService;
|
import com.todoroo.astrid.service.AstridDependencyInjector;
|
||||||
|
import com.todoroo.astrid.service.TaskService;
|
||||||
public class TasksWidget extends AppWidgetProvider {
|
import com.todoroo.astrid.utility.Preferences;
|
||||||
|
|
||||||
static {
|
public class TasksWidget extends AppWidgetProvider {
|
||||||
AstridDependencyInjector.initialize();
|
|
||||||
}
|
static {
|
||||||
|
AstridDependencyInjector.initialize();
|
||||||
public final static int[] TEXT_IDS = { R.id.task_1, R.id.task_2,
|
}
|
||||||
R.id.task_3, R.id.task_4, R.id.task_5 };
|
|
||||||
public final static int[] SEPARATOR_IDS = { R.id.separator_1,
|
public final static int[] TEXT_IDS = { R.id.task_1, R.id.task_2,
|
||||||
R.id.separator_2, R.id.separator_3, R.id.separator_4 };
|
R.id.task_3, R.id.task_4, R.id.task_5 };
|
||||||
|
public final static int[] SEPARATOR_IDS = { R.id.separator_1,
|
||||||
@Override
|
R.id.separator_2, R.id.separator_3, R.id.separator_4 };
|
||||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
|
|
||||||
int[] appWidgetIds) {
|
@Override
|
||||||
|
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
|
||||||
try {
|
int[] appWidgetIds) {
|
||||||
super.onUpdate(context, appWidgetManager, appWidgetIds);
|
|
||||||
|
try {
|
||||||
// Start in service to prevent Application Not Responding timeout
|
super.onUpdate(context, appWidgetManager, appWidgetIds);
|
||||||
context.startService(new Intent(context, UpdateService.class));
|
|
||||||
} catch (SecurityException e) {
|
// Start in service to prevent Application Not Responding timeout
|
||||||
// :(
|
context.startService(new Intent(context, UpdateService.class));
|
||||||
}
|
} catch (SecurityException e) {
|
||||||
}
|
// :(
|
||||||
|
}
|
||||||
public static class UpdateService extends Service {
|
}
|
||||||
|
|
||||||
@Autowired
|
public static class UpdateService extends Service {
|
||||||
Database database;
|
|
||||||
|
@Autowired
|
||||||
@Autowired
|
Database database;
|
||||||
TaskService taskService;
|
|
||||||
|
@Autowired
|
||||||
@Override
|
TaskService taskService;
|
||||||
public void onStart(Intent intent, int startId) {
|
|
||||||
ContextManager.setContext(this);
|
@Override
|
||||||
RemoteViews updateViews = buildUpdate(this);
|
public void onStart(Intent intent, int startId) {
|
||||||
|
ContextManager.setContext(this);
|
||||||
ComponentName thisWidget = new ComponentName(this,
|
RemoteViews updateViews = buildUpdate(this);
|
||||||
TasksWidget.class);
|
|
||||||
AppWidgetManager manager = AppWidgetManager.getInstance(this);
|
ComponentName thisWidget = new ComponentName(this,
|
||||||
manager.updateAppWidget(thisWidget, updateViews);
|
TasksWidget.class);
|
||||||
}
|
AppWidgetManager manager = AppWidgetManager.getInstance(this);
|
||||||
|
manager.updateAppWidget(thisWidget, updateViews);
|
||||||
@Override
|
}
|
||||||
public IBinder onBind(Intent intent) {
|
|
||||||
return null;
|
@Override
|
||||||
}
|
public IBinder onBind(Intent intent) {
|
||||||
|
return null;
|
||||||
@SuppressWarnings("nls")
|
}
|
||||||
public RemoteViews buildUpdate(Context context) {
|
|
||||||
DependencyInjectionService.getInstance().inject(this);
|
@SuppressWarnings("nls")
|
||||||
|
public RemoteViews buildUpdate(Context context) {
|
||||||
RemoteViews views = null;
|
DependencyInjectionService.getInstance().inject(this);
|
||||||
|
|
||||||
views = new RemoteViews(context.getPackageName(),
|
RemoteViews views = null;
|
||||||
R.layout.widget_initialized);
|
|
||||||
|
views = new RemoteViews(context.getPackageName(),
|
||||||
int[] textIDs = TEXT_IDS;
|
R.layout.widget_initialized);
|
||||||
int[] separatorIDs = SEPARATOR_IDS;
|
|
||||||
int numberOfTasks = 5;
|
int[] textIDs = TEXT_IDS;
|
||||||
|
int[] separatorIDs = SEPARATOR_IDS;
|
||||||
Intent listIntent = new Intent(context, TaskListActivity.class);
|
int numberOfTasks = 5;
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
|
|
||||||
listIntent, 0);
|
Intent listIntent = new Intent(context, TaskListActivity.class);
|
||||||
views.setOnClickPendingIntent(R.id.taskbody, pendingIntent);
|
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
|
||||||
|
listIntent, 0);
|
||||||
TodorooCursor<Task> cursor = null;
|
views.setOnClickPendingIntent(R.id.taskbody, pendingIntent);
|
||||||
try {
|
|
||||||
Filter inboxFilter = CoreFilterExposer.buildInboxFilter(getResources());
|
TodorooCursor<Task> cursor = null;
|
||||||
inboxFilter.sqlQuery += "ORDER BY " + TaskService.defaultTaskOrder() + " LIMIT " + numberOfTasks;
|
try {
|
||||||
|
Filter inboxFilter = CoreFilterExposer.buildInboxFilter(getResources());
|
||||||
database.openForReading();
|
int sort = Preferences.getInt(SortSelectionActivity.PREF_SORT_SORT, 0);
|
||||||
cursor = taskService.fetchFiltered(inboxFilter, null, Task.TITLE, Task.DUE_DATE);
|
int flags = Preferences.getInt(SortSelectionActivity.PREF_SORT_FLAGS, 0);
|
||||||
Task task = new Task();
|
String query = SortSelectionActivity.adjustSortAndFlags(
|
||||||
for (int i = 0; i < cursor.getCount() && i < numberOfTasks; i++) {
|
inboxFilter.sqlQuery, sort, flags) + " LIMIT " + numberOfTasks;
|
||||||
cursor.moveToPosition(i);
|
|
||||||
task.readFromCursor(cursor);
|
database.openForReading();
|
||||||
|
cursor = taskService.fetchFiltered(query, null, Task.TITLE, Task.DUE_DATE);
|
||||||
String textContent = "";
|
Task task = new Task();
|
||||||
int textColor = Color.WHITE;
|
for (int i = 0; i < cursor.getCount() && i < numberOfTasks; i++) {
|
||||||
|
cursor.moveToPosition(i);
|
||||||
textContent = task.getValue(Task.TITLE);
|
task.readFromCursor(cursor);
|
||||||
if(task.hasDueDate() && task.getValue(Task.DUE_DATE) < DateUtilities.now())
|
|
||||||
textColor = context.getResources().getColor(R.color.task_list_overdue);
|
String textContent = "";
|
||||||
|
int textColor = Color.WHITE;
|
||||||
if(i > 0)
|
|
||||||
views.setViewVisibility(separatorIDs[i-1], View.VISIBLE);
|
textContent = task.getValue(Task.TITLE);
|
||||||
views.setTextViewText(textIDs[i], textContent);
|
if(task.hasDueDate() && task.getValue(Task.DUE_DATE) < DateUtilities.now())
|
||||||
views.setTextColor(textIDs[i], textColor);
|
textColor = context.getResources().getColor(R.color.task_list_overdue);
|
||||||
}
|
|
||||||
|
if(i > 0)
|
||||||
for(int i = cursor.getCount() - 1; i < separatorIDs.length; i++) {
|
views.setViewVisibility(separatorIDs[i-1], View.VISIBLE);
|
||||||
if(i >= 0)
|
views.setTextViewText(textIDs[i], textContent);
|
||||||
views.setViewVisibility(separatorIDs[i], View.INVISIBLE);
|
views.setTextColor(textIDs[i], textColor);
|
||||||
if(i > cursor.getCount() - 1)
|
}
|
||||||
views.setViewVisibility(textIDs[i], View.INVISIBLE);
|
|
||||||
}
|
for(int i = cursor.getCount() - 1; i < separatorIDs.length; i++) {
|
||||||
} catch (Exception e) {
|
if(i >= 0)
|
||||||
// can happen if database is not ready
|
views.setViewVisibility(separatorIDs[i], View.INVISIBLE);
|
||||||
Log.e("WIDGET-UPDATE", "Error updating widget", e);
|
if(i > cursor.getCount() - 1)
|
||||||
} finally {
|
views.setViewVisibility(textIDs[i], View.INVISIBLE);
|
||||||
if(cursor != null)
|
}
|
||||||
cursor.close();
|
} catch (Exception e) {
|
||||||
}
|
// can happen if database is not ready
|
||||||
|
Log.e("WIDGET-UPDATE", "Error updating widget", e);
|
||||||
Intent editIntent = new Intent(context, TaskEditActivity.class);
|
} finally {
|
||||||
pendingIntent = PendingIntent.getActivity(context, 0,
|
if(cursor != null)
|
||||||
editIntent, 0);
|
cursor.close();
|
||||||
views.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
|
}
|
||||||
|
|
||||||
return views;
|
Intent editIntent = new Intent(context, TaskEditActivity.class);
|
||||||
}
|
pendingIntent = PendingIntent.getActivity(context, 0,
|
||||||
|
editIntent, 0);
|
||||||
}
|
views.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
|
||||||
}
|
|
||||||
|
return views;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue