diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt b/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt index 76ec794db3..681cf126f4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt @@ -38,6 +38,10 @@ interface SManga : Serializable { val originalStatus: Int get() = (this as? MangaImpl)?.ogStatus ?: status + val hasSameAuthorAndArtist: Boolean + get() = author == artist || artist.isNullOrBlank() || + author?.contains(artist ?: "", true) == true + fun copyFrom(other: SManga) { if (other.author != null) { author = other.originalAuthor 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 616d3c9d7e..290082ede7 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 @@ -1488,7 +1488,11 @@ class MangaDetailsController : override fun showFloatingActionMode(view: TextView, content: String?, isTag: Boolean) { finishFloatingActionMode() val previousController = previousController - if (!isTag && previousController !is LibraryController && previousController !is RecentsController) { + val hasDifferentAuthors = view.id == R.id.manga_author && + manga?.hasSameAuthorAndArtist == false && manga?.author != null + val isInSource = !isTag && previousController !is LibraryController && + previousController !is RecentsController + if (!hasDifferentAuthors && isInSource) { globalSearch(content ?: view.text.toString()) return } @@ -1501,6 +1505,13 @@ class MangaDetailsController : } else { FloatingMangaDetailsActionModeCallback(view, isTag = isTag) } + if (hasDifferentAuthors) { + actionModeCallback.authorText = manga?.author + actionModeCallback.artistText = manga?.artist + if (isInSource) { + actionModeCallback.isGlobalSearch = true + } + } if (view is Chip) { view.isActivated = true } @@ -1821,7 +1832,10 @@ class MangaDetailsController : customText = text } - var customText: String? = null + private var customText: String? = null + var authorText: String? = null + var artistText: String? = null + var isGlobalSearch: Boolean? = null val text: String get() { return customText ?: if (textView?.isTextSelectable == true) { @@ -1845,6 +1859,14 @@ class MangaDetailsController : val library = context.getString(R.string.library).lowercase(Locale.getDefault()) localItem.title = context.getString(R.string.search_, library) sourceMenuItem?.title = context.getString(R.string.search_, presenter.source.name) + menu.findItem(R.id.action_search_author)?.title = context.getString( + R.string.search_, + context.getString(R.string.author).lowercase(Locale.getDefault()), + ) + menu.findItem(R.id.action_search_artist)?.title = context.getString( + R.string.search_, + context.getString(R.string.artist).lowercase(Locale.getDefault()), + ) if (isTag) { if (previousController is BrowseSourceController) { menu.removeItem(R.id.action_source_search) @@ -1866,9 +1888,34 @@ class MangaDetailsController : ): Boolean { when (item?.itemId) { R.id.action_copy -> copyToClipboard(text, null) - R.id.action_global_search -> globalSearch(text) R.id.action_source_search -> sourceSearch(text) - R.id.action_local_search -> localSearch(text, isTag) + R.id.action_global_search, R.id.action_local_search -> { + if (authorText != null) { + mode?.menu?.findItem(R.id.action_copy)?.isVisible = false + mode?.menu?.findItem(R.id.action_local_search)?.isVisible = false + mode?.menu?.findItem(R.id.action_source_search)?.isVisible = false + mode?.menu?.findItem(R.id.action_global_search)?.isVisible = false + mode?.menu?.findItem(R.id.action_search_author)?.isVisible = true + mode?.menu?.findItem(R.id.action_search_artist)?.isVisible = true + isGlobalSearch = item.itemId == R.id.action_global_search + mode?.invalidate() + return true + } else if (item.itemId == R.id.action_global_search) { + globalSearch(text) + } else { + localSearch(text, isTag) + } + } + R.id.action_search_artist, R.id.action_search_author -> { + val subText = + (if (item.itemId == R.id.action_search_author) authorText else artistText) + ?: return false + if (isGlobalSearch == true) { + globalSearch(subText) + } else { + localSearch(subText, isTag) + } + } else -> return false } if (closeMode) { 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 d8ce40ce62..847b14ba2d 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 @@ -309,9 +309,7 @@ class MangaHeaderHolder( setGenreTags(binding, manga) - if (manga.author == manga.artist || manga.artist.isNullOrBlank() || - manga.author?.contains(manga.artist ?: "", true) == true - ) { + if (manga.hasSameAuthorAndArtist) { binding.mangaAuthor.text = manga.author?.trim() } else { binding.mangaAuthor.text = listOfNotNull(manga.author?.trim(), manga.artist?.trim()).joinToString(", ") diff --git a/app/src/main/res/menu/manga_details_tag.xml b/app/src/main/res/menu/manga_details_tag.xml index 58929dc322..33faa869e1 100644 --- a/app/src/main/res/menu/manga_details_tag.xml +++ b/app/src/main/res/menu/manga_details_tag.xml @@ -4,7 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> @@ -18,7 +18,7 @@ diff --git a/app/src/main/res/menu/manga_details_title.xml b/app/src/main/res/menu/manga_details_title.xml index b3149923f4..386d88e92f 100644 --- a/app/src/main/res/menu/manga_details_title.xml +++ b/app/src/main/res/menu/manga_details_title.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + + + + \ No newline at end of file