From 03684c9f2573d0e2a89e9884288fb081f963f1ca Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 18 Jan 2011 17:25:25 -0800 Subject: [PATCH] First pass at creating a note-viewing activity as a quick action on the task --- astrid/AndroidManifest.xml | 10 +- .../astrid/notes/NoteViewingActivity.java | 43 +++++++ .../astrid/notes/NotesActionExposer.java | 76 +++++++++++++ astrid/res/drawable/tango_notes.png | Bin 0 -> 509 bytes astrid/res/layout/empty_linear_layout.xml | 9 ++ astrid/res/values/strings-intro.xml | 2 +- .../todoroo/astrid/adapter/TaskAdapter.java | 107 +++++------------- 7 files changed, 168 insertions(+), 79 deletions(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/notes/NoteViewingActivity.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/notes/NotesActionExposer.java create mode 100644 astrid/res/drawable/tango_notes.png create mode 100644 astrid/res/layout/empty_linear_layout.xml diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index c8ddc7573..74c027845 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -357,7 +357,15 @@ - + + + + + + + + + * + */ +public class NotesActionExposer extends BroadcastReceiver { + + static final String EXTRA_TASK = "task"; //$NON-NLS-1$ + + @Override + public void onReceive(Context context, Intent intent) { + ContextManager.setContext(context); + long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1); + if(taskId == -1) + return; + + Task task = PluginServices.getTaskService().fetchById(taskId, Task.ID, Task.TITLE, Task.NOTES); + if(!task.containsNonNullValue(Task.NOTES) || TextUtils.isEmpty(task.getValue(Task.NOTES))) + return; + + if(AstridApiConstants.BROADCAST_REQUEST_ACTIONS.equals(intent.getAction())) { + sendNoteAction(context, taskId); + } else { + displayNote(context, task); + } + } + + private void displayNote(Context context, Task task) { + Intent intent = new Intent(context, NoteViewingActivity.class); + intent.putExtra(EXTRA_TASK, task); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + private void sendNoteAction(Context context, long taskId) { + final String label = context.getString(R.string.TEA_note_label); + final Drawable drawable = context.getResources().getDrawable(R.drawable.tango_notes); + + Bitmap icon = ((BitmapDrawable)drawable).getBitmap(); + Intent newIntent = new Intent(context, getClass()); + newIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + TaskAction action = new TaskAction(label, + PendingIntent.getBroadcast(context, (int)taskId, newIntent, 0), icon); + + // transmit + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_ACTIONS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, NotesPlugin.IDENTIFIER); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, action); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/res/drawable/tango_notes.png b/astrid/res/drawable/tango_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..14f6defbb9ee943a8533910c4ceecad34c9afe3a GIT binary patch literal 509 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM? z05BHda}+NC00DhTL_t(I%e9r;N&-<7hS%D2FeW9uv)g=|ZoEiAN%IjR=oJF#i1Y*o zR(KoqNM7Vc80KNp^>?9;ZihLgEf_YlVZQbMYpp$-0nkJ9_QiGGGVLI2+kU+`zpM}d zYFuAoS8;RK001)AvrQ)BKPv@5snnkLZfn + + + diff --git a/astrid/res/values/strings-intro.xml b/astrid/res/values/strings-intro.xml index 36f834a8a..01250119a 100644 --- a/astrid/res/values/strings-intro.xml +++ b/astrid/res/values/strings-intro.xml @@ -5,7 +5,7 @@ - Intro: Press me to see details + Intro: Press me to see notes Create your first task diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index 9cd139fec..60574f16e 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -119,9 +119,9 @@ public class TaskAdapter extends CursorAdapter implements Filterable { // the task that's expanded private long expanded = -1; - // actions for QuickActionBar/mel + // quick action bar private QuickActionWidget mBar; - //private View mBarAnchor; + private final QuickActionListener mBarListener = new QuickActionListener(); // --- task detail and decoration soft caches @@ -739,12 +739,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable { return broadcastIntent; } - //quickactionbar - //private QuickActionWidget mBar; - @Override public synchronized void addNew(long taskId, String addOn, final TaskAction item) { - // TODO Auto-generated method stub addIfNotExists(taskId, addOn, item); if(mBar != null) { ListView listView = activity.getListView(); @@ -765,8 +761,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { @Override public void run() { Drawable drawable = new BitmapDrawable(activity.getResources(), item.icon); - mBar.addQuickAction(new QuickAction(drawable, item.text)); - mBar.setOnQuickActionClickListener(new QuickActionListener(item, viewHolder)); + mBarListener.addWithAction(new QuickAction(drawable, item.text), item); mBar.show(viewHolder.view); } }); @@ -781,58 +776,12 @@ public class TaskAdapter extends CursorAdapter implements Filterable { @Override protected void draw(final ViewHolder viewHolder, final long taskId, Collection actions) { - // do not draw! - } - - /* - //preparing quickActionBar - private void prepareQuickActionBar(ViewHolder viewHolder, Collection actions){ - - mBar = new QuickActionBar(viewHolder.view.getContext()); - QuickAction editAction = new QuickAction(viewHolder.view.getContext(), R.drawable.tango_edit, " Edit "); - mBar.addQuickAction(editAction); - for(TaskAction action : actions) { - - mBar.addQuickAction(new QuickAction(viewHolder.view.getContext(), R.drawable.tango_clock, action.text)); - mBar.setOnQuickActionClickListener(new quickActionListener(action, viewHolder)); - } - + // do not draw } - */ - /* - protected synchronized void showQuickActionBar(ViewHolder viewHolder, long taskId, Collection actions) { - if(mBar != null){ - mBar.dismiss(); - } - if(expanded != taskId) { - //viewHolder.actions.setVisibility(View.GONE); - return; - } - //display quickactionbar - else { - prepareQuickActionBar(viewHolder, actions); - mBar.show(viewHolder.view); - - } - //viewHolder.actions.setVisibility(View.VISIBLE); - } - */ @Override protected void reset(ViewHolder viewHolder, long taskId) { - if(expanded != taskId) { - mBar.dismiss(); - //viewHolder.actions.setVisibility(View.GONE); - return; - } - //display quickactionbar - /* - else{ - prepareQuickActionBar(viewHolder); - mBar.show(viewHolder.view); - } - */ - //viewHolder.actions.setVisibility(View.VISIBLE); + // do not draw } } @@ -860,39 +809,45 @@ public class TaskAdapter extends CursorAdapter implements Filterable { }; private final class QuickActionListener implements OnQuickActionClickListener { - private final TaskAction action; - private final ViewHolder viewHolder; + private final HashMap positionActionMap = + new HashMap(2); + private long taskId; + private int itemCount = 0; - public QuickActionListener(TaskAction action, ViewHolder viewHolder) { - this.action = action; - this.viewHolder = viewHolder; + public void initialize(long newTaskId) { + this.taskId = newTaskId; + itemCount = 0; + positionActionMap.clear(); + mBar.setOnQuickActionClickListener(this); + } + + public void addWithAction(QuickAction quickAction, TaskAction taskAction) { + positionActionMap.put(itemCount++, taskAction); + mBar.addQuickAction(quickAction); } public void onQuickActionClicked(QuickActionWidget widget, int position){ mBar.dismiss(); mBar = null; - if(position == 0){ - + if(position == 0) { Intent intent = new Intent(activity, TaskEditActivity.class); - intent.putExtra(TaskEditActivity.TOKEN_ID, viewHolder.task.getId()); + intent.putExtra(TaskEditActivity.TOKEN_ID, taskId); activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); - } - else{ - flushSpecific(viewHolder.task.getId()); + } else { + flushSpecific(taskId); try { - action.intent.send(); + TaskAction taskAction = positionActionMap.get(position); + if(taskAction != null) { + taskAction.intent.send(); + } } catch (Exception e) { exceptionService.displayAndReportError(activity, "Error launching action", e); //$NON-NLS-1$ } - decorationManager.request(viewHolder); - extendedDetailManager.request(viewHolder); - taskActionManager.request(viewHolder); } clearSelection(); notifyDataSetChanged(); - } } @@ -900,18 +855,16 @@ public class TaskAdapter extends CursorAdapter implements Filterable { //prep quick action bar private void prepareQuickActionBar(ViewHolder viewHolder, Collection collection){ - mBar = new QuickActionBar(viewHolder.view.getContext()); QuickAction editAction = new QuickAction(activity, R.drawable.tango_edit, activity.getString(R.string.TAd_actionEditTask)); - mBar.addQuickAction(editAction); - + mBarListener.initialize(viewHolder.task.getId()); + mBarListener.addWithAction(editAction, null); if(collection != null) { for(TaskAction item : collection) { Drawable drawable = new BitmapDrawable(activity.getResources(), item.icon); - mBar.addQuickAction(new QuickAction(drawable, item.text)); - mBar.setOnQuickActionClickListener(new QuickActionListener(item, viewHolder)); + mBarListener.addWithAction(new QuickAction(drawable, item.text), item); } }