From b0f39a7d0a6ed5bf04fc8718645ab8ed89605b88 Mon Sep 17 00:00:00 2001 From: Rani Sargees Date: Thu, 7 May 2020 17:54:23 -0400 Subject: [PATCH] add recommendations button to manga info (cherry picked from commit 0d370004e6c78597957284d67f1af80881e17a49) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt # app/src/main/res/layout/manga_info_controller.xml # app/src/main/res/values/strings.xml --- .../source/browse/BrowseSourceController.kt | 36 +++++++++++++++---- .../ui/manga/info/MangaInfoController.kt | 21 ++++++++++- .../ui/manga/info/MangaInfoPresenter.kt | 5 +++ .../res/layout-land/manga_info_controller.xml | 14 ++++++++ .../main/res/layout/manga_info_controller.xml | 12 ++++++- app/src/main/res/values/strings_extra.xml | 3 ++ 6 files changed, 83 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index 08ebde7da..7cb374207 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.browse.source.browse import android.content.res.Configuration import android.os.Bundle +import android.os.Parcelable import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater @@ -49,6 +50,7 @@ import eu.kanade.tachiyomi.util.view.visible import eu.kanade.tachiyomi.widget.AutofitRecyclerView import eu.kanade.tachiyomi.widget.EmptyView import exh.EXHSavedSearch +import kotlinx.android.parcel.Parcelize import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -87,6 +89,11 @@ open class BrowseSourceController(bundle: Bundle) : private val preferences: PreferencesHelper by injectLazy() + private val recommendsConfig: RecommendsConfig? = args.getParcelable(RECOMMENDS_CONFIG) + + // AZ --> + private val mode = if (recommendsConfig == null) Mode.CATALOGUE else Mode.RECOMMENDS + // AZ <-- /** * Adapter containing the list of manga from the catalogue. */ @@ -122,7 +129,10 @@ open class BrowseSourceController(bundle: Bundle) : } override fun getTitle(): String? { - return presenter.source.name + return when (mode) { + Mode.CATALOGUE -> presenter.source.name + Mode.RECOMMENDS -> recommendsConfig!!.origTitle + } } override fun createPresenter(): BrowseSourcePresenter { @@ -151,7 +161,7 @@ open class BrowseSourceController(bundle: Bundle) : } open fun initFilterSheet() { - if (presenter.sourceFilters.isEmpty()) { + if (presenter.sourceFilters.isEmpty() || mode == Mode.RECOMMENDS) { return } @@ -348,6 +358,11 @@ open class BrowseSourceController(bundle: Bundle) : override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.source_browse, menu) + if (mode == Mode.RECOMMENDS) { + menu.findItem(R.id.action_set_filter).isVisible = false + menu.findItem(R.id.action_search).isVisible = false + } + // Initialize search menu val searchItem = menu.findItem(R.id.action_search) val searchView = searchItem.actionView as SearchView @@ -389,10 +404,10 @@ open class BrowseSourceController(bundle: Bundle) : super.onPrepareOptionsMenu(menu) val isHttpSource = presenter.source is HttpSource - menu.findItem(R.id.action_open_in_web_view).isVisible = isHttpSource + menu.findItem(R.id.action_open_in_web_view).isVisible = isHttpSource && mode == Mode.CATALOGUE val isLocalSource = presenter.source is LocalSource - menu.findItem(R.id.action_local_source_help).isVisible = isLocalSource + menu.findItem(R.id.action_local_source_help).isVisible = isLocalSource && mode == Mode.CATALOGUE } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -483,7 +498,7 @@ open class BrowseSourceController(bundle: Bundle) : if (adapter.isEmpty) { val actions = emptyList().toMutableList() - if (presenter.source is LocalSource) { + if (presenter.source is LocalSource && mode == Mode.CATALOGUE) { actions += EmptyView.Action(R.string.local_source_help_guide, View.OnClickListener { openLocalSourceHelpGuide() }) } else { actions += EmptyView.Action(R.string.action_retry, retryAction) @@ -718,11 +733,20 @@ open class BrowseSourceController(bundle: Bundle) : } activity?.toast(activity?.getString(R.string.manga_added_library)) } + @Parcelize + data class RecommendsConfig(val origTitle: String, val origSource: Long) : Parcelable - protected companion object { + enum class Mode { + CATALOGUE, + RECOMMENDS + } + + companion object { const val SOURCE_ID_KEY = "sourceId" const val SEARCH_QUERY_KEY = "searchQuery" const val SMART_SEARCH_CONFIG_KEY = "smartSearchConfig" + + const val RECOMMENDS_CONFIG = "RECOMMENDS_CONFIG" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt index ded4021d0..01b57159d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt @@ -220,9 +220,14 @@ class MangaInfoController(private val fromSource: Boolean = false) : .launchIn(scope) // EXH --> + if (smartSearchConfig == null) { + binding.recommendBtn.visible() + binding.recommendBtn.clicks() + .onEach { openRecommends() } + .launchIn(scope) + } smartSearchConfig?.let { smartSearchConfig -> binding.mergeBtn.visible() - binding.mergeBtn.clicks() .onEach { // Init presenter here to avoid threading issues @@ -269,6 +274,20 @@ class MangaInfoController(private val fromSource: Boolean = false) : } // EXH <-- + // AZ --> + private fun openRecommends() { + val recommendsConfig = BrowseSourceController.RecommendsConfig(presenter.manga.title, presenter.manga.source) + + parentController?.router?.pushController( + BrowseSourceController( + Bundle().apply { + putParcelable(BrowseSourceController.RECOMMENDS_CONFIG, recommendsConfig) + } + ).withFadeTransaction() + ) + } + // AZ <-- + /** * Check if manga is initialized. * If true update view with manga information, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt index f632f0447..41fe8e74f 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt @@ -177,7 +177,12 @@ class MangaInfoPresenter( fun moveMangaToCategory(manga: Manga, category: Category?) { moveMangaToCategories(manga, listOfNotNull(category)) } + /* + suspend fun recommendationView(manga: Manga): Manga { + val title = manga.title + val source = manga.source + }*/ suspend fun smartSearchMerge(manga: Manga, originalMangaId: Long): Manga { val originalManga = db.getManga(originalMangaId).await() ?: throw IllegalArgumentException("Unknown manga ID: $originalMangaId") diff --git a/app/src/main/res/layout-land/manga_info_controller.xml b/app/src/main/res/layout-land/manga_info_controller.xml index f4a97ecac..18325b36a 100644 --- a/app/src/main/res/layout-land/manga_info_controller.xml +++ b/app/src/main/res/layout-land/manga_info_controller.xml @@ -355,6 +355,20 @@ android:visibility="gone" tools:visibility="visible"/> +