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

  1. Drop the update() call against this provider; it is query-only by design.
  2. Apply state changes through the app's real APIs (media service, playlists, prefs) instead.
  3. 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

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


AI-assisted analysis of yuliskov/SmartTube@3de8d90593 (2026-08-22). Data as JSON: /api/errors/c9f2ed9136913337. Report an issue: GitHub.