Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-23 14:55:19 +04:00
parent f2853fea54
commit 9ba27339de
5 changed files with 9 additions and 130 deletions

View file

@ -37,7 +37,6 @@ dependencies {
/** Other libraries */
implementation(deps.compose.shimmer)
implementation(deps.compose.accompanist.webView)
implementation(deps.compose.accompanist.systemUiController)
/** DI */

View file

@ -1,66 +0,0 @@
package com.tangem.feature.referral.ui
import android.content.res.Configuration
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.google.accompanist.web.WebView
import com.google.accompanist.web.rememberWebViewState
import com.tangem.core.ui.components.appbar.TangemTopAppBar
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.webview.applySafeSettings
import com.tangem.feature.referral.presentation.R
/**
* Bottom sheet content with referral program terms of use
*
* @param url link to the html page
* @param bottomBarHeight bottom insets
*/
@Composable
internal fun AgreementBottomSheetContent(url: String, bottomBarHeight: Dp) {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
) {
TangemTopAppBar(title = stringResourceSafe(id = R.string.details_referral_title))
AgreementHtmlView(url = url)
Spacer(modifier = Modifier.height(bottomBarHeight))
}
}
@Composable
private fun AgreementHtmlView(url: String) {
val state = rememberWebViewState(url)
val isInPreviewMode = LocalInspectionMode.current
WebView(
state = state,
modifier = Modifier.background(TangemTheme.colors.background.primary),
captureBackPresses = false,
onCreated = {
if (!isInPreviewMode) it.applySafeSettings()
},
)
}
@Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun Preview_AgreementBottomSheet() {
TangemThemePreview {
AgreementBottomSheetContent(url = "https://tangem.com/en/", 50.dp)
}
}

View file

@ -1,47 +0,0 @@
package com.tangem.feature.referral.ui
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.SheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.utils.WindowInsetsZero
import com.tangem.feature.referral.models.ReferralStateHolder
@OptIn(ExperimentalMaterial3Api::class)
@Composable
internal fun ReferralBottomSheet(
sheetState: SheetState,
isVisible: Boolean,
onDismissRequest: () -> Unit,
config: ReferralStateHolder.ReferralInfoState,
) {
val bottomBarHeight = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() }
if (isVisible) {
ModalBottomSheet(
modifier = Modifier.statusBarsPadding(),
onDismissRequest = onDismissRequest,
sheetState = sheetState,
shape = RoundedCornerShape(
topStart = TangemTheme.dimens.radius16,
topEnd = TangemTheme.dimens.radius16,
),
contentWindowInsets = { WindowInsetsZero },
containerColor = TangemTheme.colors.background.primary,
) {
AgreementBottomSheetContent(
url = when (config) {
is ReferralStateHolder.ReferralInfoState.NonParticipantContent -> config.url
is ReferralStateHolder.ReferralInfoState.ParticipantContent -> config.url
is ReferralStateHolder.ReferralInfoState.Loading -> ""
},
bottomBarHeight = bottomBarHeight,
)
}
}
}

View file

@ -9,7 +9,10 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
@ -44,12 +47,8 @@ import kotlinx.coroutines.launch
*
* @param stateHolder state holder
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
var isBottomSheetVisible by remember { mutableStateOf(value = false) }
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val snackbarHostState = remember(::SnackbarHostState)
Scaffold(
@ -80,10 +79,7 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
ReferralContent(
stateHolder = stateHolder,
snackbarHostState = snackbarHostState,
onAgreementClick = {
stateHolder.analytics.onAgreementClicked.invoke()
isBottomSheetVisible = true
},
onAgreementClick = stateHolder.analytics.onAgreementClicked,
modifier = Modifier.padding(it),
)
}
@ -107,13 +103,6 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
}
}
}
ReferralBottomSheet(
sheetState = sheetState,
isVisible = isBottomSheetVisible,
onDismissRequest = { isBottomSheetVisible = false },
config = stateHolder.referralInfoState,
)
}
@Composable

View file

@ -11,6 +11,7 @@ import com.tangem.common.routing.AppRoute
import com.tangem.common.routing.bundle.unbundle
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.navigation.share.ShareManager
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.feature.referral.analytics.ReferralEvents
import com.tangem.feature.referral.domain.ReferralInteractor
@ -36,6 +37,7 @@ internal class ReferralViewModel @Inject constructor(
private val dispatchers: CoroutineDispatcherProvider,
private val analyticsEventHandler: AnalyticsEventHandler,
private val shareManager: ShareManager,
private val urlOpener: UrlOpener,
savedStateHandle: SavedStateHandle,
) : ViewModel() {
@ -121,6 +123,8 @@ internal class ReferralViewModel @Inject constructor(
private fun onAgreementClicked() {
analyticsEventHandler.send(ReferralEvents.ClickTaC)
lastReferralData?.tosLink?.let(urlOpener::openUrl)
}
private fun onCopyClicked() {