diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenStateProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenStateProvider.kt new file mode 100644 index 0000000000..be6622d8ee --- /dev/null +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenStateProvider.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.call.impl.ui + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.architecture.AsyncData + +open class CallScreenStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aCallScreenState(), + aCallScreenState(urlState = AsyncData.Failure(Exception("An error occurred"))), + ) +} + +private fun aCallScreenState( + urlState: AsyncData = AsyncData.Success("https://call.element.io/some-actual-call?with=parameters"), + userAgent: String = "", + isInWidgetMode: Boolean = false, + eventSink: (CallScreenEvents) -> Unit = {}, +): CallScreenState { + return CallScreenState( + urlState = urlState, + userAgent = userAgent, + isInWidgetMode = isInWidgetMode, + eventSink = eventSink, + ) +} diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenView.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenView.kt index ebf006d102..88f4359203 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenView.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenView.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.viewinterop.AndroidView import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.call.impl.R @@ -76,9 +77,9 @@ internal fun CallScreenView( } CallWebView( modifier = Modifier - .padding(padding) - .consumeWindowInsets(padding) - .fillMaxSize(), + .padding(padding) + .consumeWindowInsets(padding) + .fillMaxSize(), url = state.urlState, userAgent = state.userAgent, onPermissionsRequest = { request -> @@ -157,16 +158,11 @@ private fun WebView.setup( @PreviewsDayNight @Composable -internal fun CallScreenViewPreview() { - ElementPreview { - CallScreenView( - state = CallScreenState( - urlState = AsyncData.Success("https://call.element.io/some-actual-call?with=parameters"), - isInWidgetMode = false, - userAgent = "", - eventSink = {}, - ), - requestPermissions = { _, _ -> }, - ) - } +internal fun CallScreenViewPreview( + @PreviewParameter(CallScreenStateProvider::class) state: CallScreenState, +) = ElementPreview { + CallScreenView( + state = state, + requestPermissions = { _, _ -> }, + ) }