diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4ec27b2..a592398 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,6 +44,10 @@ + + + diff --git a/app/src/main/java/com/dzeio/openhealth/Application.kt b/app/src/main/java/com/dzeio/openhealth/Application.kt index cd5fc34..806ebef 100644 --- a/app/src/main/java/com/dzeio/openhealth/Application.kt +++ b/app/src/main/java/com/dzeio/openhealth/Application.kt @@ -1,39 +1,57 @@ -package com.dzeio.openhealth - -import android.app.Application -import android.content.SharedPreferences -import androidx.preference.PreferenceManager -import com.google.android.material.color.DynamicColors -import dagger.hilt.android.HiltAndroidApp -import java.util.Locale - -@HiltAndroidApp -class Application : Application() { - companion object { - const val TAG = "OpenHealth" - } - - override fun onCreate() { - super.onCreate() - - // Android Dynamics Colors - DynamicColors.applyToActivitiesIfAvailable(this) - - // 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) - -// val overrideConfiguration = baseContext.resources.configuration -// overrideConfiguration.locale = locale -// val context: Context = createConfigurationContext(overrideConfiguration) -// val resources: Resources = context.resources - } - - /** - * SharedPreferences Key - */ - object Settings { - } -} +package com.dzeio.openhealth + +import android.app.Application +import android.content.Intent +import android.content.SharedPreferences +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 + +@HiltAndroidApp +class Application : Application() { + companion object { + const val TAG = "OpenHealth" + } + + 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) + + // send use to the Error Activity + val intent = Intent(applicationContext, ErrorActivity::class.java) + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.putExtra("error", paramThrowable.stackTraceToString()) + startActivity(intent) + + return@setDefaultUncaughtExceptionHandler + } + + // Android Dynamics Colors + DynamicColors.applyToActivitiesIfAvailable(this) + + // 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) + +// val overrideConfiguration = baseContext.resources.configuration +// overrideConfiguration.locale = locale +// val context: Context = createConfigurationContext(overrideConfiguration) +// val resources: Resources = context.resources + } + + /** + * SharedPreferences Key + */ + object Settings { + } +} diff --git a/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt new file mode 100644 index 0000000..a3c8cbc --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt @@ -0,0 +1,90 @@ +package com.dzeio.openhealth.ui + +import android.content.ActivityNotFoundException +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +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 + +@AndroidEntryPoint +class ErrorActivity : BaseActivity() { + + companion object { + const val TAG = "${Application.TAG}/ErrorActivity" + } + + override val bindingInflater: (LayoutInflater) -> ActivityErrorBinding = + ActivityErrorBinding::inflate + + override fun onCreated(savedInstanceState: Bundle?) { + super.onCreated(savedInstanceState) + + val params = intent + + val data = params.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} + + Android ${Build.VERSION.RELEASE} SDK ${Build.VERSION.SDK_INT} + Model: $deviceToReport ${Build.MODEL} + """.trimIndent() + + // merge our texts + val reportText = infos + "\n\n" + data + + // put it in the textView + binding.errorText.text = reportText + + // Handle the Quit button + binding.errorQuit.setOnClickListener { + finish() + } + + // Handle the Email Button + binding.errorSubmitEmail.setOnClickListener { + + // Create Intent + val intent = Intent(Intent.ACTION_SEND) + intent.data = Uri.parse("mailto:") + intent.type = "text/plain" + intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("report.openhealth@dzeio.com")) + intent.putExtra(Intent.EXTRA_SUBJECT, "Error report for application crash") + intent.putExtra(Intent.EXTRA_TEXT, "Send Report Email\n$reportText") + + try { + startActivity(Intent.createChooser(intent, "Send Report Email...")) + } catch (e: ActivityNotFoundException) { + Toast.makeText(this, "Not Email client found :(", Toast.LENGTH_LONG).show() + } + } + + // Handle the GitHub Button + binding.errorSubmitGithub.setOnClickListener { + + // Build URL + val url = "https://github.com/dzeiocom/OpenHealth/issues/new?title=Application Error&body=$reportText" + + try { + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } catch (e: ActivityNotFoundException) { + Toast.makeText(this, "No Web Browser found :(", Toast.LENGTH_LONG).show() + } + } + + } +} diff --git a/app/src/main/res/layout/activity_error.xml b/app/src/main/res/layout/activity_error.xml new file mode 100644 index 0000000..045108c --- /dev/null +++ b/app/src/main/res/layout/activity_error.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + +