@@ -4,14 +4,21 @@ import android.annotation.SuppressLint
44import android.app.Activity
55import android.util.Log
66import android.webkit.WebView
7+ import androidx.activity.compose.BackHandler
78import androidx.compose.foundation.layout.fillMaxSize
89import androidx.compose.runtime.Composable
10+ import androidx.compose.runtime.LaunchedEffect
911import androidx.compose.runtime.MutableState
12+ import androidx.compose.runtime.getValue
13+ import androidx.compose.runtime.mutableStateOf
14+ import androidx.compose.runtime.remember
15+ import androidx.compose.runtime.setValue
1016import androidx.compose.ui.Modifier
1117import androidx.compose.ui.viewinterop.AndroidView
1218import com.mrepol742.webappp.client.SecureChromeClient
1319import com.mrepol742.webappp.client.SecureWebViewClient
1420import com.mrepol742.webappp.utils.DownloadListener
21+ import kotlinx.coroutines.delay
1522
1623@SuppressLint(" SetJavaScriptEnabled" )
1724@Composable
@@ -58,4 +65,18 @@ fun WebViewScreen(allowedDomain: String, initialUrl: String, webViewState: Mutab
5865 }
5966 }
6067 )
68+
69+ var canGoBack by remember { mutableStateOf(false ) }
70+
71+ LaunchedEffect (webViewState.value) {
72+ val webView = webViewState.value ? : return @LaunchedEffect
73+ while (true ) {
74+ canGoBack = webView.canGoBack()
75+ delay(100 ) // Poll every 100ms
76+ }
77+ }
78+
79+ BackHandler (enabled = canGoBack) {
80+ webViewState.value?.goBack()
81+ }
6182}
0 commit comments