From 37c26e919298f73d03cf75bc57d53678ac83fe52 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 26 Jan 2022 10:37:57 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 4 +- app/src/main/assets/tangem-app-config | 2 +- .../java/com/tangem/tap/TapApplication.kt | 18 ++- .../tap/common/analytics/AnalyticsEvent.kt | 54 ++++++++ .../tap/common/analytics/AnalyticsHandler.kt | 71 ++++++++++- .../analytics/AppsFlyerAnalyticsHandler.kt | 33 +++++ .../analytics/FirebaseAnalyticsHandler.kt | 119 +++--------------- .../analytics/GlobalAnalyticsHandler.kt | 41 ++++++ .../com/tangem/tap/common/extensions/Store.kt | 4 +- .../tap/common/redux/global/GlobalAction.kt | 2 + .../common/redux/global/GlobalMidlleware.kt | 4 +- .../tap/common/redux/global/GlobalReducer.kt | 2 + .../tap/common/redux/global/GlobalState.kt | 2 + .../com/tangem/tap/domain/TangemSdkManager.kt | 27 ++-- .../com/tangem/tap/domain/TapWalletManager.kt | 7 +- .../configurable/config/ConfigManager.kt | 7 +- .../domain/configurable/config/JsonModels.kt | 1 + .../tap/domain/twins/TwinCardsManager.kt | 21 ++-- .../walletconnect/WalletConnectManager.kt | 48 +++---- .../walletconnect/WalletConnectSdkHelper.kt | 18 +-- .../details/redux/DetailsMiddleware.kt | 13 +- .../tap/features/home/redux/HomeMiddleware.kt | 11 +- .../twins/redux/TwinCardsMiddleware.kt | 6 +- .../redux/OnboardingWalletMiddleware.kt | 11 +- .../wallet/ui/OnboardingWalletFragment.kt | 4 +- .../send/redux/middlewares/SendMiddleware.kt | 11 +- .../redux/middlewares/WalletMiddleware.kt | 8 +- .../redux/middlewares/WarningsMiddleware.kt | 3 +- .../ui/adapters/WarningMessagesAdapter.kt | 8 +- dependencies.gradle | 4 +- 31 files changed, 359 insertions(+), 208 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/analytics/AppsFlyerAnalyticsHandler.kt create mode 100644 app/src/main/java/com/tangem/tap/common/analytics/GlobalAnalyticsHandler.kt diff --git a/app/build.gradle b/app/build.gradle index b35d59c395..e362e0e86d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -110,6 +110,9 @@ dependencies { implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' + // AppsFlyer + implementation 'com.appsflyer:af-android-sdk:6.5.1' + // WalletConnect implementation 'com.github.salomonbrys.kotson:kotson:2.5.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3c400a3ec..f358215715 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,7 @@ + @@ -35,7 +36,8 @@ android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme" - tools:ignore="GoogleAppIndexingWarning"> + tools:ignore="GoogleAppIndexingWarning" + tools:replace="android:fullBackupContent"> = emptyMap() + ) + + abstract fun logCardSdkError( error: TangemSdkError, - actionToLog: FirebaseAnalyticsHandler.ActionToLog, - parameters: Map? = null, + actionToLog: Analytics.ActionToLog, + parameters: Map? = null, card: Card? = null ) + + abstract fun logError( + error: Throwable, + params: Map = emptyMap() + ) + + protected fun prepareParams(card: Card?, blockchain: String? = null): Map { + return mapOf( + AnalyticsParam.FIRMWARE.param to card?.firmwareVersion?.stringValue, + AnalyticsParam.BATCH_ID.param to card?.batchId, + AnalyticsParam.BLOCKCHAIN.param to blockchain, + ).filterNotNull() + } + + fun logWcEvent(event: Analytics.WcAnalyticsEvent) { + when (event) { + is Analytics.WcAnalyticsEvent.Action -> { + triggerEvent( + event = AnalyticsEvent.WC_SUCCESS_RESPONSE, + params = mapOf( + AnalyticsParam.WALLET_CONNECT_ACTION.param to event.action.name + ) + ) + } + is Analytics.WcAnalyticsEvent.Error -> { + val params = mapOf( + AnalyticsParam.WALLET_CONNECT_ACTION.param to event.action?.name, + AnalyticsParam.ERROR_DESCRIPTION.param to event.error.message + ) + .filterNotNull() + logError(event.error, params) + } + is Analytics.WcAnalyticsEvent.InvalidRequest -> + triggerEvent( + event = AnalyticsEvent.WC_INVALID_REQUEST, + params = mapOf( + AnalyticsParam.WALLET_CONNECT_REQUEST.param to event.json + ).filterNotNull() + ) + is Analytics.WcAnalyticsEvent.Session -> { + val analyticsEvent = when (event.event) { + Analytics.WcSessionEvent.Disconnect -> AnalyticsEvent.WC_SESSION_DISCONNECTED + Analytics.WcSessionEvent.Connect -> AnalyticsEvent.WC_NEW_SESSION + } + triggerEvent( + event = analyticsEvent, + params = mapOf( + AnalyticsParam.WALLET_CONNECT_DAPP_URL.param to event.url + ).filterNotNull() + ) + } + } + + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/AppsFlyerAnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/AppsFlyerAnalyticsHandler.kt new file mode 100644 index 0000000000..9692defe86 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/AppsFlyerAnalyticsHandler.kt @@ -0,0 +1,33 @@ +package com.tangem.tap.common.analytics + +import android.app.Application +import com.appsflyer.AppsFlyerLib +import com.tangem.common.card.Card +import com.tangem.common.core.TangemSdkError + +class AppsFlyerAnalyticsHandler(val context: Application): AnalyticsHandler() { + + override fun triggerEvent( + event: AnalyticsEvent, + card: Card?, + blockchain: String?, + params: Map + ) { + AppsFlyerLib.getInstance().logEvent(context, + event.event, prepareParams(card, blockchain)) + } + + override fun logCardSdkError( + error: TangemSdkError, + actionToLog: Analytics.ActionToLog, + parameters: Map?, + card: Card? + ) { + //TODO + } + + override fun logError(error: Throwable, params: Map) { + //TODO + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt index 33383e1089..106c07aae9 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt @@ -7,11 +7,16 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.ktx.Firebase import com.tangem.common.card.Card import com.tangem.common.core.TangemSdkError -import com.tangem.tap.common.extensions.filterNotNull -object FirebaseAnalyticsHandler : AnalyticsHandler { - override fun triggerEvent(event: AnalyticsEvent, card: Card?, blockchain: String?) { - Firebase.analytics.logEvent(event.event, setData(card, blockchain)) +object FirebaseAnalyticsHandler : AnalyticsHandler() { + override fun triggerEvent( + event: AnalyticsEvent, + card: Card?, + blockchain: String?, + params: Map + ) { + val fullParams = prepareParams(card, blockchain) + params + Firebase.analytics.logEvent(event.event, fullParams.toBundle()) } fun logException(name: String, throwable: Throwable) { @@ -22,16 +27,20 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { )) } + private fun Map.toBundle(): Bundle { + return bundleOf(*this.toList().toTypedArray()) + } + override fun logCardSdkError( error: TangemSdkError, - actionToLog: ActionToLog, + actionToLog: Analytics.ActionToLog, parameters: Map?, card: Card?, ) { if (error is TangemSdkError.UserCancelled) return val params = parameters?.toMutableMap() ?: mutableMapOf() - if (card != null) params + getParamsFromCard(card) + if (card != null) params + prepareParams(card) params[AnalyticsParam.ACTION] = actionToLog.key params[AnalyticsParam.ERROR_CODE] = error.code.toString() params[AnalyticsParam.ERROR_DESCRIPTION] = error.javaClass.simpleName @@ -44,100 +53,8 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { FirebaseCrashlytics.getInstance().recordException(cardError) } - private fun getParamsFromCard(card: Card): Map { - return mapOf( - AnalyticsParam.FIRMWARE to card.firmwareVersion.stringValue, - AnalyticsParam.BATCH_ID to card.batchId - ).filterNotNull() + override fun logError(error: Throwable, params: Map) { + params.forEach { (key, value) -> FirebaseCrashlytics.getInstance().setCustomKey(key, value) } + FirebaseCrashlytics.getInstance().recordException(error) } - - private fun setData(card: Card?, blockchain: String?): Bundle { - if (card == null) return bundleOf() - return bundleOf( - AnalyticsParam.BLOCKCHAIN.param to (blockchain), - AnalyticsParam.BATCH_ID.param to card.batchId, - AnalyticsParam.FIRMWARE.param to card.firmwareVersion.stringValue - ) - } - - fun logWcEvent(event: WcAnalyticsEvent) { - when (event) { - is WcAnalyticsEvent.Action -> { - - Firebase.analytics.logEvent( - AnalyticsEvent.WC_SUCCESS_RESPONSE.event, bundleOf( - AnalyticsParam.WALLET_CONNECT_ACTION.param to event.action.name - ) - ) - } - is WcAnalyticsEvent.Error -> { - mapOf( - AnalyticsParam.WALLET_CONNECT_ACTION to event.action?.name, - AnalyticsParam.ERROR_DESCRIPTION to event.error.message - ) - .filterNotNull() - .forEach { - FirebaseCrashlytics.getInstance().setCustomKey(it.key.param, it.value) - } - FirebaseCrashlytics.getInstance().recordException(event.error) - } - is WcAnalyticsEvent.InvalidRequest -> - Firebase.analytics.logEvent( - AnalyticsEvent.WC_INVALID_REQUEST.event, bundleOf( - AnalyticsParam.WALLET_CONNECT_REQUEST.param to event.json - ) - ) - is WcAnalyticsEvent.Session -> { - val analyticsEvent = when (event.event) { - WcSessionEvent.Disconnect -> AnalyticsEvent.WC_SESSION_DISCONNECTED - WcSessionEvent.Connect -> AnalyticsEvent.WC_NEW_SESSION - } - Firebase.analytics.logEvent( - analyticsEvent.event, bundleOf( - AnalyticsParam.WALLET_CONNECT_DAPP_URL.param to event.url - ) - ) - } - } - - } - - enum class AnalyticsParam(val param: String) { - BLOCKCHAIN("blockchain"), - BATCH_ID("batch_id"), - FIRMWARE("firmware"), - ACTION("action"), - ERROR_DESCRIPTION("error_description"), - ERROR_CODE("error_code"), - NEW_SECURITY_OPTION("new_security_option"), - ERROR_KEY("Tangem SDK error key"), - WALLET_CONNECT_ACTION("wallet_connect_action"), - WALLET_CONNECT_REQUEST("wallet_connect_request"), - WALLET_CONNECT_DAPP_URL("wallet_connect_dapp_url"), - } - - enum class ActionToLog(val key: String) { - Scan("tap_scan_task"), - SendTransaction("send_transaction"), - WalletConnectSign("wallet_connect_personal_sign"), - WalletConnectTransaction("wallet_connect_tx_sign"), - ReadPinSettings("read_pin_settings"), - ChangeSecOptions("change_sec_options"), - CreateWallet("create_wallet"), - PurgeWallet("purge_wallet"), - WriteIssuerData("write_issuer_data"), - } - - enum class WcSessionEvent { Disconnect, Connect } - - sealed class WcAnalyticsEvent { - data class Error(val error: Throwable, val action: WcAction?) : - WcAnalyticsEvent() - - data class Session(val event: WcSessionEvent, val url: String?) : WcAnalyticsEvent() - data class Action(val action: WcAction) : WcAnalyticsEvent() - data class InvalidRequest(val json: String?) : WcAnalyticsEvent() - } - - enum class WcAction { PersonalSign, SignTransaction, SendTransaction } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/GlobalAnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/GlobalAnalyticsHandler.kt new file mode 100644 index 0000000000..da77c37e05 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/GlobalAnalyticsHandler.kt @@ -0,0 +1,41 @@ +package com.tangem.tap.common.analytics + +import android.app.Application +import com.tangem.common.card.Card +import com.tangem.common.core.TangemSdkError + +class GlobalAnalyticsHandler(val analyticsHandlers: List) : + AnalyticsHandler() { + override fun triggerEvent( + event: AnalyticsEvent, + card: Card?, + blockchain: String?, + params: Map + ) { + analyticsHandlers.forEach { it.triggerEvent(event, card, blockchain) } + } + + override fun logCardSdkError( + error: TangemSdkError, + actionToLog: Analytics.ActionToLog, + parameters: Map?, + card: Card? + ) { + analyticsHandlers.forEach { it.logCardSdkError(error, actionToLog, parameters, card) } + } + + override fun logError(error: Throwable, params: Map) { + analyticsHandlers.forEach { it.logError(error, params) } + } + + companion object { + fun createDefaultAnalyticHandlers(context: Application): GlobalAnalyticsHandler { + return GlobalAnalyticsHandler( + listOf( + FirebaseAnalyticsHandler, + AppsFlyerAnalyticsHandler(context) + ) + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Store.kt b/app/src/main/java/com/tangem/tap/common/extensions/Store.kt index 83aa152f76..678caeb9f0 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Store.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Store.kt @@ -18,8 +18,8 @@ fun Store<*>.dispatchOnMain(action: Action) { } } -suspend fun Store<*>.onCardScanned(scanResponse: ScanResponse, addAnalytics: Boolean = true) { - store.state.globalState.tapWalletManager.onCardScanned(scanResponse, addAnalytics) +suspend fun Store<*>.onCardScanned(scanResponse: ScanResponse) { + store.state.globalState.tapWalletManager.onCardScanned(scanResponse) } fun Store<*>.dispatchOpenUrl(url: String) { diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index bbea6e43f9..5f0db04ae5 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -3,6 +3,7 @@ package com.tangem.tap.common.redux.global import com.tangem.blockchain.common.WalletManager import com.tangem.common.CompletionResult import com.tangem.common.core.TangemError +import com.tangem.tap.common.analytics.GlobalAnalyticsHandler import com.tangem.tap.common.redux.* import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.config.ConfigManager @@ -69,6 +70,7 @@ sealed class GlobalAction : Action { data class SetConfigManager(val configManager: ConfigManager) : GlobalAction() data class SetWarningManager(val warningManager: WarningMessagesManager) : GlobalAction() data class SetFeedbackManager(val feedbackManager: FeedbackManager) : GlobalAction() + data class SetAnanlyticHandlers(val analyticsHandlers: GlobalAnalyticsHandler) : GlobalAction() data class SendFeedback(val emailData: EmailData) : GlobalAction() data class UpdateFeedbackInfo(val walletManagers: List) : GlobalAction() diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt index b16fbe21c7..6200feb947 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt @@ -4,7 +4,6 @@ import com.tangem.common.CompletionResult import com.tangem.common.core.TangemSdkError import com.tangem.common.services.Result import com.tangem.tap.* -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.withMainContext @@ -89,9 +88,8 @@ private val globalMiddlewareHandler: Middleware = { dispatch, appState is GlobalAction.ScanCard -> { scope.launch { val result = tangemSdkManager.scanProduct( - FirebaseAnalyticsHandler, + store.state.globalState.analyticsHandlers, currenciesRepository, - action.shouldDeriveWC, action.messageResId ) withMainContext { diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt index e549a2f386..94621117bc 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt @@ -46,6 +46,8 @@ fun globalReducer(action: Action, state: AppState): GlobalState { globalState.copy(configManager = action.configManager) } is GlobalAction.SetWarningManager -> globalState.copy(warningManager = action.warningManager) + is GlobalAction.SetAnanlyticHandlers -> + globalState.copy(analyticsHandlers = action.analyticsHandlers) is GlobalAction.UpdateWalletSignedHashes -> { val card = globalState.scanResponse?.card ?: return globalState val wallet = card.wallet(action.walletPublicKey) ?: return globalState diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index f634a6a0ff..c607125cb8 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -1,5 +1,6 @@ package com.tangem.tap.common.redux.global +import com.tangem.tap.common.analytics.AnalyticsHandler import com.tangem.tap.common.entities.TapCurrency.Companion.DEFAULT_FIAT_CURRENCY import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.domain.PayIdManager @@ -28,6 +29,7 @@ data class GlobalState( val dialog: StateDialog? = null, val moonpayStatus: MoonpayStatus? = null, val resources: AndroidResources = AndroidResources(), + val analyticsHandlers: AnalyticsHandler? = null, ) : StateType diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt index 4c3f0c78d4..0daf937bc0 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt @@ -19,9 +19,9 @@ import com.tangem.operations.CommandResponse import com.tangem.operations.pins.CheckUserCodesCommand import com.tangem.operations.pins.CheckUserCodesResponse import com.tangem.operations.pins.SetUserCodeCommand +import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsEvent import com.tangem.tap.common.analytics.AnalyticsHandler -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.ByteArrayKey import com.tangem.tap.domain.tasks.CreateWalletAndRescanTask import com.tangem.tap.domain.tasks.DerivationTask @@ -39,12 +39,11 @@ import kotlin.coroutines.suspendCoroutine class TangemSdkManager(private val tangemSdk: TangemSdk, private val context: Context) { suspend fun scanProduct( - analyticsHandler: AnalyticsHandler, + analyticsHandler: AnalyticsHandler?, currenciesRepository: CurrenciesRepository, - shouldDeriveWC: Boolean, messageRes: Int? = null, ): CompletionResult { - analyticsHandler.triggerEvent(AnalyticsEvent.READY_TO_SCAN, null) + analyticsHandler?.triggerEvent(AnalyticsEvent.READY_TO_SCAN, null) val message = Message(context.getString(messageRes ?: R.string.initial_message_scan_header)) return runTaskAsyncReturnOnMain(ScanProductTask(null, currenciesRepository), null, message) @@ -62,13 +61,23 @@ class TangemSdkManager(private val tangemSdk: TangemSdk, private val context: Co } private fun sendScanFailuresToAnalytics( - analyticsHandler: AnalyticsHandler, + analyticsHandler: AnalyticsHandler?, result: CompletionResult ) { - if (result is CompletionResult.Failure && result.error is TangemSdkError) { - (result.error as? TangemSdkError)?.let { error -> - analyticsHandler.logCardSdkError(error, FirebaseAnalyticsHandler.ActionToLog.Scan) - } + when (result) { + is CompletionResult.Success -> + analyticsHandler?.triggerEvent( + event = AnalyticsEvent.CARD_IS_SCANNED, + card = result.data.card, + blockchain = result.data.walletData?.blockchain + ) + is CompletionResult.Failure -> + (result.error as? TangemSdkError)?.let { error -> + analyticsHandler?.logCardSdkError( + error = error, + actionToLog = Analytics.ActionToLog.Scan + ) + } } } diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 9f6d0f13e1..cfd628a093 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -2,8 +2,6 @@ package com.tangem.tap.domain import com.tangem.blockchain.common.* import com.tangem.common.services.Result -import com.tangem.tap.common.analytics.AnalyticsEvent -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.dispatchDebugErrorNotification import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.redux.global.FiatCurrencyName @@ -71,10 +69,7 @@ class TapWalletManager { handleFiatRatesResult(results) } - suspend fun onCardScanned(data: ScanResponse, addAnalyticsEvent: Boolean = false) { - if (addAnalyticsEvent) { - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.CARD_IS_SCANNED, data.card, data.walletData?.blockchain) - } + suspend fun onCardScanned(data: ScanResponse) { store.state.globalState.feedbackManager?.infoHolder?.setCardInfo(data.card) updateConfigManager(data) diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt index cae1861582..412537befb 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt @@ -11,6 +11,7 @@ data class Config( val coinMarketCapKey: String = "f6622117-c043-47a0-8975-9d673ce484de", val moonPayApiKey: String = "pk_test_kc90oYTANy7UQdBavDKGfL4K9l6VEPE", val moonPayApiSecretKey: String = "sk_test_V8w4M19LbDjjYOt170s0tGuvXAgyEb1C", + val appsFlyerDevKey: String = "", val blockchainSdkConfig: BlockchainSdkConfig = BlockchainSdkConfig(), val isSendingToPayIdEnabled: Boolean = true, val isTopUpEnabled: Boolean = false, @@ -84,7 +85,8 @@ class ConfigManager( blockchairAuthorizationToken = values.blockchairAuthorizationToken, blockcypherTokens = values.blockcypherTokens, infuraProjectId = values.infuraProjectId - ) + ), + appsFlyerDevKey = values.appsFlyerDevKey, ) defaultConfig = defaultConfig.copy( coinMarketCapKey = values.coinMarketCapKey, @@ -95,7 +97,8 @@ class ConfigManager( blockchairAuthorizationToken = values.blockchairAuthorizationToken, blockcypherTokens = values.blockcypherTokens, infuraProjectId = values.infuraProjectId - ) + ), + appsFlyerDevKey = values.appsFlyerDevKey, ) } diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt index c71a4a16dd..edbbf6345c 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt @@ -19,6 +19,7 @@ class ConfigValueModel( val blockchairAuthorizationToken: String?, val blockcypherTokens: Set?, val infuraProjectId: String?, + val appsFlyerDevKey: String, ) class ConfigModel(val features: FeatureModel?, val configValues: ConfigValueModel?) { diff --git a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt index 861f3db801..53bd278cc7 100644 --- a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt @@ -11,12 +11,17 @@ import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.hexToBytes import com.tangem.common.extensions.toHexString import com.tangem.operations.wallet.CreateWalletResponse -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.Analytics +import com.tangem.tap.common.analytics.AnalyticsHandler import com.tangem.tap.domain.tasks.product.ScanResponse import com.tangem.tap.network.createMoshi import com.tangem.tap.tangemSdkManager -class TwinCardsManager(private val card: Card, assetReader: AssetReader) { +class TwinCardsManager( + private val card: Card, + assetReader: AssetReader, + val analyticsHandler: AnalyticsHandler? +) { private val currentCardId: String = card.cardId @@ -31,9 +36,9 @@ class TwinCardsManager(private val card: Card, assetReader: AssetReader) { is CompletionResult.Success -> currentCardPublicKey = response.data.wallet.publicKey.toHexString() is CompletionResult.Failure -> { (response.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + analyticsHandler?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + Analytics.ActionToLog.CreateWallet, card = card ) } @@ -61,9 +66,9 @@ class TwinCardsManager(private val card: Card, assetReader: AssetReader) { } is CompletionResult.Failure -> { (response.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + analyticsHandler?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + Analytics.ActionToLog.CreateWallet, card = card ) } @@ -81,9 +86,9 @@ class TwinCardsManager(private val card: Card, assetReader: AssetReader) { is CompletionResult.Success -> Result.Success(response.data) is CompletionResult.Failure -> { (response.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + analyticsHandler?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.WriteIssuerData, + Analytics.ActionToLog.WriteIssuerData, card = card ) } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index 2a071fa5ce..49510ff791 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -2,7 +2,7 @@ package com.tangem.tap.domain.walletconnect import com.tangem.blockchain.common.Blockchain import com.tangem.common.extensions.guard -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.* @@ -23,17 +23,7 @@ import okhttp3.logging.HttpLoggingInterceptor import timber.log.Timber import java.util.* import java.util.concurrent.TimeUnit -import kotlin.collections.MutableMap -import kotlin.collections.filter -import kotlin.collections.first -import kotlin.collections.forEach -import kotlin.collections.get -import kotlin.collections.listOf -import kotlin.collections.map -import kotlin.collections.mutableMapOf import kotlin.collections.set -import kotlin.collections.toMap -import kotlin.collections.toMutableMap class WalletConnectManager { @@ -171,9 +161,9 @@ class WalletConnectManager { } private fun onSessionClosed(session: WCSession) { - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Session( - FirebaseAnalyticsHandler.WcSessionEvent.Disconnect, sessions[session]?.peerMeta?.url + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Session( + Analytics.WcSessionEvent.Disconnect, sessions[session]?.peerMeta?.url ) ) sessions.remove(session) @@ -312,9 +302,9 @@ class WalletConnectManager { ) ) } - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Session( - FirebaseAnalyticsHandler.WcSessionEvent.Connect, peer.url + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Session( + Analytics.WcSessionEvent.Connect, peer.url ) ) } @@ -326,9 +316,9 @@ class WalletConnectManager { } client.onEthSendTransaction = { id: Long, transaction: WCEthereumTransaction -> Timber.d("onEthSendTransaction: $transaction") - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( - FirebaseAnalyticsHandler.WcAction.SendTransaction + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Action( + Analytics.WcAction.SendTransaction ) ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> @@ -344,9 +334,9 @@ class WalletConnectManager { } client.onEthSignTransaction = { id: Long, transaction: WCEthereumTransaction -> Timber.d("onEthSignTransaction: $transaction") - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( - FirebaseAnalyticsHandler.WcAction.SignTransaction + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Action( + Analytics.WcAction.SignTransaction ) ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> @@ -362,9 +352,9 @@ class WalletConnectManager { } client.onEthSign = { id: Long, message: WCEthereumSignMessage -> Timber.d("onEthSign: $message") - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( - FirebaseAnalyticsHandler.WcAction.PersonalSign + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Action( + Analytics.WcAction.PersonalSign ) ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> @@ -417,9 +407,9 @@ class WalletConnectManager { val message = EthSignHelper.tryToParseEthTypedMessage(data) if (message != null) { Timber.d("onEthSign_v4: $message") - FirebaseAnalyticsHandler.logWcEvent( - FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( - FirebaseAnalyticsHandler.WcAction.PersonalSign + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Action( + Analytics.WcAction.PersonalSign ) ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index ad8b9084be..630176edc6 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -13,7 +13,7 @@ import com.tangem.common.extensions.hexToBytes import com.tangem.common.extensions.toHexString import com.tangem.crypto.CryptoUtils import com.tangem.operations.sign.SignHashCommand -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.features.details.redux.walletconnect.* import com.tangem.tap.features.details.ui.walletconnect.dialogs.PersonalSignDialogData @@ -136,9 +136,9 @@ class WalletConnectSdkHelper { } is SimpleResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.WalletConnectTransaction, + Analytics.ActionToLog.WalletConnectTransaction, ) } Timber.e(result.error) @@ -167,9 +167,9 @@ class WalletConnectSdkHelper { } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.WalletConnectSign, + Analytics.ActionToLog.WalletConnectSign, ) } Timber.e(result.error.customMessage) @@ -196,9 +196,9 @@ class WalletConnectSdkHelper { } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.WalletConnectTransaction, + Analytics.ActionToLog.WalletConnectTransaction, ) } Timber.e(result.error.customMessage) @@ -273,9 +273,9 @@ class WalletConnectSdkHelper { } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.WalletConnectSign, + Analytics.ActionToLog.WalletConnectSign, ) } Timber.e(result.error.customMessage) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 2a6d764f4c..dfcf2c03f3 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -5,7 +5,8 @@ import com.tangem.common.card.FirmwareVersion import com.tangem.common.core.TangemSdkError import com.tangem.common.services.Result import com.tangem.operations.pins.CheckUserCodesResponse -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.Analytics +import com.tangem.tap.common.analytics.AnalyticsParam import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppState @@ -118,9 +119,9 @@ class DetailsMiddleware { } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.PurgeWallet, + Analytics.ActionToLog.PurgeWallet, card = store.state.detailsState.scanResponse?.card ) } @@ -206,11 +207,11 @@ class DetailsMiddleware { } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error = error, - actionToLog = FirebaseAnalyticsHandler.ActionToLog.ChangeSecOptions, + actionToLog = Analytics.ActionToLog.ChangeSecOptions, parameters = mapOf( - FirebaseAnalyticsHandler.AnalyticsParam.NEW_SECURITY_OPTION to + AnalyticsParam.NEW_SECURITY_OPTION to (selectedOption?.name ?: "") ), card = store.state.detailsState.scanResponse?.card 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 341aa3e64b..467929a848 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 @@ -1,5 +1,8 @@ package com.tangem.tap.features.home.redux +import com.tangem.tap.common.analytics.AnalyticsEvent +import com.tangem.tap.common.analytics.AnalyticsParam +import com.tangem.tap.common.analytics.GetCardSourceParams import com.tangem.tap.common.entities.IndeterminateProgressButton import com.tangem.tap.common.extensions.dispatchOpenUrl import com.tangem.tap.common.extensions.onCardScanned @@ -46,7 +49,13 @@ private val homeMiddleware: Middleware = { dispatch, state -> } } is HomeAction.ReadCard -> handleReadCard() - is HomeAction.GoToShop -> store.dispatchOpenUrl(HomeMiddleware.CARD_SHOP_URI) + is HomeAction.GoToShop -> { + store.dispatchOpenUrl(HomeMiddleware.CARD_SHOP_URI) + store.state.globalState.analyticsHandlers?.triggerEvent( + event = AnalyticsEvent.GET_CARD, + params = mapOf(AnalyticsParam.SOURCE.param to GetCardSourceParams.WELCOME.param) + ) + } } next(action) } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt index f69e59381f..f32decfddd 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt @@ -130,7 +130,11 @@ private fun handle(action: Action, dispatch: DispatchFunction) { } } is TwinCardsAction.Wallet.LaunchFirstStep -> { - val manager = TwinCardsManager(getScanResponse().card, action.reader) + val manager = TwinCardsManager( + card = getScanResponse().card, + assetReader = action.reader, + analyticsHandler = store.state.globalState.analyticsHandlers + ) store.dispatch(TwinCardsAction.CardsManager.Set(manager)) scope.launch { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index cdccf7265a..2f58bb300b 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -4,6 +4,9 @@ import com.tangem.common.CompletionResult import com.tangem.common.card.Card import com.tangem.operations.backup.BackupService import com.tangem.tap.* +import com.tangem.tap.common.analytics.AnalyticsEvent +import com.tangem.tap.common.analytics.AnalyticsParam +import com.tangem.tap.common.analytics.GetCardSourceParams import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.dispatchOpenUrl import com.tangem.tap.common.extensions.withMainContext @@ -212,7 +215,13 @@ private fun handleBackupAction(action: BackupAction) { } } is BackupAction.GoToShop -> { - store.dispatchOpenUrl(BUY_WALLET_URL) + backupState.buyAdditionalCardsUrl?.let { url -> + store.dispatchOpenUrl(url) + store.state.globalState.analyticsHandlers?.triggerEvent( + event = AnalyticsEvent.GET_CARD, + params = mapOf(AnalyticsParam.SOURCE.param to GetCardSourceParams.ONBOARDING.param) + ) + } } is BackupAction.FinishAddingBackupCards -> { if (backupService.addedBackupCardsCount == 1) { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index b550b82a5b..481110f343 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -12,7 +12,6 @@ import com.google.android.material.tabs.TabLayoutMediator import com.squareup.picasso.Picasso import com.tangem.common.CardIdFormatter import com.tangem.common.core.CardIdDisplayFormat -import com.tangem.tap.common.extensions.dispatchOpenUrl import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show import com.tangem.tap.common.leapfrogWidget.LeapfrogWidget @@ -20,7 +19,6 @@ import com.tangem.tap.common.postUi import com.tangem.tap.features.FragmentOnBackPressedHandler import com.tangem.tap.features.addBackPressHandler import com.tangem.tap.features.onboarding.products.wallet.redux.* -import com.tangem.tap.features.onboarding.products.wallet.redux.OnboardingWalletMiddleware.Companion.BUY_WALLET_URL import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.AccessCodeDialog import com.tangem.tap.store import com.tangem.wallet.R @@ -377,7 +375,7 @@ class OnboardingWalletFragment : Fragment(R.layout.fragment_onboarding_wallet), override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.shop_menu -> { - store.dispatchOpenUrl(BUY_WALLET_URL) + store.dispatch(BackupAction.GoToShop) true } else -> super.onOptionsItemSelected(item) diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index ff45a74e19..9243d5953e 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -9,8 +9,9 @@ import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.card.Card import com.tangem.common.core.TangemSdkError import com.tangem.common.services.Result +import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsEvent -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.AnalyticsParam import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction @@ -180,7 +181,7 @@ private fun sendTransaction( tangemSdk.config.linkedTerminal = isLinkedTerminal when (sendResult) { is SimpleResult.Success -> { - FirebaseAnalyticsHandler.triggerEvent( + store.state.globalState.analyticsHandlers?.triggerEvent( event = AnalyticsEvent.TRANSACTION_IS_SENT, card = card, blockchain = walletManager.wallet.blockchain.currency @@ -239,11 +240,11 @@ private fun sendTransaction( } else -> { (sendResult.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.SendTransaction, + Analytics.ActionToLog.SendTransaction, mapOf( - FirebaseAnalyticsHandler.AnalyticsParam.BLOCKCHAIN + AnalyticsParam.BLOCKCHAIN to walletManager.wallet.blockchain.currency), card = card, ) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index a33d9dbb41..37b71f1c2a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -10,7 +10,7 @@ import com.tangem.common.extensions.isZero import com.tangem.common.services.Result import com.tangem.operations.attestation.OnlineCardVerifier import com.tangem.tap.* -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler +import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.AppState @@ -104,13 +104,13 @@ class WalletMiddleware { when (result) { is CompletionResult.Success -> { val scanNoteResponse = globalState.scanResponse?.copy(card = result.data) - scanNoteResponse?.let { store.onCardScanned(scanNoteResponse, false) } + scanNoteResponse?.let { store.onCardScanned(scanNoteResponse) } } is CompletionResult.Failure -> { (result.error as? TangemSdkError)?.let { error -> - FirebaseAnalyticsHandler.logCardSdkError( + store.state.globalState.analyticsHandlers?.logCardSdkError( error, - FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + Analytics.ActionToLog.CreateWallet, card = store.state.detailsState.scanResponse?.card ) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt index 7dacae94b1..408f0ef8a3 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt @@ -7,7 +7,6 @@ import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.card.Card import com.tangem.common.card.FirmwareVersion import com.tangem.tap.common.analytics.AnalyticsEvent -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.isGreaterThan import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.domain.TapWorkarounds.isTestCard @@ -75,7 +74,7 @@ class WarningsMiddleware { preferencesStorage.appRatingLaunchObserver.foundWalletWithFunds() } if (preferencesStorage.appRatingLaunchObserver.isReadyToShow()) { - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.APP_RATING_DISPLAYED) + store.state.globalState.analyticsHandlers?.triggerEvent(AnalyticsEvent.APP_RATING_DISPLAYED) addWarningMessage(WarningMessagesManager.appRatingWarning(), true) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt index 2b793466c3..22c2d56cf3 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt @@ -10,7 +10,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ItemDecoration import com.google.android.play.core.review.ReviewManagerFactory import com.tangem.tap.common.analytics.AnalyticsEvent -import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.getActivity import com.tangem.tap.common.extensions.getString import com.tangem.tap.common.extensions.hide @@ -102,13 +101,14 @@ class WarningMessageVH(val view: View) : RecyclerView.ViewHolder(view) { WarningMessage.Type.AppRating -> { view.group_controls_temporary.hide() view.group_controls_rating.show() + val analyticsHandler = store.state.globalState.analyticsHandlers view.btn_close.setOnClickListener { - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.APP_RATING_DISMISS) + analyticsHandler?.triggerEvent(AnalyticsEvent.APP_RATING_DISMISS) store.dispatch(GlobalAction.HideWarningMessage(warning)) store.dispatch(WalletAction.Warnings.AppRating.RemindLater) } view.btn_can_be_better.setOnClickListener { - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.APP_RATING_NEGATIVE) + analyticsHandler?.triggerEvent(AnalyticsEvent.APP_RATING_NEGATIVE) store.dispatch(WalletAction.Warnings.AppRating.SetNeverToShow) store.dispatch(GlobalAction.HideWarningMessage(warning)) store.dispatch(GlobalAction.SendFeedback(RateCanBeBetterEmail())) @@ -116,7 +116,7 @@ class WarningMessageVH(val view: View) : RecyclerView.ViewHolder(view) { view.btn_really_cool.setOnClickListener { val activity = view.context.getActivity() ?: return@setOnClickListener - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.APP_RATING_POSITIVE) + analyticsHandler?.triggerEvent(AnalyticsEvent.APP_RATING_POSITIVE) store.dispatch(WalletAction.Warnings.AppRating.SetNeverToShow) val reviewManager = ReviewManagerFactory.create(activity) val task = reviewManager.requestReviewFlow() diff --git a/dependencies.gradle b/dependencies.gradle index 43b263845b..8004a23445 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,4 +1,4 @@ ext.versions = [ - kotlin : '1.5.30', - build_gradle: '7.0.2', + kotlin : '1.6.10', + build_gradle: '7.0.4', ]