11package com.getcode.navigation.screens
22
3+ import android.webkit.JavascriptInterface
4+ import androidx.compose.foundation.isSystemInDarkTheme
5+ import androidx.compose.foundation.layout.fillMaxSize
6+ import androidx.compose.foundation.layout.imePadding
37import androidx.compose.runtime.Composable
48import androidx.compose.runtime.LaunchedEffect
9+ import androidx.compose.ui.Alignment
10+ import androidx.compose.ui.Modifier
11+ import androidx.compose.ui.graphics.Color
512import androidx.compose.ui.res.stringResource
613import cafe.adriel.voyager.core.screen.ScreenKey
714import cafe.adriel.voyager.core.screen.uniqueScreenKey
815import cafe.adriel.voyager.hilt.getViewModel
916import com.getcode.R
1017import com.getcode.navigation.core.LocalCodeNavigator
18+ import com.getcode.theme.CodeTheme
19+ import com.getcode.ui.components.CodeCircularProgressIndicator
20+ import com.getcode.ui.components.SheetTitleDefaults
1121import com.getcode.ui.utils.getActivityScopedViewModel
1222import com.getcode.ui.utils.getStackScopedViewModel
23+ import com.getcode.ui.utils.toAGColor
1324import com.getcode.view.login.PhoneConfirm
1425import com.getcode.view.login.PhoneVerify
1526import com.getcode.view.login.PhoneVerifyViewModel
@@ -29,10 +40,14 @@ import com.getcode.view.main.getKin.BuyAndSellKin
2940import com.getcode.view.main.getKin.BuyKinScreen
3041import com.getcode.view.main.getKin.GetKinSheet
3142import com.getcode.view.main.getKin.GetKinSheetViewModel
43+ import com.getcode.view.main.tip.ConnectAccountScreen
3244import com.getcode.view.main.tip.EnterTipScreen
3345import com.getcode.view.main.tip.IdentityConnectionReason
34- import com.getcode.view.main.tip.ConnectAccountScreen
3546import com.getcode.view.main.tip.TipConnectViewModel
47+ import com.kevinnzou.web.LoadingState
48+ import com.kevinnzou.web.WebView
49+ import com.kevinnzou.web.rememberWebViewNavigator
50+ import com.kevinnzou.web.rememberWebViewState
3651import kotlinx.parcelize.IgnoredOnParcel
3752import kotlinx.parcelize.Parcelize
3853
@@ -261,7 +276,8 @@ data object DeleteConfirmationScreen : MainGraph, ModalContent {
261276}
262277
263278@Parcelize
264- data class CurrencySelectionModal (val kind : CurrencySelectKind = CurrencySelectKind .Entry ) : MainGraph, ModalContent {
279+ data class CurrencySelectionModal (val kind : CurrencySelectKind = CurrencySelectKind .Entry ) :
280+ MainGraph , ModalContent {
265281 @IgnoredOnParcel
266282 override val key: ScreenKey = uniqueScreenKey
267283
@@ -309,11 +325,7 @@ data class BuyMoreKinModal(
309325 BuyKinScreen (
310326 viewModel = getViewModel(),
311327 onRedirected = {
312- if (showClose) {
313- navigator.hide()
314- } else {
315- navigator.popAll()
316- }
328+ navigator.hide()
317329 }
318330 )
319331 }
@@ -346,6 +358,68 @@ data class BuyMoreKinModal(
346358 }
347359}
348360
361+ @Parcelize
362+ data class KadoWebScreen (val url : String ) : MainGraph, ModalContent {
363+
364+ @IgnoredOnParcel
365+ override val key: ScreenKey = uniqueScreenKey
366+
367+ override val name: String
368+ @Composable get() = stringResource(id = R .string.action_buyMoreKin)
369+
370+ @Composable
371+ override fun Content () {
372+ val state = rememberWebViewState(url = url)
373+ val navigator = LocalCodeNavigator .current
374+ val webNavigator = rememberWebViewNavigator()
375+ ModalContainer (
376+ modalColor = if (isSystemInDarkTheme()) {
377+ Color (0xFF0A121F )
378+ } else {
379+ CodeTheme .colors.background
380+ },
381+ backButtonEnabled = { true },
382+ backButton = { SheetTitleDefaults .CloseButton () },
383+ onBackClicked = { navigator.hide() },
384+ closeButtonEnabled = { true },
385+ closeButton = {
386+ SheetTitleDefaults .RefreshButton ()
387+ },
388+ onCloseClicked = { webNavigator.reload() }
389+ ) {
390+ val loadingState = state.loadingState
391+ if (loadingState is LoadingState .Loading ) {
392+ CodeCircularProgressIndicator (modifier = Modifier .align(Alignment .Center ))
393+ }
394+ WebView (
395+ modifier = Modifier
396+ .fillMaxSize()
397+ .imePadding(),
398+ captureBackPresses = false ,
399+ navigator = webNavigator,
400+ state = state,
401+ onCreated = { nativeWebView ->
402+ nativeWebView.addJavascriptInterface(BuyKinWebInterface (), " Android" )
403+ nativeWebView.clipToOutline = true
404+ nativeWebView.setBackgroundColor(Color .Transparent .toAGColor())
405+ nativeWebView.settings.apply {
406+ javaScriptEnabled = true
407+ domStorageEnabled = true
408+ }
409+ }
410+ )
411+ }
412+ }
413+
414+ class BuyKinWebInterface {
415+
416+ @JavascriptInterface
417+ fun handleMessage (message : String ) {
418+ println (" KADO BUY KIN MESSAGE :: $message " )
419+ }
420+ }
421+ }
422+
349423@Parcelize
350424data class EnterTipModal (val isInChat : Boolean = false ) : MainGraph, ModalRoot {
351425
0 commit comments