diff --git a/app/build.gradle b/app/build.gradle index 9da64dd2..3e0b8d44 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -142,6 +142,8 @@ dependencies { } implementation 'org.jsoup:jsoup:1.18.1' + implementation 'cat.ereza:customactivityoncrash:2.4.0' + testImplementation "junit:junit:4.13.2" testImplementation "androidx.test:core:1.6.1" testImplementation "androidx.test:core-ktx:1.6.1" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a32118ef..e06280f2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -97,6 +97,16 @@ android:exported="false"> + + + + + + - val intent = - when (which) { - 0 -> { - val app = requireContext().applicationContext as Application - val logs = Operations.getLastExceptionLog(app) - Intent( - Intent.ACTION_VIEW, - Uri.parse( - "https://github.com/PhilKes/NotallyX/issues/new?labels=bug&projects=&template=bug_report.yml${logs?.let { "&logs=$it" } ?: ""}" - .take(2000) - ), + when (which) { + 0 -> { + val app = requireContext().applicationContext as Application + val logs = Operations.getLastExceptionLog(app) + reportBug(logs) + } + else -> + requireContext().catchNoBrowserInstalled { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse( + "https://github.com/PhilKes/NotallyX/issues/new?labels=enhancement&template=feature_request.md" + ), + ) ) } - else -> - Intent( - Intent.ACTION_VIEW, - Uri.parse( - "https://github.com/PhilKes/NotallyX/issues/new?labels=enhancement&template=feature_request.md" - ), - ) - } - try { - startActivity(intent) - } catch (exception: ActivityNotFoundException) { - Toast.makeText(requireContext(), R.string.install_a_browser, Toast.LENGTH_LONG) - .show() } } .setNegativeButton(R.string.cancel, null) diff --git a/app/src/main/java/com/philkes/notallyx/utils/ErrorActivity.kt b/app/src/main/java/com/philkes/notallyx/utils/ErrorActivity.kt new file mode 100644 index 00000000..0ced9729 --- /dev/null +++ b/app/src/main/java/com/philkes/notallyx/utils/ErrorActivity.kt @@ -0,0 +1,59 @@ +package com.philkes.notallyx.utils + +import android.os.Bundle +import android.widget.Button +import android.widget.ImageView +import androidx.appcompat.app.AppCompatActivity +import cat.ereza.customactivityoncrash.CustomActivityOnCrash +import com.philkes.notallyx.R +import com.philkes.notallyx.presentation.dp +import com.philkes.notallyx.utils.Operations.reportBug + +/** + * Activity used when the app is about to crash. Implicitly used by cat.ereza:customactivityoncrash. + */ +class ErrorActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView( + cat.ereza.customactivityoncrash.R.layout.customactivityoncrash_default_error_activity + ) + findViewById( + cat.ereza.customactivityoncrash.R.id.customactivityoncrash_error_activity_image + ) + .apply { + minimumWidth = 100.dp(this@ErrorActivity) + minimumHeight = 100.dp(this@ErrorActivity) + setImageResource(R.drawable.error) + } + findViewById