diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index c5aaf6ffd..7ee4e4a1c 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -78,15 +78,6 @@ - - - - - - - @@ -230,6 +221,14 @@ + + + + + + diff --git a/astrid/common-src/com/commonsware/cwac/tlv/TouchListView.java b/astrid/common-src/com/commonsware/cwac/tlv/TouchListView.java index 781176ad9..ad9542aff 100644 --- a/astrid/common-src/com/commonsware/cwac/tlv/TouchListView.java +++ b/astrid/common-src/com/commonsware/cwac/tlv/TouchListView.java @@ -24,7 +24,6 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.util.AttributeSet; import android.view.GestureDetector; -import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -47,7 +46,7 @@ public class TouchListView extends ListView { private int mCoordOffset; // the difference between screen coordinates and coordinates in this view private DragListener mDragListener; private DropListener mDropListener; - private RemoveListener mRemoveListener; + private SwipeListener mSwipeListener; private int mUpperBound; private int mLowerBound; private int mHeight; @@ -91,31 +90,6 @@ public class TouchListView extends ListView { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { - if (mRemoveListener != null && mGestureDetector == null) { - if (mRemoveMode == FLING) { - mGestureDetector = new GestureDetector(getContext(), new SimpleOnGestureListener() { - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, - float velocityY) { - if (mDragView != null) { - if (velocityX > 1000) { - Rect r = mTempRect; - mDragView.getDrawingRect(r); - if ( e2.getX() > r.right * 2 / 3) { - // fast fling right with release near the right edge of the screen - stopDragging(); - mRemoveListener.remove(mFirstDragPos); - unExpandViews(true); - } - } - // flinging while dragging should have no effect - return true; - } - return false; - } - }); - } - } if (mDragListener != null || mDropListener != null) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: @@ -288,14 +262,14 @@ public class TouchListView extends ListView { stopDragging(); if (mRemoveMode == SLIDE_RIGHT && ev.getX() > r.left+(r.width()*3/4)) { - if (mRemoveListener != null) { - mRemoveListener.remove(mFirstDragPos); + if (mSwipeListener!= null) { + mSwipeListener.swipeRight(mFirstDragPos); } unExpandViews(true); } else if (mRemoveMode == SLIDE_LEFT && ev.getX() < r.left+(r.width()/4)) { - if (mRemoveListener != null) { - mRemoveListener.remove(mFirstDragPos); - } + if (mSwipeListener!= null) { + mSwipeListener.swipeLeft(mFirstDragPos); + } unExpandViews(true); } else { if (mDropListener != null && mDragPos >= 0 && mDragPos < getCount()) { @@ -417,8 +391,8 @@ public class TouchListView extends ListView { mDropListener = l; } - public void setRemoveListener(RemoveListener l) { - mRemoveListener = l; + public void setSwipeListener(SwipeListener l) { + mSwipeListener = l; } public interface DragListener { @@ -427,7 +401,8 @@ public class TouchListView extends ListView { public interface DropListener { void drop(int from, int to); } - public interface RemoveListener { - void remove(int which); + public interface SwipeListener { + void swipeLeft(int which); + void swipeRight(int which); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java new file mode 100644 index 000000000..15f66eba5 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java @@ -0,0 +1,76 @@ +package com.todoroo.astrid.gtasks; + +import android.os.Bundle; + +import com.commonsware.cwac.tlv.TouchListView; +import com.commonsware.cwac.tlv.TouchListView.DropListener; +import com.commonsware.cwac.tlv.TouchListView.SwipeListener; +import com.todoroo.andlib.data.Property.IntegerProperty; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Functions; +import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.QueryTemplate; +import com.todoroo.astrid.activity.DraggableTaskListActivity; +import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.Task; + +public class GtasksListActivity extends DraggableTaskListActivity { + + @Autowired private GtasksTaskListUpdater gtasksTaskListUpdater; + + // --- gtasks temp stuff + private final String listId = "17816916813445155620:0:0"; //$NON-NLS-1$ + Filter builtInFilter = new Filter("Tim's Tasks", "Tim's Tasks", new QueryTemplate().join( //$NON-NLS-1$ //$NON-NLS-2$ + Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and( + MetadataCriteria.withKey("gtasks"), //$NON-NLS-1$ + TaskCriteria.isVisible(), + TaskCriteria.notDeleted(), + Metadata.VALUE2.eq(listId))).orderBy( + Order.asc(Functions.cast(Metadata.VALUE5, "INTEGER"))), //$NON-NLS-1$ + null); + + // --- end + + @Override + protected IntegerProperty getIndentProperty() { + return GtasksMetadata.INDENT; + } + + @Override + public void onCreate(Bundle icicle) { + getIntent().putExtra(TOKEN_FILTER, builtInFilter); + super.onCreate(icicle); + + getTouchListView().setDropListener(dropListener); + getTouchListView().setSwipeListener(swipeListener); + } + + private final TouchListView.DropListener dropListener = new DropListener() { + @Override + public void drop(int from, int to) { + // meep + } + }; + + private final TouchListView.SwipeListener swipeListener = new SwipeListener() { + @Override + public void swipeRight(int which) { + long targetTaskId = taskAdapter.getItemId(which); + gtasksTaskListUpdater.indent(listId, targetTaskId, 1); + taskAdapter.notifyDataSetChanged(); + } + + @Override + public void swipeLeft(int which) { + long targetTaskId = taskAdapter.getItemId(which); + gtasksTaskListUpdater.indent(listId, targetTaskId, -1); + taskAdapter.notifyDataSetChanged(); + } + }; + +} diff --git a/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java index e24493c56..5ceb8743a 100644 --- a/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java @@ -16,16 +16,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property.IntegerProperty; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Functions; -import com.todoroo.andlib.sql.Join; -import com.todoroo.andlib.sql.Order; -import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.adapter.TaskAdapter; -import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; -import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; /** @@ -36,40 +27,24 @@ import com.todoroo.astrid.data.Task; */ public class DraggableTaskListActivity extends TaskListActivity { - // --- gtasks temp stuff - private final String listId = "17816916813445155620:0:0"; //$NON-NLS-1$ - Filter builtInFilter = new Filter("Tim's Tasks", "Tim's Tasks", new QueryTemplate().join( //$NON-NLS-1$ //$NON-NLS-2$ - Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and( - MetadataCriteria.withKey("gtasks"), //$NON-NLS-1$ - TaskCriteria.isVisible(), - TaskCriteria.notDeleted(), - Metadata.VALUE2.eq(listId))).orderBy( - Order.asc(Functions.cast(Metadata.VALUE5, "INTEGER"))), //$NON-NLS-1$ - null); - - // --- end - - // --- task list - public static final IntegerProperty INDENT = new IntegerProperty(Metadata.TABLE, - Metadata.VALUE4.name); - - public static final IntegerProperty ORDER = new IntegerProperty(Metadata.TABLE, - Metadata.VALUE5.name); + /** + * If database has an indent property for determining how rows are indented, + * return it here so we can read it from the cursor and use it + */ + protected IntegerProperty getIndentProperty() { + return null; + } - public IntegerProperty getIndentProperty() { - return INDENT; + public TouchListView getTouchListView() { + TouchListView tlv = (TouchListView) getListView(); + return tlv; } @Override public void onCreate(Bundle icicle) { - getIntent().putExtra(TOKEN_FILTER, builtInFilter); super.onCreate(icicle); - - TouchListView tlv = (TouchListView) getListView(); - tlv.setDropListener(onDrop); - tlv.setRemoveListener(onRemove); } @Override @@ -139,6 +114,8 @@ public class DraggableTaskListActivity extends TaskListActivity { ViewHolder viewHolder = (ViewHolder)container.getTag(); viewHolder.completeBox.setOnClickListener(completeBoxListener); + // TODO add listeners + // context menu listener //container.findViewById(R.id.task_row).setOnCreateContextMenuListener(listener); @@ -147,25 +124,4 @@ public class DraggableTaskListActivity extends TaskListActivity { } } - // --- drag and swipe handlers - - private final TouchListView.DropListener onDrop = new TouchListView.DropListener() { - @Override - public void drop(int from, int to) { - /*String item = adapter.getItem(from); - - adapter.remove(item); - adapter.insert(item, to);*/ - } - }; - - private final TouchListView.RemoveListener onRemove = new TouchListView.RemoveListener() { - @Override - public void remove(int which) { - // new GtasksIndentAction.GtasksIncreaseIndentAction().indent(adapter.getItemId(which)); - // adapter.notifyDataSetChanged(); - // adapter.remove(adapter.getItem(which)); - } - }; - }