Fixes caused by thread stuff.

pull/14/head
Tim Su 17 years ago
parent 40fc726657
commit 480a54bfa1

@ -36,6 +36,7 @@
<string name="repeat_days">Day(s)</string> <string name="repeat_days">Day(s)</string>
<string name="repeat_weeks">Week(s)</string> <string name="repeat_weeks">Week(s)</string>
<string name="repeat_months">Month(s)</string> <string name="repeat_months">Month(s)</string>
<string name="repeat_hours">Hour(s)</string>
<!-- Plurals --> <!-- Plurals -->
<plurals name="Ntasks"> <plurals name="Ntasks">

@ -77,6 +77,10 @@ abstract public class SubActivity {
return false; return false;
} }
void onSaveInstanceState(Bundle outState) {
//
}
// --- pass-through to activity methods // --- pass-through to activity methods
public Resources getResources() { public Resources getResources() {

@ -279,7 +279,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
String cachedResult = task.getCachedLabel(KEY_NAME); String cachedResult = task.getCachedLabel(KEY_NAME);
if(cachedResult == null) { if(cachedResult == null) {
String nameValue = task.getName(); String nameValue = task.getName();
if(task.getHiddenUntil() != null && task.getHiddenUntil().after(new Date())) { if(task.getHiddenUntil() != null && task.getHiddenUntil().getTime() > System.currentTimeMillis()) {
nameValue = "(" + r.getString(R.string.taskList_hiddenPrefix) + ") " + nameValue; nameValue = "(" + r.getString(R.string.taskList_hiddenPrefix) + ") " + nameValue;
task.putCachedLabel(KEY_HIDDEN, CACHE_TRUE); task.putCachedLabel(KEY_HIDDEN, CACHE_TRUE);
} }

@ -129,7 +129,8 @@ public class TaskListSubActivity extends SubActivity {
private HashMap<TaskModelForList, LinkedList<TagModelForView>> taskTags; private HashMap<TaskModelForList, LinkedList<TagModelForView>> taskTags;
private Long selectedTaskId = null; private Long selectedTaskId = null;
private TaskModelForList selectedTask = null; private TaskModelForList selectedTask = null;
private Handler handler; private Handler handler = null;
private Thread loadingThread = null;
// display filters // display filters
private static boolean filterShowHidden = false; private static boolean filterShowHidden = false;
@ -137,6 +138,7 @@ public class TaskListSubActivity extends SubActivity {
private static SortMode sortMode = SortMode.AUTO; private static SortMode sortMode = SortMode.AUTO;
private static boolean sortReverse = false; private static boolean sortReverse = false;
private TagModelForView filterTag = null; private TagModelForView filterTag = null;
private boolean suppressReload = false;
/* ====================================================================== /* ======================================================================
* ======================================================= initialization * ======================================================= initialization
@ -167,7 +169,7 @@ public class TaskListSubActivity extends SubActivity {
setupUIComponents(); setupUIComponents();
// time to go! // time to go!
new Thread(new Runnable() { loadingThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
loadTaskListSort(); loadTaskListSort();
@ -185,13 +187,16 @@ public class TaskListSubActivity extends SubActivity {
if(variables.containsKey(NOTIF_REPEAT_TOKEN)) if(variables.containsKey(NOTIF_REPEAT_TOKEN))
repeatInterval = variables.getLong(NOTIF_REPEAT_TOKEN); repeatInterval = variables.getLong(NOTIF_REPEAT_TOKEN);
flags = variables.getInt(NOTIF_FLAGS_TOKEN); flags = variables.getInt(NOTIF_FLAGS_TOKEN);
suppressReload = true;
showNotificationAlert(selectedTask, showNotificationAlert(selectedTask,
repeatInterval, flags); repeatInterval, flags);
} }
}); });
} }
loadingThread = null;
} }
}).start(); });
loadingThread.start();
} }
@ -295,7 +300,7 @@ public class TaskListSubActivity extends SubActivity {
Date definite = task.getDefiniteDueDate(); Date definite = task.getDefiniteDueDate();
Date preferred = task.getPreferredDueDate(); Date preferred = task.getPreferredDueDate();
if(definite != null && preferred != null) { if(definite != null && preferred != null) {
if(preferred.before(new Date())) if(preferred.getTime() < System.currentTimeMillis())
return definite.getTime(); return definite.getTime();
return preferred.getTime(); return preferred.getTime();
} else if(definite != null) } else if(definite != null)
@ -403,7 +408,7 @@ public class TaskListSubActivity extends SubActivity {
} }
/** Fill in the Task List with our tasks */ /** Fill in the Task List with our tasks */
private void fillData() { private synchronized void fillData() {
// get a cursor to the task list // get a cursor to the task list
Cursor tasksCursor; Cursor tasksCursor;
if(filterTag != null) { if(filterTag != null) {
@ -519,63 +524,73 @@ public class TaskListSubActivity extends SubActivity {
loadingText.setVisibility(View.GONE); loadingText.setVisibility(View.GONE);
} }
}); });
} }
/** Set up the adapter for our task list */ class TaskListHooks implements TaskListAdapterHooks {
private void setUpListUI() {
// set up our adapter
TaskListAdapter tasks = new TaskListAdapter(getParent(),
R.layout.task_list_row, taskArray, new TaskListAdapterHooks() {
@Override
public TagController tagController() {
return getTagController();
}
@Override private HashMap<TaskModelForList, LinkedList<TagModelForView>> myTaskTags;
public List<TagModelForView> getTagsFor( private List<TaskModelForList> myTaskArray;
TaskModelForList task) {
return taskTags.get(task);
}
@Override public TaskListHooks() {
public List<TaskModelForList> getTaskArray() { this.myTaskTags = taskTags;
return taskArray; this.myTaskArray = taskArray;
} }
@Override @Override
public TaskController taskController() { public TagController tagController() {
return getTaskController(); return getTagController();
} }
@Override @Override
public void performItemClick(View v, int position) { public List<TagModelForView> getTagsFor(
listView.performItemClick(v, position, 0); TaskModelForList task) {
} return myTaskTags.get(task);
}
public void onCreatedTaskListView(View v, TaskModelForList task) { @Override
v.setOnTouchListener(getGestureListener()); public List<TaskModelForList> getTaskArray() {
} return myTaskArray;
}
@Override @Override
public void editItem(TaskModelForList task) { public TaskController taskController() {
editTask(task); return getTaskController();
} }
@Override @Override
public void toggleTimerOnItem(TaskModelForList task) { public void performItemClick(View v, int position) {
toggleTimer(task); listView.performItemClick(v, position, 0);
} }
@Override public void onCreatedTaskListView(View v, TaskModelForList task) {
public void setSelectedItem(TaskIdentifier taskId) { v.setOnTouchListener(getGestureListener());
if(taskId == null) { }
selectedTaskId = null;
selectedTask = null; @Override
} else public void editItem(TaskModelForList task) {
selectedTaskId = taskId.getId(); editTask(task);
} }
});
@Override
public void toggleTimerOnItem(TaskModelForList task) {
toggleTimer(task);
}
@Override
public void setSelectedItem(TaskIdentifier taskId) {
if(taskId == null) {
selectedTaskId = null;
selectedTask = null;
} else
selectedTaskId = taskId.getId();
}
}
/** Set up the adapter for our task list */
private void setUpListUI() {
// set up our adapter
TaskListAdapter tasks = new TaskListAdapter(getParent(),
R.layout.task_list_row, taskArray, new TaskListHooks());
listView.setAdapter(tasks); listView.setAdapter(tasks);
listView.setItemsCanFocus(true); listView.setItemsCanFocus(true);
@ -660,21 +675,24 @@ public class TaskListSubActivity extends SubActivity {
return false; return false;
} }
@Override
protected void onSaveInstanceState(Bundle outState) {
if(loadingThread != null)
loadingThread.stop();
}
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Constants.RESULT_SYNCHRONIZE) { if(resultCode == Constants.RESULT_SYNCHRONIZE) {
Synchronizer.synchronize(getParent(), false, new SynchronizerListener() { Synchronizer.synchronize(getParent(), false, new SynchronizerListener() {
@Override @Override
public void onSynchronizerFinished(int numServicesSynced) { public void onSynchronizerFinished(int numServicesSynced) {
if(numServicesSynced == 0) if(numServicesSynced == 0) {
DialogUtilities.okDialog(getParent(), getResources().getString( DialogUtilities.okDialog(getParent(), getResources().getString(
R.string.sync_no_synchronizers), null); R.string.sync_no_synchronizers), null);
new Thread(new Runnable() { return;
@Override }
public void run() { fillData();
fillData();
}
});
} }
}); });
} else if(requestCode == ACTIVITY_TAGS) } else if(requestCode == ACTIVITY_TAGS)
@ -685,6 +703,11 @@ public class TaskListSubActivity extends SubActivity {
public void onWindowFocusChanged(boolean hasFocus) { public void onWindowFocusChanged(boolean hasFocus) {
// refresh, since stuff might have changed... // refresh, since stuff might have changed...
if(hasFocus) { if(hasFocus) {
if(suppressReload) {
suppressReload = false;
return;
}
fillData(); fillData();
} }
} }
@ -772,6 +795,19 @@ public class TaskListSubActivity extends SubActivity {
sortMode = SortMode.values()[sortId - 1]; sortMode = SortMode.values()[sortId - 1];
} }
/** Compute date after postponing tasks */
private Date computePostponeDate(Date input, long postponeMillis,
boolean shiftFromTodayIfPast) {
if(input != null) {
if(shiftFromTodayIfPast && input.getTime() < System.currentTimeMillis())
input = new Date();
input = new Date(input.getTime() +
postponeMillis);
}
return input;
}
@Override @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) { public boolean onMenuItemSelected(int featureId, MenuItem item) {
final TaskModelForList task; final TaskModelForList task;
@ -839,18 +875,13 @@ public class TaskListSubActivity extends SubActivity {
public void onNumbersPicked(int[] values) { public void onNumbersPicked(int[] values) {
long postponeMillis = (values[0] * 24 + values[1]) * long postponeMillis = (values[0] * 24 + values[1]) *
3600L * 1000; 3600L * 1000;
Date preferred = task.getPreferredDueDate(); task.setPreferredDueDate(computePostponeDate(
if(preferred != null) { task.getPreferredDueDate(), postponeMillis, true));
preferred = new Date(preferred.getTime() + task.setDefiniteDueDate(computePostponeDate(
postponeMillis); task.getDefiniteDueDate(), postponeMillis, true));
task.setPreferredDueDate(preferred); task.setHiddenUntil(computePostponeDate(
} task.getHiddenUntil(), postponeMillis, false));
Date definite = task.getDefiniteDueDate();
if(definite != null) {
definite = new Date(definite.getTime() +
postponeMillis);
task.setDefiniteDueDate(definite);
}
getTaskController().saveTask(task); getTaskController().saveTask(task);
fillData(); fillData();
} }

@ -45,6 +45,12 @@ public enum RepeatInterval {
input.setMonth(input.getMonth() + number); input.setMonth(input.getMonth() + number);
} }
}, },
HOURS(R.string.repeat_hours) {
@Override
public void offsetDateBy(Date input, int number) {
input.setHours(input.getHours() + number);
}
},
; ;

@ -382,7 +382,7 @@ public abstract class AbstractTaskModel extends AbstractModel {
protected boolean isHidden() { protected boolean isHidden() {
if(getHiddenUntil() == null) if(getHiddenUntil() == null)
return false; return false;
return getHiddenUntil().after(new Date()); return getHiddenUntil().getTime() > System.currentTimeMillis();
} }
protected Date getCreationDate() { protected Date getCreationDate() {
@ -522,7 +522,7 @@ public abstract class AbstractTaskModel extends AbstractModel {
protected void putDate(String fieldName, Date date) { protected void putDate(String fieldName, Date date) {
if(date == null) if(date == null)
putIfChangedFromDatabase(fieldName, (Long)null); putIfChangedFromDatabase(fieldName, 0);
else else
putIfChangedFromDatabase(fieldName, date.getTime()); putIfChangedFromDatabase(fieldName, date.getTime());
} }

@ -259,7 +259,7 @@ public class TaskController extends AbstractController {
// task timer was updated, update notification bar // task timer was updated, update notification bar
if(values.containsKey(AbstractTaskModel.TIMER_START)) { if(values.containsKey(AbstractTaskModel.TIMER_START)) {
// show notification bar if timer was started // show notification bar if timer was started
if(values.get(AbstractTaskModel.TIMER_START) != null) { if(values.getAsLong(AbstractTaskModel.TIMER_START) != 0) {
Notifications.showTimingNotification(context, Notifications.showTimingNotification(context,
task.getTaskIdentifier(), task.getName()); task.getTaskIdentifier(), task.getName());
} else { } else {

@ -243,4 +243,9 @@ public class TaskModelForList extends AbstractTaskModel {
public void setImportance(Importance importance) { public void setImportance(Importance importance) {
super.setImportance(importance); super.setImportance(importance);
} }
@Override
public void setHiddenUntil(Date hiddenUntil) {
super.setHiddenUntil(hiddenUntil);
}
} }

Loading…
Cancel
Save