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:
parent
27ee9a78d1
commit
902c24bf89
@ -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)
|
||||||
|
if (lang == null) {
|
||||||
|
Log.e(TAG, "lang is null")
|
||||||
|
} else {
|
||||||
val locale = Locale(lang)
|
val locale = Locale(lang)
|
||||||
Locale.setDefault(locale)
|
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 {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user