Commit 1f75e63c authored by topjohnwu's avatar topjohnwu

Fix crashes in MarkdownWindow

Fix #1628
parent cb3f9b97
...@@ -39,7 +39,7 @@ android { ...@@ -39,7 +39,7 @@ android {
exclude '/META-INF/*.kotlin_module' exclude '/META-INF/*.kotlin_module'
exclude '/META-INF/rxkotlin.properties' exclude '/META-INF/rxkotlin.properties'
exclude '/androidsupportmultidexversion.txt' exclude '/androidsupportmultidexversion.txt'
exclude '/org/**' exclude '/org/bouncycastle/**'
exclude '/kotlin/**' exclude '/kotlin/**'
exclude '/kotlinx/**' exclude '/kotlinx/**'
} }
......
...@@ -8,11 +8,13 @@ import com.skoumal.teanity.extensions.subscribeK ...@@ -8,11 +8,13 @@ import com.skoumal.teanity.extensions.subscribeK
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.data.repository.StringRepository import com.topjohnwu.magisk.data.repository.StringRepository
import com.topjohnwu.magisk.extensions.inject import com.topjohnwu.magisk.extensions.inject
import io.reactivex.Completable
import io.reactivex.Single import io.reactivex.Single
import ru.noties.markwon.Markwon import ru.noties.markwon.Markwon
import ru.noties.markwon.html.HtmlPlugin import ru.noties.markwon.html.HtmlPlugin
import ru.noties.markwon.image.ImagesPlugin import ru.noties.markwon.image.ImagesPlugin
import ru.noties.markwon.image.svg.SvgPlugin import ru.noties.markwon.image.svg.SvgPlugin
import timber.log.Timber
import java.io.InputStream import java.io.InputStream
import java.util.* import java.util.*
...@@ -33,26 +35,35 @@ object MarkDownWindow { ...@@ -33,26 +35,35 @@ object MarkDownWindow {
} }
fun show(activity: Context, title: String?, content: Single<String>) { fun show(activity: Context, title: String?, content: Single<String>) {
content.subscribeK { val markwon = Markwon.builder(activity)
val markwon = Markwon.builder(activity) .usePlugin(HtmlPlugin.create())
.usePlugin(HtmlPlugin.create()) .usePlugin(ImagesPlugin.create(activity))
.usePlugin(ImagesPlugin.create(activity)) .usePlugin(SvgPlugin.create(activity.resources))
.usePlugin(SvgPlugin.create(activity.resources)) .build()
.build() val mv = LayoutInflater.from(activity).inflate(R.layout.markdown_window, null)
val alert = AlertDialog.Builder(activity) val tv = mv.findViewById<TextView>(R.id.md_txt)
alert.setTitle(title)
val mv = LayoutInflater.from(activity).inflate(R.layout.markdown_window, null) content.map {
val tv = mv.findViewById<TextView>(R.id.md_txt) runCatching {
try {
markwon.setMarkdown(tv, it) markwon.setMarkdown(tv, it)
} catch (e: ExceptionInInitializerError) { }.onFailure {
//Nothing we can do about this error other than show error message Timber.e(it)
tv.setText(R.string.download_file_error) // Always wrap the actual exception as it could be ExceptionInInitializerError,
// which is a fatal error and RxJava will send it to the global handler and crash
throw MarkwonException(it)
} }
}.ignoreElement().onErrorResumeNext {
alert.setView(mv) // Nothing we can actually do other than show error message
alert.setNegativeButton(R.string.close) { dialog, _ -> dialog.dismiss() } tv.setText(R.string.download_file_error)
alert.show() Completable.complete()
}.subscribeK {
AlertDialog.Builder(activity)
.setTitle(title)
.setView(mv)
.setNegativeButton(R.string.close) { dialog, _ -> dialog.dismiss() }
.show()
} }
} }
class MarkwonException(e: Throwable): Exception(e)
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment