From 56626df74ad88dba393695fa6f93c3c49a8f726f Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Wed, 8 Jun 2022 14:25:53 +1000 Subject: [PATCH] Fix webview breaking preview --- gradle/libs.versions.toml | 1 + sample/build.gradle | 3 ++- .../sample/webview/BasicWebViewSample.kt | 17 +++++++++++++++++ .../java/com/google/accompanist/web/WebView.kt | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2a3bbf0d7..076ef88c6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,6 +19,7 @@ androidxnavigation = "2.5.0-rc01" compose-ui-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" } compose-ui-util = { module = "androidx.compose.ui:ui-util", version.ref = "compose" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } +compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose" } compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" } compose-foundation-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" } diff --git a/sample/build.gradle b/sample/build.gradle index 892b00bbf..379f51d13 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -70,7 +70,8 @@ dependencies { implementation libs.compose.material.material implementation libs.compose.material.iconsext implementation libs.compose.foundation.layout - implementation libs.compose.ui.tooling + debugImplementation libs.compose.ui.tooling + implementation libs.compose.ui.tooling.preview implementation libs.compose.ui.util implementation libs.androidx.lifecycle.viewmodel.compose diff --git a/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt b/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt index 70dd5dc18..878dbb8b9 100644 --- a/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt @@ -28,6 +28,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.Button import androidx.compose.material.Icon @@ -39,6 +40,7 @@ import androidx.compose.material.TopAppBar import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Error +import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -47,6 +49,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.google.accompanist.sample.AccompanistSampleTheme import com.google.accompanist.web.AccompanistWebViewClient @@ -149,3 +152,17 @@ class BasicWebViewSample : ComponentActivity() { } } } + +@Preview +@Composable +private fun WebViewPreview() { + AccompanistSampleTheme { + Column { + Text("Preview should still load but WebView will be grey box.") + WebView( + state = rememberWebViewState(url = "localhost"), + modifier = Modifier.height(100.dp) + ) + } + } +} diff --git a/web/src/main/java/com/google/accompanist/web/WebView.kt b/web/src/main/java/com/google/accompanist/web/WebView.kt index 453484f7f..dcc66972a 100644 --- a/web/src/main/java/com/google/accompanist/web/WebView.kt +++ b/web/src/main/java/com/google/accompanist/web/WebView.kt @@ -35,6 +35,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.viewinterop.AndroidView import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -87,6 +88,8 @@ fun WebView( client.navigator = navigator chromeClient.state = state + val runningInPreview = LocalInspectionMode.current + AndroidView( factory = { context -> WebView(context).apply { @@ -103,6 +106,9 @@ fun WebView( }, modifier = modifier ) { view -> + // AndroidViews are not supported by preview, bail early + if (runningInPreview) return@AndroidView + when (val content = state.content) { is WebContent.Url -> { val url = content.url