// puts a note in the content provider // return uri public static Uri putNote(Activity activity, Note note) { // verify if the note is already in the content provider // TODO make the Query prettier (use querybuilder) Uri notes = Tomdroid.CONTENT_URI; string[] whereArgs = new string[1]; whereArgs[0] = note.getGuid(); // The note identifier is the guid ContentResolver cr = activity.ContentResolver; ICursor managedCursor = cr.Query(notes, LIST_PROJECTION, Note.GUID + "= ?", whereArgs, null); activity.StartManagingCursor(managedCursor); string title = note.getTitle(); string xmlContent = note.getXmlContent(); string plainContent = stringConverter.encode(Html.FromHtml(title + "\n" + xmlContent).ToString()); // Preparing the values to be either inserted or updated // depending on the result of the previous Query ContentValues values = new ContentValues(); values.Put(Note.TITLE, title); values.Put(Note.FILE, note.getFileName()); values.Put(Note.GUID, note.getGuid().ToString()); // Notice that we store the date in UTC because sqlite doesn't handle RFC3339 timezone information values.Put(Note.MODIFIED_DATE, note.getLastChangeDate().Format3339(false)); values.Put(Note.NOTE_CONTENT, xmlContent); values.Put(Note.NOTE_CONTENT_PLAIN, plainContent); values.Put(Note.TAGS, note.getTags()); Uri uri = null; if (managedCursor == null || managedCursor.Count == 0) { // This note is not in the database yet we need to insert it TLog.v(TAG, "A new note has been detected (not yet in db)"); uri = cr.Insert(Tomdroid.CONTENT_URI, values); TLog.v(TAG, "Note inserted in content provider. ID: {0} TITLE:{1} GUID:{2}", uri, note.getTitle(), note.getGuid()); } else { TLog.v(TAG, "A local note has been detected (already in db)"); cr.Update(Tomdroid.CONTENT_URI, values, Note.GUID+" = ?", whereArgs); uri = Uri.Parse(Tomdroid.CONTENT_URI+"/"+getNoteIdByGUID(activity, note.getGuid())); TLog.v(TAG, "Note updated in content provider: TITLE:{0} GUID:{1} TAGS:{2}", note.getTitle(), note.getGuid(), note.getTags()); } managedCursor.Close(); note = getNote(activity, uri); return uri; }
// gets a note from the content provider, based on guid public static Note getNoteByGuid(Activity activity, string guid) { Uri notes = Tomdroid.CONTENT_URI; string[] whereArgs = new string[1]; whereArgs[0] = guid; // The note identifier is the guid ContentResolver cr = activity.ContentResolver; ICursor cursor = cr.Query(notes, FULL_PROJECTION, Note.GUID + "= ?", whereArgs, null); activity.StartManagingCursor(cursor); if (cursor == null || cursor.Count == 0) { cursor.Close(); return null; } else { cursor.MoveToFirst(); string noteContent = cursor.GetString(cursor.GetColumnIndexOrThrow(Note.NOTE_CONTENT)); string noteTitle = cursor.GetString(cursor.GetColumnIndexOrThrow(Note.TITLE)); string noteChangeDate = cursor.GetString(cursor.GetColumnIndexOrThrow(Note.MODIFIED_DATE)); string noteTags = cursor.GetString(cursor.GetColumnIndexOrThrow(Note.TAGS)); string noteGUID = cursor.GetString(cursor.GetColumnIndexOrThrow(Note.GUID)); int noteDbid = cursor.GetInt(cursor.GetColumnIndexOrThrow(Note.ID)); Note note = new Note(); note.setTitle(noteTitle); note.setXmlContent(stripTitleFromContent(noteContent, noteTitle)); note.setLastChangeDate(noteChangeDate); note.addTag(noteTags); note.setGuid(noteGUID); note.setDbId(noteDbid); cursor.Close(); return note; } }
// check in a note Exists in the content provider public static bool noteExists(Activity activity, string guid) { Uri notes = Tomdroid.CONTENT_URI; string[] whereArgs = new string[1]; whereArgs[0] = guid; // The note identifier is the guid ContentResolver cr = activity.ContentResolver; ICursor cursor = cr.Query(notes, ID_PROJECTION, Note.GUID + "= ?", whereArgs, null); activity.StartManagingCursor(cursor); return (cursor != null && cursor.Count != 0); }
public static IListAdapter getListAdapter(Activity activity, string querys, int selectedIndex) { bool includeNotebookTemplates = Preferences.GetBoolean(Preferences.Key.INCLUDE_NOTE_TEMPLATES); bool includeDeletedNotes = Preferences.GetBoolean(Preferences.Key.INCLUDE_DELETED_NOTES); int optionalQueries = 0; if(!includeNotebookTemplates) optionalQueries++; if(!includeDeletedNotes) optionalQueries++; string[] qargs = null; string where = ""; int count = 0; if (querys != null ) { // sql statements to search notes string[] Query = querys.Split(" "); qargs = new string[Query.Length+optionalQueries]; foreach (string str in Query) { qargs[count++] = "%"+stringConverter.encode(str)+"%"; where = where + (where.Length > 0? " AND ":"")+"("+Note.NOTE_CONTENT_PLAIN+" LIKE ?)"; } } else qargs = new string[optionalQueries]; if (!includeDeletedNotes) { where += (where.Length > 0? " AND ":"")+"(" + Note.TAGS + " NOT LIKE ?)"; qargs[count++] = "%system:deleted%"; } if (!includeNotebookTemplates) { where += (where.Length > 0? " AND ":"")+"(" + Note.TAGS + " NOT LIKE ?)"; qargs[count++] = "%system:template%"; } // get a cursor representing all notes from the NoteProvider Uri notes = Tomdroid.CONTENT_URI; ContentResolver cr = activity.ContentResolver; ICursor notesCursor = cr.Query(notes, LIST_PROJECTION, where, qargs, sortOrder); activity.StartManagingCursor(notesCursor); // set up an adapter binding the TITLE field of the cursor to the list item string[] from = new string[] { Note.TITLE }; int[] to = new int[] { Resource.Id.note_title }; return new NoteListCursorAdapter(activity, Resource.layout.main_list_item, notesCursor, from, to, selectedIndex); }