package com.nononsenseapps.notepad.database; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.net.Uri; public class ItemProvider extends ContentProvider { public static final String AUTHORITY = "com.nononsenseapps.notepad.database.AUTHORITY"; public static final String SCHEME = "content://"; private static final UriMatcher sURIMatcher = new UriMatcher( UriMatcher.NO_MATCH); static { taskviewItem.addMatcherUris(sURIMatcher); } @Override public boolean onCreate() { return true; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // Setup some common parsing and stuff final String table; final ContentValues values = new ContentValues(); final ArrayList<String> args = new ArrayList<String>(); if (selectionArgs != null) { for (String arg : selectionArgs) { args.add(arg); } } final StringBuilder sb = new StringBuilder(); if (selection != null && !selection.isEmpty()) { sb.append("(").append(selection).append(")"); } // Configure table and args depending on uri switch (sURIMatcher.match(uri)) { case taskviewItem.BASEITEMCODE: table = taskviewItem.TABLE_NAME; if (selection != null && !selection.isEmpty()) { sb.append(" AND "); } sb.append(taskviewItem.COL_ID + " IS ?"); args.add(uri.getLastPathSegment()); // Alternative is this // values.put(taskviewItem.COL_DELETED, 1); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } // Write to DB final SQLiteDatabase db = DatabaseHandler.getInstance(getContext()) .getWritableDatabase(); final String[] argArray = new String[args.size()]; final int result = db.delete(table, sb.toString(), args.toArray(argArray)); // Or alternatively //final int result = db.update(table, values, sb.toString(), // args.toArray(argArray)); if (result > 0) { // Support upload sync getContext().getContentResolver().notifyChange(uri, null, true); } return result; } @Override public Uri insert(Uri uri, ContentValues values) { // TODO: Implement this to handle requests to insert a new row. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO: Implement this to handle requests to update one or more rows. throw new UnsupportedOperationException("Not yet implemented"); } @Override public String getType(Uri uri) { switch (sURIMatcher.match(uri)) { case taskviewItem.BASEITEMCODE: return taskviewItem.TYPE_ITEM; case taskviewItem.BASEURICODE: return taskviewItem.TYPE_DIR; default: throw new IllegalArgumentException("Unknown URI " + uri); } } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] args, String sortOrder) { Cursor result = null; final long id; final DatabaseHandler handler = DatabaseHandler.getInstance(getContext()); switch (sURIMatcher.match(uri)) { case taskviewItem.BASEITEMCODE: id = Long.parseLong(uri.getLastPathSegment()); result = handler.gettaskviewItemCursor(id); result.setNotificationUri(getContext().getContentResolver(), uri); break; case taskviewItem.BASEURICODE: result = handler.getAlltaskviewItemsCursor(selection, args, sortOrder); result.setNotificationUri(getContext().getContentResolver(), uri); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } return result; } }