Updates to task list to handle editing, creating, deleting.

pull/14/head
Tim Su 17 years ago
parent 81cd7de0df
commit 3c09c367dc

@ -117,6 +117,7 @@
<string name="taskList_tagsPrefix">Tags:</string>
<string name="taskList_notesPrefix">Notes:</string>
<string name="taskList_createdPrefix">Created:</string>
<string name="taskList_deleted">Deleted</string>
<!-- menu items -->
<string name="taskList_menu_insert">Add</string>
@ -274,6 +275,7 @@ Wish me luck!\n
<!-- Dialog Boxes -->
<skip />
<string name="loading">Loading...</string>
<string name="updating">Updating List...</string>
<string name="information_title">Information</string>
<string name="question_title">Question</string>
<string name="notify_yes">View Task</string>

@ -540,7 +540,7 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
private void discardButtonClick() {
shouldSaveState = false;
setResult(RESULT_CANCELED);
setResult(Constants.RESULT_DISCARD);
finish();
}

@ -98,6 +98,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
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<TaskModelForList> {
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<TaskModelForList> {
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<TaskModelForList> {
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<TaskModelForList> {
/** 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<TaskModelForList> {
}
/**
* 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<TaskModelForList> {
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<TaskModelForList> {
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<TaskModelForList> {
}
});
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();

@ -127,6 +127,7 @@ public class TaskListSubActivity extends SubActivity {
// other instance variables
private Map<TagIdentifier, TagModelForView> tagMap;
private ArrayList<TaskModelForList> taskArray;
private HashMap<Long, TaskModelForList> tasksById;
private HashMap<TaskModelForList, String> 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<TaskModelForList, String>();
StringBuilder tagBuilder = new StringBuilder();
tasksById = new HashMap<Long, TaskModelForList>();
for(Iterator<TaskModelForList> 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() {

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

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

Loading…
Cancel
Save