diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt index 6031e255f..1a9703786 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/exceptions/resolve/ExceptionResolver.kt @@ -20,6 +20,7 @@ import org.koitharu.kotatsu.core.nav.AppRouter import org.koitharu.kotatsu.core.nav.router import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.ui.dialog.buildAlertDialog +import org.koitharu.kotatsu.core.util.ext.isHttpUrl import org.koitharu.kotatsu.core.util.ext.restartApplication import org.koitharu.kotatsu.parsers.exception.AuthRequiredException import org.koitharu.kotatsu.parsers.exception.NotFoundException @@ -163,7 +164,7 @@ class ExceptionResolver @AssistedInject constructor( is ScrobblerAuthRequiredException, is AuthRequiredException -> R.string.sign_in - is NotFoundException -> if (e.url.isNotEmpty()) R.string.open_in_browser else 0 + is NotFoundException -> if (e.url.isHttpUrl()) R.string.open_in_browser else 0 is UnsupportedSourceException -> if (e.manga != null) R.string.alternatives else 0 is SSLException, is CertPathValidatorException -> R.string.fix diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/dialog/ErrorDetailsDialog.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/dialog/ErrorDetailsDialog.kt index 1525ac1e6..4cd234338 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/dialog/ErrorDetailsDialog.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/dialog/ErrorDetailsDialog.kt @@ -14,6 +14,7 @@ import org.koitharu.kotatsu.core.nav.router import org.koitharu.kotatsu.core.ui.AlertDialogFragment import org.koitharu.kotatsu.core.util.ext.copyToClipboard import org.koitharu.kotatsu.core.util.ext.getCauseUrl +import org.koitharu.kotatsu.core.util.ext.isHttpUrl import org.koitharu.kotatsu.core.util.ext.isReportable import org.koitharu.kotatsu.core.util.ext.report import org.koitharu.kotatsu.core.util.ext.requireSerializable @@ -43,7 +44,7 @@ class ErrorDetailsDialog : AlertDialogFragment(), Vie super.onViewBindingCreated(binding, savedInstanceState) binding.buttonBrowser.setOnClickListener(this) binding.textViewSummary.text = exception.message - val isUrlAvailable = !exception.getCauseUrl().isNullOrEmpty() + val isUrlAvailable = exception.getCauseUrl()?.isHttpUrl() == true binding.buttonBrowser.isVisible = isUrlAvailable binding.textViewBrowser.isVisible = isUrlAvailable binding.textViewDescription.setTextAndVisible( diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsMenuProvider.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsMenuProvider.kt index be7b35654..b9745130c 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsMenuProvider.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsMenuProvider.kt @@ -16,6 +16,7 @@ import org.koitharu.kotatsu.core.nav.AppRouter import org.koitharu.kotatsu.core.nav.router import org.koitharu.kotatsu.core.os.AppShortcutManager import org.koitharu.kotatsu.core.ui.dialog.buildAlertDialog +import org.koitharu.kotatsu.core.util.ext.isHttpUrl class DetailsMenuProvider( private val activity: FragmentActivity, @@ -36,7 +37,7 @@ class DetailsMenuProvider( menu.findItem(R.id.action_share).isVisible = manga != null && AppRouter.isShareSupported(manga) menu.findItem(R.id.action_save).isVisible = manga?.source != null && manga.source != LocalMangaSource menu.findItem(R.id.action_delete).isVisible = manga?.source == LocalMangaSource - menu.findItem(R.id.action_browser).isVisible = manga?.source != LocalMangaSource + menu.findItem(R.id.action_browser).isVisible = manga?.publicUrl?.isHttpUrl() == true menu.findItem(R.id.action_alternatives).isVisible = manga?.source != LocalMangaSource menu.findItem(R.id.action_shortcut).isVisible = ShortcutManagerCompat.isRequestPinShortcutSupported(activity) menu.findItem(R.id.action_scrobbling).isVisible = viewModel.isScrobblingAvailable diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/remotelist/ui/RemoteListFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/remotelist/ui/RemoteListFragment.kt index 382e0035b..53ca229a2 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/remotelist/ui/RemoteListFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/remotelist/ui/RemoteListFragment.kt @@ -18,6 +18,7 @@ import org.koitharu.kotatsu.core.ui.list.ListSelectionController import org.koitharu.kotatsu.core.ui.util.MenuInvalidator import org.koitharu.kotatsu.core.util.ext.addMenuProvider import org.koitharu.kotatsu.core.util.ext.getCauseUrl +import org.koitharu.kotatsu.core.util.ext.isHttpUrl import org.koitharu.kotatsu.core.util.ext.observe import org.koitharu.kotatsu.core.util.ext.observeEvent import org.koitharu.kotatsu.core.util.ext.withArgs @@ -87,15 +88,15 @@ class RemoteListFragment : MangaListFragment(), FilterCoordinator.Owner { } private fun openInBrowser(url: String?) { - if (url.isNullOrEmpty()) { - Snackbar.make(requireViewBinding().recyclerView, R.string.operation_not_supported, Snackbar.LENGTH_SHORT) - .show() - } else { + if (url?.isHttpUrl() == true) { router.openBrowser( url = url, source = viewModel.source, title = viewModel.source.getTitle(requireContext()), ) + } else { + Snackbar.make(requireViewBinding().recyclerView, R.string.operation_not_supported, Snackbar.LENGTH_SHORT) + .show() } }