From 73c1d2a616504775ed990e0bd5681baee03b5960 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 21 Feb 2023 18:59:52 +0200 Subject: [PATCH] Show error details for pages --- .../exceptions/resolve/ExceptionResolver.kt | 21 ++++++++ .../reader/ui/pager/PageHolderDelegate.kt | 7 +++ .../reader/ui/pager/standard/PageHolder.kt | 3 +- .../reader/ui/pager/webtoon/WebtoonHolder.kt | 3 +- .../main/res/layout-v23/layout_page_info.xml | 50 ------------------- app/src/main/res/layout/layout_page_info.xml | 16 +++--- 6 files changed, 42 insertions(+), 58 deletions(-) delete mode 100644 app/src/main/res/layout-v23/layout_page_info.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt b/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt index 4afa01e5d..459986d17 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt @@ -1,11 +1,15 @@ package org.koitharu.kotatsu.core.exceptions.resolve +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import androidx.activity.result.ActivityResultCallback import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.collection.ArrayMap import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.suspendCancellableCoroutine import okhttp3.Headers import org.koitharu.kotatsu.R @@ -17,6 +21,7 @@ import org.koitharu.kotatsu.parsers.exception.NotFoundException import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.settings.sources.auth.SourceAuthActivity import org.koitharu.kotatsu.utils.TaggedActivityResult +import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.isSuccess import kotlin.coroutines.Continuation import kotlin.coroutines.resume @@ -95,5 +100,21 @@ class ExceptionResolver private constructor( } fun canResolve(e: Throwable) = getResolveStringId(e) != 0 + + fun showDetails(context: Context, e: Throwable) { + val stackTrace = e.stackTraceToString() + val dialog = MaterialAlertDialogBuilder(context) + .setTitle(e.getDisplayMessage(context.resources)) + .setMessage(stackTrace) + .setPositiveButton(androidx.preference.R.string.copy) { _, _ -> + val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + clipboardManager.setPrimaryClip( + ClipData.newPlainText(context.getString(R.string.error), stackTrace), + ) + } + .setNegativeButton(R.string.close, null) + .create() + dialog.show() + } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt index 2bb76f37f..43b517fff 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/PageHolderDelegate.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.reader.ui.pager +import android.content.Context import android.net.Uri import androidx.core.net.toUri import androidx.lifecycle.Observer @@ -59,6 +60,11 @@ class PageHolderDelegate( } } + fun showErrorDetails(context: Context) { + val e = error ?: return + ExceptionResolver.showDetails(context, e) + } + fun onAttachedToWindow() { readerSettings.observeForever(this) } @@ -87,6 +93,7 @@ class PageHolderDelegate( } override fun onImageLoadError(e: Throwable) { + e.printStackTraceDebug() val file = this.file error = e if (state == State.LOADED && e is IOException && file != null && file.exists()) { diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt index efa8e4dcd..073fa0185 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt @@ -33,8 +33,8 @@ open class PageHolder( binding.ssiv.bindToLifecycle(owner) binding.ssiv.isEagerLoadingEnabled = !isLowRamDevice(context) binding.ssiv.addOnImageEventListener(delegate) - @Suppress("LeakingThis") bindingInfo.buttonRetry.setOnClickListener(this) + bindingInfo.buttonErrorDetails.setOnClickListener(this) binding.textViewNumber.isVisible = settings.isPagesNumbersEnabled } @@ -115,6 +115,7 @@ open class PageHolder( override fun onClick(v: View) { when (v.id) { R.id.button_retry -> delegate.retry(boundData?.toMangaPage() ?: return) + R.id.button_error_details -> delegate.showErrorDetails(v.context) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt index c8cfa3714..4218e0533 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonHolder.kt @@ -19,7 +19,6 @@ import org.koitharu.kotatsu.utils.GoneOnInvisibleListener import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.ext.hideCompat import org.koitharu.kotatsu.utils.ext.ifZero -import org.koitharu.kotatsu.utils.ext.setProgressCompat import org.koitharu.kotatsu.utils.ext.showCompat class WebtoonHolder( @@ -40,6 +39,7 @@ class WebtoonHolder( binding.ssiv.regionDecoderFactory = SkiaPooledImageRegionDecoder.Factory() binding.ssiv.addOnImageEventListener(delegate) bindingInfo.buttonRetry.setOnClickListener(this) + bindingInfo.buttonErrorDetails.setOnClickListener(this) } override fun onBind(data: ReaderPage) { @@ -104,6 +104,7 @@ class WebtoonHolder( override fun onClick(v: View) { when (v.id) { R.id.button_retry -> delegate.retry(boundData?.toMangaPage() ?: return) + R.id.button_error_details -> delegate.showErrorDetails(v.context) } } diff --git a/app/src/main/res/layout-v23/layout_page_info.xml b/app/src/main/res/layout-v23/layout_page_info.xml deleted file mode 100644 index d1c0e2c1e..000000000 --- a/app/src/main/res/layout-v23/layout_page_info.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - -