diff --git a/astrid/.project b/astrid/.project
index fa28c40a2..e141deba9 100644
--- a/astrid/.project
+++ b/astrid/.project
@@ -47,5 +47,10 @@
2
_android_astridApi_98e6a2cf/src
+
+ astridApi_src
+ 2
+ _android_astridApi_98e6a2cf/src
+
diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml
index bd4f0785b..a6481cc55 100644
--- a/astrid/AndroidManifest.xml
+++ b/astrid/AndroidManifest.xml
@@ -56,8 +56,7 @@
android:minSdkVersion="3" />
-
-
+
diff --git a/astrid/plugin-src/com/todoroo/astrid/timers/TimerActionExposer.java b/astrid/plugin-src/com/todoroo/astrid/timers/TimerActionExposer.java
index 08517a80a..bb1d2bb22 100644
--- a/astrid/plugin-src/com/todoroo/astrid/timers/TimerActionExposer.java
+++ b/astrid/plugin-src/com/todoroo/astrid/timers/TimerActionExposer.java
@@ -7,6 +7,9 @@ import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager;
@@ -45,8 +48,10 @@ public class TimerActionExposer extends BroadcastReceiver {
label = context.getString(R.string.TAE_stopTimer);
Intent newIntent = new Intent(TIMER_ACTION);
newIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
+ Drawable timer = context.getResources().getDrawable(R.drawable.tango_clock);
+ Bitmap icon = ((BitmapDrawable)timer).getBitmap();
TaskAction action = new TaskAction(label,
- PendingIntent.getBroadcast(context, (int)taskId, newIntent, 0));
+ PendingIntent.getBroadcast(context, (int)taskId, newIntent, 0), icon);
// transmit
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_ACTIONS);
diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml
index 08f4b734d..6e0df491d 100644
--- a/astrid/res/values/styles.xml
+++ b/astrid/res/values/styles.xml
@@ -12,7 +12,7 @@
- bold
-
diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java
index 0bca24d88..f18d89843 100644
--- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java
+++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java
@@ -1,5 +1,10 @@
package com.todoroo.astrid.adapter;
+import greendroid.widget.QuickAction;
+import greendroid.widget.QuickActionBar;
+import greendroid.widget.QuickActionWidget;
+import greendroid.widget.QuickActionWidget.OnQuickActionClickListener;
+
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -15,26 +20,27 @@ import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Paint;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.Html;
-import android.text.Spanned;
-import android.text.TextUtils;
import android.text.Html.ImageGetter;
import android.text.Html.TagHandler;
+import android.text.Spanned;
+import android.text.TextUtils;
import android.text.util.Linkify;
import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
+import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
-import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.Filterable;
import android.widget.LinearLayout;
+import android.widget.ListView;
import android.widget.TextView;
import com.timsu.astrid.R;
@@ -114,6 +120,10 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
// the task that's expanded
private long expanded = -1;
+ // actions for QuickActionBar/mel
+ private QuickActionWidget mBar;
+ //private View mBarAnchor;
+
// --- task detail and decoration soft caches
public final ExtendedDetailManager extendedDetailManager;
@@ -734,55 +744,100 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
return broadcastIntent;
}
- @Override
- protected void draw(final ViewHolder viewHolder, final long taskId, Collection actions) {
- if(actions == null || viewHolder.task.getId() != taskId)
- return;
+ //quickactionbar
+ //private QuickActionWidget mBar;
- // hack because we know we have > 1 button
- if(actions.size() == 0)
- return;
+ @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();
+ ViewHolder myHolder = null;
+ // update view if it is visible
+ int length = listView.getChildCount();
+ for(int i = 0; i < length; i++) {
+ ViewHolder viewHolder = (ViewHolder) listView.getChildAt(i).getTag();
+ if(viewHolder == null || viewHolder.task.getId() != taskId)
+ continue;
+ myHolder = viewHolder;
+ break;
+ }
- for(int i = viewHolder.actions.getChildCount(); i < actions.size() + 1; i++) {
- Button editButton = new Button(activity);
- editButton.setLayoutParams(params);
- viewHolder.actions.addView(editButton);
- }
- for(int i = actions.size() + 1; i < viewHolder.actions.getChildCount(); i++) {
- viewHolder.actions.getChildAt(i).setVisibility(View.GONE);
+ if(myHolder != null) {
+ final ViewHolder viewHolder = myHolder;
+ activity.runOnUiThread(new Runnable() {
+ @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));
+ mBar.show(viewHolder.view);
+ }
+ });
+ }
}
+ }
- int i = 0;
- Button button = (Button) viewHolder.actions.getChildAt(i++);
-
- button.setText(R.string.TAd_actionEditTask);
- button.setVisibility(View.VISIBLE);
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- Intent intent = new Intent(activity, TaskEditActivity.class);
- intent.putExtra(TaskEditActivity.TOKEN_ID, taskId);
- activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK);
- }
- });
+ @Override
+ public Collection get(long taskId) {
+ return super.get(taskId);
+ }
+
+ @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) {
- button = (Button) viewHolder.actions.getChildAt(i++);
- button.setText(action.text);
- button.setVisibility(View.VISIBLE);
- button.setOnClickListener(new ActionClickListener(action, viewHolder));
+
+ mBar.addQuickAction(new QuickAction(viewHolder.view.getContext(), R.drawable.tango_clock, action.text));
+ mBar.setOnQuickActionClickListener(new quickActionListener(action, viewHolder));
}
- reset(viewHolder, taskId);
}
+ */
+ /*
+ 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) {
- viewHolder.actions.setVisibility(View.GONE);
+ mBar.dismiss();
+ //viewHolder.actions.setVisibility(View.GONE);
return;
}
- viewHolder.actions.setVisibility(View.VISIBLE);
+ //display quickactionbar
+ /*
+ else{
+ prepareQuickActionBar(viewHolder);
+ mBar.show(viewHolder.view);
+ }
+ */
+ //viewHolder.actions.setVisibility(View.VISIBLE);
}
}
@@ -794,6 +849,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
fontSize = Preferences.getIntegerFromString(R.string.p_fontSize, 20);
+
}
protected final View.OnClickListener completeBoxListener = new View.OnClickListener() {
@@ -808,6 +864,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
}
};
+/*
private final class ActionClickListener implements View.OnClickListener {
private final TaskAction action;
private final ViewHolder viewHolder;
@@ -830,9 +887,66 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
taskActionManager.request(viewHolder);
}
};
+*/
+
+ private final class QuickActionListener implements OnQuickActionClickListener {
+ private final TaskAction action;
+ private final ViewHolder viewHolder;
+
+ public QuickActionListener(TaskAction action, ViewHolder viewHolder) {
+ this.action = action;
+ this.viewHolder = viewHolder;
+ }
+
+ public void onQuickActionClicked(QuickActionWidget widget, int position){
+ mBar.dismiss();
+ mBar = null;
+
+ if(position == 0){
+
+ Intent intent = new Intent(activity, TaskEditActivity.class);
+ intent.putExtra(TaskEditActivity.TOKEN_ID, viewHolder.task.getId());
+ activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK);
+ }
+ else{
+ flushSpecific(viewHolder.task.getId());
+ try {
+ action.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();
+
+ }
+ }
private class TaskRowListener implements OnCreateContextMenuListener, OnClickListener {
+ //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, " Edit ");
+ mBar.addQuickAction(editAction);
+
+
+ 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));
+ }
+ }
+
+
+ }
+
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// this is all a big sham. it's actually handled in Task List
@@ -847,11 +961,16 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
return;
long taskId = viewHolder.task.getId();
- if(expanded == taskId) {
- expanded = -1;
- } else {
- expanded = taskId;
- }
+
+ Collection actions = taskActionManager.get(taskId);
+ prepareQuickActionBar(viewHolder, actions);
+ //mBarAnchor = v;
+ System.err.println("view is ID " + v.getId());
+ if(actions != null)
+ mBar.show(v);
+ System.err.println("! Request for " + taskId);
+ taskActionManager.request(viewHolder);
+
notifyDataSetChanged();
}
diff --git a/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java b/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java
index 178aee80a..16b688cd5 100644
--- a/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java
+++ b/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java
@@ -134,6 +134,8 @@ abstract public class TaskAdapterAddOnManager {
* @return
*/
protected Collection get(long taskId) {
+ if(cache.get(taskId) == null)
+ return null;
return cache.get(taskId).values();
}