add OI File Manager and AndroidSupportV2 used by it
[android_pandora.git] / apps / oi-filemanager / FileManager / src / org / openintents / filemanager / BookmarksProvider.java
diff --git a/apps/oi-filemanager/FileManager/src/org/openintents/filemanager/BookmarksProvider.java b/apps/oi-filemanager/FileManager/src/org/openintents/filemanager/BookmarksProvider.java
new file mode 100644 (file)
index 0000000..231b2ac
--- /dev/null
@@ -0,0 +1,175 @@
+package org.openintents.filemanager;
+
+import android.content.ContentProvider;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.text.TextUtils;
+
+public class BookmarksProvider extends ContentProvider implements BaseColumns{
+    public static final String TB_NAME = "bookmarks";
+    public static final String NAME = "name";
+    public static final String PATH = "path";
+    public static final String CHECKED = "checked"; //Only because of multiple choice delete dialog
+    public static final String PROVIDER_NAME = "org.openintents.filemanager.bookmarks";
+    public static final Uri CONTENT_URI = 
+            Uri.parse("content://"+PROVIDER_NAME);
+    public static final String BOOKMARK_MIMETYPE =
+               "vnd.android.cursor.item/vnd.openintents.bookmark";
+    public static final String BOOKMARKS_MIMETYPE =
+               "vnd.android.cursor.dir/vnd.openintents.bookmark";
+    
+
+    private static final int BOOKMARKS = 1;
+    private static final int BOOKMARK_ID = 2;
+    private static final UriMatcher uriMatcher;
+    static{
+       uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+       uriMatcher.addURI(PROVIDER_NAME, null, BOOKMARKS);   
+       uriMatcher.addURI(PROVIDER_NAME, "#", BOOKMARK_ID);  
+    }
+
+    private DatabaseHelper dbHelper;
+    private SQLiteDatabase db;
+
+
+    private static final String DATABASE_CREATE =
+        String.format("CREATE TABLE %s (%s integer primary key autoincrement, "
+                       + "%s text not null, %s text not null, %s integer default 0);",
+                       TB_NAME, _ID, NAME, PATH, CHECKED);
+
+    private static final String DATABASE_NAME = "org.openintents.filemanager";
+    private static final int DATABASE_VERSION = 2;
+
+    private static class DatabaseHelper extends SQLiteOpenHelper {
+
+        DatabaseHelper(Context context) {
+            super(context, DATABASE_NAME, null, DATABASE_VERSION);
+        }
+
+        @Override
+        public void onCreate(SQLiteDatabase db) {
+            db.execSQL(DATABASE_CREATE);
+        }
+
+        /*
+         * !!!
+         * When changing database version, you MUST change this method.
+         * Currently, it would delete all users' bookmarks
+         */
+        @Override
+        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+            db.execSQL("DROP TABLE IF EXISTS "+TB_NAME);
+            onCreate(db);
+        }
+    }
+    
+
+       @Override
+       public int delete(Uri arg0, String arg1, String[] arg2) {
+               int count = 0;
+               switch (uriMatcher.match(arg0)) {
+               case BOOKMARKS:
+                       count = db.delete(TB_NAME, arg1, arg2);
+                       break;
+               case BOOKMARK_ID:
+                       String id = arg0.getPathSegments().get(0);
+                       count = db.delete(TB_NAME, _ID + " = " + id
+                                       + (!TextUtils.isEmpty(arg1) ? " AND (" + arg1 + ')' : ""),
+                                       arg2);
+                       break;
+               default:
+                       throw new IllegalArgumentException("Unknown URI " + arg0);
+               }
+               getContext().getContentResolver().notifyChange(arg0, null);
+               return count;
+       }
+
+       @Override
+       public String getType(Uri uri) {
+               switch (uriMatcher.match(uri)){
+               case BOOKMARKS:
+                       return BOOKMARKS_MIMETYPE;
+               case BOOKMARK_ID:                
+                       return BOOKMARK_MIMETYPE;
+               default:
+                       throw new IllegalArgumentException("Unsupported URI: " + uri);        
+               }   
+       }
+
+       @Override
+       public Uri insert(Uri uri, ContentValues values){
+               long rowID = db.insert(TB_NAME, "", values);
+               if (rowID > 0){
+                       Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
+                       getContext().getContentResolver().notifyChange(_uri, null);    
+                       return _uri;                
+               }
+               throw new SQLException("Failed to insert row into " + uri);
+       }
+
+       @Override
+       public boolean onCreate() {
+               dbHelper = new DatabaseHelper(getContext());
+        db = dbHelper.getWritableDatabase();
+        return (db == null)? false:true;
+       }
+
+       @Override
+       public Cursor query(Uri uri, String[] projection, String selection,
+                       String[] selectionArgs, String sortOrder) {
+               SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();
+               sqlBuilder.setTables(TB_NAME);
+               if (uriMatcher.match(uri) == BOOKMARK_ID){
+                       sqlBuilder.appendWhere(_ID + " = " + uri.getPathSegments().get(0));  
+               }
+               
+               if (sortOrder==null || sortOrder=="")
+                       sortOrder = _ID;
+               
+               Cursor c = sqlBuilder.query(db, 
+                                                                       projection, 
+                                                                       selection, 
+                                                                       selectionArgs, 
+                                                                       null, 
+                                                                       null, 
+                                                                       sortOrder);
+               c.setNotificationUri(getContext().getContentResolver(), uri);
+               return c;
+       }
+
+       @Override
+       public int update(Uri uri, ContentValues values, String selection,
+                       String[] selectionArgs) {
+               int count = 0;
+               switch (uriMatcher.match(uri)){
+               case BOOKMARKS:
+                       count = db.update(
+                                               TB_NAME, 
+                                               values,
+                                               selection, 
+                                               selectionArgs);
+                       break;
+               case BOOKMARK_ID:   
+                       count = db.update(
+                                       TB_NAME, 
+                                       values,
+                                       _ID + " = " + uri.getPathSegments().get(0)
+                                               + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""),
+                                       selectionArgs);
+                       break;
+               default: throw new IllegalArgumentException("Unknown URI " + uri);    
+               }
+               getContext().getContentResolver().notifyChange(uri, null);
+               return count;
+       }
+
+}