First pass at creating a note-viewing activity as a quick action on the task

pull/14/head
Tim Su 14 years ago
parent a3e6b8fcb0
commit 03684c9f25

@ -357,7 +357,15 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver android:name="com.todoroo.astrid.notes.NotesActionExposer">
<intent-filter>
<action android:name="com.todoroo.astrid.REQUEST_ACTIONS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name="com.todoroo.astrid.notes.NoteViewingActivity"
android:theme="@android:style/Theme.Dialog" />
<!-- locale -->
<activity android:name="com.todoroo.astrid.locale.LocaleEditAlerts"
android:label="@string/locale_edit_alerts_title"

@ -0,0 +1,43 @@
package com.todoroo.astrid.notes;
import android.app.Activity;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.timsu.astrid.R;
import com.todoroo.astrid.data.Task;
public class NoteViewingActivity extends Activity {
private Task task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.empty_linear_layout);
LinearLayout body = (LinearLayout) findViewById(R.id.body);
task = getIntent().getParcelableExtra(NotesActionExposer.EXTRA_TASK);
setTitle(task.getValue(Task.TITLE));
TextView linkifiedTextView = new TextView(this);
linkifiedTextView.setText(task.getValue(Task.NOTES) + "\n\n"); //$NON-NLS-1$
Linkify.addLinks(linkifiedTextView, Linkify.ALL);
body.addView(linkifiedTextView);
Button ok = new Button(this);
ok.setText(android.R.string.ok);
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
body.addView(ok);
}
}

@ -0,0 +1,76 @@
/**
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.notes;
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 android.text.TextUtils;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.TaskAction;
import com.todoroo.astrid.api.TaskDecoration;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.Task;
/**
* Exposes {@link TaskDecoration} for timers
*
* @author Tim Su <tim@todoroo.com>
*
*/
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);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dip">
</LinearLayout>

@ -5,7 +5,7 @@
<!-- Resources initial tasks added -->
<!-- Intro Tag or click prompt -->
<string name="intro_click_prompt">Intro: Press me to see details</string>
<string name="intro_click_prompt">Intro: Press me to see notes</string>
<!-- Task 1 Summary -->
<string name="intro_task_1_summary">Create your first task</string>

@ -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<TaskAction> actions) {
// do not draw!
}
/*
//preparing quickActionBar
private void prepareQuickActionBar(ViewHolder viewHolder, Collection<TaskAction> 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<TaskAction> 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<Integer, TaskAction> positionActionMap =
new HashMap<Integer, TaskAction>(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<TaskAction> 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);
}
}

Loading…
Cancel
Save