yuliskov/SmartTube · error · UnsupportedOperationException
Update is not implemented.
Error message
Update is not implemented.
What it means
VideoContentProvider exposes search suggestions only; update() unconditionally throws UnsupportedOperationException('Update is not implemented.') because the provider has no writable backing store to update.
Source
Thrown at leanbackassistant/src/main/java/com/liskovsoft/leanbackassistant/search/VideoContentProvider.java:250
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
throw new UnsupportedOperationException("Insert is not implemented.");
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
throw new UnsupportedOperationException("Delete is not implemented.");
}
@Override
public int update(
@NonNull Uri uri,
@Nullable ContentValues contentValues,
@Nullable String s,
@Nullable String[] strings) {
throw new UnsupportedOperationException("Update is not implemented.");
}
}
View on GitHub (pinned to 3de8d90593)
Solutions
- Drop the update() call against this provider; it is query-only by design.
- Apply state changes through the app's real APIs (media service, playlists, prefs) instead.
- In a fork, implement update() against actual storage if you truly need it.
Example fix
// before getContentResolver().update(searchUri, values, null, null); // throws // after — provider is read-only; push changes through the app's // own data APIs instead of the search ContentProvider.
Defensive patterns
Strategy: try-catch
Validate before calling
// update is unsupported; guard by operation type before dispatch
if (isWriteOperation(op)) {
require(isWritableProvider(uri)); // search provider is not
} Try / catch
try {
getContentResolver().update(searchUri, values, null, null);
} catch (UnsupportedOperationException e) { // Update is not implemented
Log.w(TAG, "Search provider is read-only: " + searchUri);
} Prevention
- Sync adapters should declare per-provider capabilities; mark the search provider read-only.
- Push state changes through the app's own APIs, never through suggestion providers.
When it happens
Trigger: Any getContentResolver().update(uri, values, where, args) call against this provider's authority — e.g. a sync adapter trying to push state changes.
Common situations: Sync frameworks attempting bidirectional sync with every provider; maintenance tooling flipping flags through content URIs; tests exercising update on all providers.
Related errors
- Insert is not implemented.
- Delete is not implemented.
- Unknown Uri: ${uri}
- You can't set adapter to DialogsList. Use #setAdapter(Dialog
- You can't set adapter to MessagesList. Use #setAdapter(Messa
AI-assisted analysis of yuliskov/SmartTube@3de8d90593 (2026-08-22).
Data as JSON: /api/errors/c9f2ed9136913337.
Report an issue: GitHub.