Use available MD provider when preferred isn't available

Since we do not have JCEF bundled in Android Studio's JBR we run into an
issue where the first time a markdown panel is attempted to be created
it will instead be an empty panel. It works for subsequent calls as the
setting gets persisted.

While JCEFHtmlPanelProvider returns false for canBeUsed in Studio, this
method isn't called until it is already attempted to be created.

It's known that the ComposePanelProvider is not fully stable, but it is
a better alternative than no render support in Android Studio.

Test: manual
Fixes: 447223197
Change-Id: If05c692338a8d3bcadd5dd5235ae4b1e7707b467

closes https://github.com/JetBrains/intellij-community/pull/3266

GitOrigin-RevId: eafa9be776aff739b544c4d3c3eb3b78a5a5bb4e
This commit is contained in:
Jacob Logsdon
2025-10-07 14:45:53 +00:00
committed by intellij-monorepo-bot
parent 82459b97df
commit 97bc33a07f
@@ -186,7 +186,7 @@ class MarkdownPreviewFileEditor(
private fun retrievePanelProvider(settings: MarkdownSettings): MarkdownHtmlPanelProvider {
val providerInfo = settings.previewPanelProviderInfo
val preferredProvider = MarkdownHtmlPanelProvider.createFromInfo(providerInfo)
var preferredProvider = MarkdownHtmlPanelProvider.createFromInfo(providerInfo)
if (preferredProvider.isAvailable() !== MarkdownHtmlPanelProvider.AvailabilityInfo.AVAILABLE) {
val registeredProviders = MarkdownHtmlPanelProvider.getProviders()
val availableProvider = registeredProviders.firstOrNull { p: MarkdownHtmlPanelProvider -> p.isAvailable() === MarkdownHtmlPanelProvider.AvailabilityInfo.AVAILABLE }
@@ -205,6 +205,7 @@ class MarkdownPreviewFileEditor(
project
)
logger.warn("Cannot use preview panel provider '${providerInfo.name}'. Using the first one that is available: ${preferredProvider.providerInfo.name}")
preferredProvider = availableProvider
}
}
lastPanelProviderInfo = settings.previewPanelProviderInfo