diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index fa41044ea..48bc5dc43 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -7,14 +7,14 @@
+ android:value="73" />
-
@@ -33,8 +33,6 @@
-
-
diff --git a/src/com/timsu/astrid/R.java b/src/com/timsu/astrid/R.java
index 238ed8489..5247298f7 100644
--- a/src/com/timsu/astrid/R.java
+++ b/src/com/timsu/astrid/R.java
@@ -90,111 +90,113 @@ public final class R {
public static final int timepicker_up_selected=0x7f020029;
}
public static final class id {
- public static final int addAlert=0x7f0b0036;
- public static final int addtask=0x7f0b003e;
- public static final int alert_container=0x7f0b0035;
- public static final int alerts_label=0x7f0b0034;
- public static final int btn_tasklist=0x7f0b004f;
- public static final int btn_viewtask=0x7f0b004e;
+ public static final int addAlert=0x7f0b003b;
+ public static final int addtask=0x7f0b0008;
+ public static final int alert_container=0x7f0b003a;
+ public static final int alerts_label=0x7f0b0039;
+ public static final int btn_tasklist=0x7f0b0051;
+ public static final int btn_viewtask=0x7f0b0050;
public static final int button=0x7f0b0003;
public static final int button1=0x7f0b0002;
- public static final int button_layout=0x7f0b0052;
- public static final int cb1=0x7f0b0041;
- public static final int cell_creationDate=0x7f0b005a;
- public static final int cell_definiteDueDate=0x7f0b0058;
- public static final int cell_elapsed=0x7f0b0055;
- public static final int cell_estimated=0x7f0b0056;
- public static final int cell_notes=0x7f0b0057;
- public static final int cell_preferredDueDate=0x7f0b0059;
- public static final int container=0x7f0b0005;
+ public static final int button_layout=0x7f0b0054;
+ public static final int cb1=0x7f0b0043;
+ public static final int cell_creationDate=0x7f0b005c;
+ public static final int cell_definiteDueDate=0x7f0b005a;
+ public static final int cell_elapsed=0x7f0b0057;
+ public static final int cell_estimated=0x7f0b0058;
+ public static final int cell_notes=0x7f0b0059;
+ public static final int cell_preferredDueDate=0x7f0b005b;
+ public static final int container=0x7f0b000c;
public static final int date=0x7f0b0000;
- public static final int decrement=0x7f0b0008;
- public static final int definiteDueDate_date=0x7f0b0022;
- public static final int definiteDueDate_label=0x7f0b0020;
- public static final int definiteDueDate_notnull=0x7f0b0021;
- public static final int definiteDueDate_time=0x7f0b0023;
- public static final int delete=0x7f0b001e;
- public static final int discard=0x7f0b001d;
- public static final int edit=0x7f0b005b;
- public static final int elapsedDuration=0x7f0b0030;
- public static final int elapsedDuration_label=0x7f0b002f;
- public static final int estimatedDuration=0x7f0b0019;
- public static final int estimatedDuration_label=0x7f0b0018;
- public static final int event=0x7f0b0011;
- public static final int flag_after=0x7f0b003a;
- public static final int flag_before=0x7f0b0038;
- public static final int flag_during=0x7f0b0039;
- public static final int flag_nonstop=0x7f0b003b;
- public static final int flags_label=0x7f0b0037;
- public static final int footer=0x7f0b000a;
- public static final int forget=0x7f0b000b;
- public static final int frame=0x7f0b000f;
- public static final int greeting=0x7f0b004c;
- public static final int hiddenUntil_date=0x7f0b002a;
- public static final int hiddenUntil_label=0x7f0b0028;
- public static final int hiddenUntil_notnull=0x7f0b0029;
- public static final int hiddenUntil_time=0x7f0b002b;
- public static final int icon_layout=0x7f0b0040;
- public static final int imageLeft=0x7f0b0042;
- public static final int importance=0x7f0b004b;
- public static final int importance_container=0x7f0b0015;
- public static final int importance_label=0x7f0b0014;
- public static final int increment=0x7f0b0006;
- public static final int name=0x7f0b0013;
- public static final int name_label=0x7f0b0012;
- public static final int notes=0x7f0b001b;
- public static final int notes_label=0x7f0b001a;
- public static final int notification=0x7f0b0033;
- public static final int notification_label=0x7f0b0032;
- public static final int numberPicker=0x7f0b0009;
- public static final int preferredDueDate_date=0x7f0b0026;
- public static final int preferredDueDate_label=0x7f0b0024;
- public static final int preferredDueDate_notnull=0x7f0b0025;
- public static final int preferredDueDate_time=0x7f0b0027;
- public static final int progress=0x7f0b0054;
- public static final int repeat_interval=0x7f0b002e;
- public static final int repeat_label=0x7f0b002c;
- public static final int repeat_value=0x7f0b002d;
- public static final int row_layout=0x7f0b003f;
- public static final int save=0x7f0b001c;
- public static final int scroll_view=0x7f0b0050;
- public static final int sync=0x7f0b000c;
- public static final int tab_basic=0x7f0b0010;
- public static final int tab_dates=0x7f0b001f;
- public static final int tab_notification=0x7f0b0031;
- public static final int taglist=0x7f0b000e;
- public static final int taglist_layout=0x7f0b000d;
- public static final int tags_container=0x7f0b0017;
- public static final int tags_label=0x7f0b0016;
- public static final int task_name=0x7f0b0044;
- public static final int tasklist=0x7f0b003d;
- public static final int tasklist_layout=0x7f0b003c;
- public static final int taskname=0x7f0b004d;
+ public static final int decrement=0x7f0b000f;
+ public static final int definiteDueDate_date=0x7f0b0027;
+ public static final int definiteDueDate_label=0x7f0b0025;
+ public static final int definiteDueDate_notnull=0x7f0b0026;
+ public static final int definiteDueDate_time=0x7f0b0028;
+ public static final int delete=0x7f0b0023;
+ public static final int discard=0x7f0b0022;
+ public static final int edit=0x7f0b005d;
+ public static final int elapsedDuration=0x7f0b0035;
+ public static final int elapsedDuration_label=0x7f0b0034;
+ public static final int estimatedDuration=0x7f0b001e;
+ public static final int estimatedDuration_label=0x7f0b001d;
+ public static final int event=0x7f0b0016;
+ public static final int flag_after=0x7f0b003f;
+ public static final int flag_before=0x7f0b003d;
+ public static final int flag_during=0x7f0b003e;
+ public static final int flag_nonstop=0x7f0b0040;
+ public static final int flags_label=0x7f0b003c;
+ public static final int footer=0x7f0b0011;
+ public static final int forget=0x7f0b0012;
+ public static final int frame=0x7f0b0014;
+ public static final int greeting=0x7f0b004e;
+ public static final int hiddenUntil_date=0x7f0b002f;
+ public static final int hiddenUntil_label=0x7f0b002d;
+ public static final int hiddenUntil_notnull=0x7f0b002e;
+ public static final int hiddenUntil_time=0x7f0b0030;
+ public static final int icon_layout=0x7f0b0042;
+ public static final int imageLeft=0x7f0b0044;
+ public static final int importance=0x7f0b004d;
+ public static final int importance_container=0x7f0b001a;
+ public static final int importance_label=0x7f0b0019;
+ public static final int increment=0x7f0b000d;
+ public static final int main=0x7f0b0005;
+ public static final int name=0x7f0b0018;
+ public static final int name_label=0x7f0b0017;
+ public static final int notes=0x7f0b0020;
+ public static final int notes_label=0x7f0b001f;
+ public static final int notification=0x7f0b0038;
+ public static final int notification_label=0x7f0b0037;
+ public static final int numberPicker=0x7f0b0010;
+ public static final int preferredDueDate_date=0x7f0b002b;
+ public static final int preferredDueDate_label=0x7f0b0029;
+ public static final int preferredDueDate_notnull=0x7f0b002a;
+ public static final int preferredDueDate_time=0x7f0b002c;
+ public static final int progress=0x7f0b0056;
+ public static final int repeat_interval=0x7f0b0033;
+ public static final int repeat_label=0x7f0b0031;
+ public static final int repeat_value=0x7f0b0032;
+ public static final int row_layout=0x7f0b0041;
+ public static final int save=0x7f0b0021;
+ public static final int scroll_view=0x7f0b0052;
+ public static final int sync=0x7f0b0013;
+ public static final int tab_basic=0x7f0b0015;
+ public static final int tab_dates=0x7f0b0024;
+ public static final int tab_notification=0x7f0b0036;
+ public static final int taglist=0x7f0b000a;
+ public static final int taglist_layout=0x7f0b0009;
+ public static final int tags_container=0x7f0b001c;
+ public static final int tags_label=0x7f0b001b;
+ public static final int task_name=0x7f0b0046;
+ public static final int tasklist=0x7f0b0007;
+ public static final int tasklist_layout=0x7f0b0006;
+ public static final int tasklistwtag_layout=0x7f0b000b;
+ public static final int taskname=0x7f0b004f;
public static final int text1=0x7f0b0004;
- public static final int text_deadlines=0x7f0b0045;
- public static final int text_layout=0x7f0b0043;
- public static final int text_notes=0x7f0b004a;
- public static final int text_reminders=0x7f0b0048;
- public static final int text_repeats=0x7f0b0047;
- public static final int text_tags=0x7f0b0049;
- public static final int text_times=0x7f0b0046;
+ public static final int text_deadlines=0x7f0b0047;
+ public static final int text_layout=0x7f0b0045;
+ public static final int text_notes=0x7f0b004c;
+ public static final int text_reminders=0x7f0b004a;
+ public static final int text_repeats=0x7f0b0049;
+ public static final int text_tags=0x7f0b004b;
+ public static final int text_times=0x7f0b0048;
public static final int time=0x7f0b0001;
- public static final int timepicker_input=0x7f0b0007;
- public static final int timerButton=0x7f0b0053;
- public static final int view_layout=0x7f0b0051;
+ public static final int timepicker_input=0x7f0b000e;
+ public static final int timerButton=0x7f0b0055;
+ public static final int view_layout=0x7f0b0053;
}
public static final class layout {
public static final int edit_alert_item=0x7f030000;
public static final int edit_importance_item=0x7f030001;
public static final int edit_tag_item=0x7f030002;
public static final int importance_spinner_dropdown=0x7f030003;
- public static final int n_number_picker_dialog=0x7f030004;
- public static final int number_picker=0x7f030005;
- public static final int number_picker_dialog=0x7f030006;
- public static final int sync_footer=0x7f030007;
- public static final int tag_list=0x7f030008;
- public static final int task_edit=0x7f030009;
- public static final int task_list=0x7f03000a;
+ public static final int main=0x7f030004;
+ public static final int n_number_picker_dialog=0x7f030005;
+ public static final int number_picker=0x7f030006;
+ public static final int number_picker_dialog=0x7f030007;
+ public static final int sync_footer=0x7f030008;
+ public static final int tag_list=0x7f030009;
+ public static final int task_edit=0x7f03000a;
public static final int task_list_row=0x7f03000b;
public static final int task_notify=0x7f03000c;
public static final int task_view=0x7f03000d;
diff --git a/src/com/timsu/astrid/activities/TagList.java b/src/com/timsu/astrid/activities/TagList.java
index dd45c0ac2..0f5422aa2 100644
--- a/src/com/timsu/astrid/activities/TagList.java
+++ b/src/com/timsu/astrid/activities/TagList.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -32,13 +31,10 @@ import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.os.Bundle;
-import android.util.Log;
import android.view.ContextMenu;
-import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
@@ -51,23 +47,22 @@ import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import com.timsu.astrid.R;
-import com.timsu.astrid.data.tag.TagController;
+import com.timsu.astrid.activities.MainActivity.SubActivities;
+import com.timsu.astrid.activities.MainActivity.SubActivity;
import com.timsu.astrid.data.tag.TagIdentifier;
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;
-import com.timsu.astrid.utilities.Constants;
-/** List all tags and allows a user to see all tasks for a given tag
+/**
+ * List all tags and allows a user to see all tasks for a given tag
*
* @author Tim Su (timsu@stanfordalumni.org)
*
*/
-public class TagList extends Activity {
- private static final int ACTIVITY_LIST = 0;
- private static final int ACTIVITY_CREATE = 1;
+public class TagList extends SubActivity {
+ private static final int ACTIVITY_CREATE = 0;
private static final int MENU_SORT_ALPHA_ID = Menu.FIRST;
private static final int MENU_SORT_SIZE_ID = Menu.FIRST + 1;
@@ -75,56 +70,22 @@ public class TagList extends Activity {
private static final int CONTEXT_DELETE_ID = Menu.FIRST + 11;
private static final int CONTEXT_SHOWHIDE_ID = Menu.FIRST + 12;
- private TagController controller;
- private TaskController taskController;
private ListView listView;
-
private List tagArray;
private Map taskMap;
- private Map tagToTaskCount;
- private GestureDetector gestureDetector;
+ Map tagToTaskCount;
private static SortMode sortMode = SortMode.SIZE;
private static boolean sortReverse = false;
-
- /** Called when loading up the activity for the first time */
- private void onLoad() {
- controller = new TagController(this);
- controller.open();
- taskController = new TaskController(this);
- taskController.open();
-
- listView = (ListView)findViewById(R.id.taglist);
-
- fillData();
- gestureDetector = new GestureDetector(new TagListGestureDetector());
+
+ public TagList(MainActivity parent, SubActivities code, View view) {
+ super(parent, code, view);
}
@Override
- public void finish() {
- super.finish();
- }
-
- class TagListGestureDetector extends GestureDetector.SimpleOnGestureListener {
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- try {
- Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) +
- ", vel: " + velocityX);
-
- // flick L to R
- if(e2.getX() - e1.getX() > TaskList.FLING_DIST_THRESHOLD &&
- Math.abs(velocityX) > TaskList.FLING_VEL_THRESHOLD) {
- setResult(RESULT_CANCELED);
- finish();
- return true;
- }
- } catch (Exception e) {
- //
- }
-
- return false;
- }
+ public void onDisplay(Bundle variables) {
+ listView = (ListView)findViewById(R.id.taglist);
+ fillData();
}
// --- stuff for sorting
@@ -148,10 +109,10 @@ public class TagList extends Activity {
private void sortTagArray() {
// get all tasks
- Cursor taskCursor = taskController.getActiveTaskListCursor();
+ Cursor taskCursor = getTaskController().getActiveTaskListCursor();
startManagingCursor(taskCursor);
List taskArray =
- taskController.createTaskListFromCursor(taskCursor);
+ getTaskController().createTaskListFromCursor(taskCursor);
taskMap = new HashMap();
for(TaskModelForList task : taskArray) {
if(task.isHidden())
@@ -163,8 +124,8 @@ public class TagList extends Activity {
tagToTaskCount = new HashMap();
for(TagModelForView tag : tagArray) {
int count = 0;
- List tasks = controller.getTaggedTasks(TagList.this,
- tag.getTagIdentifier());
+ List tasks = getTagController().getTaggedTasks(
+ getParent(), tag.getTagIdentifier());
for(TaskIdentifier taskId : tasks)
if(taskMap.containsKey(taskId.getId()))
@@ -189,7 +150,7 @@ public class TagList extends Activity {
private void fillData() {
Resources r = getResources();
- tagArray = controller.getAllTags(this);
+ tagArray = getTagController().getAllTags(getParent());
// perform sort
sortTagArray();
@@ -202,7 +163,7 @@ public class TagList extends Activity {
setTitle(title);
// set up our adapter
- TagListAdapter tagAdapter = new TagListAdapter(this,
+ TagListAdapter tagAdapter = new TagListAdapter(getParent(),
android.R.layout.simple_list_item_1, tagArray);
listView.setAdapter(tagAdapter);
@@ -213,10 +174,9 @@ public class TagList extends Activity {
int position, long id) {
TagModelForView tag = (TagModelForView)view.getTag();
- Intent intent = new Intent(TagList.this, TaskList.class);
- intent.putExtra(TaskList.TAG_TOKEN, tag.
- getTagIdentifier().getId());
- startActivityForResult(intent, ACTIVITY_LIST);
+ Bundle bundle = new Bundle();
+ bundle.putLong(TaskList.TAG_TOKEN, tag.getTagIdentifier().getId());
+ switchToActivity(SubActivities.TASK_LIST_W_TAG, bundle);
}
});
@@ -244,88 +204,25 @@ public class TagList extends Activity {
});
- listView.setOnTouchListener(new View.OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
- if (gestureDetector.onTouchEvent(event)) {
- return true;
- }
- return false;
- }
- });
+ listView.setOnTouchListener(getGestureListener());
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
- switch(resultCode) {
- case Constants.RESULT_GO_HOME:
- finish();
- break;
-
- default:
- fillData();
- }
- }
-
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
-
- if(hasFocus && TaskList.shouldCloseInstance) { // user wants to quit
- finish();
- }
+ fillData();
}
// --- list adapter
- private class TagListAdapter extends ArrayAdapter {
-
- private List objects;
- private int resource;
- private LayoutInflater inflater;
-
- public TagListAdapter(Context context, int resource,
- List objects) {
- super(context, resource, objects);
-
- inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- this.objects = objects;
- this.resource = resource;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View view;
-
- view = inflater.inflate(resource, parent, false);
- setupView(view, objects.get(position));
-
- return view;
- }
-
- public void setupView(View view, final TagModelForView tag) {
- Resources r = getResources();
- view.setTag(tag);
-
- final TextView name = ((TextView)view.findViewById(android.R.id.text1));
- name.setText(new StringBuilder(tag.getName()).
- append(" (").append(tagToTaskCount.get(tag)).append(")"));
-
- if(tagToTaskCount.get(tag) == 0)
- name.setTextColor(r.getColor(R.color.task_list_done));
- }
- }
-
- // --- ui control handlers
-
private void createTask(TagModelForView tag) {
- Intent intent = new Intent(this, TaskEdit.class);
+ Intent intent = new Intent(getParent(), TaskEdit.class);
intent.putExtra(TaskEdit.TAG_NAME_TOKEN, tag.getName());
- startActivityForResult(intent, ACTIVITY_CREATE);
+ launchActivity(intent, ACTIVITY_CREATE);
}
private void deleteTag(final TagIdentifier tagId) {
- new AlertDialog.Builder(this)
+ new AlertDialog.Builder(getParent())
.setTitle(R.string.delete_title)
.setMessage(R.string.delete_this_tag_title)
.setIcon(android.R.drawable.ic_dialog_alert)
@@ -333,7 +230,7 @@ public class TagList extends Activity {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- controller.deleteTag(tagId);
+ getTagController().deleteTag(tagId);
fillData();
}
})
@@ -342,7 +239,7 @@ public class TagList extends Activity {
}
@Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case MENU_SORT_ALPHA_ID:
if(sortMode == SortMode.ALPHA)
@@ -373,35 +270,18 @@ public class TagList extends Activity {
case CONTEXT_SHOWHIDE_ID:
tag = tagArray.get(item.getGroupId());
tag.toggleHideFromMainList();
- controller.saveTag(tag);
+ getTagController().saveTag(tag);
fillData();
return true;
}
- return super.onMenuItemSelected(featureId, item);
+ return false;
}
// --- creating stuff
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.tag_list);
-
- onLoad();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- controller.close();
- taskController.close();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
-
+ public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item;
item = menu.add(Menu.NONE, MENU_SORT_ALPHA_ID, Menu.NONE,
@@ -416,4 +296,47 @@ public class TagList extends Activity {
return true;
}
+
+ // --------------------------------------------------- tag list adapter
+
+ private class TagListAdapter extends ArrayAdapter {
+
+ private List objects;
+ private int resource;
+ private LayoutInflater inflater;
+
+ public TagListAdapter(Context context, int resource,
+ List objects) {
+ super(context, resource, objects);
+
+ inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ this.objects = objects;
+ this.resource = resource;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View view = convertView;
+
+ if(view == null) {
+ view = inflater.inflate(resource, parent, false);
+ }
+ setupView(view, objects.get(position));
+
+ return view;
+ }
+
+ public void setupView(View view, final TagModelForView tag) {
+ Resources r = getResources();
+ view.setTag(tag);
+
+ final TextView name = ((TextView)view.findViewById(android.R.id.text1));
+ name.setText(new StringBuilder(tag.getName()).
+ append(" (").append(tagToTaskCount.get(tag)).append(")"));
+
+ if(tagToTaskCount.get(tag) == 0)
+ name.setTextColor(r.getColor(R.color.task_list_done));
+ }
+ }
+
}
\ No newline at end of file
diff --git a/src/com/timsu/astrid/activities/TaskEdit.java b/src/com/timsu/astrid/activities/TaskEdit.java
index d2d276701..e439fbaec 100644
--- a/src/com/timsu/astrid/activities/TaskEdit.java
+++ b/src/com/timsu/astrid/activities/TaskEdit.java
@@ -507,7 +507,7 @@ public class TaskEdit extends TaskModificationTabbedActivity {
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
- if(hasFocus && TaskList.shouldCloseInstance) { // user wants to quit
+ if(hasFocus && MainActivity.shouldCloseInstance) { // user wants to quit
finish();
}
}
diff --git a/src/com/timsu/astrid/activities/TaskList.java b/src/com/timsu/astrid/activities/TaskList.java
index 8dfef6980..5d66846e4 100644
--- a/src/com/timsu/astrid/activities/TaskList.java
+++ b/src/com/timsu/astrid/activities/TaskList.java
@@ -28,7 +28,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -36,12 +35,9 @@ import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
-import android.util.Log;
import android.view.ContextMenu;
-import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
@@ -51,6 +47,8 @@ import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import com.timsu.astrid.R;
+import com.timsu.astrid.activities.MainActivity.SubActivities;
+import com.timsu.astrid.activities.MainActivity.SubActivity;
import com.timsu.astrid.activities.TaskListAdapter.TaskListAdapterHooks;
import com.timsu.astrid.data.tag.TagController;
import com.timsu.astrid.data.tag.TagIdentifier;
@@ -63,17 +61,17 @@ import com.timsu.astrid.sync.Synchronizer.SynchronizerListener;
import com.timsu.astrid.utilities.Constants;
import com.timsu.astrid.utilities.DialogUtilities;
import com.timsu.astrid.utilities.Preferences;
-import com.timsu.astrid.utilities.StartupReceiver;
import com.timsu.astrid.widget.NNumberPickerDialog.OnNNumberPickedListener;
-/** Primary view for the Astrid Application. Lists all of the tasks in the
+/**
+ * Primary view for the Astrid Application. Lists all of the tasks in the
* system, and allows users to edit them.
*
* @author Tim Su (timsu@stanfordalumni.org)
*
*/
-public class TaskList extends Activity {
+public class TaskList extends SubActivity {
// bundle tokens
public static final String TAG_TOKEN = "tag";
@@ -105,9 +103,6 @@ public class TaskList extends Activity {
private static final int CONTEXT_SORT_REVERSE = Menu.FIRST + 26;
private static final int CONTEXT_SORT_GROUP = Menu.FIRST;
- public static final int FLING_DIST_THRESHOLD = 100;
- public static final int FLING_VEL_THRESHOLD = 300;
-
private static final int SORTFLAG_FILTERDONE = (1 << 5);
private static final int SORTFLAG_FILTERHIDDEN = (1 << 6);
@@ -120,9 +115,6 @@ public class TaskList extends Activity {
private Map tagMap;
private ArrayList taskArray;
private HashMap> taskTags;
- private GestureDetector gestureDetector;
- private View.OnTouchListener gestureTouchListener;
- private boolean displaySyncShortcut;
// display filters
private static boolean filterShowHidden = false;
@@ -131,51 +123,32 @@ public class TaskList extends Activity {
private static SortMode sortMode = SortMode.AUTO;
private static boolean sortReverse = false;
- static boolean shouldCloseInstance = false;
-
- // database controllers
- private TaskController taskController;
- private TagController tagController;
-
-
/* ======================================================================
* ======================================================= initialization
* ====================================================================== */
-
+
+ public TaskList(MainActivity parent, SubActivities code, View view) {
+ super(parent, code, view);
+ }
+
@Override
- /** Called when loading up the activity for the first time */
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.task_list);
-
- StartupReceiver.onStartupApplication(this);
- shouldCloseInstance = false;
-
- taskController = new TaskController(this);
- taskController.open();
- tagController = new TagController(this);
- tagController.open();
-
- Synchronizer.setTagController(tagController);
- Synchronizer.setTaskController(taskController);
-
+ /** Called when loading up the activity */
+ public void onDisplay(Bundle variables) {
+ // load tag map
+ tagMap = getTagController().getAllTagsAsMap(getParent());
+
+ // process the tag to filter on, if any
+ if(variables != null && variables.containsKey(TAG_TOKEN)) {
+ TagIdentifier identifier = new TagIdentifier(variables.getLong(TAG_TOKEN));
+ filterTag = tagMap.get(identifier);
+ }
+
setupUIComponents();
loadTaskListSort();
fillData();
-
- // auto sync
- Integer autoSyncHours = Preferences.autoSyncFrequency(this);
- if(autoSyncHours != null) {
- final Date lastSync = Preferences.getSyncLastSync(this);
-
- if(lastSync == null || lastSync.getTime() +
- 1000L*3600*autoSyncHours < System.currentTimeMillis()) {
- Synchronizer.synchronize(this, true, null);
- }
- }
}
- public void setupUIComponents() {
+ public void setupUIComponents() {
listView = (ListView)findViewById(R.id.tasklist);
addButton = (Button)findViewById(R.id.addtask);
addButton.setOnClickListener(new
@@ -197,52 +170,10 @@ public class TaskList extends Activity {
onCreateMoreOptionsMenu(menu);
}
});
-
- gestureDetector = new GestureDetector(new TaskListGestureDetector());
- gestureTouchListener = new View.OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
- if (gestureDetector.onTouchEvent(event)) {
- return true;
- }
- return false;
- }
- };
}
-
- class TaskListGestureDetector extends GestureDetector.SimpleOnGestureListener {
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- try {
- Log.i("astrid", "Got fling. X: " + (e2.getX() - e1.getX()) +
- ", vel: " + velocityX);
-
- // flick R to L
- if(e1.getX() - e2.getX() > FLING_DIST_THRESHOLD &&
- Math.abs(velocityX) > FLING_VEL_THRESHOLD) {
- showTagsView();
- return true;
- }
-
- // flick L to R
- else if(e2.getX() - e1.getX() > FLING_DIST_THRESHOLD &&
- Math.abs(velocityX) > FLING_VEL_THRESHOLD &&
- !isTopLevelActivity()) {
- setResult(RESULT_CANCELED);
- finish();
- return true;
- }
- } catch (Exception e) {
- // ignore!
- }
-
- return false;
- }
- }
-
+
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
-
+ public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item;
item = menu.add(Menu.NONE, INSERT_ID, Menu.NONE,
@@ -260,14 +191,11 @@ public class TaskList extends Activity {
item.setIcon(android.R.drawable.ic_menu_myplaces);
item.setAlphabeticShortcut('t');
- if(Preferences.shouldDisplaySyncButton(this)){
+ if(Preferences.shouldDisplaySyncButton(getParent())){
item = menu.add(Menu.NONE, SYNC_ID, Menu.NONE,
R.string.taskList_menu_syncshortcut);
item.setIcon(android.R.drawable.ic_menu_upload);
item.setAlphabeticShortcut('s');
- displaySyncShortcut = true;
- } else {
- displaySyncShortcut = false;
}
item = menu.add(Menu.NONE, MORE_ID, Menu.NONE,
@@ -278,27 +206,6 @@ public class TaskList extends Activity {
return true;
}
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
-
- boolean shouldDisplaySyncShortcut = Preferences.shouldDisplaySyncButton(this);
- if(shouldDisplaySyncShortcut != displaySyncShortcut) {
- if(shouldDisplaySyncShortcut) {
- MenuItem item = menu.add(Menu.NONE, SYNC_ID, Menu.NONE,
- R.string.taskList_menu_syncshortcut);
- item.setIcon(android.R.drawable.ic_menu_upload);
- item.setAlphabeticShortcut('s');
- } else
- menu.removeItem(SYNC_ID);
-
- displaySyncShortcut = shouldDisplaySyncShortcut;
- }
-
-
- return true;
- }
-
public boolean onCreateMoreOptionsMenu(Menu menu) {
MenuItem item;
@@ -376,28 +283,20 @@ public class TaskList extends Activity {
private void fillData() {
Resources r = getResources();
- // load tags (they might've changed)
- tagMap = tagController.getAllTagsAsMap(this);
- Bundle extras = getIntent().getExtras();
- if(extras != null && extras.containsKey(TAG_TOKEN)) {
- TagIdentifier identifier = new TagIdentifier(extras.getLong(TAG_TOKEN));
- filterTag = tagMap.get(identifier);
- }
-
// get a cursor to the task list
Cursor tasksCursor;
if(filterTag != null) {
- List tasks = tagController.getTaggedTasks(this,
+ List tasks = getTagController().getTaggedTasks(getParent(),
filterTag.getTagIdentifier());
- tasksCursor = taskController.getTaskListCursorById(tasks);
+ tasksCursor = getTaskController().getTaskListCursorById(tasks);
} else {
if(filterShowDone)
- tasksCursor = taskController.getAllTaskListCursor();
+ tasksCursor = getTaskController().getAllTaskListCursor();
else
- tasksCursor = taskController.getActiveTaskListCursor();
+ tasksCursor = getTaskController().getActiveTaskListCursor();
}
startManagingCursor(tasksCursor);
- taskArray = taskController.createTaskListFromCursor(tasksCursor);
+ taskArray = getTaskController().createTaskListFromCursor(tasksCursor);
// read tags and apply filters
int hiddenTasks = 0; // # of tasks hidden
@@ -414,7 +313,7 @@ public class TaskList extends Activity {
}
// get list of tags
- LinkedList tagIds = tagController.getTaskTags(this,
+ LinkedList tagIds = getTagController().getTaskTags(getParent(),
task.getTaskIdentifier());
LinkedList tags = new LinkedList();
for(TagIdentifier tagId : tagIds) {
@@ -476,15 +375,13 @@ public class TaskList extends Activity {
setUpListUI();
}
-
-
private void setUpListUI() {
// set up our adapter
- TaskListAdapter tasks = new TaskListAdapter(this, this,
+ TaskListAdapter tasks = new TaskListAdapter(getParent(),
R.layout.task_list_row, taskArray, new TaskListAdapterHooks() {
@Override
public TagController getTagController() {
- return tagController;
+ return getTagController();
}
@Override
@@ -500,7 +397,7 @@ public class TaskList extends Activity {
@Override
public TaskController getTaskController() {
- return taskController;
+ return getTaskController();
}
@Override
@@ -509,7 +406,7 @@ public class TaskList extends Activity {
}
public void onCreatedTaskListView(View v, TaskModelForList task) {
- v.setOnTouchListener(gestureTouchListener);
+ v.setOnTouchListener(getGestureListener());
}
});
listView.setAdapter(tasks);
@@ -522,10 +419,10 @@ public class TaskList extends Activity {
int position, long id) {
TaskModelForList task = (TaskModelForList)view.getTag();
- Intent intent = new Intent(TaskList.this, TaskView.class);
+ Intent intent = new Intent(getParent(), TaskView.class);
intent.putExtra(TaskEdit.LOAD_INSTANCE_TOKEN, task.
getTaskIdentifier().getId());
- startActivityForResult(intent, ACTIVITY_VIEW);
+ launchActivity(intent, ACTIVITY_VIEW);
}
});
@@ -575,7 +472,7 @@ public class TaskList extends Activity {
}
});
- listView.setOnTouchListener(gestureTouchListener);
+ listView.setOnTouchListener(getGestureListener());
}
/* ======================================================================
@@ -584,45 +481,37 @@ public class TaskList extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
if(resultCode == Constants.RESULT_SYNCHRONIZE) {
- Synchronizer.synchronize(this, false, new SynchronizerListener() {
+ Synchronizer.synchronize(getParent(), false, new SynchronizerListener() {
@Override
public void onSynchronizerFinished(int numServicesSynced) {
if(numServicesSynced == 0)
- DialogUtilities.okDialog(TaskList.this, getResources().getString(
+ DialogUtilities.okDialog(getParent(), getResources().getString(
R.string.sync_no_synchronizers), null);
fillData();
}
});
- } else if(requestCode == ACTIVITY_TAGS && resultCode == RESULT_CANCELED)
- filterTag = null;
+ } else if(requestCode == ACTIVITY_TAGS)
+ switchToActivity(SubActivities.TAG_LIST, null);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
-
// refresh, since stuff might have changed...
if(hasFocus) {
- if(shouldCloseInstance) { // user wants to quit
- shouldCloseInstance = false;
- finish();
- } else
- fillData();
+ fillData();
}
}
private void createTask() {
- Intent intent = new Intent(this, TaskEdit.class);
+ Intent intent = new Intent(getParent(), TaskEdit.class);
if(filterTag != null)
intent.putExtra(TaskEdit.TAG_NAME_TOKEN, filterTag.getName());
- startActivityForResult(intent, ACTIVITY_CREATE);
+ launchActivity(intent, ACTIVITY_CREATE);
}
private void deleteTask(final TaskIdentifier taskId) {
- new AlertDialog.Builder(this)
+ new AlertDialog.Builder(getParent())
.setTitle(R.string.delete_title)
.setMessage(R.string.delete_this_task_title)
.setIcon(android.R.drawable.ic_dialog_alert)
@@ -630,7 +519,7 @@ public class TaskList extends Activity {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- taskController.deleteTask(taskId);
+ getTaskController().deleteTask(taskId);
fillData();
}
})
@@ -638,19 +527,8 @@ public class TaskList extends Activity {
.show();
}
- public boolean isTopLevelActivity() {
- return (getIntent() == null ||
- getIntent().getExtras() == null ||
- !getIntent().getExtras().containsKey(TAG_TOKEN));
- }
-
public void showTagsView() {
- if(isTopLevelActivity()) {
- Intent intent = new Intent(TaskList.this, TagList.class);
- startActivityForResult(intent, ACTIVITY_TAGS);
- } else {
- finish();
- }
+ switchToActivity(SubActivities.TAG_LIST, null);
}
/** Save the sorting mode to the preferences */
@@ -665,12 +543,12 @@ public class TaskList extends Activity {
if(sortReverse)
sortId *= -1;
- Preferences.setTaskListSort(this, sortId);
+ Preferences.setTaskListSort(getParent(), sortId);
}
/** Save the sorting mode to the preferences */
private void loadTaskListSort() {
- int sortId = Preferences.getTaskListSort(this);
+ int sortId = Preferences.getTaskListSort(getParent());
if(sortId == 0)
return;
sortReverse = sortId < 0;
@@ -685,7 +563,7 @@ public class TaskList extends Activity {
}
@Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
final TaskModelForList task;
Resources r = getResources();
@@ -708,23 +586,23 @@ public class TaskList extends Activity {
return true;
case OPTIONS_SYNC_ID:
- startActivityForResult(new Intent(this, SyncPreferences.class),
+ launchActivity(new Intent(getParent(), SyncPreferences.class),
ACTIVITY_SYNCHRONIZE);
return true;
case OPTIONS_SETTINGS_ID:
- startActivity(new Intent(this, EditPreferences.class));
+ launchActivity(new Intent(getParent(), EditPreferences.class), 0);
return true;
case OPTIONS_HELP_ID:
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(Constants.HELP_URL));
- startActivity(browserIntent);
+ launchActivity(browserIntent, 0);
return true;
case TaskListAdapter.CONTEXT_EDIT_ID:
task = taskArray.get(item.getGroupId());
- intent = new Intent(TaskList.this, TaskEdit.class);
+ intent = new Intent(getParent(), TaskEdit.class);
intent.putExtra(TaskEdit.LOAD_INSTANCE_TOKEN, task.getTaskIdentifier().getId());
- startActivityForResult(intent, ACTIVITY_EDIT);
+ launchActivity(intent, ACTIVITY_EDIT);
return true;
case TaskListAdapter.CONTEXT_DELETE_ID:
task = taskArray.get(item.getGroupId());
@@ -737,12 +615,12 @@ public class TaskList extends Activity {
else {
task.stopTimerAndUpdateElapsedTime();
}
- taskController.saveTask(task);
+ getTaskController().saveTask(task);
fillData();
return true;
case TaskListAdapter.CONTEXT_POSTPONE_ID:
task = taskArray.get(item.getGroupId());
- DialogUtilities.dayHourPicker(this,
+ DialogUtilities.dayHourPicker(getParent(),
r.getString(R.string.taskList_postpone_dialog),
new OnNNumberPickedListener() {
public void onNumbersPicked(int[] values) {
@@ -760,7 +638,7 @@ public class TaskList extends Activity {
postponeMillis);
task.setDefiniteDueDate(definite);
}
- taskController.saveTask(task);
+ getTaskController().saveTask(task);
fillData();
}
});
@@ -811,16 +689,6 @@ public class TaskList extends Activity {
return true;
}
- return super.onMenuItemSelected(featureId, item);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- taskController.close();
- if(tagController != null)
- tagController.close();
- Synchronizer.setTagController(null);
- Synchronizer.setTaskController(null);
+ return false;
}
}
\ No newline at end of file
diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java
index b7860763f..1eae43421 100644
--- a/src/com/timsu/astrid/activities/TaskListAdapter.java
+++ b/src/com/timsu/astrid/activities/TaskListAdapter.java
@@ -53,7 +53,8 @@ import com.timsu.astrid.utilities.DateUtilities;
import com.timsu.astrid.utilities.Preferences;
import com.timsu.astrid.utilities.TaskFieldsVisibility;
-/** Adapter for displaying a list of TaskModelForList entities
+/**
+ * Adapter for displaying a list of TaskModelForList entities
*
* @author timsu
*
@@ -65,6 +66,7 @@ public class TaskListAdapter extends ArrayAdapter {
public static final int CONTEXT_TIMER_ID = Menu.FIRST + 52;
public static final int CONTEXT_POSTPONE_ID = Menu.FIRST + 53;
+ // keys for caching task properties
private static final int KEY_NAME = 0;
private static final int KEY_DEADLINE = 1;
private static final int KEY_OVERDUE = 2;
@@ -90,6 +92,12 @@ public class TaskListAdapter extends ArrayAdapter {
private TaskModelForList recentlyCompleted = null;
+ /**
+ * Callback interface for interacting with parent activity
+ *
+ * @author timsu
+ *
+ */
public interface TaskListAdapterHooks {
List getTaskArray();
List getTagsFor(TaskModelForList task);
@@ -99,11 +107,20 @@ public class TaskListAdapter extends ArrayAdapter {
void onCreatedTaskListView(View v, TaskModelForList task);
}
- public TaskListAdapter(Activity activity, Context context, int resource,
+ /**
+ * Constructor
+ *
+ * @param activity
+ * @param context
+ * @param resource
+ * @param objects
+ * @param hooks
+ */
+ public TaskListAdapter(Activity activity, int resource,
List objects, TaskListAdapterHooks hooks) {
- super(context, resource, objects);
+ super(activity, resource, objects);
- inflater = (LayoutInflater)context.getSystemService(
+ inflater = (LayoutInflater)activity.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
this.objects = objects;
this.resource = resource;
@@ -114,7 +131,9 @@ public class TaskListAdapter extends ArrayAdapter {
alarmController = new AlertController(activity);
}
+ // ----------------------------------------------------------------------
// --- code for setting up each view
+ // ----------------------------------------------------------------------
@Override
public View getView(int position, View convertView, ViewGroup parent) {
diff --git a/src/com/timsu/astrid/activities/TaskView.java b/src/com/timsu/astrid/activities/TaskView.java
index 868d7ae7d..7278e1806 100644
--- a/src/com/timsu/astrid/activities/TaskView.java
+++ b/src/com/timsu/astrid/activities/TaskView.java
@@ -232,7 +232,7 @@ public class TaskView extends TaskModificationActivity {
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
- if(hasFocus && TaskList.shouldCloseInstance) { // user wants to quit
+ if(hasFocus && MainActivity.shouldCloseInstance) { // user wants to quit
finish();
}
}
diff --git a/src/com/timsu/astrid/activities/TaskViewNotifier.java b/src/com/timsu/astrid/activities/TaskViewNotifier.java
index 9b5e9bc41..8af7b4f0b 100644
--- a/src/com/timsu/astrid/activities/TaskViewNotifier.java
+++ b/src/com/timsu/astrid/activities/TaskViewNotifier.java
@@ -60,7 +60,7 @@ public class TaskViewNotifier extends TaskView {
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(Constants.RESULT_GO_HOME);
- TaskList.shouldCloseInstance = true;
+ MainActivity.shouldCloseInstance = true;
finish();
}
})
@@ -87,7 +87,7 @@ public class TaskViewNotifier extends TaskView {
repeatInterval);
setResult(Constants.RESULT_GO_HOME);
- TaskList.shouldCloseInstance = true;
+ MainActivity.shouldCloseInstance = true;
finish();
}
});