Эх сурвалжийг харах

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

* Global Search click to search in source

* Add requested changes
jobobby04 4 жил өмнө
parent
commit
0fdb19c07d

+ 7 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt

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

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt

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

+ 7 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchAdapter.kt

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

+ 11 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt

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

+ 6 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchHolder.kt

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