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, 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"
} }
} }

View File

@ -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
/** /**

View File

@ -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"
} }

View File

@ -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())
}
} }

View File

@ -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)
}
}
} }
/** /**