diff --git a/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt b/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
index a594c110a8..3d1c7163b7 100644
--- a/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
@@ -20,6 +20,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.lifecycle.ViewModelProviders
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.data.Blockchain
@@ -315,6 +316,7 @@ class MainFragment : BaseFragment(), NavigationResultListener, NfcAdapter.Reader
}
} else {
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
// remove last UIDs because of error and no card read
rlProgressBar.post {
context?.let { Toast.makeText(it, R.string.general_notification_scan_again, Toast.LENGTH_SHORT).show() }
diff --git a/app/src/main/java/com/tangem/ui/fragment/PurgeFragment.kt b/app/src/main/java/com/tangem/ui/fragment/PurgeFragment.kt
index dc12ed4860..76d8d97dc6 100644
--- a/app/src/main/java/com/tangem/ui/fragment/PurgeFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/PurgeFragment.kt
@@ -12,6 +12,7 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.core.os.bundleOf
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.reader.CardProtocol
@@ -151,6 +152,7 @@ class PurgeFragment : BaseFragment(), NfcAdapter.ReaderCallback, CardProtocol.No
navigateToDestination(R.id.action_purgeFragment_to_mainFragment)
}
} else {
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
if (cardProtocol.error is CardProtocol.TangemException_InvalidPIN) {
progressBar?.post {
progressBar?.progress = 100
diff --git a/app/src/main/java/com/tangem/ui/fragment/SendTransactionFragment.kt b/app/src/main/java/com/tangem/ui/fragment/SendTransactionFragment.kt
index 7d709ee662..7365324d29 100644
--- a/app/src/main/java/com/tangem/ui/fragment/SendTransactionFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/SendTransactionFragment.kt
@@ -6,11 +6,15 @@ import android.nfc.Tag
import android.os.Bundle
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
+import androidx.core.os.bundleOf
+import com.google.firebase.analytics.FirebaseAnalytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.util.Util
import com.tangem.ui.activity.MainActivity
import com.tangem.ui.event.TransactionFinishWithSuccess
+import com.tangem.util.AnalyticsEvent
+import com.tangem.util.AnalyticsParam
import com.tangem.util.UtilHelper
import com.tangem.wallet.CoinEngine
import com.tangem.wallet.CoinEngineFactory
@@ -40,7 +44,7 @@ class SendTransactionFragment : BaseFragment(), NfcAdapter.ReaderCallback {
if (success) {
App.pendingTransactionsStorage.putTransaction(ctx.card, Util.bytesToHex(tx), engine.pendingTransactionTimeoutInSeconds())
finishWithSuccess()
- }else
+ } else
finishWithError(ctx.error)
}
@@ -75,6 +79,11 @@ class SendTransactionFragment : BaseFragment(), NfcAdapter.ReaderCallback {
val transactionFinishWithSuccess = TransactionFinishWithSuccess()
EventBus.getDefault().post(transactionFinishWithSuccess)
+ activity?.let {
+ val params = bundleOf(AnalyticsParam.BLOCKCHAIN.param to ctx.blockchainName)
+ FirebaseAnalytics.getInstance(it).logEvent(AnalyticsEvent.TRANSACTION_IS_SENT.event, params)
+ }
+
val data = Bundle()
data.putString(Constant.EXTRA_MESSAGE, getString(R.string.send_transaction_success))
navigateBackWithResult(Activity.RESULT_OK, data, R.id.loadedWalletFragment)
diff --git a/app/src/main/java/com/tangem/ui/fragment/id/IdFragment.kt b/app/src/main/java/com/tangem/ui/fragment/id/IdFragment.kt
index 7c8ec384e4..8013e66fed 100644
--- a/app/src/main/java/com/tangem/ui/fragment/id/IdFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/id/IdFragment.kt
@@ -12,6 +12,7 @@ import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.data.Blockchain
@@ -26,7 +27,6 @@ import com.tangem.ui.activity.MainActivity
import com.tangem.ui.dialog.NoExtendedLengthSupportDialog
import com.tangem.ui.dialog.WaitSecurityDelayDialog
import com.tangem.ui.fragment.BaseFragment
-import com.tangem.ui.fragment.wallet.LoadedWalletViewModel
import com.tangem.util.LOG
import com.tangem.util.UtilHelper
import com.tangem.wallet.*
@@ -232,6 +232,7 @@ class IdFragment : BaseFragment(), NfcAdapter.ReaderCallback,
}
} else {
// remove last UIDs because of error and no card read
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
rlProgressBar?.post {
lastReadSuccess = false
if (cardProtocol.error is CardProtocol.TangemException_ExtendedLengthNotSupported)
diff --git a/app/src/main/java/com/tangem/ui/fragment/id/ValidateIdFragment.kt b/app/src/main/java/com/tangem/ui/fragment/id/ValidateIdFragment.kt
index 04812351c0..2eed027cf3 100644
--- a/app/src/main/java/com/tangem/ui/fragment/id/ValidateIdFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/id/ValidateIdFragment.kt
@@ -11,12 +11,12 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.data.TangemCard
import com.tangem.tangem_card.reader.CardProtocol
import com.tangem.tangem_card.tasks.OneTouchSignTask
-import com.tangem.tangem_card.tasks.SignTask
import com.tangem.tangem_card.util.Util
import com.tangem.tangem_sdk.android.data.PINStorage
import com.tangem.tangem_sdk.android.nfc.NfcDeviceAntennaLocation
@@ -24,7 +24,6 @@ import com.tangem.tangem_sdk.android.reader.NfcReader
import com.tangem.tangem_sdk.data.EXTRA_TANGEM_CARD
import com.tangem.tangem_sdk.data.EXTRA_TANGEM_CARD_UID
import com.tangem.tangem_sdk.data.asBundle
-import com.tangem.ui.SignTransactionFragment
import com.tangem.ui.activity.MainActivity
import com.tangem.ui.dialog.NoExtendedLengthSupportDialog
import com.tangem.ui.dialog.WaitSecurityDelayDialog
@@ -223,6 +222,7 @@ class ValidateIdFragment : BaseFragment(), NavigationResultListener,
mpFinishSignSound.start()
} else {
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
lastReadSuccess = false
if (cardProtocol.error.javaClass == CardProtocol.TangemException_InvalidPIN::class.java) {
progressBar?.post {
diff --git a/app/src/main/java/com/tangem/ui/fragment/id/WriteIdFragment.kt b/app/src/main/java/com/tangem/ui/fragment/id/WriteIdFragment.kt
index 5b0235f356..3df0850220 100644
--- a/app/src/main/java/com/tangem/ui/fragment/id/WriteIdFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/id/WriteIdFragment.kt
@@ -11,6 +11,7 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.reader.CardProtocol
@@ -190,6 +191,7 @@ class WriteIdFragment : BaseFragment(), NavigationResultListener,
} else {
lastReadSuccess = false
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
if (cardProtocol.error.javaClass == CardProtocol.TangemException_InvalidPIN::class.java) {
progressBar?.post {
progressBar?.progress = 100
diff --git a/app/src/main/java/com/tangem/ui/fragment/pin/PinSwapFragment.kt b/app/src/main/java/com/tangem/ui/fragment/pin/PinSwapFragment.kt
index 04b12813ba..ee846c13ca 100644
--- a/app/src/main/java/com/tangem/ui/fragment/pin/PinSwapFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/pin/PinSwapFragment.kt
@@ -10,6 +10,7 @@ import android.os.Bundle
import android.view.View
import android.widget.ProgressBar
import android.widget.Toast
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.data.TangemCard
@@ -112,6 +113,7 @@ class PinSwapFragment : BaseFragment(), NfcAdapter.ReaderCallback, CardProtocol.
swapPinTask = null
if (cardProtocol != null) {
+ cardProtocol.error?.let { FirebaseCrashlytics.getInstance().recordException(it) }
when {
cardProtocol.error == null -> progressBar!!.post {
progressBar!!.progress = 100
diff --git a/app/src/main/java/com/tangem/ui/fragment/wallet/CreateNewWalletFragment.kt b/app/src/main/java/com/tangem/ui/fragment/wallet/CreateNewWalletFragment.kt
index 5496044e70..51e9ef4544 100644
--- a/app/src/main/java/com/tangem/ui/fragment/wallet/CreateNewWalletFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/wallet/CreateNewWalletFragment.kt
@@ -9,6 +9,7 @@ import android.nfc.tech.IsoDep
import android.os.Bundle
import android.view.View
import android.widget.Toast
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.reader.CardProtocol
@@ -101,6 +102,7 @@ class CreateNewWalletFragment : BaseFragment(), NfcAdapter.ReaderCallback, CardP
return@post
}
} else {
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
lastReadSuccess = false
if (cardProtocol.error is CardProtocol.TangemException_InvalidPIN) {
progressBar?.post {
diff --git a/app/src/main/java/com/tangem/ui/fragment/wallet/EmptyWalletFragment.kt b/app/src/main/java/com/tangem/ui/fragment/wallet/EmptyWalletFragment.kt
index 65461743c6..e8a4cc7542 100644
--- a/app/src/main/java/com/tangem/ui/fragment/wallet/EmptyWalletFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/wallet/EmptyWalletFragment.kt
@@ -13,6 +13,7 @@ import android.os.Bundle
import android.text.Html
import android.view.View
import android.widget.Toast
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.data.TangemCard
@@ -181,6 +182,7 @@ class EmptyWalletFragment : BaseFragment(), NavigationResultListener,
this.cardProtocol = cardProtocol
}
} else {
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
// remove last UIDs because of error and no card read
progressBar?.post {
lastReadSuccess = false
diff --git a/app/src/main/java/com/tangem/ui/fragment/wallet/LoadedWalletFragment.kt b/app/src/main/java/com/tangem/ui/fragment/wallet/LoadedWalletFragment.kt
index 4de8ee31c8..0a95ebccd5 100644
--- a/app/src/main/java/com/tangem/ui/fragment/wallet/LoadedWalletFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/wallet/LoadedWalletFragment.kt
@@ -18,8 +18,10 @@ import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
+import androidx.core.os.bundleOf
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
+import com.google.firebase.analytics.FirebaseAnalytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.data.Blockchain
@@ -47,6 +49,8 @@ import com.tangem.ui.fragment.BaseFragment
import com.tangem.ui.fragment.pin.PinRequestFragment
import com.tangem.ui.fragment.pin.PinSwapFragment
import com.tangem.ui.navigation.NavigationResultListener
+import com.tangem.util.AnalyticsEvent
+import com.tangem.util.AnalyticsParam
import com.tangem.util.LOG
import com.tangem.util.UtilHelper
import com.tangem.wallet.*
@@ -129,6 +133,15 @@ class LoadedWalletFragment : BaseFragment(), NavigationResultListener, NfcAdapte
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+
+ val params = bundleOf(
+ AnalyticsParam.BLOCKCHAIN.param to ctx.blockchainName,
+ AnalyticsParam.BATCH_ID.param to ctx.card.batch,
+ AnalyticsParam.FIRMWARE.param to ctx.card.firmwareVersion
+ )
+ FirebaseAnalytics.getInstance(requireActivity())
+ .logEvent(AnalyticsEvent.CARD_IS_SCANNED.event, params)
+
mpSecondScanSound = MediaPlayer.create(activity, R.raw.scan_card_sound)
val engine = CoinEngineFactory.create(ctx)
diff --git a/app/src/main/java/com/tangem/util/Analytics.kt b/app/src/main/java/com/tangem/util/Analytics.kt
new file mode 100644
index 0000000000..ddca5e506d
--- /dev/null
+++ b/app/src/main/java/com/tangem/util/Analytics.kt
@@ -0,0 +1,14 @@
+package com.tangem.util
+
+enum class AnalyticsEvent(val event: String) {
+ CARD_IS_SCANNED("card_is_scanned"),
+ TRANSACTION_IS_SENT("transaction_is_sent"),
+ ;
+}
+
+enum class AnalyticsParam(val param: String) {
+ BLOCKCHAIN("blockchain"),
+ BATCH_ID("batch_id"),
+ FIRMWARE("firmware"),
+ ;
+}
diff --git a/app/src/main/java/com/tangem/wallet/TangemContext.java b/app/src/main/java/com/tangem/wallet/TangemContext.java
index df164a4616..a027d33f3b 100644
--- a/app/src/main/java/com/tangem/wallet/TangemContext.java
+++ b/app/src/main/java/com/tangem/wallet/TangemContext.java
@@ -4,10 +4,12 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.tangem.Constant;
import com.tangem.data.Blockchain;
import com.tangem.tangem_card.data.TangemCard;
import com.tangem.tangem_sdk.data.TangemCardExtensionsKt;
+import com.tangem.util.AnalyticsParam;
public class TangemContext {
// public static final String EXTRA_BLOCKCHAIN_DATA = "BLOCKCHAIN_DATA";
@@ -58,7 +60,7 @@ public class TangemContext {
public String getBlockchainName() {
Blockchain blockchain = getBlockchain();
if (blockchain == Blockchain.Token || blockchain == Blockchain.RootstockToken) {
- return card.getTokenSymbol()+ "
" + getBlockchain().getOfficialName() + " smart contract token";
+ return card.getTokenSymbol() + "
" + getBlockchain().getOfficialName() + " smart contract token";
}
if (blockchain == Blockchain.NftToken) {
return card.getTokenSymbol().substring(4) + "
" + getBlockchain().getOfficialName() + " non-fungible token";
@@ -67,7 +69,7 @@ public class TangemContext {
return card.getTokenSymbol() + "
" + getBlockchain().getOfficialName() + " asset";
}
if (blockchain == Blockchain.StellarTag) {
- return "TANGEM TAG
"+ getBlockchain().getOfficialName() + " non-fungible token ";
+ return "TANGEM TAG
" + getBlockchain().getOfficialName() + " non-fungible token ";
}
return blockchain.getOfficialName();
}
@@ -97,6 +99,11 @@ public class TangemContext {
}
public void setError(String error) {
+ if (error != null) {
+ FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
+ crashlytics.setCustomKey(AnalyticsParam.BLOCKCHAIN.getParam(), getBlockchainName());
+ crashlytics.recordException(new Exception(error));
+ }
this.error = error;
}
diff --git a/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt b/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt
index 8429ec1e2e..c12d49e672 100644
--- a/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt
+++ b/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt
@@ -11,6 +11,7 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.App
import com.tangem.Constant
import com.tangem.tangem_card.reader.CardProtocol
@@ -34,7 +35,6 @@ import com.tangem.wallet.TangemContext
import kotlinx.android.synthetic.main.layout_progress_horizontal.*
import kotlinx.android.synthetic.main.layout_touch_card.*
import kotlinx.android.synthetic.tangemAccess.fragment_sign_transaction.*
-import java.lang.IllegalArgumentException
class SignTransactionFragment : BaseFragment(), NavigationResultListener,
@@ -185,6 +185,7 @@ class SignTransactionFragment : BaseFragment(), NavigationResultListener,
mpFinishSignSound.start()
} else {
lastReadSuccess = false
+ FirebaseCrashlytics.getInstance().recordException(cardProtocol.error)
if (cardProtocol.error.javaClass == CardProtocol.TangemException_InvalidPIN::class.java) {
progressBar?.post {
progressBar?.progress = 100