Crash info dialog

This commit is contained in:
Koitharu
2020-04-05 12:43:22 +03:00
parent 8b28f1cd74
commit b98ec2199d
8 changed files with 119 additions and 8 deletions

View File

@@ -26,6 +26,7 @@ import org.koitharu.kotatsu.core.parser.UserAgentInterceptor
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.domain.MangaLoaderContext
import org.koitharu.kotatsu.ui.tracker.TrackerJobService
import org.koitharu.kotatsu.ui.utils.AppCrashHandler
import org.koitharu.kotatsu.utils.CacheUtils
import java.util.concurrent.TimeUnit
@@ -43,9 +44,7 @@ class KotatsuApp : Application() {
super.onCreate()
initKoin()
initCoil()
if (BuildConfig.DEBUG) {
initErrorHandler()
}
Thread.setDefaultUncaughtExceptionHandler(AppCrashHandler(applicationContext))
TrackerJobService.setup(this)
AppCompatDelegate.setDefaultNightMode(AppSettings(this).theme)
}

View File

@@ -11,7 +11,6 @@ import moxy.MvpAppCompatActivity
import org.koin.core.KoinComponent
import org.koitharu.kotatsu.BuildConfig
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.ui.common.dialog.StorageSelectDialog
abstract class BaseActivity : MvpAppCompatActivity(), KoinComponent {
@@ -70,7 +69,7 @@ abstract class BaseActivity : MvpAppCompatActivity(), KoinComponent {
return true
}
if (BuildConfig.DEBUG && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
StorageSelectDialog.Builder(this).create().show()
throw StackOverflowError("test")
return true
}
return super.onKeyDown(keyCode, event)

View File

@@ -0,0 +1,27 @@
package org.koitharu.kotatsu.ui.utils
import android.content.Context
import android.content.Intent
import java.io.PrintWriter
import java.io.StringWriter
import kotlin.system.exitProcess
class AppCrashHandler(private val applicationContext: Context) : Thread.UncaughtExceptionHandler {
override fun uncaughtException(t: Thread, e: Throwable) {
val crashInfo = buildString {
val writer = StringWriter()
e.printStackTrace(PrintWriter(writer))
append(writer.toString().trimIndent())
}
val intent = Intent(applicationContext, CrashActivity::class.java)
intent.putExtra(Intent.EXTRA_TEXT, crashInfo)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
try {
applicationContext.startActivity(intent)
} catch (e: Throwable) {
e.printStackTrace()
}
exitProcess(1)
}
}

View File

@@ -0,0 +1,34 @@
package org.koitharu.kotatsu.ui.utils
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_crash.*
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.ui.main.MainActivity
class CrashActivity : Activity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_crash)
textView.text = intent.getStringExtra(Intent.EXTRA_TEXT)
button_close.setOnClickListener(this)
button_restart.setOnClickListener(this)
}
override fun onClick(v: View) {
when(v.id) {
R.id.button_close -> {
finish()
}
R.id.button_restart -> {
val intent = Intent(applicationContext, MainActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
}
}
}