Thread Previous • Date Previous • Date Next • Thread Next |
Heya, I played a bit with Tomdroid recently and added the support for live folders. This is a cupcake feature and thus bumps the requirements to the version 1.5 of Android. I don't really think it is useful at the moment but it may be in the future so I'm attaching the bzr merge directive to this mail. There is one thing I'm not really sure about the code: the NoteCollection and NoteProvider classes. The first one seems to parse the xml notes and puts them in a sqlite database while the second one is the main point to add, remove and modify notes and deals only with the sqlite database. Did I understand things correctly? Benoît Garret +33614365080
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: benoit.garret_launchpad@xxxxxxxx-20090607221433-\ # yvm4jfr2d26j6w1y # target_branch: http://bazaar.launchpad.net/%7Eolivier-\ # bottomlesspit/tomdroid/main/ # testament_sha1: 1c73988abef20322b6183ef5073600da521d5a05 # timestamp: 2009-06-08 00:21:47 +0200 # base_revision_id: olivier@xxxxxxxxxxxxxxxxx-20090602215343-\ # xtow80fj3kjrk82q # # Begin patch === modified file 'AndroidManifest.xml' --- AndroidManifest.xml 2009-06-02 21:45:34 +0000 +++ AndroidManifest.xml 2009-06-07 22:14:33 +0000 @@ -29,6 +29,10 @@ <provider android:name="NoteProvider" android:authorities="org.tomdroid.notes" /> +<activity android:name=".data.NotesLiveFolder" android:label="Notes"><intent-filter><action android:name="android.intent.action.CREATE_LIVE_FOLDER"></action> +<category android:name="android.intent.category.DEFAULT"></category> +</intent-filter> +</activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest> \ No newline at end of file === modified file 'src/org/tomdroid/NoteProvider.java' --- src/org/tomdroid/NoteProvider.java 2009-04-06 22:30:41 +0000 +++ src/org/tomdroid/NoteProvider.java 2009-06-07 22:14:33 +0000 @@ -58,6 +58,7 @@ import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.provider.LiveFolders; import android.text.TextUtils; import android.util.Log; @@ -72,10 +73,12 @@ private static final String DEFAULT_SORT_ORDER = Note.ID; private static HashMap<String, String> notesProjectionMap; - + private static HashMap<String, String> liveFolderProjectionMap; + private static final int NOTES = 1; private static final int NOTE_ID = 2; private static final int NOTE_TITLE = 3; + private static final int LIVE_FOLDER_NOTES = 4; private static final UriMatcher uriMatcher; @@ -143,6 +146,13 @@ // TODO appendWhere + whereArgs instead (new String[] whereArgs = uri.getLas..)? qb.appendWhere(Note.TITLE + " LIKE '" + uri.getLastPathSegment()+"'"); break; + + case LIVE_FOLDER_NOTES: + qb.setTables(DB_TABLE_NOTES); + qb.setProjectionMap(liveFolderProjectionMap); + // sort by last modified date, newest first + sortOrder = Note.MODIFIED_DATE + " DESC"; + break; default: throw new IllegalArgumentException("Unknown URI " + uri); @@ -277,11 +287,24 @@ uriMatcher.addURI(Tomdroid.AUTHORITY, "notes", NOTES); uriMatcher.addURI(Tomdroid.AUTHORITY, "notes/#", NOTE_ID); uriMatcher.addURI(Tomdroid.AUTHORITY, "notes/*", NOTE_TITLE); + uriMatcher.addURI(Tomdroid.AUTHORITY, "live_folder/notes", LIVE_FOLDER_NOTES); notesProjectionMap = new HashMap<String, String>(); notesProjectionMap.put(Note.ID, Note.ID); notesProjectionMap.put(Note.TITLE, Note.TITLE); notesProjectionMap.put(Note.FILE, Note.FILE); notesProjectionMap.put(Note.MODIFIED_DATE, Note.MODIFIED_DATE); + + liveFolderProjectionMap = new HashMap<String, String>(); + liveFolderProjectionMap.put(LiveFolders._ID, Note.ID + " AS " + LiveFolders._ID); + liveFolderProjectionMap.put(LiveFolders.NAME, Note.TITLE + " AS " + LiveFolders.NAME); + + // this projection creates a new column for + // the intent to be used when an item is clicked + // looks like : "content://org.tomdroid.notes/notes/id" + // "||" is the concatenation operator in sqlite + liveFolderProjectionMap.put(LiveFolders.INTENT, + "'content://" + Tomdroid.AUTHORITY + "/notes/'" + " || " + Note.ID + + " AS " + LiveFolders.INTENT); } } === added directory 'src/org/tomdroid/data' === added file 'src/org/tomdroid/data/NotesLiveFolder.java' --- src/org/tomdroid/data/NotesLiveFolder.java 1970-01-01 00:00:00 +0000 +++ src/org/tomdroid/data/NotesLiveFolder.java 2009-06-07 22:14:33 +0000 @@ -0,0 +1,47 @@ +package org.tomdroid.data; + +import org.tomdroid.R; +import org.tomdroid.ui.Tomdroid; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.LiveFolders; + +public class NotesLiveFolder extends Activity { + + public static final Uri CONTENT_URI = Uri.parse("content://" + Tomdroid.AUTHORITY + "/live_folder/notes"); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + final Intent intent = getIntent(); + final String action = intent.getAction(); + + if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) { + setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI, + "Notes", R.drawable.icon)); + } else { + setResult(RESULT_CANCELED); + } + + finish(); + } + + private static Intent createLiveFolder(Context context, Uri uri, String name, int icon) { + + final Intent intent = new Intent(); + + intent.setData(uri); + intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, name); + intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON, + Intent.ShortcutIconResource.fromContext(context, icon)); + intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST); + + return intent; + } + +} # Begin bundle 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 gA==
Thread Previous • Date Previous • Date Next • Thread Next |