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