diff --git a/app/src/main/java/com/dzeio/openhealth/Application.kt b/app/src/main/java/com/dzeio/openhealth/Application.kt index 806ebef..38ae96d 100644 --- a/app/src/main/java/com/dzeio/openhealth/Application.kt +++ b/app/src/main/java/com/dzeio/openhealth/Application.kt @@ -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() } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt index a3c8cbc..676df6f 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt @@ -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() { companion object { @@ -26,31 +26,27 @@ class ErrorActivity : BaseActivity() { 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() - - // merge our texts - val reportText = infos + "\n\n" + data + backtrace: + + """.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() { Toast.makeText(this, "No Web Browser found :(", Toast.LENGTH_LONG).show() } } - } }