diff --git a/malheur/src/main/AndroidManifest.xml b/malheur/src/main/AndroidManifest.xml index 89c8fa0f29986dd04eb31cb14e350d5953e65044..8db59c9a9cab0d2c7edb9c51fdeb4475cf894ab7 100644 --- a/malheur/src/main/AndroidManifest.xml +++ b/malheur/src/main/AndroidManifest.xml @@ -1,6 +1,2 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="de.kuschku.malheur"> - - <uses-permission android:name="android.permission.READ_LOGS" /> -</manifest> +<manifest package="de.kuschku.malheur" /> diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt index 3e67a36a3f2e5015f62d8aeef73e5e8bf066b9f9..ed48026a2890c16057c28c961c9ac4e17712fe58 100644 --- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt +++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt @@ -1,9 +1,14 @@ package de.kuschku.malheur import android.app.Application +import android.os.Handler +import android.os.HandlerThread +import android.util.Log +import android.widget.Toast import com.google.gson.GsonBuilder import de.kuschku.malheur.collectors.ReportCollector import de.kuschku.malheur.config.ReportConfig +import java.io.File import java.util.* object CrashHandler { @@ -12,16 +17,26 @@ object CrashHandler { private val startTime = Date() private var originalHandler: Thread.UncaughtExceptionHandler? = null + private lateinit var handler: Handler + fun init(application: Application, config: ReportConfig = ReportConfig(), buildConfig: Class<*>?) { if (myHandler == null) { originalHandler = Thread.getDefaultUncaughtExceptionHandler() } + val handlerThread = HandlerThread("Malheur") + handlerThread.start() + handler = Handler(handlerThread.looper) + val reportCollector = ReportCollector(application) myHandler = Thread.UncaughtExceptionHandler { activeThread, throwable -> val crashTime = Date() val stackTraces = Thread.getAllStackTraces() + Log.e("Malheur", "Creating crash report") + handler.post { + Toast.makeText(application, "Creating crash report", Toast.LENGTH_LONG).show() + } Thread { try { val json = gson.toJson( @@ -38,7 +53,17 @@ object CrashHandler { ), config ) ) - // FIXME STOPSHIP Implement crash handling + val crashDirectory = File(application.cacheDir, "crashes") + crashDirectory.mkdirs() + val crashFile = File(crashDirectory, "${System.currentTimeMillis()}.json") + crashFile.createNewFile() + crashFile.writeText(json) + Log.e("Malheur", "Crash report saved: $crashFile") + handler.post { + Toast.makeText(application, + "Crash report saved: ${crashFile.name}", + Toast.LENGTH_LONG).show() + } } catch (e: Throwable) { e.printStackTrace() originalHandler?.uncaughtException(activeThread, throwable)