1
0
mirror of https://github.com/dzeiocom/OpenHealth.git synced 2025-04-23 19:32:11 +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.app.Application
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Process
import android.util.Log import android.util.Log
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.dzeio.openhealth.ui.ErrorActivity import com.dzeio.openhealth.ui.ErrorActivity
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import java.util.Locale import java.util.Locale
import kotlin.system.exitProcess
@HiltAndroidApp @HiltAndroidApp
class Application : Application() { class Application : Application() {
@ -17,21 +19,23 @@ class Application : Application() {
} }
override fun onCreate() { override fun onCreate() {
super.onCreate()
// Application Error Handling // Application Error Handling
Thread.setDefaultUncaughtExceptionHandler { paramThread, paramThrowable -> Thread.setDefaultUncaughtExceptionHandler { paramThread, paramThrowable ->
//Log error to logcat if it wasn't done before //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 // send use to the Error Activity
val intent = Intent(applicationContext, ErrorActivity::class.java) 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("error", paramThrowable.stackTraceToString())
intent.putExtra("threadId", paramThread.id)
startActivity(intent) startActivity(intent)
Log.e(TAG, "Activity should have started")
return@setDefaultUncaughtExceptionHandler Process.killProcess(Process.myPid())
exitProcess(10)
} }
// Android Dynamics Colors // Android Dynamics Colors
@ -40,18 +44,18 @@ class Application : Application() {
// Change application Language based on setting // Change application Language based on setting
val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val lang = preferences.getString("global_language", Locale.getDefault().language) val lang = preferences.getString("global_language", Locale.getDefault().language)
val locale = Locale(lang) if (lang == null) {
Locale.setDefault(locale) Log.e(TAG, "lang is null")
} else {
val locale = Locale(lang)
Locale.setDefault(locale)
}
// val overrideConfiguration = baseContext.resources.configuration // val overrideConfiguration = baseContext.resources.configuration
// overrideConfiguration.locale = locale // overrideConfiguration.locale = locale
// val context: Context = createConfigurationContext(overrideConfiguration) // val context: Context = createConfigurationContext(overrideConfiguration)
// val resources: Resources = context.resources // val resources: Resources = context.resources
}
/** super.onCreate()
* SharedPreferences Key
*/
object Settings {
} }
} }

View File

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