Introduced quick action for viewing notes

pull/14/head
Sam Bosley 12 years ago
parent 0da65a08f7
commit 539822e3e4

@ -17,13 +17,16 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.text.Spannable; import android.text.Spannable;
import android.text.TextUtils;
import android.text.style.URLSpan; import android.text.style.URLSpan;
import android.text.util.Linkify; import android.text.util.Linkify;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.api.TaskAction; import com.todoroo.astrid.api.TaskAction;
import com.todoroo.astrid.api.TaskDecoration; import com.todoroo.astrid.api.TaskDecoration;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.notes.NotesAction;
/** /**
* Exposes {@link TaskDecoration} for phone numbers, emails, urls, etc * Exposes {@link TaskDecoration} for phone numbers, emails, urls, etc
@ -40,14 +43,15 @@ public class LinkActionExposer {
if(taskId == -1) if(taskId == -1)
return result; return result;
Task task = PluginServices.getTaskService().fetchById(taskId, Task.ID, Task.TITLE); Task task = PluginServices.getTaskService().fetchById(taskId, Task.ID, Task.TITLE, Task.NOTES);
if (task == null) return result; if (task == null) return result;
String notes = task.getValue(Task.NOTES);
Spannable titleSpan = Spannable.Factory.getInstance().newSpannable(task.getValue(Task.TITLE)); Spannable titleSpan = Spannable.Factory.getInstance().newSpannable(task.getValue(Task.TITLE));
Linkify.addLinks(titleSpan, Linkify.ALL); Linkify.addLinks(titleSpan, Linkify.ALL);
URLSpan[] urlSpans = titleSpan.getSpans(0, titleSpan.length(), URLSpan.class); URLSpan[] urlSpans = titleSpan.getSpans(0, titleSpan.length(), URLSpan.class);
if(urlSpans.length == 0) if(urlSpans.length == 0 && TextUtils.isEmpty(notes))
return result; return result;
pm = context.getPackageManager(); pm = context.getPackageManager();
@ -61,6 +65,14 @@ public class LinkActionExposer {
if (taskAction != null) if (taskAction != null)
result.add(taskAction); result.add(taskAction);
} }
if (!TextUtils.isEmpty(notes) && !Preferences.getBoolean(R.string.p_showNotes, false)) {
Resources r = context.getResources();
Bitmap icon = ((BitmapDrawable) r.getDrawable(R.drawable.action_notes)).getBitmap();
NotesAction notesAction = new NotesAction("", null, icon); //$NON-NLS-1$
result.add(notesAction);
}
return result; return result;
} }

@ -0,0 +1,39 @@
package com.todoroo.astrid.notes;
import android.app.PendingIntent;
import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.astrid.api.TaskAction;
public class NotesAction extends TaskAction {
public NotesAction(String text, PendingIntent intent, Bitmap icon) {
super(text, intent, icon);
}
/**
* Parcelable creator
*/
public static final Parcelable.Creator<NotesAction> CREATOR = new Parcelable.Creator<NotesAction>() {
/**
* {@inheritDoc}
*/
public NotesAction createFromParcel(Parcel source) {
NotesAction action = new NotesAction(source.readString(),
(PendingIntent)source.readParcelable(PendingIntent.class.getClassLoader()),
(Bitmap)source.readParcelable(Bitmap.class.getClassLoader()));
action.drawable = source.readInt();
return action;
}
/**
* {@inheritDoc}
*/
public NotesAction[] newArray(int size) {
return new NotesAction[size];
};
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- notes -->
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="100">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/notes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="9dip"
android:layout_marginRight="9dip"
android:layout_weight="100"
android:scrollbars="vertical"
android:gravity="top"
android:capitalize="sentences"
android:textSize="18sp"
android:singleLine="false" />
</LinearLayout>
</ScrollView>
<include layout="@layout/control_dialog_ok"/>
</LinearLayout>

@ -80,7 +80,7 @@
android:id="@+id/taskActionContainer" android:id="@+id/taskActionContainer"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="4dip" android:layout_marginRight="10dip"
android:orientation="vertical" android:orientation="vertical"
android:gravity="right|center_vertical"> android:gravity="right|center_vertical">
<TextView <TextView

@ -13,9 +13,11 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog;
import android.app.PendingIntent.CanceledException; import android.app.PendingIntent.CanceledException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Color; import android.graphics.Color;
@ -67,10 +69,12 @@ import com.todoroo.astrid.core.LinkActionExposer;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.helper.TaskAdapterAddOnManager; import com.todoroo.astrid.helper.TaskAdapterAddOnManager;
import com.todoroo.astrid.notes.NotesAction;
import com.todoroo.astrid.notes.NotesDecorationExposer; import com.todoroo.astrid.notes.NotesDecorationExposer;
import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.taskrabbit.TaskRabbitDataService; import com.todoroo.astrid.taskrabbit.TaskRabbitDataService;
import com.todoroo.astrid.taskrabbit.TaskRabbitTaskContainer; import com.todoroo.astrid.taskrabbit.TaskRabbitTaskContainer;
import com.todoroo.astrid.timers.TimerDecorationExposer; import com.todoroo.astrid.timers.TimerDecorationExposer;
@ -586,7 +590,9 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
TaskAction action = (TaskAction) viewHolder.taskActionIcon.getTag(); TaskAction action = (TaskAction) viewHolder.taskActionIcon.getTag();
if (action != null) { if (action instanceof NotesAction) {
showEditNotesDialog(viewHolder.task);
} else if (action != null) {
try { try {
action.intent.send(); action.intent.send();
} catch (CanceledException e) { } catch (CanceledException e) {
@ -597,6 +603,37 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
}); });
} }
private void showEditNotesDialog(final Task task) {
int theme = ThemeService.getEditDialogTheme();
final Dialog dialog = new Dialog(fragment.getActivity(), theme);
dialog.setTitle(R.string.TEA_note_label);
View notesView = LayoutInflater.from(fragment.getActivity()).inflate(R.layout.notes_view_dialog, null);
dialog.setContentView(notesView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
notesView.findViewById(R.id.edit_dlg_ok).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
final TextView notesField = (TextView) notesView.findViewById(R.id.notes);
notesField.setText(task.getValue(Task.NOTES));
LayoutParams params = dialog.getWindow().getAttributes();
params.width = LayoutParams.FILL_PARENT;
params.height = LayoutParams.WRAP_CONTENT;
Configuration config = fragment.getResources().getConfiguration();
int size = config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
if (AndroidUtilities.getSdkVersion() >= 9 && size == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
DisplayMetrics metrics = fragment.getResources().getDisplayMetrics();
params.width = metrics.widthPixels / 2;
}
dialog.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
dialog.show();
}
/* ====================================================================== /* ======================================================================
* ============================================================== details * ============================================================== details
* ====================================================================== */ * ====================================================================== */

Loading…
Cancel
Save