From beba0f4884a80a87c900948c96da17fa3c6a2cd5 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 17 Apr 2019 20:10:40 +0200 Subject: [PATCH] CrashHandler improvements --- .../app/QuasseldroidReleaseDelegate.kt | 5 +---- .../main/java/de/kuschku/malheur/CrashHandler.kt | 11 +++++++++++ .../kuschku/malheur/collectors/AppCollector.kt | 8 +++++++- .../malheur/collectors/DisplayCollector.kt | 16 ++++++++++++---- .../main/java/de/kuschku/malheur/data/AppInfo.kt | 2 +- .../java/de/kuschku/malheur/data/DisplayInfo.kt | 1 - 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt b/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt index 7a43a5ba9..5aea5d0f7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt @@ -47,10 +47,7 @@ class QuasseldroidReleaseDelegate(private val app: Quasseldroid) : LeakCanary.install(app) // Normal app init code... - CrashHandler.init( - application = app, - buildConfig = BuildConfig::class.java - ) + CrashHandler.init<BuildConfig>(application = app) // Init compatibility utils AndroidCompatibilityUtils.inject() diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt index b78431d9c..5f6883116 100644 --- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt +++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt @@ -39,6 +39,10 @@ object CrashHandler { private lateinit var handler: Handler + inline fun <reified T> init(application: Application, config: ReportConfig = ReportConfig()) { + init(application, config, T::class.java) + } + fun init(application: Application, config: ReportConfig = ReportConfig(), buildConfig: Class<*>?) { if (myHandler == null) { @@ -92,10 +96,17 @@ object CrashHandler { } }.start() } + Thread.setDefaultUncaughtExceptionHandler { currentThread, throwable -> myHandler?.uncaughtException(currentThread, throwable) originalHandler?.uncaughtException(currentThread, throwable) } + + val oldHandler = Thread.currentThread().uncaughtExceptionHandler + Thread.currentThread().setUncaughtExceptionHandler { currentThread, throwable -> + myHandler?.uncaughtException(currentThread, throwable) + oldHandler?.uncaughtException(currentThread, throwable) + } } fun handle(throwable: Throwable) { diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt index 1afa49239..42bd4cf62 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt @@ -20,6 +20,7 @@ package de.kuschku.malheur.collectors import android.app.Application +import android.os.Build import de.kuschku.malheur.CrashContext import de.kuschku.malheur.config.AppConfig import de.kuschku.malheur.data.AppInfo @@ -31,7 +32,12 @@ class AppCollector(private val application: Application) : Collector<AppInfo, Ap application.packageManager.getPackageInfo(application.packageName, 0).versionName }, versionCode = collectIf(config.versionCode) { - application.packageManager.getPackageInfo(application.packageName, 0).versionCode + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + application.packageManager.getPackageInfo(application.packageName, 0).longVersionCode + } else { + @Suppress("DEPRECATION") + application.packageManager.getPackageInfo(application.packageName, 0).versionCode.toLong() + } }, buildConfig = collectIf(config.buildConfig) { reflectionCollectConstants( diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt index 607baea2f..212e74abf 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt @@ -21,6 +21,7 @@ package de.kuschku.malheur.collectors import android.app.Application import android.content.Context +import android.graphics.Point import android.os.Build import android.util.SparseArray import android.view.Display @@ -37,7 +38,6 @@ class DisplayCollector(application: Application) : Context.WINDOW_SERVICE ) as WindowManager - @Suppress("DEPRECATION") override fun collect(context: CrashContext, config: Boolean): DisplayInfo? { val display = windowManager.defaultDisplay val hdrCapabilities = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -46,10 +46,18 @@ class DisplayCollector(application: Application) : } else { null } + + val size = Point().also { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + display.getRealSize(it) + } else { + display.getSize(it) + } + } + return DisplayInfo( - width = display.width, - height = display.height, - pixelFormat = display.pixelFormat, + width = size.x, + height = size.y, refreshRate = display.refreshRate, hdr = hdrCapabilities, isWideGamut = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt index dde362186..c06791382 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt @@ -21,6 +21,6 @@ package de.kuschku.malheur.data data class AppInfo( val versionName: String?, - val versionCode: Int?, + val versionCode: Long?, val buildConfig: Map<String, Any?>? ) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt index c816bed5c..7e2a91491 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt @@ -22,7 +22,6 @@ package de.kuschku.malheur.data data class DisplayInfo( val width: Int, val height: Int, - val pixelFormat: Int, val refreshRate: Float, val hdr: List<String>?, val isWideGamut: Boolean?, -- GitLab