1
0
mirror of https://github.com/dzeiocom/OpenHealth.git synced 2025-04-23 11:22:10 +00:00

fix: Errors not always being handled by us/OS freezeing the app

smal adition a cleaner Crash Report
This commit is contained in:
Florian Bouillon 2022-07-19 17:40:32 +02:00
parent 27ee9a78d1
commit 902c24bf89
2 changed files with 27 additions and 28 deletions

View File

@ -3,12 +3,14 @@ package com.dzeio.openhealth
import android.app.Application
import android.content.Intent
import android.content.SharedPreferences
import android.os.Process
import android.util.Log
import androidx.preference.PreferenceManager
import com.dzeio.openhealth.ui.ErrorActivity
import com.google.android.material.color.DynamicColors
import dagger.hilt.android.HiltAndroidApp
import java.util.Locale
import kotlin.system.exitProcess
@HiltAndroidApp
class Application : Application() {
@ -17,21 +19,23 @@ class Application : Application() {
}
override fun onCreate() {
super.onCreate()
// Application Error Handling
Thread.setDefaultUncaughtExceptionHandler { paramThread, paramThrowable ->
//Log error to logcat if it wasn't done before
Log.e(TAG, "Error, ${paramThread.id}", paramThrowable)
Log.e(TAG, "En error was detected in the Thread ${paramThread.id}, trying to go to ErrorActivity")
// send use to the Error Activity
val intent = Intent(applicationContext, ErrorActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
intent.putExtra("error", paramThrowable.stackTraceToString())
intent.putExtra("threadId", paramThread.id)
startActivity(intent)
Log.e(TAG, "Activity should have started")
return@setDefaultUncaughtExceptionHandler
Process.killProcess(Process.myPid())
exitProcess(10)
}
// Android Dynamics Colors
@ -40,18 +44,18 @@ class Application : Application() {
// Change application Language based on setting
val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val lang = preferences.getString("global_language", Locale.getDefault().language)
val locale = Locale(lang)
Locale.setDefault(locale)
if (lang == null) {
Log.e(TAG, "lang is null")
} else {
val locale = Locale(lang)
Locale.setDefault(locale)
}
// val overrideConfiguration = baseContext.resources.configuration
// overrideConfiguration.locale = locale
// val context: Context = createConfigurationContext(overrideConfiguration)
// val resources: Resources = context.resources
}
/**
* SharedPreferences Key
*/
object Settings {
super.onCreate()
}
}

View File

@ -5,15 +5,15 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Process
import android.view.LayoutInflater
import android.widget.Toast
import com.dzeio.openhealth.Application
import com.dzeio.openhealth.BuildConfig
import com.dzeio.openhealth.core.BaseActivity
import com.dzeio.openhealth.databinding.ActivityErrorBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlin.system.exitProcess
@AndroidEntryPoint
class ErrorActivity : BaseActivity<ActivityErrorBinding>() {
companion object {
@ -26,31 +26,27 @@ class ErrorActivity : BaseActivity<ActivityErrorBinding>() {
override fun onCreated(savedInstanceState: Bundle?) {
super.onCreated(savedInstanceState)
val params = intent
val data = params.getStringExtra("error")
val data = intent.getStringExtra("error")
// Get Application datas
val deviceToReport = if (Build.DEVICE.contains(Build.MANUFACTURER)) Build.DEVICE else "${Build.MANUFACTURER} ${Build.DEVICE}"
val infos = """
Application ID: ${BuildConfig.APPLICATION_ID}
Version Code: ${BuildConfig.VERSION_CODE}
Version Name: ${BuildConfig.VERSION_NAME}
val reportText = """
Crash Report (Thread: ${intent?.getLongExtra("threadId", -1) ?: "unknown"})
${BuildConfig.APPLICATION_ID} v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})
on $deviceToReport (${Build.MODEL}) running Android ${Build.VERSION.RELEASE} (${Build.VERSION.SDK_INT})
Android ${Build.VERSION.RELEASE} SDK ${Build.VERSION.SDK_INT}
Model: $deviceToReport ${Build.MODEL}
""".trimIndent()
backtrace:
// merge our texts
val reportText = infos + "\n\n" + data
""".trimIndent() + data
// put it in the textView
binding.errorText.text = reportText
// Handle the Quit button
binding.errorQuit.setOnClickListener {
finish()
Process.killProcess(Process.myPid())
exitProcess(10)
}
// Handle the Email Button
@ -85,6 +81,5 @@ class ErrorActivity : BaseActivity<ActivityErrorBinding>() {
Toast.makeText(this, "No Web Browser found :(", Toast.LENGTH_LONG).show()
}
}
}
}