Caught an exception & defer-load when you change your filters in the main task list

pull/14/head
Tim Su 17 years ago
parent ade7846578
commit 25f4d31837

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid" package="com.timsu.astrid"
android:versionCode="89" android:versionCode="90"
android:versionName="2.4.4"> android:versionName="2.4.5">
<meta-data android:name="com.a0soft.gphone.aTrackDog.webURL" <meta-data android:name="com.a0soft.gphone.aTrackDog.webURL"
android:value="http://www.weloveastrid.com" /> android:value="http://www.weloveastrid.com" />

@ -32,6 +32,7 @@ import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.util.Log;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -160,10 +161,12 @@ public class TagListSubActivity extends SubActivity {
/** Fill in the Tag List with our tags */ /** Fill in the Tag List with our tags */
private void fillData() { private void fillData() {
try {
tagArray = getTagController().getAllTags(getParent()); tagArray = getTagController().getAllTags(getParent());
// perform sort
sortTagArray(); sortTagArray();
} catch (Exception e) {
Log.e("astrid", "Error loading list", e);
}
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override

@ -132,6 +132,7 @@ public class TaskListSubActivity extends SubActivity {
private TaskModelForList selectedTask = null; private TaskModelForList selectedTask = null;
private Handler handler = null; private Handler handler = null;
private Thread loadingThread = null; private Thread loadingThread = null;
private Thread reLoadThread = null;
// display filters // display filters
private static boolean filterShowHidden = false; private static boolean filterShowHidden = false;
@ -169,30 +170,35 @@ public class TaskListSubActivity extends SubActivity {
setupUIComponents(); setupUIComponents();
reLoadThread = new Thread(new Runnable() {
@Override
public void run() {
suppressReload = true;
handler.post(new Runnable() {
@Override
public void run() {
loadingText.setVisibility(View.VISIBLE);
listView.setAdapter(null);
}
});
fillData();
}
});
// time to go! // time to go!
loadingThread = new Thread(new Runnable() { loadingThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
loadTaskListSort();
try {
fillData();
} catch (StaleDataException e) {
// happens when you rotate the screen whiel the thread is
// still running. i don't think it's avoidable?
Log.w("astrid", "StaleDataException", e);
} catch (final Exception e) {
Log.e("astrid", "Error loading task list", e);
handler.post(new Runnable() { handler.post(new Runnable() {
@Override
public void run() { public void run() {
DialogUtilities.okDialog(getParent(), loadingText.setVisibility(View.VISIBLE);
"Error loading task list, FYI. If you " +
"continue to have problems, please let " +
"me know!\n\n" + e.getClass().getSimpleName() +
": " + e.getMessage(),
null);
} }
}); });
}
loadTaskListSort();
fillData();
// open up reminder box // open up reminder box
if(variables != null && variables.containsKey(NOTIF_FLAGS_TOKEN) && if(variables != null && variables.containsKey(NOTIF_FLAGS_TOKEN) &&
@ -216,7 +222,6 @@ public class TaskListSubActivity extends SubActivity {
} }
}); });
loadingThread.start(); loadingThread.start();
} }
/** Initialize UI components */ /** Initialize UI components */
@ -427,7 +432,13 @@ 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() {
int hiddenTasks = 0; // # of tasks hidden
int completedTasks = 0; // # of tasks on list that are done
Log.e("astrid", "fill data called! ", new Throwable("hai")); // XXX
try {
// get a cursor to the task list // get a cursor to the task list
Cursor tasksCursor; Cursor tasksCursor;
if(filterTag != null) { if(filterTag != null) {
@ -444,8 +455,6 @@ public class TaskListSubActivity extends SubActivity {
taskArray = getTaskController().createTaskListFromCursor(tasksCursor); taskArray = getTaskController().createTaskListFromCursor(tasksCursor);
// read tags and apply filters // read tags and apply filters
int hiddenTasks = 0; // # of tasks hidden
int completedTasks = 0; // # of tasks on list that are done
tagMap = getTagController().getAllTagsAsMap(getParent()); tagMap = getTagController().getAllTagsAsMap(getParent());
taskTags = new HashMap<TaskModelForList, LinkedList<TagModelForView>>(); taskTags = new HashMap<TaskModelForList, LinkedList<TagModelForView>>();
@ -485,8 +494,25 @@ public class TaskListSubActivity extends SubActivity {
if(task.isTaskCompleted()) if(task.isTaskCompleted())
completedTasks++; completedTasks++;
} }
int activeTasks = taskArray.size() - completedTasks; } catch (StaleDataException e) {
// happens when you rotate the screen while the thread is
// still running. i don't think it's avoidable?
Log.w("astrid", "StaleDataException", e);
} catch (final Exception e) {
Log.e("astrid", "Error loading task list", e);
handler.post(new Runnable() {
public void run() {
DialogUtilities.okDialog(getParent(),
"Error loading task list, FYI. If you " +
"continue to have problems, please let " +
"me know!\n\n" + e.getClass().getSimpleName() +
": " + e.getMessage(),
null);
}
});
}
int activeTasks = taskArray.size() - completedTasks;
// sort task list // sort task list
Collections.sort(taskArray, new Comparator<TaskModelForList>() { Collections.sort(taskArray, new Comparator<TaskModelForList>() {
@Override @Override
@ -722,6 +748,7 @@ 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) {
Log.e("astrid", "window focus changed. suppress: " + suppressReload); // XXX
if(suppressReload) { if(suppressReload) {
suppressReload = false; suppressReload = false;
return; return;
@ -911,12 +938,12 @@ public class TaskListSubActivity extends SubActivity {
case CONTEXT_FILTER_HIDDEN: case CONTEXT_FILTER_HIDDEN:
TaskListSubActivity.filterShowHidden = !filterShowHidden; TaskListSubActivity.filterShowHidden = !filterShowHidden;
saveTaskListSort(); saveTaskListSort();
fillData(); reLoadThread.start();
return true; return true;
case CONTEXT_FILTER_DONE: case CONTEXT_FILTER_DONE:
TaskListSubActivity.filterShowDone = !filterShowDone; TaskListSubActivity.filterShowDone = !filterShowDone;
saveTaskListSort(); saveTaskListSort();
fillData(); reLoadThread.start();
return true; return true;
case CONTEXT_FILTER_TAG: case CONTEXT_FILTER_TAG:
switchToActivity(TaskList.AC_TASK_LIST, null); switchToActivity(TaskList.AC_TASK_LIST, null);

Loading…
Cancel
Save