From 79be2aed86734b18771bd872538e74923a68d803 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 13 Jan 2009 00:32:36 +0000 Subject: [PATCH] Fixed swipe to work over a TaskList row, updated the notification for all tasks to search for tasks w/ alerts. --- AndroidManifest.xml | 8 +-- src/com/timsu/astrid/activities/TagList.java | 38 +++++++----- src/com/timsu/astrid/activities/TaskList.java | 62 +++++++++++++------ .../astrid/activities/TaskListAdapter.java | 2 + .../astrid/data/alerts/AlertController.java | 27 +++++++- .../astrid/data/task/TaskController.java | 6 +- .../timsu/astrid/utilities/Notifications.java | 33 +++++++--- 7 files changed, 126 insertions(+), 50 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bffacf4d4..7f3d61b9d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,16 +1,16 @@ + android:versionCode="55" + android:versionName="1.11.10"> + android:value="48" /> - + diff --git a/src/com/timsu/astrid/activities/TagList.java b/src/com/timsu/astrid/activities/TagList.java index 2c23b8c0a..e2bb8da76 100644 --- a/src/com/timsu/astrid/activities/TagList.java +++ b/src/com/timsu/astrid/activities/TagList.java @@ -32,6 +32,7 @@ import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.os.Bundle; +import android.util.Log; import android.view.ContextMenu; import android.view.GestureDetector; import android.view.LayoutInflater; @@ -74,8 +75,6 @@ public class TagList extends Activity { private static final int CONTEXT_DELETE_ID = Menu.FIRST + 11; private static final int CONTEXT_SHOWHIDE_ID = Menu.FIRST + 12; - private static final int FLING_THRESHOLD = 50; - private TagController controller; private TaskController taskController; private ListView listView; @@ -101,21 +100,22 @@ public class TagList extends Activity { gestureDetector = new GestureDetector(new TagListGestureDetector()); } - @Override - public boolean onTouchEvent(MotionEvent ev) { - if (gestureDetector.onTouchEvent(ev)) { - return true; - } - return super.onTouchEvent(ev); - } - class TagListGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if(e1.getX() - e2.getX() > FLING_THRESHOLD) { - setResult(RESULT_CANCELED); - finish(); - return true; + try { + Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) + + ", vel: " + velocityX); + + // flick L to R + if(e2.getX() - e1.getX() > TaskList.FLING_DIST_THRESHOLD && + Math.abs(velocityX) > TaskList.FLING_VEL_THRESHOLD) { + setResult(RESULT_CANCELED); + finish(); + return true; + } + } catch (Exception e) { + // } return false; @@ -237,6 +237,16 @@ public class TagList extends Activity { menu.setHeaderTitle(tagArray.get(position).getName()); } }); + + + listView.setOnTouchListener(new View.OnTouchListener() { + public boolean onTouch(View v, MotionEvent event) { + if (gestureDetector.onTouchEvent(event)) { + return true; + } + return false; + } + }); } @Override diff --git a/src/com/timsu/astrid/activities/TaskList.java b/src/com/timsu/astrid/activities/TaskList.java index 01fc989e8..4684e70d1 100644 --- a/src/com/timsu/astrid/activities/TaskList.java +++ b/src/com/timsu/astrid/activities/TaskList.java @@ -35,6 +35,7 @@ import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import android.util.Log; import android.view.ContextMenu; import android.view.GestureDetector; import android.view.Menu; @@ -95,7 +96,8 @@ public class TaskList extends Activity { private static final int CONTEXT_SORT_REVERSE = Menu.FIRST + 26; private static final int CONTEXT_SORT_GROUP = Menu.FIRST; - private static final int FLING_THRESHOLD = 50; + public static final int FLING_DIST_THRESHOLD = 100; + public static final int FLING_VEL_THRESHOLD = 300; // UI components private TaskController controller; @@ -109,6 +111,7 @@ public class TaskList extends Activity { private List taskArray; private Map> taskTags; private GestureDetector gestureDetector; + private View.OnTouchListener gestureTouchListener; // display filters private static boolean filterShowHidden = false; @@ -163,27 +166,40 @@ public class TaskList extends Activity { // TODO Synchronizer.authenticate(this); gestureDetector = new GestureDetector(new TaskListGestureDetector()); - } - - @Override - public boolean onTouchEvent(MotionEvent ev) { - if (gestureDetector.onTouchEvent(ev)) { - return true; - } - return super.onTouchEvent(ev); + gestureTouchListener = new View.OnTouchListener() { + public boolean onTouch(View v, MotionEvent event) { + if (gestureDetector.onTouchEvent(event)) { + return true; + } + return false; + } + }; } class TaskListGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if(e2.getX() - e1.getX() > FLING_THRESHOLD) { - showTagsView(); - return true; - } else if(e1.getX() - e2.getX() > FLING_THRESHOLD && - !isTopLevelActivity()) { - setResult(RESULT_CANCELED); - finish(); - return true; + try { + Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) + + ", vel: " + velocityX); + + // flick R to L + if(e1.getX() - e2.getX() > FLING_DIST_THRESHOLD && + Math.abs(velocityX) > FLING_VEL_THRESHOLD) { + showTagsView(); + return true; + } + + // flick L to R + else if(e2.getX() - e1.getX() > FLING_DIST_THRESHOLD && + Math.abs(velocityX) > FLING_VEL_THRESHOLD && + !isTopLevelActivity()) { + setResult(RESULT_CANCELED); + finish(); + return true; + } + } catch (Exception e) { + // ignore! } return false; @@ -425,6 +441,10 @@ public class TaskList extends Activity { public void performItemClick(View v, int position) { listView.performItemClick(v, position, 0); } + + public void onCreatedTaskListView(View v, TaskModelForList task) { + v.setOnTouchListener(gestureTouchListener); + } }); listView.setAdapter(tasks); listView.setItemsCanFocus(true); @@ -488,6 +508,8 @@ public class TaskList extends Activity { item.setChecked(sortReverse); } }); + + listView.setOnTouchListener(gestureTouchListener); } /* ====================================================================== @@ -546,7 +568,8 @@ public class TaskList extends Activity { } public boolean isTopLevelActivity() { - return (getIntent().getExtras() == null || + return (getIntent() == null || + getIntent().getExtras() == null || !getIntent().getExtras().containsKey(TAG_TOKEN)); } @@ -618,8 +641,7 @@ public class TaskList extends Activity { return true; case CONTEXT_FILTER_TAG: filterTag = null; - setResult(Constants.RESULT_GO_HOME); - finish(); + fillData(); return true; case CONTEXT_SORT_AUTO: if(sortMode == SortMode.AUTO) diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java index bf4073bbc..328701beb 100644 --- a/src/com/timsu/astrid/activities/TaskListAdapter.java +++ b/src/com/timsu/astrid/activities/TaskListAdapter.java @@ -71,6 +71,7 @@ public class TaskListAdapter extends ArrayAdapter { TaskController getTaskController(); TagController getTagController(); void performItemClick(View v, int position); + void onCreatedTaskListView(View v, TaskModelForList task); } public TaskListAdapter(Activity activity, Context context, int resource, @@ -188,6 +189,7 @@ public class TaskListAdapter extends ArrayAdapter { } setTaskAppearance(task, name, progress); + hooks.onCreatedTaskListView(view, task); } private void addListeners(final int position, final View view) { diff --git a/src/com/timsu/astrid/data/alerts/AlertController.java b/src/com/timsu/astrid/data/alerts/AlertController.java index e42af1a43..a20f26dd9 100644 --- a/src/com/timsu/astrid/data/alerts/AlertController.java +++ b/src/com/timsu/astrid/data/alerts/AlertController.java @@ -20,8 +20,10 @@ package com.timsu.astrid.data.alerts; import java.util.Date; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Set; import android.content.ContentValues; import android.content.Context; @@ -45,7 +47,8 @@ public class AlertController extends AbstractController { new String[] { taskId.idAsString() }, null, null, null); return cursor; } - /** Get a list of tag identifiers for the given task */ + + /** Get a list of alerts for the given task */ public List getTaskAlerts(TaskIdentifier taskId) throws SQLException { List list = new LinkedList(); @@ -67,6 +70,28 @@ public class AlertController extends AbstractController { } } + + /** Get a list of alerts that are set for the future */ + public Set getTasksWithActiveAlerts() throws SQLException { + Set list = new HashSet(); + Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Alert.FIELD_LIST, Alert.DATE + " > ?", + new String[] { Long.toString(System.currentTimeMillis()) }, null, null, null); + + try { + if(cursor.getCount() == 0) + return list; + do { + cursor.moveToNext(); + list.add(new Alert(cursor).getTask()); + } while(!cursor.isLast()); + + return list; + } finally { + cursor.close(); + } + } + /** Remove all alerts from the task */ public boolean removeAlerts(TaskIdentifier taskId) throws SQLException{ diff --git a/src/com/timsu/astrid/data/task/TaskController.java b/src/com/timsu/astrid/data/task/TaskController.java index e00a128cc..74d015de6 100644 --- a/src/com/timsu/astrid/data/task/TaskController.java +++ b/src/com/timsu/astrid/data/task/TaskController.java @@ -21,7 +21,9 @@ package com.timsu.astrid.data.task; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import android.app.Activity; import android.content.ContentValues; @@ -44,8 +46,8 @@ public class TaskController extends AbstractController { // --- task list operations /** Return a list of all active tasks with notifications */ - public List getTasksWithNotifications() { - List list = new ArrayList(); + public Set getTasksWithNotifications() { + Set list = new HashSet(); Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST, String.format("%s < %d AND (%s != 0 OR %s != 0)", AbstractTaskModel.PROGRESS_PERCENTAGE, diff --git a/src/com/timsu/astrid/utilities/Notifications.java b/src/com/timsu/astrid/utilities/Notifications.java index 6da176421..14edc2e6d 100644 --- a/src/com/timsu/astrid/utilities/Notifications.java +++ b/src/com/timsu/astrid/utilities/Notifications.java @@ -3,6 +3,7 @@ package com.timsu.astrid.utilities; import java.util.Date; import java.util.List; import java.util.Random; +import java.util.Set; import android.app.Activity; import android.app.AlarmManager; @@ -97,17 +98,31 @@ public class Notifications extends BroadcastReceiver { } public static void scheduleAllAlarms(Context context) { - TaskController taskController = new TaskController(context); - taskController.open(); - AlertController alertController = new AlertController(context); - alertController.open(); + try { + TaskController taskController = new TaskController(context); + taskController.open(); + AlertController alertController = new AlertController(context); + alertController.open(); + + Set tasks = taskController.getTasksWithNotifications(); + + Set tasksWithAlerts = alertController.getTasksWithActiveAlerts(); + for(TaskIdentifier taskId : tasksWithAlerts) { + try { + tasks.add(taskController.fetchTaskForNotify(taskId)); + } catch (Exception e) { + // task was deleted or something + } + } - List tasks = taskController.getTasksWithNotifications(); - for(TaskModelForNotify task : tasks) - updateAlarm(context, taskController, alertController, task); + for(TaskModelForNotify task : tasks) + updateAlarm(context, taskController, alertController, task); - alertController.close(); - taskController.close(); + alertController.close(); + taskController.close(); + } catch (Exception e) { + Log.e("astrid", "Error scheduling alarms", e); + } } /** Schedules the next notification for this task */