diff --git a/app/build.gradle b/app/build.gradle
index bbc6458..7287c67 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,8 +3,8 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin"
-apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
+apply plugin: 'com.google.firebase.crashlytics'
// Needed for Kotlin's @Parcelize annotation
androidExtensions {
@@ -32,17 +32,14 @@ android {
}
}
buildTypes {
+ debug {
+ minifyEnabled false
+ resValue("string", "PORT_NUMBER", "8082")
+ }
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- // enable crashlytics
- ext.enableCrashlytics = true
- }
- debug {
- resValue("string", "PORT_NUMBER", "8082")
- // disable crashlytics
- ext.enableCrashlytics = false
}
}
android.packagingOptions {
@@ -109,8 +106,8 @@ dependencies {
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.0'
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
//Firebase
- implementation 'com.google.firebase:firebase-core:17.2.1'
- implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
+ implementation 'com.google.firebase:firebase-analytics:18.0.0'
+ implementation 'com.google.firebase:firebase-crashlytics:17.3.0'
// CSV generation
implementation 'com.opencsv:opencsv:3.7'
// Others
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index a0f609e..6a67c81 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -132,9 +132,8 @@
##--------------- proguard configuration for Crashlytics ----------
# source https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=android
--keepattributes *Annotation* # Keep Crashlytics annotations
--keepattributes SourceFile,LineNumberTable # Keep file names/line numbers
--keep public class * extends java.lang.Exception # Keep custom exceptions (opt)
+-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers.
+-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
##--------------- proguard configuration for Coroutines ----------
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2b2be10..b2fe2a8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,8 +24,8 @@
android:value="@string/google_maps_key"/>
+ android:name="firebase_crashlytics_collection_enabled"
+ android:value="false" />
500 ms
mDisposables.add(
@@ -93,7 +94,7 @@ class ImportBrainkeyFragment : BaseAccountFragment() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ validatePIN() },
- { Crashlytics.log(Log.DEBUG, TAG, it.message) }
+ { crashlytics.log("D/$TAG: ${it.message}") }
)
)
@@ -105,7 +106,7 @@ class ImportBrainkeyFragment : BaseAccountFragment() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ validatePINConfirmation() },
- { Crashlytics.log(Log.DEBUG, TAG, it.message) }
+ { crashlytics.log("D/$TAG: ${it.message}") }
)
)
@@ -118,7 +119,7 @@ class ImportBrainkeyFragment : BaseAccountFragment() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ validateBrainKey(it) },
- { Crashlytics.log(Log.DEBUG, TAG, it.message) }
+ { crashlytics.log("D/$TAG: ${it.message}") }
)
)
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/LicenseFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/LicenseFragment.kt
index 368d24a..6fa29e4 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/LicenseFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/LicenseFragment.kt
@@ -8,7 +8,7 @@ import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.utils.Constants
import kotlinx.android.synthetic.main.fragment_license.*
@@ -30,7 +30,8 @@ class LicenseFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
// Get version number of the last agreed license version
val agreedLicenseVersion = PreferenceManager.getDefaultSharedPreferences(context)
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/MerchantsFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/MerchantsFragment.kt
index 7b5bb82..b27ea01 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/MerchantsFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/MerchantsFragment.kt
@@ -22,7 +22,6 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
-import com.crashlytics.android.Crashlytics
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
@@ -31,6 +30,7 @@ import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.LatLngBounds
import com.google.android.gms.maps.model.MapStyleOptions
import com.google.android.gms.maps.model.Marker
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.maps.android.MarkerManager
import com.google.maps.android.clustering.Cluster
import com.google.maps.android.clustering.ClusterItem
@@ -124,7 +124,8 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
// Dynamically obtain status bar and navigation bar heights, and account for the status bar height to add
// the correct top margin to the Toolbar and place it just below the status bar
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PINSecurityLockDialog.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PINSecurityLockDialog.kt
index 1b53926..ec2eeb2 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PINSecurityLockDialog.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PINSecurityLockDialog.kt
@@ -7,7 +7,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.inputmethod.EditorInfo
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.jakewharton.rxbinding3.widget.textChanges
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.utils.Constants
@@ -35,7 +35,8 @@ class PINSecurityLockDialog : BaseSecurityLockDialog() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
// Request focus to the PIN EditText and automatically show the keyboard when the dialog appears.
tietPIN.requestFocus()
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PatternSecurityLockDialog.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PatternSecurityLockDialog.kt
index b28607e..26d193c 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PatternSecurityLockDialog.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/PatternSecurityLockDialog.kt
@@ -9,7 +9,7 @@ import cy.agorise.bitsybitshareswallet.R
import kotlinx.android.synthetic.main.dialog_pattern_security_lock.*
import com.andrognito.patternlockview.PatternLockView
import com.andrognito.patternlockview.listener.PatternLockViewListener
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import cy.agorise.bitsybitshareswallet.utils.Constants
import cy.agorise.bitsybitshareswallet.utils.CryptoUtils
@@ -33,7 +33,8 @@ class PatternSecurityLockDialog : BaseSecurityLockDialog() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
setupScreen()
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt
index 4f63f78..6dc425a 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt
@@ -13,8 +13,8 @@ import androidx.collection.LongSparseArray
import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
-import com.crashlytics.android.Crashlytics
import com.google.common.primitives.UnsignedLong
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.jakewharton.rxbinding3.widget.textChanges
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.adapters.AssetsAdapter
@@ -100,7 +100,8 @@ class ReceiveTransactionFragment : ConnectedFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
// Configure ViewModel
mViewModel = ViewModelProviders.of(this).get(ReceiveTransactionViewModel::class.java)
@@ -286,7 +287,7 @@ class ReceiveTransactionFragment : ConnectedFragment() {
updateAmountAddressUI(amount, asset.symbol, asset.precision, mUserAccount!!.name)
} catch (e: NullPointerException) {
Log.e(TAG, "NullPointerException. Msg: " + e.message)
- Crashlytics.logException(e)
+ FirebaseCrashlytics.getInstance().recordException(e)
}
}
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt
index 36016fe..cc4ec26 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt
@@ -18,9 +18,9 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
-import com.crashlytics.android.Crashlytics
import com.google.android.material.snackbar.Snackbar
import com.google.common.primitives.UnsignedLong
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.zxing.BarcodeFormat
import com.google.zxing.Result
import com.jakewharton.rxbinding3.widget.textChanges
@@ -137,7 +137,8 @@ class SendTransactionFragment : ConnectedFragment(), ZXingScannerView.ResultHand
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
val userId = PreferenceManager.getDefaultSharedPreferences(context)
.getString(Constants.KEY_CURRENT_ACCOUNT_ID, "") ?: ""
@@ -154,7 +155,7 @@ class SendTransactionFragment : ConnectedFragment(), ZXingScannerView.ResultHand
try {
wifKey = CryptoUtils.decrypt(it, encryptedWIF)
} catch (e: Exception) {
- Crashlytics.logException(e)
+ crashlytics.recordException(e)
}
}
})
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SettingsFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SettingsFragment.kt
index 9256def..1d74838 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SettingsFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SettingsFragment.kt
@@ -17,8 +17,8 @@ import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.list.customListAdapter
import com.afollestad.materialdialogs.list.listItemsSingleChoice
-import com.crashlytics.android.Crashlytics
import com.google.common.primitives.UnsignedLong
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import cy.agorise.bitsybitshareswallet.BuildConfig
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.adapters.FullNodesAdapter
@@ -98,7 +98,8 @@ class SettingsFragment : ConnectedFragment(), BaseSecurityLockDialog.OnPINPatter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
val userId = PreferenceManager.getDefaultSharedPreferences(context)
.getString(Constants.KEY_CURRENT_ACCOUNT_ID, "") ?: ""
@@ -122,7 +123,7 @@ class SettingsFragment : ConnectedFragment(), BaseSecurityLockDialog.OnPINPatter
} catch (e: AEADBadTagException) {
Log.e(TAG, "AEADBadTagException. Class: " + e.javaClass + ", Msg: " + e.message)
} catch (e: IllegalStateException) {
- Crashlytics.logException(e)
+ crashlytics.recordException(e)
}
}
})
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/TransactionsFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/TransactionsFragment.kt
index b703113..65782e6 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/TransactionsFragment.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/TransactionsFragment.kt
@@ -16,7 +16,7 @@ import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItemsMultiChoice
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.jakewharton.rxbinding3.appcompat.queryTextChangeEvents
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.adapters.TransfersDetailsAdapter
@@ -55,7 +55,8 @@ class TransactionsFragment : Fragment(), FilterOptionsDialog.OnFilterOptionsSele
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
+ val crashlytics = FirebaseCrashlytics.getInstance()
+ crashlytics.setCustomKey(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
val userId = PreferenceManager.getDefaultSharedPreferences(context)
.getString(Constants.KEY_CURRENT_ACCOUNT_ID, "") ?: ""
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/NodeRepository.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/NodeRepository.kt
index 86014be..ef39342 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/NodeRepository.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/NodeRepository.kt
@@ -2,7 +2,7 @@ package cy.agorise.bitsybitshareswallet.repositories
import android.os.AsyncTask
import android.util.Log
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import cy.agorise.bitsybitshareswallet.database.daos.NodeDao
import cy.agorise.bitsybitshareswallet.database.entities.Node
import cy.agorise.bitsybitshareswallet.network.BitsyWebservice
@@ -100,7 +100,7 @@ class NodeRepository(private val nodeDao: NodeDao) {
}
} catch (e: Exception) {
// Generic exception handling
- Crashlytics.logException(e)
+ FirebaseCrashlytics.getInstance().recordException(e)
}
}
}
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/BitsyApplication.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/BitsyApplication.kt
index 92fbb80..ba28b9b 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/BitsyApplication.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/BitsyApplication.kt
@@ -2,7 +2,7 @@ package cy.agorise.bitsybitshareswallet.utils
import android.app.Application
import android.util.Log
-import com.crashlytics.android.Crashlytics
+import com.google.firebase.crashlytics.FirebaseCrashlytics
import cy.agorise.bitsybitshareswallet.database.BitsyDatabase
import cy.agorise.bitsybitshareswallet.network.NetworkServiceManager
import cy.agorise.bitsybitshareswallet.repositories.NodeRepository
@@ -34,7 +34,7 @@ class BitsyApplication : Application() {
// exception to Crashlytics so that we can fix the issues
RxJavaPlugins.setErrorHandler { throwable ->
Log.e("RxJava Error", throwable.message)
- Crashlytics.logException(throwable)
+ FirebaseCrashlytics.getInstance().recordException(throwable)
}
appScope = CoroutineScope(Dispatchers.Main + applicationJob)
diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt
index 872f57c..0ad9922 100644
--- a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt
+++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt
@@ -158,6 +158,9 @@ object Constants {
/** Key used to add the account ID to the Crashlytics report*/
const val CRASHLYTICS_KEY_ACCOUNT_ID = "crashlytics_key_account_id"
+ /** Key used to add the current node the app is connected to to the Crashlytics report*/
+ const val CRASHLYTICS_KEY_CURRENT_NODE = "crashlytics_key_current_node"
+
/** Definition of the system core (BTS) asset id */
const val CORE_ASSET = "1.3.0"
}
diff --git a/build.gradle b/build.gradle
index 167b07e..8a5c631 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,17 +11,13 @@ buildscript {
repositories {
google()
jcenter()
- maven {
- url 'https://maven.fabric.io/public'
- }
-
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
- classpath 'com.google.gms:google-services:4.3.3'
- classpath 'io.fabric.tools:gradle:1.29.0'
+ classpath 'com.google.gms:google-services:4.3.4'
+ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files