From 1b486b730c3c54fea51175bde38c4036b9794b0c Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 28 Jun 2023 15:54:43 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 13 +----- .../tap/features/wallet/ui/WalletFragment.kt | 6 ++- .../com/tangem/tap/proxy/di/ProxyModule.kt | 18 ++++++++ .../domain/DefaultLearn2earnInteractor.kt | 19 +++----- .../learn2earn/domain/HeadersConverter.kt | 4 +- .../learn2earn/domain/WebViewUriBuilder.kt | 13 +++--- .../api/Learn2earnDependencyProvider.kt | 13 ++++++ .../domain/api/Learn2earnInteractor.kt | 2 - .../domain/di/Learn2earnDomainModule.kt | 3 ++ .../presentation/Learn2earnViewModel.kt | 2 +- .../presentation/ui/GetBonusView.kt | 43 ++++++++++++++----- .../ui/Learn2earnStoriesScreen.kt | 4 +- .../presentation/ui/state/Learn2earnState.kt | 2 +- .../presentation/ui/state/StateBuilder.kt | 2 +- .../presentation/webView/WebViewViewModel.kt | 4 +- 15 files changed, 99 insertions(+), 49 deletions(-) create mode 100644 features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 70fa67acd8..114746ccdb 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -3,7 +3,6 @@ package com.tangem.tap import android.app.Application import android.content.Context import android.content.pm.PackageManager -import androidx.compose.ui.text.intl.Locale import coil.ImageLoader import coil.ImageLoaderFactory import com.tangem.Log @@ -146,7 +145,7 @@ class TapApplication : Application(), ImageLoaderFactory { lateinit var walletConnectSessionsRepository: WalletConnectSessionsRepository @Inject - lateinit var learn2ernInteractor: Learn2earnInteractor + lateinit var learn2earnInteractor: Learn2earnInteractor override fun onCreate() { super.onCreate() @@ -205,7 +204,7 @@ class TapApplication : Application(), ImageLoaderFactory { // [REDACTED_JIRA] runBlocking { featureTogglesManager.init() - learn2ernInteractor.init() + learn2earnInteractor.init() } initTopUpController() @@ -246,7 +245,6 @@ class TapApplication : Application(), ImageLoaderFactory { shopService = TangemShopService(this, config.shopify!!) initAnalytics(this, config) initFeedbackManager(this, preferencesStorage, foregroundActivityObserver, store) - setupLearn2earnAdditionalDependencies(config) } private fun initAnalytics(application: Application, config: Config) { @@ -309,13 +307,6 @@ class TapApplication : Application(), ImageLoaderFactory { store.dispatch(GlobalAction.SetFeedbackManager(feedbackManager)) } - private fun setupLearn2earnAdditionalDependencies(config: Config) { - learn2ernInteractor.setupDependencies( - authCredentials = config.tangemComAuthorization, - countryCodeProvider = { store.state.globalState.userCountryCode ?: Locale.current.language }, - ) - } - private fun initWarningMessagesManager() { store.dispatch(GlobalAction.SetWarningManager(WarningMessagesManager())) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index d10cd1ded0..6540470882 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -217,7 +217,11 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber String = { + appStateHolder.mainStore?.state?.globalState?.userCountryCode ?: Locale.current.language + } + + override fun getWebViewAuthCredentialsProvider(): () -> String? = { + appStateHolder.mainStore?.state?.globalState?.configManager?.config?.tangemComAuthorization + } + } + } + // endregion FeatureConsumers } \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt index b32e34cc9f..7da36f0d40 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt @@ -5,10 +5,7 @@ import com.tangem.datasource.api.promotion.models.AbstractPromotionResponse import com.tangem.datasource.api.promotion.models.PromotionInfoResponse import com.tangem.feature.learn2earn.data.api.Learn2earnRepository import com.tangem.feature.learn2earn.data.models.PromoUserData -import com.tangem.feature.learn2earn.domain.api.Learn2earnInteractor -import com.tangem.feature.learn2earn.domain.api.RedirectConsequences -import com.tangem.feature.learn2earn.domain.api.WebViewResult -import com.tangem.feature.learn2earn.domain.api.WebViewResultHandler +import com.tangem.feature.learn2earn.domain.api.* import com.tangem.feature.learn2earn.domain.models.Promotion import com.tangem.feature.learn2earn.domain.models.PromotionError import com.tangem.feature.learn2earn.domain.models.toDomainError @@ -23,20 +20,18 @@ class DefaultLearn2earnInteractor( private val repository: Learn2earnRepository, private val userWalletManager: UserWalletManager, private val derivationManager: DerivationManager, + dependencyProvider: Learn2earnDependencyProvider, ) : Learn2earnInteractor { override var webViewResultHandler: WebViewResultHandler? = null - private lateinit var webViewUriBuilder: WebViewUriBuilder private lateinit var promotion: Promotion - override fun setupDependencies(authCredentials: String?, countryCodeProvider: () -> String) { - webViewUriBuilder = WebViewUriBuilder( - authCredentials = authCredentials, - userCountryCodeProvider = countryCodeProvider, - promoCodeProvider = { repository.getUserData().promoCode }, - ) - } + private val webViewUriBuilder: WebViewUriBuilder = WebViewUriBuilder( + authCredentialsProvider = dependencyProvider.getWebViewAuthCredentialsProvider(), + userCountryCodeProvider = dependencyProvider.getUserCountryCodeProvider(), + promoCodeProvider = { repository.getUserData().promoCode }, + ) override suspend fun init() { initPromotionInfo() diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/HeadersConverter.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/HeadersConverter.kt index e2fa9ffacf..439091ba1a 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/HeadersConverter.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/HeadersConverter.kt @@ -3,7 +3,9 @@ package com.tangem.feature.learn2earn.domain import com.tangem.utils.converter.TwoWayConverter /** - * A converter that helps prepare a list of headers to put in an intent and retrieve them later. + * A converter that helps prepare a list of headers to be added to the Bundle. + * ArrayList is used to prevent cast exceptions when the convert result is placed in a Bundle. + * @see Learn2earnRouter#openWebView() putStringArrayListExtra * [REDACTED_AUTHOR] */ diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt index b1e63934bf..5af98601aa 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt @@ -7,7 +7,7 @@ import com.tangem.feature.learn2earn.impl.BuildConfig [REDACTED_AUTHOR] */ internal class WebViewUriBuilder( - private val authCredentials: String?, + private val authCredentialsProvider: () -> String?, private val userCountryCodeProvider: () -> String, private val promoCodeProvider: () -> String?, ) { @@ -30,10 +30,13 @@ internal class WebViewUriBuilder( return builder.build() } - fun getBasicAuthHeaders(): Map = if (authCredentials == null) { - mapOf() - } else { - mapOf("Authorization" to "Basic $authCredentials") + fun getBasicAuthHeaders(): Map { + val credentials = authCredentialsProvider.invoke() + return if (credentials == null) { + mapOf() + } else { + mapOf("Authorization" to "Basic $credentials") + } } fun isPromoCodeRedirect(uri: Uri): Boolean { diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt new file mode 100644 index 0000000000..b0261884ec --- /dev/null +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt @@ -0,0 +1,13 @@ +package com.tangem.feature.learn2earn.domain.api + +/** + * Interface, a wrapper that allows us to get values from the AppStateHolder located in the app module + * +[REDACTED_AUTHOR] + */ +interface Learn2earnDependencyProvider { + + fun getUserCountryCodeProvider(): () -> String + + fun getWebViewAuthCredentialsProvider(): () -> String? +} \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt index 55cd1adfce..2cdadbb236 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt @@ -9,8 +9,6 @@ interface Learn2earnInteractor : WebViewRedirectHandler { var webViewResultHandler: WebViewResultHandler? - fun setupDependencies(authCredentials: String?, countryCodeProvider: () -> String) - suspend fun init() fun isUserHadPromoCode(): Boolean diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt index 915494c1eb..7ae76d3a19 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt @@ -3,6 +3,7 @@ package com.tangem.feature.learn2earn.domain.di import android.content.Context import com.tangem.feature.learn2earn.data.api.Learn2earnRepository import com.tangem.feature.learn2earn.domain.DefaultLearn2earnInteractor +import com.tangem.feature.learn2earn.domain.api.Learn2earnDependencyProvider import com.tangem.feature.learn2earn.domain.api.Learn2earnInteractor import com.tangem.feature.learn2earn.domain.api.WebViewRedirectHandler import com.tangem.feature.learn2earn.presentation.Learn2earnRouter @@ -29,6 +30,7 @@ class Learn2earnDomainModule { @Singleton fun provideInteractor( repository: Learn2earnRepository, + dependencyProvider: Learn2earnDependencyProvider, userWalletManager: UserWalletManager, derivationManager: DerivationManager, ): Learn2earnInteractor { @@ -36,6 +38,7 @@ class Learn2earnDomainModule { repository = repository, userWalletManager = userWalletManager, derivationManager = derivationManager, + dependencyProvider = dependencyProvider, ) } diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt index 8cd6e4536c..368d6291d7 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt @@ -29,7 +29,7 @@ class Learn2earnViewModel @Inject constructor( var uiState: Learn2earnState by mutableStateOf( Learn2earnState.init( - uiActions = UiActions( + uiActions = Learn2earnUiActions( buttonStoryClick = ::buttonStoryClick, buttonMainClick = ::buttonMainClick, ), diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt index ed76e37110..5c4aff6b96 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt @@ -15,9 +15,12 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.Shape import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.dp import com.tangem.core.ui.components.SpacerH4 import com.tangem.core.ui.extensions.resolveReference +import com.tangem.core.ui.res.TangemColorPalette import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTypography import com.tangem.feature.learn2earn.impl.R @@ -57,7 +60,7 @@ internal fun GetBonusView(state: MainScreenState, modifier: Modifier = Modifier) modifier = Modifier .align(Alignment.Center) .size(size = TangemTheme.dimens.size28), - color = Color.White, + color = TangemColorPalette.White, strokeWidth = TangemTheme.dimens.size2, ) } @@ -125,28 +128,46 @@ private fun ContentBackground(shape: Shape) { @Preview @Composable -private fun OneInchStoriesContentPreview_Light() { +private fun GetBonusViewPreview_Light(@PreviewParameter(GetBonusViewPreviewProvider::class) state: MainScreenState) { TangemTheme( isDark = false, ) { - GetBonusView(makePreviewState()) + GetBonusView(state) } } @Preview @Composable -private fun OneInchStoriesContentPreview_Dark() { +private fun GetBonusViewPreview_Dark(@PreviewParameter(GetBonusViewPreviewProvider::class) state: MainScreenState) { TangemTheme( isDark = true, ) { - GetBonusView(makePreviewState()) + GetBonusView(state) } } -private fun makePreviewState(): MainScreenState = MainScreenState( - isVisible = true, - onClick = {}, - description = MainScreenState.Description.Learn(0), - logoState = MainScreenState.LogoState.Idle, - showProgress = false, +private class GetBonusViewPreviewProvider : CollectionPreviewParameterProvider( + collection = listOf( + MainScreenState( + isVisible = true, + onClick = {}, + description = MainScreenState.Description.Learn(1), + logoState = MainScreenState.LogoState.Idle, + showProgress = false, + ), + MainScreenState( + isVisible = true, + onClick = {}, + description = MainScreenState.Description.Learn(2), + logoState = MainScreenState.LogoState.InProgress, + showProgress = true, + ), + MainScreenState( + isVisible = true, + onClick = {}, + description = MainScreenState.Description.GetBonus, + logoState = MainScreenState.LogoState.Idle, + showProgress = false, + ), + ), ) \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/Learn2earnStoriesScreen.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/Learn2earnStoriesScreen.kt index 0090991f43..4793bcfbc4 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/Learn2earnStoriesScreen.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/Learn2earnStoriesScreen.kt @@ -106,7 +106,7 @@ private fun StoryDescription(headerText: String, bodyText: String, modifier: Mod @Preview @Composable -private fun OneInchStoriesContentPreview_Light() { +private fun Learn2earnStoriesScreenPreview_Light() { TangemTheme( isDark = false, ) { @@ -118,7 +118,7 @@ private fun OneInchStoriesContentPreview_Light() { @Preview @Composable -private fun OneInchStoriesContentPreview_Dark() { +private fun Learn2earnStoriesScreenPreview_Dark() { TangemTheme( isDark = true, ) { diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt index 2f6d1381f0..ac82a7f9c4 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt @@ -68,7 +68,7 @@ data class MainScreenState( } } -class UiActions( +class Learn2earnUiActions( val buttonStoryClick: () -> Unit, val buttonMainClick: () -> Unit, ) \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt index 57dc52fc59..02ae3f1ee2 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt @@ -3,7 +3,7 @@ package com.tangem.feature.learn2earn.presentation.ui.state /** [REDACTED_AUTHOR] */ -internal fun Learn2earnState.Companion.init(uiActions: UiActions): Learn2earnState { +internal fun Learn2earnState.Companion.init(uiActions: Learn2earnUiActions): Learn2earnState { return Learn2earnState( storyScreenState = StoryScreenState( isVisible = false, diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/webView/WebViewViewModel.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/webView/WebViewViewModel.kt index 37d6f9a5c4..3b25e78a58 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/webView/WebViewViewModel.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/webView/WebViewViewModel.kt @@ -22,7 +22,9 @@ internal class WebViewViewModel @Inject constructor( } fun extractData(intent: Intent): WebViewData { - val uriString = intent.getStringExtra(Learn2earnWebViewActivity.EXTRA_WEB_URI)!! + val uriString = requireNotNull(intent.getStringExtra(Learn2earnWebViewActivity.EXTRA_WEB_URI)) { + "The Intent property EXTRA_WEB_URI is null" + } val rawHeaders = intent.getStringArrayListExtra(Learn2earnWebViewActivity.EXTRA_WEB_HEADERS) ?: ArrayList() return WebViewData(