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