diff --git a/sample/src/main/java/com/dzeio/crashhandlertest/Application.kt b/sample/src/main/java/com/dzeio/crashhandlertest/Application.kt index 68141e6..3f2669f 100644 --- a/sample/src/main/java/com/dzeio/crashhandlertest/Application.kt +++ b/sample/src/main/java/com/dzeio/crashhandlertest/Application.kt @@ -8,15 +8,25 @@ class Application : android.app.Application() { override fun onCreate() { super.onCreate() + // get the device Preference store val prefs = PreferenceManager.getDefaultSharedPreferences(this) + // create the Crash Handler CrashHandler.Builder() - .withActivity(ErrorActivity::class.java) + // need the application context to run .withContext(this) + // define a custom activity to use + .withActivity(ErrorActivity::class.java) + // define the preferenceManager to be able to handle crash in a custom Activity and to have the previous crash date in the logs .withPrefs(prefs) .withPrefsKey("com.dzeio.crashhandler.key") - .withPrefix("Pouet :D") + // a Prefix to add at the beginning the crash message + .withPrefix( + "POKEMON" + ) + // a Suffix to add at the end of the crash message .withSuffix("WHYYYYY") + // build & start the module .build().setup() } } diff --git a/sample/src/main/java/com/dzeio/crashhandlertest/ui/ErrorActivity.kt b/sample/src/main/java/com/dzeio/crashhandlertest/ui/ErrorActivity.kt index cba8c05..20294ad 100644 --- a/sample/src/main/java/com/dzeio/crashhandlertest/ui/ErrorActivity.kt +++ b/sample/src/main/java/com/dzeio/crashhandlertest/ui/ErrorActivity.kt @@ -3,7 +3,6 @@ package com.dzeio.crashhandlertest.ui import android.content.ActivityNotFoundException import android.content.Intent import android.net.Uri -import android.os.Build import android.os.Bundle import android.os.Process import android.widget.Toast @@ -12,37 +11,30 @@ import androidx.core.view.WindowCompat import com.dzeio.crashhandlertest.databinding.ActivityErrorBinding import kotlin.system.exitProcess +/** + * Example Activity for a custom ErrorActivity + * + * note: try to keep the complexity of this class as low as possible + * to make sure this will always load + */ class ErrorActivity : AppCompatActivity() { + // the view binding private lateinit var binding: ActivityErrorBinding override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, false) super.onCreate(savedInstanceState) + // inflate the view binding = ActivityErrorBinding.inflate(layoutInflater) setContentView(binding.root) + // get the error string from the library val data = intent.getStringExtra("error") - // Get Application datas - val deviceToReport = - if (Build.DEVICE.contains(Build.MANUFACTURER)) { - Build.DEVICE - } else { - "${Build.MANUFACTURER} ${Build.DEVICE}" - } - - val reportText = """ - Crash Report (Thread: ${intent?.getLongExtra("threadId", -1) ?: "unknown"}) - on $deviceToReport (${Build.MODEL}) running Android ${Build.VERSION.RELEASE} (${Build.VERSION.SDK_INT}) - - backtrace: - - """.trimIndent() + data - // put it in the textView - binding.errorText.text = reportText + binding.errorText.text = data // Handle the Quit button binding.errorQuit.setOnClickListener { @@ -57,8 +49,9 @@ class ErrorActivity : AppCompatActivity() { intent.setDataAndType(Uri.parse("mailto:"), "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") + intent.putExtra(Intent.EXTRA_TEXT, "Send Report Email\n$data") + // send intent try { startActivity(Intent.createChooser(intent, "Send Report Email...")) } catch (e: ActivityNotFoundException) { @@ -69,8 +62,10 @@ class ErrorActivity : AppCompatActivity() { // Handle the GitHub Button binding.errorSubmitGithub.setOnClickListener { // Build URL - val url = "https://github.com/dzeiocom/OpenHealth/issues/new?title=Application Error&body=$reportText" + val title = "Application Error" + val url = "https://github.com/dzeiocom/OpenHealth/issues/new?title=$title&body=$data" + // send intent try { startActivity( Intent(Intent.ACTION_VIEW, Uri.parse(url)) diff --git a/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainActivity.kt b/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainActivity.kt index 82e77d8..3a30160 100644 --- a/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainActivity.kt +++ b/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainActivity.kt @@ -3,8 +3,12 @@ package com.dzeio.crashhandlertest.ui import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat +import com.dzeio.crashhandlertest.R import com.dzeio.crashhandlertest.databinding.ActivityMainBinding +/** + * + */ class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding @@ -15,5 +19,10 @@ class MainActivity : AppCompatActivity() { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + + binding.buttonFirst.setOnClickListener { + // DIE + throw Exception(getString(R.string.error_message)) + } } -} \ No newline at end of file +} diff --git a/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainFragment.kt b/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainFragment.kt deleted file mode 100644 index ac7fef3..0000000 --- a/sample/src/main/java/com/dzeio/crashhandlertest/ui/MainFragment.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.dzeio.crashhandlertest.ui - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.dzeio.crashhandlertest.databinding.FragmentMainBinding - -/** - * A simple [Fragment] subclass as the default destination in the navigation. - */ -class MainFragment : Fragment() { - - private var _binding: FragmentMainBinding? = null - - // This property is only valid between onCreateView and - // onDestroyView. - private val binding get() = _binding!! - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - _binding = FragmentMainBinding.inflate(inflater, container, false) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - binding.buttonFirst.setOnClickListener { - // DIE - throw Exception("POKÉMON :D") - } - } - - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } -} diff --git a/sample/src/main/res/layout/activity_error.xml b/sample/src/main/res/layout/activity_error.xml index 1053f05..4d6b6bd 100644 --- a/sample/src/main/res/layout/activity_error.xml +++ b/sample/src/main/res/layout/activity_error.xml @@ -1,7 +1,6 @@ @@ -22,7 +22,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" - android:text="blablabla2" + android:textAlignment="center" + android:text="@string/crash_handler_page_subtitle" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView3" /> @@ -42,7 +43,8 @@ android:id="@+id/error_text" android:layout_width="match_parent" style="?textAppearanceCaption" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:textIsSelectable="true" /> @@ -52,7 +54,7 @@ android:id="@+id/error_submit_github" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Github" + android:text="@string/github" android:layout_marginStart="16dp" app:layout_constraintBaseline_toBaselineOf="@+id/error_submit_email" app:layout_constraintStart_toStartOf="parent" /> @@ -63,7 +65,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" - android:text="E-Mail" + android:text="@string/e_mail" app:layout_constraintBottom_toTopOf="@+id/error_quit" app:layout_constraintEnd_toEndOf="parent" /> @@ -72,7 +74,7 @@ android:id="@+id/error_quit" android:layout_width="wrap_content" android:layout_height="0dp" - android:text="Quit" + android:text="@string/quit" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 084b69a..c4d5449 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,23 +1,21 @@ - + tools:context=".ui.MainActivity" + android:padding="16dp"> - + app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/fragment_main.xml b/sample/src/main/res/layout/fragment_main.xml deleted file mode 100644 index 0a33475..0000000 --- a/sample/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - -