Global Search click title to search in Source (#3265)

* Global Search click to search in source

* Add requested changes
This commit is contained in:
jobobby04 2020-06-04 22:38:42 -04:00 committed by GitHub
parent 3bc07b4753
commit 0fdb19c07d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 4 deletions

View file

@ -67,9 +67,13 @@ open class BrowseSourceController(bundle: Bundle) :
FlexibleAdapter.EndlessScrollListener,
ChangeMangaCategoriesDialog.Listener {
constructor(source: CatalogueSource) : this(
constructor(source: CatalogueSource, searchQuery: String? = null) : this(
Bundle().apply {
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 {
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 {
@ -604,5 +608,6 @@ open class BrowseSourceController(bundle: Bundle) :
protected companion object {
const val SOURCE_ID_KEY = "sourceId"
const val SEARCH_QUERY_KEY = "searchQuery"
}
}

View file

@ -44,6 +44,7 @@ import uy.kohesive.injekt.api.get
*/
open class BrowseSourcePresenter(
private val sourceId: Long,
private val searchQuery: String? = null,
private val sourceManager: SourceManager = Injekt.get(),
private val db: DatabaseHelper = Injekt.get(),
private val prefs: PreferencesHelper = Injekt.get(),
@ -58,7 +59,7 @@ open class BrowseSourcePresenter(
/**
* Query from the view.
*/
var query = ""
var query = searchQuery ?: ""
private set
/**

View file

@ -5,6 +5,7 @@ import android.os.Parcelable
import android.util.SparseArray
import androidx.recyclerview.widget.RecyclerView
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.source.CatalogueSource
/**
* Adapter that holds the search cards.
@ -14,6 +15,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
class GlobalSearchAdapter(val controller: GlobalSearchController) :
FlexibleAdapter<GlobalSearchItem>(null, controller, true) {
val titleClickListener: OnTitleClickListener = controller
/**
* 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 {
const val HOLDER_BUNDLE_KEY = "holder_bundle"
}

View file

@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.databinding.GlobalSearchControllerBinding
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
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 kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.launchIn
@ -31,7 +32,8 @@ open class GlobalSearchController(
protected val initialQuery: String? = null,
protected val extensionFilter: String? = null
) : NucleusController<GlobalSearchControllerBinding, GlobalSearchPresenter>(),
GlobalSearchCardAdapter.OnMangaClickListener {
GlobalSearchCardAdapter.OnMangaClickListener,
GlobalSearchAdapter.OnTitleClickListener {
/**
* Adapter containing search results grouped by lang.
@ -190,4 +192,12 @@ open class GlobalSearchController(
fun onMangaInitialized(source: CatalogueSource, manga: 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())
}
}

View file

@ -31,6 +31,12 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
// Set layout horizontal.
recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
recycler.adapter = mangaAdapter
title.setOnClickListener {
adapter.getItem(bindingAdapterPosition)?.let {
adapter.titleClickListener.onTitleClick(it.source)
}
}
}
/**