Global Search click title to search in Source (#3265)
* Global Search click to search in source * Add requested changes
This commit is contained in:
parent
3bc07b4753
commit
0fdb19c07d
@ -67,9 +67,13 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
FlexibleAdapter.EndlessScrollListener,
|
FlexibleAdapter.EndlessScrollListener,
|
||||||
ChangeMangaCategoriesDialog.Listener {
|
ChangeMangaCategoriesDialog.Listener {
|
||||||
|
|
||||||
constructor(source: CatalogueSource) : this(
|
constructor(source: CatalogueSource, searchQuery: String? = null) : this(
|
||||||
Bundle().apply {
|
Bundle().apply {
|
||||||
putLong(SOURCE_ID_KEY, source.id)
|
putLong(SOURCE_ID_KEY, source.id)
|
||||||
|
|
||||||
|
if (searchQuery != null) {
|
||||||
|
putString(SEARCH_QUERY_KEY, searchQuery)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -114,7 +118,7 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun createPresenter(): BrowseSourcePresenter {
|
override fun createPresenter(): BrowseSourcePresenter {
|
||||||
return BrowseSourcePresenter(args.getLong(SOURCE_ID_KEY))
|
return BrowseSourcePresenter(args.getLong(SOURCE_ID_KEY), args.getString(SEARCH_QUERY_KEY))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
||||||
@ -604,5 +608,6 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
|
|
||||||
protected companion object {
|
protected companion object {
|
||||||
const val SOURCE_ID_KEY = "sourceId"
|
const val SOURCE_ID_KEY = "sourceId"
|
||||||
|
const val SEARCH_QUERY_KEY = "searchQuery"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ import uy.kohesive.injekt.api.get
|
|||||||
*/
|
*/
|
||||||
open class BrowseSourcePresenter(
|
open class BrowseSourcePresenter(
|
||||||
private val sourceId: Long,
|
private val sourceId: Long,
|
||||||
|
private val searchQuery: String? = null,
|
||||||
private val sourceManager: SourceManager = Injekt.get(),
|
private val sourceManager: SourceManager = Injekt.get(),
|
||||||
private val db: DatabaseHelper = Injekt.get(),
|
private val db: DatabaseHelper = Injekt.get(),
|
||||||
private val prefs: PreferencesHelper = Injekt.get(),
|
private val prefs: PreferencesHelper = Injekt.get(),
|
||||||
@ -58,7 +59,7 @@ open class BrowseSourcePresenter(
|
|||||||
/**
|
/**
|
||||||
* Query from the view.
|
* Query from the view.
|
||||||
*/
|
*/
|
||||||
var query = ""
|
var query = searchQuery ?: ""
|
||||||
private set
|
private set
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,6 +5,7 @@ import android.os.Parcelable
|
|||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter that holds the search cards.
|
* Adapter that holds the search cards.
|
||||||
@ -14,6 +15,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
class GlobalSearchAdapter(val controller: GlobalSearchController) :
|
class GlobalSearchAdapter(val controller: GlobalSearchController) :
|
||||||
FlexibleAdapter<GlobalSearchItem>(null, controller, true) {
|
FlexibleAdapter<GlobalSearchItem>(null, controller, true) {
|
||||||
|
|
||||||
|
val titleClickListener: OnTitleClickListener = controller
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bundle where the view state of the holders is saved.
|
* Bundle where the view state of the holders is saved.
|
||||||
*/
|
*/
|
||||||
@ -68,6 +71,10 @@ class GlobalSearchAdapter(val controller: GlobalSearchController) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface OnTitleClickListener {
|
||||||
|
fun onTitleClick(source: CatalogueSource)
|
||||||
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
const val HOLDER_BUNDLE_KEY = "holder_bundle"
|
const val HOLDER_BUNDLE_KEY = "holder_bundle"
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.databinding.GlobalSearchControllerBinding
|
|||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import kotlinx.coroutines.flow.filterIsInstance
|
import kotlinx.coroutines.flow.filterIsInstance
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -31,7 +32,8 @@ open class GlobalSearchController(
|
|||||||
protected val initialQuery: String? = null,
|
protected val initialQuery: String? = null,
|
||||||
protected val extensionFilter: String? = null
|
protected val extensionFilter: String? = null
|
||||||
) : NucleusController<GlobalSearchControllerBinding, GlobalSearchPresenter>(),
|
) : NucleusController<GlobalSearchControllerBinding, GlobalSearchPresenter>(),
|
||||||
GlobalSearchCardAdapter.OnMangaClickListener {
|
GlobalSearchCardAdapter.OnMangaClickListener,
|
||||||
|
GlobalSearchAdapter.OnTitleClickListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter containing search results grouped by lang.
|
* Adapter containing search results grouped by lang.
|
||||||
@ -190,4 +192,12 @@ open class GlobalSearchController(
|
|||||||
fun onMangaInitialized(source: CatalogueSource, manga: Manga) {
|
fun onMangaInitialized(source: CatalogueSource, manga: Manga) {
|
||||||
getHolder(source)?.setImage(manga)
|
getHolder(source)?.setImage(manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a catalogue with the given search.
|
||||||
|
*/
|
||||||
|
override fun onTitleClick(source: CatalogueSource) {
|
||||||
|
presenter.preferences.lastUsedCatalogueSource().set(source.id)
|
||||||
|
router.pushController(BrowseSourceController(source, presenter.query).withFadeTransaction())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,12 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
|||||||
// Set layout horizontal.
|
// Set layout horizontal.
|
||||||
recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
||||||
recycler.adapter = mangaAdapter
|
recycler.adapter = mangaAdapter
|
||||||
|
|
||||||
|
title.setOnClickListener {
|
||||||
|
adapter.getItem(bindingAdapterPosition)?.let {
|
||||||
|
adapter.titleClickListener.onTitleClick(it.source)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user