package com.xuqm.sdk.webview import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Close import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @OptIn(ExperimentalMaterial3Api::class) @Composable fun XWebViewScreen( modifier: Modifier = Modifier, config: XWebViewConfig = getXWebViewConfig(), onBack: (() -> Unit)? = null, onClose: (() -> Unit)? = null, ) { val controller = XWebViewControl val canGoBack = controller.canGoBack() BackHandler(enabled = canGoBack) { controller.goBack() } Scaffold( modifier = modifier, topBar = { if (!config.hideToolbar) { TopAppBar( title = { Text(text = config.title.ifBlank { "WebView" }) }, navigationIcon = { IconButton(onClick = { if (canGoBack) { controller.goBack() } else { onBack?.invoke() ?: onClose?.invoke() } }) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { if (onClose != null) { IconButton(onClick = onClose) { Icon(Icons.Default.Close, contentDescription = "Close") } } }, ) } }, ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues) .then( if (config.hideToolbar && !config.hideStatusBar) { Modifier.statusBarsPadding() } else { Modifier }, ), ) { XWebViewView( modifier = Modifier.fillMaxSize(), config = config, ) } } }