public static ContentProvider getProvider(Uri uri) { if (uri == null || !ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { return null; } return getProvider(uri.getAuthority()); }
@Implementation protected ContentProviderResult[] applyBatch( String authority, ArrayList<ContentProviderOperation> operations) throws OperationApplicationException { ContentProvider provider = getProvider(authority); if (provider != null) { return provider.applyBatch(operations); } else { contentProviderOperations.put(authority, operations); return contentProviderResults; } }
@Implementation protected final ContentProviderClient acquireContentProviderClient(Uri uri) { ContentProvider provider = getProvider(uri); if (provider == null) { return null; } return getContentProviderClient(provider, true); }
@Implementation protected final ContentProviderClient acquireUnstableContentProviderClient(Uri uri) { ContentProvider provider = getProvider(uri); if (provider == null) { return null; } return getContentProviderClient(provider, false); }
@Implementation protected final IContentProvider acquireUnstableProvider(Uri uri) { ContentProvider cp = getProvider(uri); if (cp != null) { return cp.getIContentProvider(); } return null; }
@Implementation protected Bundle call(Uri uri, String method, String arg, Bundle extras) { ContentProvider cp = getProvider(uri); if (cp != null) { return cp.call(method, arg, extras); } else { return null; } }
@Implementation protected final ContentProviderClient acquireUnstableContentProviderClient(String name) { ContentProvider provider = getProvider(name); if (provider == null) { return null; } return getContentProviderClient(provider, false); }
@Implementation protected String getType(Uri uri) { ContentProvider provider = getProvider(uri); if (provider != null) { return provider.getType(uri); } else { return null; } }
@Implementation protected final ContentProviderClient acquireContentProviderClient(String name) { ContentProvider provider = getProvider(name); if (provider == null) { return null; } return getContentProviderClient(provider, true); }
@Implementation protected final IContentProvider acquireUnstableProvider(String name) { ContentProvider cp = getProvider(name); if (cp != null) { return cp.getIContentProvider(); } return null; }
/** * If a {@link ContentProvider} is registered for the given {@link Uri}, its {@link * ContentProvider#insert(Uri, ContentValues)} method will be invoked. * * <p>Tests can verify that this method was called using {@link #getStatements()} or {@link * #getInsertStatements()}. * * <p>If no appropriate {@link ContentProvider} is found, no action will be taken and a {@link * Uri} including the incremented value set with {@link #setNextDatabaseIdForInserts(int)} will * returned. */ @Implementation protected final Uri insert(Uri url, ContentValues values) { ContentProvider provider = getProvider(url); ContentValues valuesCopy = (values == null) ? null : new ContentValues(values); InsertStatement insertStatement = new InsertStatement(url, provider, valuesCopy); statements.add(insertStatement); insertStatements.add(insertStatement); if (provider != null) { return provider.insert(url, values); } else { return Uri.parse(url.toString() + "/" + ++nextDatabaseIdForInserts); } }
/** * If a {@link ContentProvider} is registered for the given {@link Uri}, its * {@link ContentProvider#update(Uri, ContentValues, String, String[])} method will be invoked. * * Tests can verify that this method was called using {@link #getStatements()} or * {@link #getUpdateStatements()}. * * @return If no appropriate {@link ContentProvider} is found, no action will be taken and 1 will * be returned. */ @Implementation protected int update(Uri uri, ContentValues values, String where, String[] selectionArgs) { ContentProvider provider = getProvider(uri); ContentValues valuesCopy = (values == null) ? null : new ContentValues(values); UpdateStatement updateStatement = new UpdateStatement(uri, provider, valuesCopy, where, selectionArgs); statements.add(updateStatement); updateStatements.add(updateStatement); if (provider != null) { return provider.update(uri, values, where, selectionArgs); } else { return 1; } }
/** * If a {@link ContentProvider} is registered for the given {@link Uri}, its {@link * ContentProvider#bulkInsert(Uri, ContentValues[])} method will be invoked. * * <p>Tests can verify that this method was called using {@link #getStatements()} or {@link * #getInsertStatements()}. * * <p>If no appropriate {@link ContentProvider} is found, no action will be taken and the number * of rows in {@code values} will be returned. */ @Implementation protected final int bulkInsert(Uri url, ContentValues[] values) { ContentProvider provider = getProvider(url); InsertStatement insertStatement = new InsertStatement(url, provider, values); statements.add(insertStatement); insertStatements.add(insertStatement); if (provider != null) { return provider.bulkInsert(url, values); } else { return values.length; } }
/** * If a {@link ContentProvider} is registered for the given {@link Uri}, its {@link * ContentProvider#delete(Uri, String, String[])} method will be invoked. * * <p>Tests can verify that this method was called using {@link #getDeleteStatements()} or {@link * #getDeletedUris()}. * * <p>If no appropriate {@link ContentProvider} is found, no action will be taken and {@code 1} * will be returned. */ @Implementation protected final int delete(Uri url, String where, String[] selectionArgs) { ContentProvider provider = getProvider(url); DeleteStatement deleteStatement = new DeleteStatement(url, provider, where, selectionArgs); statements.add(deleteStatement); deleteStatements.add(deleteStatement); if (provider != null) { return provider.delete(url, where, selectionArgs); } else { return 1; } }
@Implementation protected final Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { ContentProvider provider = getProvider(uri); if (provider != null) { return provider.query(uri, projection, selection, selectionArgs, sortOrder); } else { BaseCursor returnCursor = getCursor(uri); if (returnCursor == null) { return null; } returnCursor.setQuery(uri, projection, selection, selectionArgs, sortOrder); return returnCursor; } }
@Implementation protected Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) { ContentProvider provider = getProvider(uri); if (provider != null) { return provider.query( uri, projection, selection, selectionArgs, sortOrder, cancellationSignal); } else { BaseCursor returnCursor = getCursor(uri); if (returnCursor == null) { return null; } returnCursor.setQuery(uri, projection, selection, selectionArgs, sortOrder); return returnCursor; } }
@Test @Config(manifest = NONE) public void getProvider_shouldNotReturnAnyProviderWhenManifestIsNull() { Application application = new Application(); shadowOf(application).callAttach(RuntimeEnvironment.systemContext); assertThat(ShadowContentResolver.getProvider(Uri.parse("content://"))).isNull(); }
@Test public void getProvider_shouldCreateProviderFromManifest() throws Exception { Uri uri = Uri.parse("content://org.robolectric.authority1/shadows"); ContentProvider provider = ShadowContentResolver.getProvider(uri); assertThat(provider).isNotNull(); assertThat(provider.getReadPermission()).isEqualTo("READ_PERMISSION"); assertThat(provider.getWritePermission()).isEqualTo("WRITE_PERMISSION"); assertThat(provider.getPathPermissions()).asList().hasSize(1); // unfortunately, there is no direct way of testing if authority is set or not // however, it's checked in ContentProvider.Transport method calls (validateIncomingUri), so // it's the closest we can test against provider.getIContentProvider().getType(uri); // should not throw }
@Implementation public ContentProviderResult[] applyBatch(String authority, ArrayList<ContentProviderOperation> operations) throws OperationApplicationException { ContentProvider provider = getProvider(authority); if (provider != null) { return provider.applyBatch(operations); } else { contentProviderOperations.put(authority, operations); return contentProviderResults; } }
@Implementation public final ContentProviderClient acquireContentProviderClient(String name) { ContentProvider provider = getProvider(name); if (provider == null) return null; return getContentProviderClient(provider, true); }