diff --git a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt deleted file mode 100644 index 33701c53d4..0000000000 --- a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.tangem.tap.common.analytics.paramsInterceptor - -import com.tangem.core.analytics.AnalyticsEvent -import com.tangem.core.analytics.api.ParamsInterceptor -import com.tangem.tap.common.analytics.events.AnalyticsParam - -/** -[REDACTED_AUTHOR] - */ -class BatchIdParamsInterceptor( - val batchId: String, -) : ParamsInterceptor { - - override fun id(): String = this::class.java.simpleName - - override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true - - override fun intercept(params: MutableMap) { - params[AnalyticsParam.Batch] = batchId - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt index fe3ccc5898..99c231e1e4 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt @@ -37,15 +37,24 @@ class CardContextInterceptor( ProductType.Note -> "Note" ProductType.Twins -> "Twin" ProductType.Wallet -> "Wallet" - ProductType.SaltPay -> when (scanResponse.isSaltPayVisa()) { - true -> "Visa" - else -> "Visa Backup" + ProductType.SaltPay -> if (scanResponse.isSaltPayVisa()) { + "Visa" + } else { + "Visa Backup" } ProductType.Start2Coin -> "Start2Coin" - else -> when (DemoHelper.isDemoCard(scanResponse)) { - // TODO: separate demo cards - true -> "Demo Wallet | Demo Note" - else -> "Other" + else -> if (DemoHelper.isDemoCard(scanResponse)) { + if (DemoHelper.isTestDemoCard(scanResponse)) { + "Demo Test" + } else { + when (scanResponse.card.cardId.substring(0..1)) { + "AC" -> "Demo Wallet" + "AB" -> "Demo Note" + else -> "Demo Other" + } + } + } else { + "Other" } } } diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Analytics.kt b/app/src/main/java/com/tangem/tap/common/extensions/Analytics.kt new file mode 100644 index 0000000000..3772f86a71 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/extensions/Analytics.kt @@ -0,0 +1,16 @@ +package com.tangem.tap.common.extensions + +import com.tangem.core.analytics.Analytics +import com.tangem.domain.common.ScanResponse +import com.tangem.tap.common.analytics.paramsInterceptor.CardContextInterceptor + +/** +[REDACTED_AUTHOR] + */ +fun Analytics.addCardContext(scanResponse: ScanResponse) { + addParamsInterceptor(CardContextInterceptor(scanResponse)) +} + +fun Analytics.eraseCardContext() { + removeParamsInterceptor(CardContextInterceptor.id()) +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt index acf77e3bdb..21c1cd221a 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt @@ -13,7 +13,7 @@ import com.tangem.domain.common.extensions.withMainContext import com.tangem.operations.backup.BackupService import com.tangem.tap.DELAY_SDK_DIALOG_CLOSE import com.tangem.tap.backupService -import com.tangem.tap.common.analytics.paramsInterceptor.BatchIdParamsInterceptor +import com.tangem.tap.common.extensions.addCardContext import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.primaryCardIsSaltPayVisa import com.tangem.tap.common.redux.global.GlobalAction @@ -75,7 +75,7 @@ object ScanCardProcessor { tangemSdkManager.changeDisplayedCardIdNumbersCount(scanResponse) onScanStateChange(false) - sendAnalytics(analyticsEvent, scanResponse.card.batchId) + sendAnalytics(analyticsEvent, scanResponse) checkForUnfinishedBackupForSaltPay( backupService = backupService, @@ -103,9 +103,9 @@ object ScanCardProcessor { private fun sendAnalytics( analyticsEvent: AnalyticsEvent?, - batchId: String, + scanResponse: ScanResponse, ) { - Analytics.addParamsInterceptor(BatchIdParamsInterceptor(batchId)) + Analytics.addCardContext(scanResponse) analyticsEvent?.let { Analytics.send(it) } } diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt index b0d473cde0..8cf2bf6d49 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt @@ -49,6 +49,8 @@ object DemoHelper { fun isDemoCard(scanResponse: ScanResponse): Boolean = isDemoCardId(scanResponse.card.cardId) + fun isTestDemoCard(scanResponse: ScanResponse): Boolean = config.isTestDemoCardId(scanResponse.card.cardId) + fun isDemoCardId(cardId: String): Boolean = config.isDemoCardId(cardId) fun tryHandle(appState: () -> AppState?, action: Action): Boolean { @@ -108,6 +110,8 @@ class DemoConfig { fun isDemoCardId(cardId: String): Boolean = demoCardIds.contains(cardId) + fun isTestDemoCardId(cardId: String): Boolean = testDemoCardIds.contains(cardId) + fun getBalance(blockchain: Blockchain): Amount = walletBalances[blockchain]?.copy() ?: Amount(BigDecimal.ZERO, blockchain).copy() @@ -489,17 +493,19 @@ class DemoConfig { class DemoTransactionSender( private val walletManager: WalletManager, - private val sender: TransactionSender = walletManager as TransactionSender + private val sender: TransactionSender = walletManager as TransactionSender, ) : TransactionSender { override suspend fun getFee(amount: Amount, destination: String): Result> { val blockchain = walletManager.wallet.blockchain return when (walletManager) { - is BitcoinWalletManager -> Result.Success(listOf( - Amount(0.0001.toBigDecimal(), blockchain), - Amount(0.0003.toBigDecimal(), blockchain), - Amount(0.00055.toBigDecimal(), blockchain), - )) + is BitcoinWalletManager -> Result.Success( + listOf( + Amount(0.0001.toBigDecimal(), blockchain), + Amount(0.0003.toBigDecimal(), blockchain), + Amount(0.00055.toBigDecimal(), blockchain), + ), + ) else -> sender.getFee(amount, destination) } } @@ -508,7 +514,7 @@ class DemoTransactionSender( val dataToSign = randomString(32).toByteArray() val signerResponse = signer.sign( hash = dataToSign, - publicKey = walletManager.wallet.publicKey + publicKey = walletManager.wallet.publicKey, ) return when (signerResponse) { is CompletionResult.Success -> SimpleResult.Failure(Exception(ID).toBlockchainSdkError()) @@ -529,5 +535,4 @@ class DemoTransactionSender( companion object { val ID = DemoTransactionSender::class.java.simpleName } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index 60dc234e4f..3395d8b1f0 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -29,7 +29,7 @@ class HomeFragment : Fragment(), StoreSubscriber { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Analytics.send(IntroductionProcess.ScreenOpened()) + store.dispatch(HomeAction.OnCreate) store.dispatch(HomeAction.Init) } diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt index 59e169ee04..e79a74e423 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt @@ -7,6 +7,7 @@ import org.rekotlin.Action sealed class HomeAction : Action { + object OnCreate : HomeAction() object Init : HomeAction() data class ReadCard( diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt index 76048ed0f4..afcb5c7a14 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt @@ -5,10 +5,12 @@ import com.tangem.common.doOnResult import com.tangem.common.doOnSuccess import com.tangem.core.analytics.Analytics import com.tangem.core.analytics.AnalyticsEvent +import com.tangem.tap.common.analytics.events.IntroductionProcess import com.tangem.tap.common.analytics.events.Shop import com.tangem.tap.common.entities.IndeterminateProgressButton import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.dispatchOpenUrl +import com.tangem.tap.common.extensions.eraseCardContext import com.tangem.tap.common.extensions.onCardScanned import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.common.redux.AppState @@ -51,6 +53,10 @@ private val homeMiddleware: Middleware = { _, _ -> private fun handleHomeAction(action: Action) { when (action) { + is HomeAction.OnCreate -> { + Analytics.eraseCardContext() + Analytics.send(IntroductionProcess.ScreenOpened()) + } is HomeAction.Init -> { store.dispatch(GlobalAction.RestoreAppCurrency) store.dispatch(GlobalAction.ExchangeManager.Init) diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt index aa4f559888..cba8631bb6 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt @@ -10,7 +10,7 @@ import com.tangem.core.analytics.Analytics import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.util.UserWalletId import com.tangem.tap.common.analytics.events.MyWallets -import com.tangem.tap.common.analytics.paramsInterceptor.BatchIdParamsInterceptor +import com.tangem.tap.common.extensions.addCardContext import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.common.redux.AppState @@ -197,8 +197,7 @@ internal class WalletSelectorMiddleware { .doOnSuccess { val selectedUserWallet = userWalletsListManager.selectedUserWalletSync if (selectedUserWallet != null) { - val batchId = selectedUserWallet.scanResponse.card.batchId - Analytics.addParamsInterceptor(BatchIdParamsInterceptor(batchId)) + Analytics.addCardContext(selectedUserWallet.scanResponse) store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) store.onUserWalletSelected(selectedUserWallet) diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt index 681a3cea77..f33cfe9453 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt @@ -5,6 +5,7 @@ import com.tangem.common.core.TangemError import org.rekotlin.Action internal sealed interface WelcomeAction : Action { + object OnCreate: WelcomeAction object ProceedWithBiometrics : WelcomeAction { object Success : WelcomeAction data class Error(val error: TangemError) : WelcomeAction diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index 4c39b5cb3c..34ab7b92ab 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -4,9 +4,12 @@ import android.content.Intent import com.tangem.common.core.TangemSdkError import com.tangem.common.doOnFailure import com.tangem.common.doOnSuccess +import com.tangem.core.analytics.Analytics import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.analytics.events.SignIn +import com.tangem.tap.common.extensions.addCardContext import com.tangem.tap.common.extensions.dispatchOnMain +import com.tangem.tap.common.extensions.eraseCardContext import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.navigation.AppScreen @@ -38,6 +41,10 @@ internal class WelcomeMiddleware { private fun handleAction(action: WelcomeAction, state: WelcomeState) { when (action) { + is WelcomeAction.OnCreate -> { + Analytics.eraseCardContext() + Analytics.send(SignIn.ScreenOpened()) + } is WelcomeAction.ProceedWithBiometrics -> { proceedWithBiometry(state) } @@ -62,6 +69,7 @@ internal class WelcomeMiddleware { } .doOnSuccess { selectedUserWallet -> if (selectedUserWallet != null) { + Analytics.addCardContext(selectedUserWallet.scanResponse) store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Wallet)) store.dispatchOnMain(WelcomeAction.ProceedWithBiometrics.Success) store.onUserWalletSelected(selectedUserWallet) diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt index 42a6d4d0e1..e4abfb4208 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt @@ -26,6 +26,7 @@ internal object WelcomeReducer { is WelcomeAction.ProceedWithBiometrics.Success -> state.copy(isUnlockWithBiometricsInProgress = false) is WelcomeAction.ProceedWithCard.Success -> state.copy(isUnlockWithCardInProgress = false) is WelcomeAction.CloseError -> state.copy(error = null) + else -> state } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt index 70477f5ad1..9ca40680ac 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt @@ -19,13 +19,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.colorResource import androidx.fragment.app.viewModels -import com.tangem.core.analytics.Analytics import com.tangem.core.ui.components.SystemBarsEffect import com.tangem.core.ui.fragments.ComposeFragment import com.tangem.core.ui.res.TangemTheme -import com.tangem.tap.common.analytics.events.SignIn import com.tangem.tap.features.details.ui.cardsettings.resolveReference +import com.tangem.tap.features.welcome.redux.WelcomeAction import com.tangem.tap.features.welcome.ui.components.WelcomeScreenContent +import com.tangem.tap.store import com.tangem.wallet.R internal class WelcomeFragment : ComposeFragment() { @@ -33,7 +33,7 @@ internal class WelcomeFragment : ComposeFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Analytics.send(SignIn.ScreenOpened()) + store.dispatch(WelcomeAction.OnCreate) } @Composable