Prechádzať zdrojové kódy

Added crash reporter

Vadik Sirekanyan 2 rokov pred
rodič
commit
ea95428116

+ 6 - 2
app/build.gradle.kts

@@ -27,6 +27,10 @@ android {
         manifestPlaceholders.forEach { (key, value) ->
             buildConfigField("String", key, "\"$value\"")
         }
+        buildConfigField("boolean", "ACRA_ENABLED", "${findProperty("crashReporter") == "acra"}")
+        buildConfigField("String", "ACRA_URI", "\"${System.getenv("ACRA_URI")}\"")
+        buildConfigField("String", "ACRA_LOGIN", "\"${System.getenv("ACRA_LOGIN")}\"")
+        buildConfigField("String", "ACRA_PASSWORD", "\"${System.getenv("ACRA_PASSWORD")}\"")
         vectorDrawables.useSupportLibrary = true
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
         System.getenv("TEST_TOKEN")?.let {
@@ -93,8 +97,8 @@ dependencies {
     implementation("com.google.android.material:material:1.9.0")
     implementation("com.github.bumptech.glide:glide:4.16.0")
 
-    // todo: crash reporting
-    // implementation("ch.acra:acra-http:5.11.1")
+    // crash reporting
+    implementation("ch.acra:acra-http:5.11.1")
 
     // tests
     androidTestImplementation("androidx.test.ext:junit:1.1.5")

+ 8 - 4
app/src/main/java/org/sirekanyan/knigopis/App.kt

@@ -2,6 +2,10 @@ package org.sirekanyan.knigopis
 
 import android.app.Application
 import android.content.Context
+import org.acra.ACRA
+import org.acra.config.CoreConfigurationBuilder
+import org.acra.config.HttpSenderConfigurationBuilder
+import org.acra.sender.HttpSender
 import org.sirekanyan.knigopis.dependency.*
 
 class App : Application() {
@@ -26,18 +30,18 @@ class App : Application() {
     }
 
     private fun initCrashReporting() {
-        /* todo: crash reporting
         val httpSenderConfig = HttpSenderConfigurationBuilder()
-            .withUri("https://collector.tracepot.com/93c9aa62")
+            .withUri(BuildConfig.ACRA_URI)
             .withHttpMethod(HttpSender.Method.POST)
-            .withEnabled(true)
+            .withBasicAuthLogin(BuildConfig.ACRA_LOGIN)
+            .withBasicAuthPassword(BuildConfig.ACRA_PASSWORD)
+            .withEnabled(BuildConfig.ACRA_ENABLED)
             .build()
         val config = CoreConfigurationBuilder()
             .withBuildConfigClass(BuildConfig::class.java)
             .withPluginConfigurations(httpSenderConfig)
             .build()
         ACRA.init(this, config)
-        */
     }
 
     override fun onCreate() {

+ 2 - 2
app/src/main/java/org/sirekanyan/knigopis/common/functions/LogFactory.kt

@@ -1,6 +1,7 @@
 package org.sirekanyan.knigopis.common.functions
 
 import android.util.Log
+import org.acra.ACRA
 
 private const val TAG = "Knigopis"
 
@@ -8,7 +9,6 @@ private const val TAG = "Knigopis"
 fun logWarn(message: String) = Log.w(TAG, message)
 
 fun logError(message: String, throwable: Throwable?): Int {
-    // todo: crash reporting
-    // ACRA.errorReporter.handleException(throwable)
+    ACRA.errorReporter.handleException(throwable ?: Exception(message))
     return Log.e(TAG, message, throwable)
 }

+ 3 - 0
app/src/main/java/org/sirekanyan/knigopis/feature/MainPresenter.kt

@@ -142,6 +142,9 @@ class MainPresenterImpl(
 
     override fun onCrashReportOptionClicked(isChecked: Boolean) {
         config.crashReportEnabled = isChecked
+        if (!isChecked) {
+            logError("Crash reporting was disabled", throwable = null)
+        }
     }
 
     override fun onThemeOptionClicked(theme: Theme) {

+ 1 - 0
app/src/main/java/org/sirekanyan/knigopis/feature/MainView.kt

@@ -148,6 +148,7 @@ class MainViewImpl(
         notesPage.show(tab == NOTES_TAB)
         toolbar.menu.findItem(R.id.option_sort_books).isVisible = tab == BOOKS_TAB
         toolbar.menu.findItem(R.id.option_sort_users).isVisible = tab == USERS_TAB
+        toolbar.menu.findItem(R.id.option_crash_report).isVisible = BuildConfig.ACRA_ENABLED
     }
 
     override fun showNavigation(isVisible: Boolean) {

+ 0 - 2
app/src/main/res/menu/options.xml

@@ -59,12 +59,10 @@
         android:title="@string/main.option.about"
         app:showAsAction="never" />
 
-    <!-- todo: crash reporting -->
     <item
         android:id="@+id/option_crash_report"
         android:checkable="true"
         android:title="@string/main.option.crash_report"
-        android:visible="false"
         app:showAsAction="never" />
 
     <!-- for debug only -->