diff --git a/res/values/strings.xml b/res/values/strings.xml
index efe657d73..b64f912d5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -117,6 +117,7 @@
Tags:
Notes:
Created:
+ Deleted
Add
@@ -274,6 +275,7 @@ Wish me luck!\n
Loading...
+ Updating List...
Information
Question
View Task
diff --git a/src/com/timsu/astrid/activities/TaskEdit.java b/src/com/timsu/astrid/activities/TaskEdit.java
index 998eae89c..1f36e1c62 100644
--- a/src/com/timsu/astrid/activities/TaskEdit.java
+++ b/src/com/timsu/astrid/activities/TaskEdit.java
@@ -540,7 +540,7 @@ public class TaskEdit extends TaskModificationTabbedActivity {
private void discardButtonClick() {
shouldSaveState = false;
- setResult(RESULT_CANCELED);
+ setResult(Constants.RESULT_DISCARD);
finish();
}
diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java
index 5fff52cc6..53fdf75da 100644
--- a/src/com/timsu/astrid/activities/TaskListAdapter.java
+++ b/src/com/timsu/astrid/activities/TaskListAdapter.java
@@ -98,6 +98,7 @@ public class TaskListAdapter extends ArrayAdapter {
private int resource;
private LayoutInflater inflater;
private TaskListAdapterHooks hooks;
+ private TextView deletedItemView = new TextView(getContext());
private Integer fontSizePreference;
private AlertController alarmController;
@@ -191,6 +192,9 @@ public class TaskListAdapter extends ArrayAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
+ if(objects.get(position) == null)
+ return deletedItemView;
+
if(view == null) {
view = inflater.inflate(resource, parent, false);
initializeView(view);
@@ -211,6 +215,7 @@ public class TaskListAdapter extends ArrayAdapter {
final TextView name = ((TextView)view.findViewById(R.id.task_name));
if(fontSizePreference != null && fontSizePreference > 0)
name.setTextSize(fontSizePreference);
+ deletedItemView.setText(getContext().getResources().getString(R.string.taskList_deleted));
}
/**
@@ -222,12 +227,13 @@ 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);
+ if(task == null) {
+ return;
+ }
+
final CheckBox progress = ((CheckBox)view.findViewById(R.id.cb1));
progress.setChecked(task.isTaskCompleted());
@@ -266,6 +272,11 @@ public class TaskListAdapter extends ArrayAdapter {
/** Helper method to set the contents and visibility of each field */
private void setFieldContentsAndVisibility(View view, TaskModelForList task) {
+ if(task == null) {
+ view.setVisibility(View.GONE);
+ return;
+ }
+
Resources r = getContext().getResources();
TaskFieldsVisibility visibleFields = Preferences.getTaskFieldsVisibility(activity);
boolean isExpanded = CACHE_TRUE.equals(task.getCachedLabel(KEY_EXPANDED));
@@ -542,19 +553,6 @@ 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)
@@ -630,11 +628,11 @@ public class TaskListAdapter extends ArrayAdapter {
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
TaskModelForList task = (TaskModelForList)v.getTag();
- int position = objects.indexOf(task);
+ int id = (int)task.getTaskIdentifier().getId();
- menu.add(position, CONTEXT_EDIT_ID, Menu.NONE,
+ menu.add(id, CONTEXT_EDIT_ID, Menu.NONE,
R.string.taskList_context_edit);
- menu.add(position, CONTEXT_DELETE_ID, Menu.NONE,
+ menu.add(id, CONTEXT_DELETE_ID, Menu.NONE,
R.string.taskList_context_delete);
int timerTitle;
@@ -642,11 +640,11 @@ public class TaskListAdapter extends ArrayAdapter {
timerTitle = R.string.taskList_context_startTimer;
else
timerTitle = R.string.taskList_context_stopTimer;
- menu.add(position, CONTEXT_TIMER_ID, Menu.NONE, timerTitle);
+ menu.add(id, CONTEXT_TIMER_ID, Menu.NONE, timerTitle);
if(task.getDefiniteDueDate() != null ||
task.getPreferredDueDate() != null)
- menu.add(position, CONTEXT_POSTPONE_ID, Menu.NONE,
+ menu.add(id, CONTEXT_POSTPONE_ID, Menu.NONE,
R.string.taskList_context_postpone);
menu.setHeaderTitle(task.getName());
@@ -664,8 +662,8 @@ public class TaskListAdapter extends ArrayAdapter {
}
});
- Button deleteButton = (Button)view.findViewById(R.id.timer);
- deleteButton.setOnClickListener(new View.OnClickListener() {
+ Button toggleTimerButton = (Button)view.findViewById(R.id.timer);
+ toggleTimerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View parent = (View)v.getParent().getParent().getParent().getParent();
diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java
index 7f8ba02f6..5e39fe41b 100644
--- a/src/com/timsu/astrid/activities/TaskListSubActivity.java
+++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java
@@ -127,6 +127,7 @@ public class TaskListSubActivity extends SubActivity {
// other instance variables
private Map tagMap;
private ArrayList taskArray;
+ private HashMap tasksById;
private HashMap taskTags;
private Long selectedTaskId = null;
private TaskModelForList selectedTask = null;
@@ -141,7 +142,6 @@ public class TaskListSubActivity extends SubActivity {
private static SortMode sortMode = SortMode.AUTO;
private static boolean sortReverse = false;
private TagModelForView filterTag = null;
- private int editedObjectPosition = -1;
/* ======================================================================
* ======================================================= initialization
@@ -177,6 +177,7 @@ public class TaskListSubActivity extends SubActivity {
handler.post(new Runnable() {
@Override
public void run() {
+ loadingText.setText(getParent().getResources().getString(R.string.updating));
loadingText.setVisibility(View.VISIBLE);
}
});
@@ -451,6 +452,7 @@ public class TaskListSubActivity extends SubActivity {
tagMap = getTagController().getAllTagsAsMap(getParent());
taskTags = new HashMap();
StringBuilder tagBuilder = new StringBuilder();
+ tasksById = new HashMap();
for(Iterator i = taskArray.iterator(); i.hasNext();) {
TaskModelForList task = i.next();
@@ -486,6 +488,8 @@ public class TaskListSubActivity extends SubActivity {
}
}
+ tasksById.put(task.getTaskIdentifier().getId(), task);
+
if(task.isTaskCompleted())
completedTasks++;
}
@@ -729,13 +733,11 @@ public class TaskListSubActivity extends SubActivity {
});
} else if(requestCode == ACTIVITY_TAGS) {
switchToActivity(TaskList.AC_TAG_LIST, null);
- } else if(requestCode == ACTIVITY_EDIT && editedObjectPosition != -1) {
+ } else if((requestCode == ACTIVITY_EDIT || requestCode == ACTIVITY_CREATE) &&
+ resultCode != Constants.RESULT_DISCARD) {
// refresh, since stuff might have changed...
-
- // TODO reload task & tags from database
-
- listAdapter.refreshItem(listView, editedObjectPosition);
- editedObjectPosition = -1;
+ loadingThread = new Thread(reLoadRunnable);
+ loadingThread.start();
}
}
@@ -750,7 +752,7 @@ public class TaskListSubActivity extends SubActivity {
}
/** Show a dialog box and delete the task specified */
- private void deleteTask(final TaskModelForList task, final int position) {
+ private void deleteTask(final TaskModelForList task) {
new AlertDialog.Builder(getParent())
.setTitle(R.string.delete_title)
.setMessage(R.string.delete_this_task_title)
@@ -759,7 +761,8 @@ public class TaskListSubActivity extends SubActivity {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- listAdapter.refreshItem(listView, position);
+ listAdapter.remove(task);
+ taskArray.remove(task);
getTaskController().deleteTask(task.getTaskIdentifier());
}
})
@@ -769,8 +772,6 @@ 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());
@@ -890,19 +891,19 @@ public class TaskListSubActivity extends SubActivity {
// --- list context menu items
case TaskListAdapter.CONTEXT_EDIT_ID:
- task = taskArray.get(item.getGroupId());
+ task = tasksById.get((long)item.getGroupId());
editTask(task);
return true;
case TaskListAdapter.CONTEXT_DELETE_ID:
- task = taskArray.get(item.getGroupId());
- deleteTask(task, item.getGroupId());
+ task = tasksById.get((long)item.getGroupId());
+ deleteTask(task);
return true;
case TaskListAdapter.CONTEXT_TIMER_ID:
- task = taskArray.get(item.getGroupId());
+ task = tasksById.get((long)item.getGroupId());
toggleTimer(task);
return true;
case TaskListAdapter.CONTEXT_POSTPONE_ID:
- task = taskArray.get(item.getGroupId());
+ task = tasksById.get((long)item.getGroupId());
DialogUtilities.dayHourPicker(getParent(),
r.getString(R.string.taskList_postpone_dialog),
new OnNNumberPickedListener() {
diff --git a/src/com/timsu/astrid/utilities/Constants.java b/src/com/timsu/astrid/utilities/Constants.java
index 39c65c2e6..be498df7a 100644
--- a/src/com/timsu/astrid/utilities/Constants.java
+++ b/src/com/timsu/astrid/utilities/Constants.java
@@ -20,7 +20,10 @@ public class Constants {
/** Return to the task list view */
public static final int RESULT_GO_HOME = Activity.RESULT_FIRST_USER;
+ /** Discard changes */
+ public static final int RESULT_DISCARD = Activity.RESULT_FIRST_USER + 1;
+
/** Callback to force synchronization */
- public static final int RESULT_SYNCHRONIZE = Activity.RESULT_FIRST_USER + 1;
+ public static final int RESULT_SYNCHRONIZE = Activity.RESULT_FIRST_USER + 2;
}
diff --git a/src/com/timsu/astrid/utilities/StartupReceiver.java b/src/com/timsu/astrid/utilities/StartupReceiver.java
index 852cef71d..9b664091d 100644
--- a/src/com/timsu/astrid/utilities/StartupReceiver.java
+++ b/src/com/timsu/astrid/utilities/StartupReceiver.java
@@ -18,7 +18,7 @@ public class StartupReceiver extends BroadcastReceiver {
}
/** Called when this application is started up */
- public static void onStartupApplication(Context context) {
+ public static void onStartupApplication(final Context context) {
if(hasStartedUp)
return;
@@ -34,9 +34,18 @@ public class StartupReceiver extends BroadcastReceiver {
// if we just got upgraded, set the alarms
boolean justUpgraded = latestSetVersion != version;
+ final int finalVersion = version;
if(justUpgraded) {
- Notifications.scheduleAllAlarms(context);
- Preferences.setCurrentVersion(context, version);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ Notifications.scheduleAllAlarms(context);
+
+ // do this after all alarms are scheduled, so if we're
+ // interrupted, the thread will resume later
+ Preferences.setCurrentVersion(context, finalVersion);
+ }
+ }).start();
}
Preferences.setPreferenceDefaults(context);