From 91181309963cd8b801aca80d85cd145866aff71a Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 31 Mar 2020 18:02:43 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/src/main/java/com/tangem/App.kt | 6 ++++ .../java/com/tangem/data/dp/PrefsManager.kt | 7 ++++ .../com/tangem/ui/fragment/MainFragment.kt | 11 ++++-- .../tangem/ui/fragment/SettingsFragment.kt | 34 ++++++++++++++++++- .../fragment/wallet/LoadedWalletFragment.kt | 13 ------- .../main/java/com/tangem/util/Analytics.kt | 25 ++++++++++++++ app/src/main/res/values/strings.xml | 1 + .../res/values/strings_untranslatable.xml | 1 + app/src/main/res/xml/pref_main.xml | 7 +++- .../com/tangem/ui/SignTransactionFragment.kt | 10 ++++++ 10 files changed, 97 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt index 11f6582f24..b5a4451cb7 100644 --- a/app/src/main/java/com/tangem/App.kt +++ b/app/src/main/java/com/tangem/App.kt @@ -2,6 +2,8 @@ package com.tangem import android.app.Application import androidx.appcompat.app.AppCompatDelegate +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.tangem.data.dp.PrefsManager @@ -14,6 +16,7 @@ import com.tangem.server_android.data.LocalStorage import com.tangem.tangem_card.data.Issuer import com.tangem.tangem_sdk.android.data.Firmwares import com.tangem.tangem_sdk.android.data.PINStorage +import com.tangem.util.Analytics import com.tangem.wallet.BuildConfig import java.io.InputStreamReader import java.nio.charset.StandardCharsets @@ -76,6 +79,9 @@ class App : Application() { } ) } + + FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(Analytics.isEnabled()) + FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(Analytics.isEnabled()) } private fun buildToastHelperComponent(): ToastHelperComponent { diff --git a/app/src/main/java/com/tangem/data/dp/PrefsManager.kt b/app/src/main/java/com/tangem/data/dp/PrefsManager.kt index b616aa5435..598c719e2b 100644 --- a/app/src/main/java/com/tangem/data/dp/PrefsManager.kt +++ b/app/src/main/java/com/tangem/data/dp/PrefsManager.kt @@ -3,6 +3,7 @@ package com.tangem.data.dp import android.annotation.SuppressLint import android.content.Context import android.content.SharedPreferences +import androidx.preference.PreferenceManager import com.orhanobut.hawk.Hawk import com.tangem.Constant import com.tangem.tangem_card.reader.CardCrypto @@ -10,6 +11,7 @@ import com.tangem.tangem_card.reader.CardCrypto class PrefsManager { companion object { const val PREF_NAME = "tangem_access" + @SuppressLint("StaticFieldLeak") private var instance: PrefsManager? = null @@ -41,6 +43,11 @@ class PrefsManager { Hawk.delete(Constant.PREF_LAST_WALLET_ADDRESS) } + fun getSettingsBoolean(key: Int, default: Boolean): Boolean { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(key), default) + } + fun appendCid(newCid: String) { val prevCids: String = Hawk.get("CID_Key", "") if (!prevCids.contains(newCid)) Hawk.put("CID_Key", "$prevCids$newCid, ") 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 3d1c7163b7..b8a9ddf427 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.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics import com.tangem.App import com.tangem.Constant @@ -47,9 +48,7 @@ import com.tangem.ui.dialog.NoExtendedLengthSupportDialog import com.tangem.ui.dialog.WaitSecurityDelayDialog import com.tangem.ui.fragment.pin.PinRequestFragment import com.tangem.ui.navigation.NavigationResultListener -import com.tangem.util.CommonUtil -import com.tangem.util.LOG -import com.tangem.util.UtilHelper +import com.tangem.util.* import com.tangem.util.extensions.colorFrom import com.tangem.wallet.BuildConfig import com.tangem.wallet.CoinEngineFactory @@ -118,6 +117,9 @@ class MainFragment : BaseFragment(), NavigationResultListener, NfcAdapter.Reader setCardStoreLink() + + FirebaseAnalytics.getInstance(requireActivity()) + .logEvent(AnalyticsEvent.READY_TO_SCAN.event, bundleOf()) } private fun setCardStoreLink() { @@ -271,6 +273,9 @@ class MainFragment : BaseFragment(), NavigationResultListener, NfcAdapter.Reader val ctx = TangemContext(card) + FirebaseAnalytics.getInstance(requireActivity()) + .logEvent(AnalyticsEvent.CARD_IS_SCANNED.event, Analytics.setCardData(ctx)) + when { card.status == TangemCard.Status.Loaded -> lastTag?.let { val engineCoin = CoinEngineFactory.create(ctx) diff --git a/app/src/main/java/com/tangem/ui/fragment/SettingsFragment.kt b/app/src/main/java/com/tangem/ui/fragment/SettingsFragment.kt index 52fa224f03..98b57d7910 100644 --- a/app/src/main/java/com/tangem/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/tangem/ui/fragment/SettingsFragment.kt @@ -1,18 +1,24 @@ package com.tangem.ui.fragment +import android.content.SharedPreferences import android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatActivity +import androidx.core.os.bundleOf import androidx.navigation.fragment.NavHostFragment import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.tangem.util.Analytics +import com.tangem.util.AnalyticsEvent import com.tangem.wallet.BuildConfig import com.tangem.wallet.R import kotlinx.android.synthetic.main.fragment_settings.* -class SettingsFragment : PreferenceFragmentCompat() { +class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_main) @@ -40,6 +46,32 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { + if (key == getString(R.string.pref_analytics)) { + activity?.let { + val analytics = FirebaseAnalytics.getInstance(it) + if (!Analytics.isEnabled()) { + analytics.logEvent(AnalyticsEvent.ANALYTICS_TURNED_OFF.event, bundleOf()) + } + analytics.setAnalyticsCollectionEnabled(Analytics.isEnabled()) + } + FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(Analytics.isEnabled()) + + } + } + + override fun onResume() { + super.onResume() + preferenceScreen.sharedPreferences + .registerOnSharedPreferenceChangeListener(this); + } + + override fun onPause() { + super.onPause() + preferenceScreen.sharedPreferences + .unregisterOnSharedPreferenceChangeListener(this); + } + override fun onDestroyView() { (activity as AppCompatActivity).setSupportActionBar(toolbar) super.onDestroyView() 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 0a95ebccd5..4de8ee31c8 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,10 +18,8 @@ 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 @@ -49,8 +47,6 @@ 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.* @@ -133,15 +129,6 @@ 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 index ddca5e506d..c01d40e340 100644 --- a/app/src/main/java/com/tangem/util/Analytics.kt +++ b/app/src/main/java/com/tangem/util/Analytics.kt @@ -1,8 +1,18 @@ package com.tangem.util +import android.os.Bundle +import androidx.core.os.bundleOf +import com.tangem.data.dp.PrefsManager +import com.tangem.wallet.R +import com.tangem.wallet.TangemContext + enum class AnalyticsEvent(val event: String) { CARD_IS_SCANNED("card_is_scanned"), TRANSACTION_IS_SENT("transaction_is_sent"), + READY_TO_SCAN("ready_to_scan"), + READY_TO_SIGN("ready_to_sign"), + SIGNED("signed"), + ANALYTICS_TURNED_OFF("analytics_turned_off"), ; } @@ -12,3 +22,18 @@ enum class AnalyticsParam(val param: String) { FIRMWARE("firmware"), ; } +class Analytics { + companion object { + fun setCardData(ctx: TangemContext): Bundle { + return bundleOf( + AnalyticsParam.BLOCKCHAIN.param to ctx.blockchainName, + AnalyticsParam.BATCH_ID.param to ctx.card.batch, + AnalyticsParam.FIRMWARE.param to ctx.card.firmwareVersion + ) + } + + fun isEnabled(): Boolean { + return PrefsManager.getInstance().getSettingsBoolean(R.string.pref_analytics, true) + } + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 39cb7cd948..b3564c1ba5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,7 @@ Settings Common Manual editing Fee + Collect basic analytics Encryption modes None diff --git a/app/src/main/res/values/strings_untranslatable.xml b/app/src/main/res/values/strings_untranslatable.xml index 0b6a2bcf98..419b1c6812 100644 --- a/app/src/main/res/values/strings_untranslatable.xml +++ b/app/src/main/res/values/strings_untranslatable.xml @@ -26,6 +26,7 @@ category_common manual_editing_fee + analytics select_nodes encryption_modes diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml index 47be8c9663..e00d77c325 100644 --- a/app/src/main/res/xml/pref_main.xml +++ b/app/src/main/res/xml/pref_main.xml @@ -4,11 +4,16 @@ android:key="@string/pref_category_common" android:title="@string/settings_category_сommon"> - + + diff --git a/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt b/app/src/tangemAccess/java/com/tangem/ui/SignTransactionFragment.kt index c12d49e672..bb5858b8e3 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.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics import com.tangem.App import com.tangem.Constant @@ -27,6 +28,8 @@ import com.tangem.ui.dialog.NoExtendedLengthSupportDialog import com.tangem.ui.dialog.WaitSecurityDelayDialog import com.tangem.ui.fragment.BaseFragment import com.tangem.ui.navigation.NavigationResultListener +import com.tangem.util.Analytics +import com.tangem.util.AnalyticsEvent import com.tangem.util.LOG import com.tangem.wallet.CoinEngine import com.tangem.wallet.CoinEngineFactory @@ -88,6 +91,9 @@ class SignTransactionFragment : BaseFragment(), NavigationResultListener, tvCardID.text = ctx.card!!.cidDescription progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) progressBar.visibility = View.INVISIBLE + + FirebaseAnalytics.getInstance(requireActivity()) + .logEvent(AnalyticsEvent.READY_TO_SIGN.event, Analytics.setCardData(ctx)) } override fun onPause() { @@ -175,6 +181,10 @@ class SignTransactionFragment : BaseFragment(), NavigationResultListener, signTransactionTask = null if (cardProtocol != null) { if (cardProtocol.error == null) { + + FirebaseAnalytics.getInstance(requireActivity()) + .logEvent(AnalyticsEvent.SIGNED.event, Analytics.setCardData(ctx)) + rlProgressBar?.post { rlProgressBar?.visibility = View.GONE } progressBar?.post {