diff --git a/src/com/timsu/astrid/activities/TagListSubActivity.java b/src/com/timsu/astrid/activities/TagListSubActivity.java index c85520ffc..9ff6a1937 100644 --- a/src/com/timsu/astrid/activities/TagListSubActivity.java +++ b/src/com/timsu/astrid/activities/TagListSubActivity.java @@ -55,6 +55,7 @@ import com.timsu.astrid.data.tag.TagIdentifier; import com.timsu.astrid.data.tag.TagModelForView; import com.timsu.astrid.data.task.TaskIdentifier; import com.timsu.astrid.data.task.TaskModelForList; +import com.timsu.astrid.utilities.DialogUtilities; /** @@ -316,7 +317,13 @@ public class TagListSubActivity extends SubActivity { case CONTEXT_SHOWHIDE_ID: tag = tagArray.get(item.getGroupId()); tag.toggleHideFromMainList(); - getTagController().saveTag(tag); + try { + getTagController().saveTag(tag); + } catch (Exception e) { + DialogUtilities.okDialog(getParent(), "Error: You probably " + + "already have a tag named '" + tag.getName() + "'!", + null); + } fillData(); return true; } diff --git a/src/com/timsu/astrid/activities/TaskList.java b/src/com/timsu/astrid/activities/TaskList.java index a260bbb80..153e8ee5e 100644 --- a/src/com/timsu/astrid/activities/TaskList.java +++ b/src/com/timsu/astrid/activities/TaskList.java @@ -74,7 +74,7 @@ public class TaskList extends Activity { private static final int MAX_FLING_OTHER_AXIS = 60; /** Minimum velocity a fling must have to trigger motion */ - private static final int FLING_VEL_THRESHOLD = 300; + private static final int FLING_VEL_THRESHOLD = 200; // view components private ViewFlipper viewFlipper; @@ -174,11 +174,12 @@ public class TaskList extends Activity { } /** Gesture detector switches between sub-activities */ - private class AstridGestureDetector extends SimpleOnGestureListener { + class AstridGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { - Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) + + if(Constants.DEBUG) + Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) + ", vel: " + velocityX); if(Math.abs(e1.getY() - e2.getY()) > MAX_FLING_OTHER_AXIS) @@ -186,7 +187,7 @@ public class TaskList extends Activity { // flick R to L if(e1.getX() - e2.getX() > FLING_DIST_THRESHOLD && - Math.abs(velocityX) > FLING_VEL_THRESHOLD) { + Math.abs((int)velocityX) > FLING_VEL_THRESHOLD) { switch(getCurrentSubActivity().getActivityCode()) { case AC_TASK_LIST: @@ -199,7 +200,7 @@ public class TaskList extends Activity { // flick L to R else if(e2.getX() - e1.getX() > FLING_DIST_THRESHOLD && - Math.abs(velocityX) > FLING_VEL_THRESHOLD) { + Math.abs((int)velocityX) > FLING_VEL_THRESHOLD) { switch(getCurrentSubActivity().getActivityCode()) { case AC_TASK_LIST_W_TAG: @@ -231,8 +232,8 @@ public class TaskList extends Activity { // and flip to them switch(getCurrentSubActivity().getActivityCode()) { case AC_TASK_LIST: - viewFlipper.setInAnimation(mInAnimationForward); - viewFlipper.setOutAnimation(mOutAnimationForward); + //viewFlipper.setInAnimation(mInAnimationForward); + //viewFlipper.setOutAnimation(mOutAnimationForward); switch(activity) { case AC_TAG_LIST: viewFlipper.showNext(); @@ -245,21 +246,21 @@ public class TaskList extends Activity { case AC_TAG_LIST: switch(activity) { case AC_TASK_LIST: - viewFlipper.setInAnimation(mInAnimationBackward); - viewFlipper.setOutAnimation(mOutAnimationBackward); + //viewFlipper.setInAnimation(mInAnimationBackward); + //viewFlipper.setOutAnimation(mOutAnimationBackward); viewFlipper.showPrevious(); break; case AC_TASK_LIST_W_TAG: - viewFlipper.setInAnimation(mInAnimationForward); - viewFlipper.setOutAnimation(mOutAnimationForward); + //viewFlipper.setInAnimation(mInAnimationForward); + //viewFlipper.setOutAnimation(mOutAnimationForward); viewFlipper.showNext(); break; } break; case AC_TASK_LIST_W_TAG: - viewFlipper.setInAnimation(mInAnimationBackward); - viewFlipper.setOutAnimation(mOutAnimationBackward); + //viewFlipper.setInAnimation(mInAnimationBackward); + //viewFlipper.setOutAnimation(mOutAnimationBackward); switch(activity) { case AC_TAG_LIST: viewFlipper.showPrevious(); @@ -331,8 +332,8 @@ public class TaskList extends Activity { if(hasFocus && shouldCloseInstance) { // user wants to quit finish(); - } else - getCurrentSubActivity().onWindowFocusChanged(hasFocus); + }/* else + getCurrentSubActivity().onWindowFocusChanged(hasFocus);*/ } @Override diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java index c64d12531..5fff52cc6 100644 --- a/src/com/timsu/astrid/activities/TaskListAdapter.java +++ b/src/com/timsu/astrid/activities/TaskListAdapter.java @@ -19,8 +19,8 @@ package com.timsu.astrid.activities; import java.text.Format; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; import java.util.List; import android.app.Activity; @@ -51,7 +51,6 @@ import com.timsu.astrid.R; import com.timsu.astrid.data.alerts.AlertController; import com.timsu.astrid.data.enums.Importance; import com.timsu.astrid.data.tag.TagController; -import com.timsu.astrid.data.tag.TagModelForView; import com.timsu.astrid.data.task.TaskController; import com.timsu.astrid.data.task.TaskIdentifier; import com.timsu.astrid.data.task.TaskModelForList; @@ -95,7 +94,7 @@ public class TaskListAdapter extends ArrayAdapter { "MM/dd HH:mm"); private final Activity activity; - private List objects; + private ArrayList objects; private int resource; private LayoutInflater inflater; private TaskListAdapterHooks hooks; @@ -112,8 +111,8 @@ public class TaskListAdapter extends ArrayAdapter { * */ public interface TaskListAdapterHooks { - List getTaskArray(); - List getTagsFor(TaskModelForList task); + ArrayList getTaskArray(); + String getTagsFor(TaskModelForList task); TaskController taskController(); TagController tagController(); void performItemClick(View v, int position); @@ -134,7 +133,7 @@ public class TaskListAdapter extends ArrayAdapter { * @param hooks */ public TaskListAdapter(Activity activity, int resource, - List objects, TaskListAdapterHooks hooks) { + ArrayList objects, TaskListAdapterHooks hooks) { super(activity, resource, objects); inflater = (LayoutInflater)activity.getSystemService( @@ -223,6 +222,9 @@ public class TaskListAdapter extends ArrayAdapter { private void setupView(View view, final TaskModelForList task) { Resources r = activity.getResources(); + if(task == null) + return; + view.setTag(task); setFieldContentsAndVisibility(view, task); @@ -480,15 +482,8 @@ public class TaskListAdapter extends ArrayAdapter { if(visibleFields.TAGS || isExpanded) { String cachedResult = task.getCachedLabel(KEY_TAGS); if(cachedResult == null) { - List alltags = hooks.getTagsFor(task); - StringBuilder tagString = new StringBuilder(); - for(Iterator i = alltags.iterator(); i.hasNext(); ) { - TagModelForView tag = i.next(); - tagString.append(tag.getName()); - if(i.hasNext()) - tagString.append(", "); - } - if(alltags.size() > 0) + String tagString = hooks.getTagsFor(task); + if(!tagString.equals("")) cachedResult = r.getString(R.string.taskList_tagsPrefix) + " " + tagString; else @@ -547,6 +542,26 @@ public class TaskListAdapter extends ArrayAdapter { } + /** + * Removes the item at the specified position in the list (not reltaed + * to task identifier number + * + * @param listView parent view to refresh + * @param position the index of the item + */ + public void removeItem(ListView listView, int position) { + View view = listView.getChildAt(position); + view.setVisibility(View.GONE); + objects.set(position, null); + } + + /** + * Refresh the item given at the specified position in the list (not + * related to task identifier number) + * + * @param listView the parent view to refresh + * @param position the index of the item + */ public void refreshItem(ListView listView, int position) { View view = listView.getChildAt(position); TaskModelForList task = hooks.getTaskArray().get(position); diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java index c4197cadd..7f8ba02f6 100644 --- a/src/com/timsu/astrid/activities/TaskListSubActivity.java +++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java @@ -127,7 +127,7 @@ public class TaskListSubActivity extends SubActivity { // other instance variables private Map tagMap; private ArrayList taskArray; - private HashMap> taskTags; + private HashMap taskTags; private Long selectedTaskId = null; private TaskModelForList selectedTask = null; private Handler handler = null; @@ -141,7 +141,7 @@ public class TaskListSubActivity extends SubActivity { private static SortMode sortMode = SortMode.AUTO; private static boolean sortReverse = false; private TagModelForView filterTag = null; - private boolean suppressReload = false; + private int editedObjectPosition = -1; /* ====================================================================== * ======================================================= initialization @@ -174,7 +174,6 @@ public class TaskListSubActivity extends SubActivity { reLoadRunnable = new Runnable() { @Override public void run() { - suppressReload = true; handler.post(new Runnable() { @Override public void run() { @@ -212,7 +211,6 @@ public class TaskListSubActivity extends SubActivity { if(variables.containsKey(NOTIF_REPEAT_TOKEN)) repeatInterval = variables.getLong(NOTIF_REPEAT_TOKEN); flags = variables.getInt(NOTIF_FLAGS_TOKEN); - suppressReload = true; showNotificationAlert(selectedTask, repeatInterval, flags); } @@ -421,10 +419,8 @@ public class TaskListSubActivity extends SubActivity { return true; if(filterTag == null) { - for(TagModelForView tags : taskTags.get(task)) { - if(tags != null && tags.shouldHideFromMainList()) - return true; - } + if(taskTags.get(task).contains(TagModelForView.HIDDEN_FROM_MAIN_LIST_PREFIX)) + return true; } return false; @@ -453,13 +449,13 @@ public class TaskListSubActivity extends SubActivity { // read tags and apply filters tagMap = getTagController().getAllTagsAsMap(getParent()); - taskTags = new HashMap>(); - + taskTags = new HashMap(); + StringBuilder tagBuilder = new StringBuilder(); for(Iterator i = taskArray.iterator(); i.hasNext();) { TaskModelForList task = i.next(); - if(task.isTaskCompleted()) { - if(!filterShowDone) { + if(!filterShowDone) { + if(task.isTaskCompleted()) { i.remove(); continue; } @@ -472,12 +468,14 @@ public class TaskListSubActivity extends SubActivity { // get list of tags LinkedList tagIds = getTagController().getTaskTags(getParent(), task.getTaskIdentifier()); - LinkedList tags = new LinkedList(); - for(TagIdentifier tagId : tagIds) { - TagModelForView tag = tagMap.get(tagId); - tags.add(tag); + tagBuilder.delete(0, tagBuilder.length()); + for(Iterator j = tagIds.iterator(); j.hasNext(); ) { + TagModelForView tag = tagMap.get(j.next()); + tagBuilder.append(tag.getName()); + if(j.hasNext()) + tagBuilder.append(", "); } - taskTags.put(task, tags); + taskTags.put(task, tagBuilder.toString()); // hide hidden if(!filterShowHidden) { @@ -562,8 +560,8 @@ public class TaskListSubActivity extends SubActivity { class TaskListHooks implements TaskListAdapterHooks { - private HashMap> myTaskTags; - private List myTaskArray; + private HashMap myTaskTags; + private ArrayList myTaskArray; public TaskListHooks() { this.myTaskTags = taskTags; @@ -576,13 +574,12 @@ public class TaskListSubActivity extends SubActivity { } @Override - public List getTagsFor( - TaskModelForList task) { + public String getTagsFor(TaskModelForList task) { return myTaskTags.get(task); } @Override - public List getTaskArray() { + public ArrayList getTaskArray() { return myTaskArray; } @@ -730,20 +727,15 @@ public class TaskListSubActivity extends SubActivity { loadingThread.start(); } }); - } else if(requestCode == ACTIVITY_TAGS) + } else if(requestCode == ACTIVITY_TAGS) { switchToActivity(TaskList.AC_TAG_LIST, null); - } + } else if(requestCode == ACTIVITY_EDIT && editedObjectPosition != -1) { + // refresh, since stuff might have changed... - @Override - public void onWindowFocusChanged(boolean hasFocus) { - // refresh, since stuff might have changed... - if(hasFocus) { - if(suppressReload) { - suppressReload = false; - return; - } + // TODO reload task & tags from database - fillData(); + listAdapter.refreshItem(listView, editedObjectPosition); + editedObjectPosition = -1; } } @@ -758,7 +750,7 @@ public class TaskListSubActivity extends SubActivity { } /** Show a dialog box and delete the task specified */ - private void deleteTask(final TaskIdentifier taskId) { + private void deleteTask(final TaskModelForList task, final int position) { new AlertDialog.Builder(getParent()) .setTitle(R.string.delete_title) .setMessage(R.string.delete_this_task_title) @@ -767,9 +759,8 @@ public class TaskListSubActivity extends SubActivity { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - getTaskController().deleteTask(taskId); - loadingThread = new Thread(reLoadRunnable); - loadingThread.start(); + listAdapter.refreshItem(listView, position); + getTaskController().deleteTask(task.getTaskIdentifier()); } }) .setNegativeButton(android.R.string.cancel, null) @@ -778,6 +769,8 @@ public class TaskListSubActivity extends SubActivity { /** Take you to the task edit page */ private void editTask(TaskModelForList task) { + editedObjectPosition = taskArray.indexOf(task); + Intent intent = new Intent(getParent(), TaskEdit.class); intent.putExtra(TaskEdit.LOAD_INSTANCE_TOKEN, task.getTaskIdentifier().getId()); @@ -802,7 +795,6 @@ public class TaskListSubActivity extends SubActivity { @Override public void launchActivity(Intent intent, int requestCode) { - suppressReload = false; super.launchActivity(intent, requestCode); } @@ -903,12 +895,11 @@ public class TaskListSubActivity extends SubActivity { return true; case TaskListAdapter.CONTEXT_DELETE_ID: task = taskArray.get(item.getGroupId()); - deleteTask(task.getTaskIdentifier()); + deleteTask(task, item.getGroupId()); return true; case TaskListAdapter.CONTEXT_TIMER_ID: task = taskArray.get(item.getGroupId()); toggleTimer(task); - suppressReload = true; return true; case TaskListAdapter.CONTEXT_POSTPONE_ID: task = taskArray.get(item.getGroupId()); @@ -926,7 +917,6 @@ public class TaskListSubActivity extends SubActivity { task.getHiddenUntil(), postponeMillis, false)); getTaskController().saveTask(task); - suppressReload = true; listAdapter.refreshItem(listView, item.getGroupId()); } }); diff --git a/src/com/timsu/astrid/data/task/TaskModelForList.java b/src/com/timsu/astrid/data/task/TaskModelForList.java index fee56a989..2b9cca30c 100644 --- a/src/com/timsu/astrid/data/task/TaskModelForList.java +++ b/src/com/timsu/astrid/data/task/TaskModelForList.java @@ -43,7 +43,6 @@ public class TaskModelForList extends AbstractTaskModel { DEFINITE_DUE_DATE, PREFERRED_DUE_DATE, NOTIFICATIONS, - NOTIFICATION_FLAGS, PROGRESS_PERCENTAGE, COMPLETION_DATE, CREATION_DATE, @@ -201,11 +200,6 @@ public class TaskModelForList extends AbstractTaskModel { return super.getRepeat(); } - @Override - public int getNotificationFlags() { - return super.getNotificationFlags(); - } - @Override public Date getCreationDate() { return super.getCreationDate(); diff --git a/src/com/timsu/astrid/utilities/Constants.java b/src/com/timsu/astrid/utilities/Constants.java index ae6363d0d..39c65c2e6 100644 --- a/src/com/timsu/astrid/utilities/Constants.java +++ b/src/com/timsu/astrid/utilities/Constants.java @@ -13,6 +13,8 @@ public class Constants { /** URL of Astrid Feature Survey */ public static final String SURVEY_URL = "http://www.haveasec.com/survey/m/detail/welcome/bf25e0/"; + public static final boolean DEBUG = false; + // result codes /** Return to the task list view */ @@ -20,4 +22,5 @@ public class Constants { /** Callback to force synchronization */ public static final int RESULT_SYNCHRONIZE = Activity.RESULT_FIRST_USER + 1; + } diff --git a/src/com/timsu/astrid/utilities/Preferences.java b/src/com/timsu/astrid/utilities/Preferences.java index a2bf8a469..a99138e28 100644 --- a/src/com/timsu/astrid/utilities/Preferences.java +++ b/src/com/timsu/astrid/utilities/Preferences.java @@ -44,7 +44,7 @@ public class Preferences { editor.putString(r.getString(R.string.p_fontSize), "20"); } if(!prefs.contains(r.getString(R.string.p_deadlineTime))) { - editor.putString(r.getString(R.string.p_deadlineTime), "7"); + editor.putString(r.getString(R.string.p_deadlineTime), "1"); } if(!prefs.contains(r.getString(R.string.p_notif_defaultRemind))) { editor.putString(r.getString(R.string.p_notif_defaultRemind), "0");