protected int performUpdateUnchecked( Uri uri, ContentValues values, String where, String[] whereArgs) { validateFields(DataColumns.ALL, values); removeRepoFields(values); QuerySelection query = new QuerySelection(where, whereArgs); query = query.add(querySingle(uri)); int numRows = write().update(getTableName(), values, query.getSelection(), query.getArgs()); if (!isApplyingBatch()) { getContext().getContentResolver().notifyChange(uri, null); } return numRows; }
@Override public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { QuerySelection query = new QuerySelection(selection, selectionArgs); switch (matcher.match(uri)) { case CODE_LIST: break; case CODE_SINGLE: query = query.add(querySingle(uri)); break; case CODE_APP: query = query.add(queryApp(uri.getLastPathSegment())); break; case CODE_APKS: query = query.add(queryApks(uri.getLastPathSegment())); break; case CODE_REPO: query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment()))); break; case CODE_REPO_APPS: List<String> pathSegments = uri.getPathSegments(); query = query.add(queryRepoApps(Long.parseLong(pathSegments.get(1)), pathSegments.get(2))); break; default: Log.e(TAG, "Invalid URI for apk content provider: " + uri); throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri); } Query queryBuilder = new Query(); for (final String field : projection) { queryBuilder.addField(field); } queryBuilder.addSelection(query.getSelection()); queryBuilder.addOrderBy(sortOrder); Cursor cursor = read().rawQuery(queryBuilder.toString(), query.getArgs()); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; }
@Override public int delete(Uri uri, String where, String[] whereArgs) { QuerySelection query = new QuerySelection(where, whereArgs); switch (matcher.match(uri)) { case CODE_REPO: query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment()))); break; case CODE_APP: query = query.add(queryApp(uri.getLastPathSegment())); break; case CODE_APKS: query = query.add(queryApks(uri.getLastPathSegment())); break; // TODO: Add tests for this. case CODE_REPO_APK: List<String> pathSegments = uri.getPathSegments(); query = query .add(queryRepo(Long.parseLong(pathSegments.get(1)))) .add(queryApks(pathSegments.get(2))); break; case CODE_LIST: throw new UnsupportedOperationException("Can't delete all apks."); case CODE_SINGLE: throw new UnsupportedOperationException("Can't delete individual apks."); default: Log.e(TAG, "Invalid URI for apk content provider: " + uri); throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri); } int rowsAffected = write().delete(getTableName(), query.getSelection(), query.getArgs()); getContext().getContentResolver().notifyChange(uri, null); return rowsAffected; }