From 448db2362f0f3aac78817f24097a5c5f479b47f0 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Thu, 19 May 2022 14:53:08 -0400 Subject: [PATCH] Improvements + fixes to manga details actions modes fix copy/share etc not working on description tapping on title/author will start global search when browsing from a source, in library will show the option of where to search long press on title/author/tags will copy to clipboard --- .../ui/manga/MangaDetailsController.kt | 19 ++++++++++++++----- .../tachiyomi/ui/manga/MangaHeaderHolder.kt | 14 +++++++++++++- .../util/view/ControllerExtensions.kt | 3 +++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt index 300bce7774..6f9bc20857 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt @@ -106,6 +106,7 @@ import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.activityBinding import eu.kanade.tachiyomi.util.view.getText import eu.kanade.tachiyomi.util.view.isControllerVisible +import eu.kanade.tachiyomi.util.view.previousController import eu.kanade.tachiyomi.util.view.requestFilePermissionsSafe import eu.kanade.tachiyomi.util.view.scrollViewWith import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener @@ -1414,8 +1415,14 @@ class MangaDetailsController : override fun showFloatingActionMode(view: TextView, content: String?, searchSource: Boolean) { finishFloatingActionMode() + val previousController = previousController + if (!searchSource && previousController !is LibraryController && previousController !is RecentsController) { + globalSearch(content ?: view.text.toString()) + return + } val actionModeCallback = if (content != null) FloatingMangaDetailsActionModeCallback( content, + showCopy = view is Chip, searchSource = searchSource, ) else FloatingMangaDetailsActionModeCallback(view, searchSource = searchSource) @@ -1427,7 +1434,7 @@ class MangaDetailsController : } override fun customActionMode(view: TextView): android.view.ActionMode.Callback { - return FloatingMangaDetailsActionModeCallback(view, false) + return FloatingMangaDetailsActionModeCallback(view, false, closeMode = false) } override fun showChapterFilter() { @@ -1713,12 +1720,14 @@ class MangaDetailsController : private val textView: TextView?, private val showCopy: Boolean = true, private val searchSource: Boolean = false, + private val closeMode: Boolean = true, ) : android.view.ActionMode.Callback { constructor( text: String, showCopy: Boolean = true, searchSource: Boolean = false, - ) : this(null, showCopy, searchSource) { + closeMode: Boolean = true, + ) : this(null, showCopy, searchSource, closeMode) { customText = text } @@ -1741,9 +1750,8 @@ class MangaDetailsController : val sourceMenuItem = menu?.findItem(R.id.action_source_search) sourceMenuItem?.isVisible = searchSource && presenter.source is CatalogueSource val context = view?.context ?: return false - val prevController = router.backstack.getOrNull(router.backstackSize - 2)?.controller val localItem = menu?.findItem(R.id.action_local_search) ?: return true - localItem.isVisible = when (prevController) { + localItem.isVisible = when (previousController) { is LibraryController, is RecentsController -> true else -> false } @@ -1769,8 +1777,9 @@ class MangaDetailsController : R.id.action_global_search -> globalSearch(text) R.id.action_source_search -> sourceSearch(text) R.id.action_local_search -> localSearch(text) + else -> return false } - if (showCopy) { + if (closeMode) { mode?.finish() } return true diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt index d9bf8745ec..04fbf6846e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt @@ -133,11 +133,23 @@ class MangaHeaderHolder( adapter.delegate.showFloatingActionMode(view as TextView, it) } } + title.setOnLongClickListener { + title.text?.toString()?.toNormalized()?.let { + adapter.delegate.copyToClipboard(it, R.string.title) + } + true + } mangaAuthor.setOnClickListener { view -> mangaAuthor.text?.toString()?.let { adapter.delegate.showFloatingActionMode(view as TextView, it) } } + mangaAuthor.setOnLongClickListener { + mangaAuthor.text?.toString()?.let { + adapter.delegate.copyToClipboard(it, R.string.author) + } + true + } mangaSummary.customSelectionActionModeCallback = adapter.delegate.customActionMode(mangaSummary) applyBlur() mangaCover.setOnClickListener { adapter.delegate.zoomImageFromThumb(coverCard) } @@ -500,7 +512,7 @@ class MangaHeaderHolder( adapter.delegate.showFloatingActionMode(chip, searchSource = true) } chip.setOnLongClickListener { - adapter.delegate.showFloatingActionMode(chip, searchSource = true) + adapter.delegate.copyToClipboard(genreText, genreText) true } this.addView(chip) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt index 63e1e86097..d08f2d9d71 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt @@ -746,6 +746,9 @@ val Controller.fullAppBarHeight: Int? val Controller.isControllerVisible: Boolean get() = router.backstack.lastOrNull()?.controller == this +val Controller.previousController: Controller? + get() = router.backstack.getOrNull(router.backstackSize - 2)?.controller + @MainThread fun Router.canStillGoBack(): Boolean { if (backstack.size > 1) return true