Fixed swipe to work over a TaskList row, updated the notification for all tasks to search for tasks w/ alerts.

pull/14/head
Tim Su 16 years ago
parent 836429d700
commit 79be2aed86

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid"
android:versionCode="47"
android:versionName="1.11.3">
android:versionCode="55"
android:versionName="1.11.10">
<meta-data android:name="com.a0soft.gphone.aTrackDog.webURL"
android:value="http://www.weloveastrid.com" />
<meta-data android:name="com.a0soft.gphone.aTrackDog.testVersion"
android:value="45" />
android:value="48" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<!-- uses-permission android:name="android.permission.INTERNET"/-->
<application android:icon="@drawable/icon" android:label="@string/app_name">

@ -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

@ -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<TaskModelForList> taskArray;
private Map<TaskModelForList, List<TagModelForView>> 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)

@ -71,6 +71,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
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<TaskModelForList> {
}
setTaskAppearance(task, name, progress);
hooks.onCreatedTaskListView(view, task);
}
private void addListeners(final int position, final View view) {

@ -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<Date> getTaskAlerts(TaskIdentifier
taskId) throws SQLException {
List<Date> list = new LinkedList<Date>();
@ -67,6 +70,28 @@ public class AlertController extends AbstractController {
}
}
/** Get a list of alerts that are set for the future */
public Set<TaskIdentifier> getTasksWithActiveAlerts() throws SQLException {
Set<TaskIdentifier> list = new HashSet<TaskIdentifier>();
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{

@ -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<TaskModelForNotify> getTasksWithNotifications() {
List<TaskModelForNotify> list = new ArrayList<TaskModelForNotify>();
public Set<TaskModelForNotify> getTasksWithNotifications() {
Set<TaskModelForNotify> list = new HashSet<TaskModelForNotify>();
Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST,
String.format("%s < %d AND (%s != 0 OR %s != 0)",
AbstractTaskModel.PROGRESS_PERCENTAGE,

@ -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<TaskModelForNotify> tasks = taskController.getTasksWithNotifications();
Set<TaskIdentifier> tasksWithAlerts = alertController.getTasksWithActiveAlerts();
for(TaskIdentifier taskId : tasksWithAlerts) {
try {
tasks.add(taskController.fetchTaskForNotify(taskId));
} catch (Exception e) {
// task was deleted or something
}
}
List<TaskModelForNotify> 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 */

Loading…
Cancel
Save