From ba5ab848e6bab0aedc54d4cb5c14c4d7a4c72d2f Mon Sep 17 00:00:00 2001 From: Tim Su Date: Sun, 1 Feb 2009 02:22:36 +0000 Subject: [PATCH] Got task and tag list onto one activity. --- AndroidManifest.xml | 6 +- src/com/timsu/astrid/R.java | 190 ++++++------- src/com/timsu/astrid/activities/TagList.java | 227 ++++++---------- src/com/timsu/astrid/activities/TaskEdit.java | 2 +- src/com/timsu/astrid/activities/TaskList.java | 252 +++++------------- .../astrid/activities/TaskListAdapter.java | 27 +- src/com/timsu/astrid/activities/TaskView.java | 2 +- .../astrid/activities/TaskViewNotifier.java | 4 +- 8 files changed, 260 insertions(+), 450 deletions(-) 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(); } });