/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.notes;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
/**
* Exposes Task Detail for notes
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class NotesDetailExposer extends BroadcastReceiver {
private static final int NOTE_MAX = 200;
@Override
public void onReceive(Context context, Intent intent) {
// get tags associated with this task
long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
if(taskId == -1)
return;
String taskDetail = getTaskDetails(taskId);
if(taskDetail == null)
return;
// transmit
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, NotesPlugin.IDENTIFIER);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, taskDetail);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
@SuppressWarnings("nls")
public String getTaskDetails(long id) {
if(!Preferences.getBoolean(R.string.p_showNotes, false))
return null;
Task task = PluginServices.getTaskService().fetchById(id, Task.ID, Task.NOTES);
if(task == null)
return null;
StringBuilder notesBuilder = new StringBuilder();
String notes = task.getValue(Task.NOTES);
if(!TextUtils.isEmpty(notes)) {
if(notes.length() > NOTE_MAX) {
int lastSpace = notes.lastIndexOf(' ', NOTE_MAX);
notes = notes.substring(0, Math.max(lastSpace, NOTE_MAX - 20)) + "...";
}
notesBuilder.append(notes);
}
TodorooCursor<Metadata> cursor = PluginServices.getMetadataService().query(
Query.select(Metadata.PROPERTIES).where(
MetadataCriteria.byTaskAndwithKey(task.getId(),
NoteMetadata.METADATA_KEY)).orderBy(Order.asc(Metadata.CREATION_DATE)));
Metadata metadata = new Metadata();
try {
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
metadata.readFromCursor(cursor);
if(notesBuilder.length() > 0)
notesBuilder.append("\n");
notesBuilder.append("<b>").append(metadata.getValue(NoteMetadata.TITLE)).append("</b>\n");
notesBuilder.append(metadata.getValue(NoteMetadata.BODY));
}
} finally {
cursor.close();
}
if(notesBuilder.length() == 0)
return null;
return "<img src='silk_note'/> " + notesBuilder; //$NON-NLS-1$
}
}