Skip to content

Add site settings for third-party blocks and theme style gating#22785

Draft
jkmassel wants to merge 9 commits intotrunkfrom
jkmassel/site-settings-rust
Draft

Add site settings for third-party blocks and theme style gating#22785
jkmassel wants to merge 9 commits intotrunkfrom
jkmassel/site-settings-rust

Conversation

@jkmassel
Copy link
Copy Markdown
Contributor

@jkmassel jkmassel commented Apr 9, 2026

Summary

Extracts the site settings changes from #22579 and layers them on top of #22765.

  • New "Use Third-Party Blocks" site setting — toggle in Site Settings gated behind GutenbergKitPluginsFeature and editor assets route support, with DB migration (v70→71), full data model plumbing (SiteSettingsModel, SiteSettingsInterface, WPComSiteSettings), and preference XML
  • Enhanced "Use Theme Styles" gating — contextual warnings when the site lacks editor settings support (disabled) or when the active theme is not a block theme
  • SiteSettingsProvider interface — injectable abstraction over SiteSettingsTable for reading site settings and determining block editor default, replacing static SiteUtils calls (now @Deprecated)
  • EditorSettingsRepository + ThemeRepository — discovers editor settings / editor assets route support via WpApiClient.apiRoot().get() and fetches the active theme to detect block theme support; results cached in per-site AppPrefs
  • Background capability fetchMySiteViewModel.onResume() triggers fetchEditorCapabilitiesForSite so results are available before the user opens Site Settings; failures show a snackbar and degrade gracefully

Test plan

  • Toggle both settings and reopen Site Settings — verify state is persisted
  • Verify DB migration runs cleanly on upgrade (v70→71) (the app will crash if not, so this should be pretty straightforward)

Theme Style Tests:

Before testing, ensure that the following feature flags are enabled:

  • Experimental Features > "Experimental Block Editor"

When the app is not signed into WP.com:

  • Log into vanilla.wpmt.co, view Site Settings – note that theme styles are available but there's a notice about things potentially not looking right. Draft a new post, note that the editor is styled.
  • Log into jetpack.wpmt.co, view Site Settings – note that theme styles are available without a warning. Draft a new post, note that the editor uses a custom font (it might be easier to see the difference if you disable theme styles then look again).

When the app is signed into WP.com:

  • View site settings for wpmobilep2.wordpress.com. Note that theme styles are supported. Start drafting a new post – note that the title is themed.
  • View site settings for jetpack.wpmt.co – note that theme styles are available without a warning. Draft a new post, note that the editor uses a custom font.

Third-Party Blocks Tests:

Before testing, ensure that the following feature flags are enabled:

  • Experimental Features > "Experimental Block Editor"
  • Debug Settings > gutenberg_kit_plugins

When the app is not signed into WP.com:

  • Log into vanilla.wpmt.co, view Site Settings – note that theme styles are available but there's a notice about things potentially not looking right. Draft a new post, note that the editor is styled.

  • Log into vanilla.wpmt.co, view Site Settings – note that third-party blocks are unavailable on this site.

  • Log into jetpack.wpmt.co, view Site Settings – note that third-party blocks are available. Draft a new post. Try out some of the Jetpack blocks to validate that they work.

When the app is signed into WP.com:

  • View site settings for jetpack.wpmt.co – note that third-party blocks are available. Draft a new post. Try out some of the Jetpack blocks to validate that they work.
  • View site settings for wpmobilep2.wordpress.com – note that third-party blocks are available. Draft a new post. Try out some of the Jetpack blocks to validate that they work.
  • View site settings for an atomic site – note that third-party blocks are available. Draft a new post. Try out some of the Jetpack blocks to validate that they work.

@dangermattic
Copy link
Copy Markdown
Collaborator

dangermattic commented Apr 9, 2026

1 Error
🚫 This PR includes a PR version of wordpress-rs (1285-59fdcdfba0de328157ae28f8bc2519560a0e2837). Please merge the corresponding wordpress-rs PR and update to a trunk version before merging.
1 Warning
⚠️ This PR is larger than 300 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.
1 Message
📖 This PR is still a Draft: some checks will be skipped.

Generated by 🚫 Danger

@wpmobilebot
Copy link
Copy Markdown
Contributor

wpmobilebot commented Apr 9, 2026

App Icon📲 You can test the changes from this Pull Request in WordPress Android by scanning the QR code below to install the corresponding build.

App NameWordPress Android
Build TypeDebug
Versionpr22785-50fca51
Build Number1488
Application IDorg.wordpress.android.prealpha
Commit50fca51
Installation URL7r1gshua74r5g
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot
Copy link
Copy Markdown
Contributor

wpmobilebot commented Apr 9, 2026

App Icon📲 You can test the changes from this Pull Request in Jetpack Android by scanning the QR code below to install the corresponding build.

App NameJetpack Android
Build TypeDebug
Versionpr22785-50fca51
Build Number1488
Application IDcom.jetpack.android.prealpha
Commit50fca51
Installation URL6o2mbg4c3e358
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

Base automatically changed from jkmassel/wpapiclient-wpcom-support to trunk April 15, 2026 18:31
@jkmassel jkmassel force-pushed the jkmassel/site-settings-rust branch 3 times, most recently from 540e9af to d50de44 Compare April 15, 2026 19:58
@wpmobilebot
Copy link
Copy Markdown
Contributor

wpmobilebot commented Apr 15, 2026

🤖 Build Failure Analysis

This build has failures. Claude has analyzed them - check the build annotations for details.

@jkmassel jkmassel force-pushed the jkmassel/site-settings-rust branch from 937ccc1 to 1ed0f7a Compare April 15, 2026 21:43
@wpmobilebot
Copy link
Copy Markdown
Contributor

wpmobilebot commented Apr 15, 2026

Project dependencies changes

list
! Upgraded Dependencies
rs.wordpress.api:android:1285-59fdcdfba0de328157ae28f8bc2519560a0e2837, (changed from trunk-0d94794142482d1b7f9395c0afef57ac991c452e)
rs.wordpress.api:kotlin:1285-59fdcdfba0de328157ae28f8bc2519560a0e2837, (changed from trunk-0d94794142482d1b7f9395c0afef57ac991c452e)
tree
 +--- project :libs:fluxc
-|    \--- rs.wordpress.api:android:trunk-0d94794142482d1b7f9395c0afef57ac991c452e
-|         +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
-|         +--- com.squareup.okhttp3:okhttp-tls:5.3.2
-|         |    +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
-|         |    +--- com.squareup.okio:okio:3.16.4 (*)
-|         |    \--- org.jetbrains.kotlin:kotlin-stdlib:2.2.21 -> 2.3.20 (*)
-|         +--- net.java.dev.jna:jna:5.18.1
-|         +--- rs.wordpress.api:kotlin:trunk-0d94794142482d1b7f9395c0afef57ac991c452e
-|         |    +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
-|         |    +--- com.squareup.okhttp3:okhttp-tls:5.3.2 (*)
-|         |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 (*)
-|         |    \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.3.20 (*)
-|         \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.3.20 (*)
+|    \--- rs.wordpress.api:android:1285-59fdcdfba0de328157ae28f8bc2519560a0e2837
+|         +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
+|         +--- com.squareup.okhttp3:okhttp-tls:5.3.2
+|         |    +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
+|         |    +--- com.squareup.okio:okio:3.16.4 (*)
+|         |    \--- org.jetbrains.kotlin:kotlin-stdlib:2.2.21 -> 2.3.20 (*)
+|         +--- net.java.dev.jna:jna:5.18.1
+|         +--- rs.wordpress.api:kotlin:1285-59fdcdfba0de328157ae28f8bc2519560a0e2837
+|         |    +--- com.squareup.okhttp3:okhttp:5.3.2 (*)
+|         |    +--- com.squareup.okhttp3:okhttp-tls:5.3.2 (*)
+|         |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 (*)
+|         |    \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.3.20 (*)
+|         \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.3.20 (*)
-\--- rs.wordpress.api:android:trunk-0d94794142482d1b7f9395c0afef57ac991c452e (*)
+\--- rs.wordpress.api:android:1285-59fdcdfba0de328157ae28f8bc2519560a0e2837 (*)

@jkmassel jkmassel force-pushed the jkmassel/site-settings-rust branch 7 times, most recently from 4f95f6e to 73524a4 Compare April 16, 2026 01:18
jkmassel and others added 5 commits April 16, 2026 09:55
Add a new "Use Third-Party Blocks" toggle in Site Settings, gated
behind GutenbergKit and editor assets support. Enhance the existing
"Use Theme Styles" toggle with contextual warnings when the site
lacks editor settings support or uses a non-block theme.

Includes SiteSettingsProvider interface for injectable access to
site settings from the local DB, replacing static SiteUtils calls
for block editor default detection.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Gate the "Use Third-Party Blocks" toggle behind the remote
gutenberg_kit_plugins feature flag in addition to the existing
GutenbergKit and editor assets checks. Also simplify the summary
string by removing "and styles" per reviewer feedback.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
…tion

Add ThemeRepository to fetch the active theme via WP API and determine
if it is a block theme. Add EditorSettingsRepository to discover
editor settings and editor assets route support via manifest/API root
queries. Wire SiteSettingsFragment to use EditorSettingsRepository for
gating theme styles and third-party blocks toggles.

Also adds manifest route fetching methods to WpApiClientProvider for
discovering available REST routes on WP.com and self-hosted sites.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Remove fetchWpComManifestRoutes and fetchSiteManifestRoutes from
WpApiClientProvider. EditorSettingsRepository now uses the standard
WpApiClient.request { it.apiRoot().get() } for all site types,
which already handles WP.com vs self-hosted URL resolution.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Call `EditorSettingsRepository.fetchEditorCapabilitiesForSite` when
the user lands on My Site so the route-discovery and theme-detection
results are available by the time they open Site Settings.

On failure, a snackbar is shown and cached prefs retain their previous
values so settings degrade to disabled rather than crashing.
@jkmassel jkmassel force-pushed the jkmassel/site-settings-rust branch from 73524a4 to 5ff6521 Compare April 16, 2026 15:57
12 tests covering pref delegation, route discovery persistence,
theme detection, API errors, transport-level error isolation
(one fetch failing doesn't block the other), and the both-fail
case. Also fix MySiteViewModelTest for new constructor param.
Points at Automattic/wordpress-rs#1285 which fixes route discovery
on WP.com simple sites so editor-assets and editor-settings routes
appear in the API root response.

Also adapts StatsDataSourceImpl to the new StatsUtmKeys API (String
replaced with List<StatsUtmKey>).
Switch from hasRoute (exact path match) to hasRouteForEndpoint
(namespace + endpoint) so that WP.com sites — whose route keys
include a sites/{site_id} prefix — are correctly detected.

Requires wordpress-rs PR #1285 which adds hasRouteForEndpoint
to WpApiDetails and the ApiUrlResolver parameter.
Call fetchEditorCapabilitiesForSite during pull-to-refresh so
editor settings prefs stay current without requiring a full
screen resume. Show snackbar on failure in both paths.
@jkmassel jkmassel force-pushed the jkmassel/site-settings-rust branch from 5ff6521 to 50fca51 Compare April 16, 2026 16:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants