Add EH and similar specific tag formatting for global and local search
This commit is contained in:
parent
72681bef83
commit
5641b33bdd
@ -40,13 +40,13 @@ import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
|||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.util.view.setChips
|
|
||||||
import eu.kanade.tachiyomi.util.view.snack
|
import eu.kanade.tachiyomi.util.view.snack
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import eu.kanade.tachiyomi.util.view.visibleIf
|
import eu.kanade.tachiyomi.util.view.visibleIf
|
||||||
import exh.EH_SOURCE_ID
|
import exh.EH_SOURCE_ID
|
||||||
import exh.EXH_SOURCE_ID
|
import exh.EXH_SOURCE_ID
|
||||||
import exh.MERGED_SOURCE_ID
|
import exh.MERGED_SOURCE_ID
|
||||||
|
import exh.util.setChipsExtended
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
@ -395,8 +395,8 @@ class MangaInfoController(private val fromSource: Boolean = false) :
|
|||||||
|
|
||||||
// Update genres list
|
// Update genres list
|
||||||
if (!manga.genre.isNullOrBlank()) {
|
if (!manga.genre.isNullOrBlank()) {
|
||||||
binding.mangaGenresTagsCompactChips.setChips(manga.getGenres(), this::performSearch, this::performGlobalSearch)
|
binding.mangaGenresTagsCompactChips.setChipsExtended(manga.getGenres(), this::performSearch, this::performGlobalSearch, manga.source)
|
||||||
binding.mangaGenresTagsFullChips.setChips(manga.getGenres(), this::performSearch, this::performGlobalSearch)
|
binding.mangaGenresTagsFullChips.setChipsExtended(manga.getGenres(), this::performSearch, this::performGlobalSearch, manga.source)
|
||||||
} else {
|
} else {
|
||||||
binding.mangaGenresTagsWrapper.gone()
|
binding.mangaGenresTagsWrapper.gone()
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,12 @@ import android.view.ViewGroup
|
|||||||
import android.view.WindowInsets
|
import android.view.WindowInsets
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.annotation.Px
|
import androidx.annotation.Px
|
||||||
|
import com.google.android.material.chip.Chip
|
||||||
|
import com.google.android.material.chip.ChipGroup
|
||||||
|
import exh.EH_SOURCE_ID
|
||||||
|
import exh.EXH_SOURCE_ID
|
||||||
|
import exh.HITOMI_SOURCE_ID
|
||||||
|
import exh.NHENTAI_SOURCE_ID
|
||||||
|
|
||||||
inline val View.marginTop: Int
|
inline val View.marginTop: Int
|
||||||
get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.topMargin ?: 0
|
get() = (layoutParams as? ViewGroup.MarginLayoutParams)?.topMargin ?: 0
|
||||||
@ -99,3 +105,41 @@ object RecyclerWindowInsetsListener : View.OnApplyWindowInsetsListener {
|
|||||||
return insets
|
return insets
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces chips in a ChipGroup.
|
||||||
|
*
|
||||||
|
* @param items List of strings that are shown as individual chips.
|
||||||
|
* @param onClick Optional on click listener for each chip.
|
||||||
|
* @param onLongClick Optional long click listener for each chip.
|
||||||
|
* @param sourceId Optional source check to determine if we need special search functions for each chip.
|
||||||
|
*/
|
||||||
|
fun ChipGroup.setChipsExtended(items: List<String>?, onClick: (item: String) -> Unit = {}, onLongClick: (item: String) -> Unit = {}, sourceId: Long = 0L) {
|
||||||
|
removeAllViews()
|
||||||
|
|
||||||
|
items?.forEach { item ->
|
||||||
|
val chip = Chip(context).apply {
|
||||||
|
text = item
|
||||||
|
var search = item
|
||||||
|
if (sourceId == EXH_SOURCE_ID || sourceId == EH_SOURCE_ID || sourceId == NHENTAI_SOURCE_ID || sourceId == HITOMI_SOURCE_ID) {
|
||||||
|
val parsed = parseTag(search)
|
||||||
|
search = wrapTag(parsed.first, parsed.second.substringBefore('|').trim())
|
||||||
|
}
|
||||||
|
setOnClickListener { onClick(search) }
|
||||||
|
setOnLongClickListener {
|
||||||
|
onLongClick(search)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addView(chip)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun parseTag(tag: String) = tag.substringBefore(':').trim() to tag.substringAfter(':').trim()
|
||||||
|
|
||||||
|
private fun wrapTag(namespace: String, tag: String) = if (tag.contains(' ')) {
|
||||||
|
"$namespace:\"$tag$\""
|
||||||
|
} else {
|
||||||
|
"$namespace:$tag$"
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user