Add LocalOnlyException
Some checks failed
Build & Test / Validate (pull_request) Successful in 19s
Build & Test / Run Unit Tests (pull_request) Successful in 9m15s
Build & Test / Run UI Tests (pull_request) Failing after 8m19s

This is intended to enable local logging of some exceptions for debugging purposes without overrunning the remote crash reporter with issues that can't really be actioned upon
This commit is contained in:
William Brawner 2024-08-22 20:36:34 -06:00
parent b1e698c9c9
commit 98688cbc3b
Signed by: wbrawner
GPG key ID: 8FF12381C6C90D35
2 changed files with 13 additions and 3 deletions

View file

@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import com.wbrawner.simplemarkdown.core.LocalOnlyException
import com.wbrawner.simplemarkdown.utility.FileHelper
import com.wbrawner.simplemarkdown.utility.Preference
import com.wbrawner.simplemarkdown.utility.PreferenceHelper
@ -109,7 +110,7 @@ class MarkdownViewModel(
preferenceHelper[Preference.AUTOSAVE_URI] = actualLoadPath
} ?: throw IllegalStateException("Opened file was null")
} catch (e: Exception) {
Timber.e(e, "Failed to open file at path: $actualLoadPath")
Timber.e(LocalOnlyException(e), "Failed to open file at path: $actualLoadPath")
_state.value = _state.value.copy(
alert = AlertDialogModel(
text = ParameterizedText(R.string.file_load_error),

View file

@ -2,7 +2,6 @@ package com.wbrawner.simplemarkdown.core
import android.app.Application
import android.util.Log
import org.acra.ACRA
import org.acra.config.httpSender
import org.acra.data.StringFormat
import org.acra.ktx.initAcra
@ -13,8 +12,10 @@ import timber.log.Timber
class ErrorReporterTree private constructor(): Timber.Tree() {
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
if (priority != Log.ERROR) return
if (t !is LocalOnlyException) {
t?.sendSilentlyWithAcra()
}
}
companion object {
fun create(application: Application): ErrorReporterTree {
@ -24,6 +25,14 @@ class ErrorReporterTree private constructor(): Timber.Tree() {
}
}
/**
* An exception wrapper that prevents exceptions from being sent to an error reporter. Useful for
* logging things like IOExceptions that are useful to see locally but not so helpful if reported
*/
class LocalOnlyException(override val message: String?, override val cause: Throwable): Exception(message, cause) {
constructor(cause: Throwable): this(null, cause)
}
private fun Application.createErrorReporterTree() {
initAcra {
reportFormat = StringFormat.JSON