From f7fca34efa6ffa6247a13cda36142bd99527fb60 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Thu, 7 Jun 2018 04:23:11 -0400 Subject: [PATCH] Improve logging for failed messages --- .../src/main/java/receiver/SmsSentReceiver.kt | 8 ++++++- .../src/main/java/common/QKApplication.kt | 3 ++- .../src/main/java/common/util/BugsnagTree.kt | 23 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 presentation/src/main/java/common/util/BugsnagTree.kt diff --git a/data/src/main/java/receiver/SmsSentReceiver.kt b/data/src/main/java/receiver/SmsSentReceiver.kt index 733fec75..7797505f 100644 --- a/data/src/main/java/receiver/SmsSentReceiver.kt +++ b/data/src/main/java/receiver/SmsSentReceiver.kt @@ -26,6 +26,7 @@ import android.telephony.SmsManager import dagger.android.AndroidInjection import interactor.MarkFailed import interactor.MarkSent +import timber.log.Timber import javax.inject.Inject class SmsSentReceiver : BroadcastReceiver() { @@ -48,9 +49,14 @@ class SmsSentReceiver : BroadcastReceiver() { SmsManager.RESULT_ERROR_NO_SERVICE, SmsManager.RESULT_ERROR_NULL_PDU, SmsManager.RESULT_ERROR_RADIO_OFF -> { + Timber.w(SmsFailedException(resultCode, intent.getIntExtra("errorCode", -1))) + val pendingResult = goAsync() markFailed.execute(MarkFailed.Params(id, resultCode)) { pendingResult.finish() } } } } -} \ No newline at end of file +} + +private class SmsFailedException(resultCode: Int, errorCode: Int) + : Exception("Message failed to send with resultCode: $resultCode and errorCode: $errorCode") \ No newline at end of file diff --git a/presentation/src/main/java/common/QKApplication.kt b/presentation/src/main/java/common/QKApplication.kt index e044a15c..85b12d46 100644 --- a/presentation/src/main/java/common/QKApplication.kt +++ b/presentation/src/main/java/common/QKApplication.kt @@ -29,6 +29,7 @@ import com.bugsnag.android.Bugsnag import com.bugsnag.android.Configuration import com.moez.QKSMS.BuildConfig import com.moez.QKSMS.R +import common.util.BugsnagTree import dagger.android.AndroidInjector import dagger.android.DispatchingAndroidInjector import dagger.android.HasActivityInjector @@ -90,7 +91,7 @@ class QKApplication : Application(), HasActivityInjector, HasBroadcastReceiverIn EmojiCompat.init(FontRequestEmojiCompatConfig(this, fontRequest)) - Timber.plant(Timber.DebugTree()) + Timber.plant(Timber.DebugTree(), BugsnagTree()) } override fun activityInjector(): AndroidInjector { diff --git a/presentation/src/main/java/common/util/BugsnagTree.kt b/presentation/src/main/java/common/util/BugsnagTree.kt new file mode 100644 index 00000000..b811cb7a --- /dev/null +++ b/presentation/src/main/java/common/util/BugsnagTree.kt @@ -0,0 +1,23 @@ +package common.util + +import android.util.Log +import com.bugsnag.android.Bugsnag +import com.bugsnag.android.Severity +import timber.log.Timber + +/** + * If an exception is logged with the [Log.WARN] or [Log.ERROR] priority, the exception will be + * sent to Bugsnag + */ +class BugsnagTree : Timber.Tree() { + + override fun isLoggable(tag: String?, priority: Int): Boolean { + return priority == Log.WARN || priority == Log.ERROR + } + + override fun log(priority: Int, tag: String?, message: String?, throwable: Throwable?) { + val severity = if (priority == Log.ERROR) Severity.ERROR else Severity.WARNING + throwable?.run { Bugsnag.notify(this, severity) } + } + +} \ No newline at end of file