mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 14:01:52 +01:00
Renaming a bunch of files as Source instead of Catalogue
This commit is contained in:
parent
83990793a2
commit
5871572442
@ -78,7 +78,7 @@ DON'T: https://github.com/inorichi/tachiyomi/issues/75
|
|||||||
* Write a detailed issue, explaning what it should do or how. Avoid writing just "like X app does"
|
* Write a detailed issue, explaning what it should do or how. Avoid writing just "like X app does"
|
||||||
* Include screenshot (if needed)
|
* Include screenshot (if needed)
|
||||||
|
|
||||||
Catalogue requests should be created at https://github.com/inorichi/tachiyomi-extensions, they do not belong in this repository.
|
Source requests should be created at https://github.com/inorichi/tachiyomi-extensions, they do not belong in this repository.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
@ -115,7 +115,7 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun lastVersionCode() = rxPrefs.getInteger("last_version_code", 0)
|
fun lastVersionCode() = rxPrefs.getInteger("last_version_code", 0)
|
||||||
|
|
||||||
fun catalogueAsList() = rxPrefs.getBoolean(Keys.catalogueAsList, false)
|
fun browseAsList() = rxPrefs.getBoolean(Keys.catalogueAsList, false)
|
||||||
|
|
||||||
fun enabledLanguages() = rxPrefs.getStringSet(Keys.enabledLanguages, setOf("en", Locale.getDefault().language))
|
fun enabledLanguages() = rxPrefs.getStringSet(Keys.enabledLanguages, setOf("en", Locale.getDefault().language))
|
||||||
|
|
||||||
@ -205,7 +205,7 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun collapsedCategories() = rxPrefs.getStringSet("collapsed_categories", mutableSetOf())
|
fun collapsedCategories() = rxPrefs.getStringSet("collapsed_categories", mutableSetOf())
|
||||||
|
|
||||||
fun hiddenCatalogues() = rxPrefs.getStringSet("hidden_catalogues", mutableSetOf())
|
fun hiddenSources() = rxPrefs.getStringSet("hidden_catalogues", mutableSetOf())
|
||||||
|
|
||||||
fun pinnedCatalogues() = rxPrefs.getStringSet("pinned_catalogues", emptySet())
|
fun pinnedCatalogues() = rxPrefs.getStringSet("pinned_catalogues", emptySet())
|
||||||
|
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.util.AttributeSet
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
|
||||||
import eu.kanade.tachiyomi.R
|
|
||||||
import eu.kanade.tachiyomi.util.view.inflate
|
|
||||||
import eu.kanade.tachiyomi.widget.SimpleNavigationView
|
|
||||||
|
|
||||||
class CatalogueNavigationView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
|
||||||
SimpleNavigationView(context, attrs) {
|
|
||||||
|
|
||||||
val adapter: FlexibleAdapter<IFlexible<*>> = FlexibleAdapter<IFlexible<*>>(null)
|
|
||||||
.setDisplayHeadersAtStartUp(true)
|
|
||||||
.setStickyHeaders(true)
|
|
||||||
|
|
||||||
var onSearchClicked = {}
|
|
||||||
|
|
||||||
var onResetClicked = {}
|
|
||||||
|
|
||||||
init {
|
|
||||||
recycler.adapter = adapter
|
|
||||||
recycler.setHasFixedSize(true)
|
|
||||||
val view = inflate(R.layout.catalogue_filter_sheet)
|
|
||||||
((view as ViewGroup).getChildAt(1) as ViewGroup).addView(recycler)
|
|
||||||
addView(view)
|
|
||||||
// title.text = context.getString(R.string.source_search_options)
|
|
||||||
/*search_btn.setOnClickListener { onSearchClicked() }
|
|
||||||
reset_btn.setOnClickListener { onResetClicked() }
|
|
||||||
view.search_layout.setOnApplyWindowInsetsListener { v, insets ->
|
|
||||||
view.updatePaddingRelative(bottom = insets.systemWindowInsetBottom)
|
|
||||||
insets
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setFilters(items: List<IFlexible<*>>) {
|
|
||||||
adapter.updateDataSet(items)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
|
||||||
|
|
||||||
class NoResultsException : Exception()
|
|
@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.CatalogueController
|
import eu.kanade.tachiyomi.ui.source.SourceController
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
||||||
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
|
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
|
||||||
@ -44,9 +44,9 @@ ExtensionAdapter.OnButtonClickListener,
|
|||||||
|
|
||||||
private var extensions: List<ExtensionItem> = emptyList()
|
private var extensions: List<ExtensionItem> = emptyList()
|
||||||
|
|
||||||
lateinit var controller: CatalogueController
|
lateinit var controller: SourceController
|
||||||
|
|
||||||
fun onCreate(controller: CatalogueController) {
|
fun onCreate(controller: SourceController) {
|
||||||
// Initialize adapter, scroll listener and recycler views
|
// Initialize adapter, scroll listener and recycler views
|
||||||
autoCheckItem = AutoCheckItem(presenter.getAutoCheckPref())
|
autoCheckItem = AutoCheckItem(presenter.getAutoCheckPref())
|
||||||
adapter = ExtensionAdapter(this)
|
adapter = ExtensionAdapter(this)
|
||||||
|
@ -9,7 +9,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import kotlinx.android.synthetic.main.catalogue_grid_item.*
|
import kotlinx.android.synthetic.main.manga_grid_item.*
|
||||||
import kotlinx.android.synthetic.main.unread_download_badge.*
|
import kotlinx.android.synthetic.main.unread_download_badge.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.source.SourceManager
|
|||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||||
import kotlinx.android.synthetic.main.catalogue_grid_item.view.*
|
import kotlinx.android.synthetic.main.manga_grid_item.view.*
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class LibraryItem(
|
class LibraryItem(
|
||||||
@ -39,9 +39,9 @@ class LibraryItem(
|
|||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return if (libraryLayout.getOrDefault() == 0 || manga.isBlank())
|
return if (libraryLayout.getOrDefault() == 0 || manga.isBlank())
|
||||||
R.layout.catalogue_list_item
|
R.layout.manga_list_item
|
||||||
else
|
else
|
||||||
R.layout.catalogue_grid_item
|
R.layout.manga_grid_item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): LibraryHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): LibraryHolder {
|
||||||
|
@ -12,8 +12,8 @@ import eu.kanade.tachiyomi.util.system.dpToPx
|
|||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import kotlinx.android.synthetic.main.catalogue_list_item.*
|
import kotlinx.android.synthetic.main.manga_list_item.*
|
||||||
import kotlinx.android.synthetic.main.catalogue_list_item.view.*
|
import kotlinx.android.synthetic.main.manga_list_item.view.*
|
||||||
import kotlinx.android.synthetic.main.unread_download_badge.*
|
import kotlinx.android.synthetic.main.unread_download_badge.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,8 +45,6 @@ import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.CatalogueController
|
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
|
|
||||||
import eu.kanade.tachiyomi.ui.library.LibraryController
|
import eu.kanade.tachiyomi.ui.library.LibraryController
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
||||||
import eu.kanade.tachiyomi.ui.recent_updates.RecentChaptersController
|
import eu.kanade.tachiyomi.ui.recent_updates.RecentChaptersController
|
||||||
@ -55,6 +53,8 @@ import eu.kanade.tachiyomi.ui.recents.RecentsController
|
|||||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||||
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
||||||
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
|
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.SourceController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchController
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.system.launchUI
|
import eu.kanade.tachiyomi.util.system.launchUI
|
||||||
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
|
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
|
||||||
@ -152,7 +152,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
|
|||||||
setRoot(when (id) {
|
setRoot(when (id) {
|
||||||
R.id.nav_library -> LibraryController()
|
R.id.nav_library -> LibraryController()
|
||||||
R.id.nav_recents -> RecentsController()
|
R.id.nav_recents -> RecentsController()
|
||||||
else -> CatalogueController()
|
else -> SourceController()
|
||||||
}, id)
|
}, id)
|
||||||
} else if (currentRoot.tag()?.toIntOrNull() == id) {
|
} else if (currentRoot.tag()?.toIntOrNull() == id) {
|
||||||
if (router.backstackSize == 1) {
|
if (router.backstackSize == 1) {
|
||||||
@ -368,13 +368,13 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
|
|||||||
}
|
}
|
||||||
router.pushController(controller.withFadeTransaction())
|
router.pushController(controller.withFadeTransaction())
|
||||||
}
|
}
|
||||||
SHORTCUT_CATALOGUES -> bottom_nav.selectedItemId = R.id.nav_browse
|
SHORTCUT_BROWSE -> bottom_nav.selectedItemId = R.id.nav_browse
|
||||||
SHORTCUT_EXTENSIONS -> {
|
SHORTCUT_EXTENSIONS -> {
|
||||||
bottom_nav.selectedItemId = R.id.nav_browse
|
bottom_nav.selectedItemId = R.id.nav_browse
|
||||||
router.popToRoot()
|
router.popToRoot()
|
||||||
bottom_nav.post {
|
bottom_nav.post {
|
||||||
val controller =
|
val controller =
|
||||||
router.backstack.firstOrNull()?.controller() as? CatalogueController
|
router.backstack.firstOrNull()?.controller() as? SourceController
|
||||||
controller?.showSheet()
|
controller?.showSheet()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -402,7 +402,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
|
|||||||
if (router.backstackSize > 1) {
|
if (router.backstackSize > 1) {
|
||||||
router.popToRoot()
|
router.popToRoot()
|
||||||
}
|
}
|
||||||
router.pushController(CatalogueSearchController(query).withFadeTransaction())
|
router.pushController(SourceSearchController(query).withFadeTransaction())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
INTENT_SEARCH -> {
|
INTENT_SEARCH -> {
|
||||||
@ -413,7 +413,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
|
|||||||
router.popToRoot()
|
router.popToRoot()
|
||||||
}
|
}
|
||||||
router.pushController(
|
router.pushController(
|
||||||
CatalogueSearchController(
|
SourceSearchController(
|
||||||
query,
|
query,
|
||||||
filter
|
filter
|
||||||
).withFadeTransaction()
|
).withFadeTransaction()
|
||||||
@ -588,7 +588,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
|
|||||||
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
||||||
const val SHORTCUT_RECENTLY_UPDATED = "eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED"
|
const val SHORTCUT_RECENTLY_UPDATED = "eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED"
|
||||||
const val SHORTCUT_RECENTLY_READ = "eu.kanade.tachiyomi.SHOW_RECENTLY_READ"
|
const val SHORTCUT_RECENTLY_READ = "eu.kanade.tachiyomi.SHOW_RECENTLY_READ"
|
||||||
const val SHORTCUT_CATALOGUES = "eu.kanade.tachiyomi.SHOW_CATALOGUES"
|
const val SHORTCUT_BROWSE = "eu.kanade.tachiyomi.SHOW_BROWSE"
|
||||||
const val SHORTCUT_DOWNLOADS = "eu.kanade.tachiyomi.SHOW_DOWNLOADS"
|
const val SHORTCUT_DOWNLOADS = "eu.kanade.tachiyomi.SHOW_DOWNLOADS"
|
||||||
const val SHORTCUT_MANGA = "eu.kanade.tachiyomi.SHOW_MANGA"
|
const val SHORTCUT_MANGA = "eu.kanade.tachiyomi.SHOW_MANGA"
|
||||||
const val SHORTCUT_EXTENSIONS = "eu.kanade.tachiyomi.EXTENSIONS"
|
const val SHORTCUT_EXTENSIONS = "eu.kanade.tachiyomi.EXTENSIONS"
|
||||||
|
@ -7,7 +7,7 @@ import com.bluelinelabs.conductor.Controller
|
|||||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchController
|
||||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import kotlinx.android.synthetic.main.main_activity.*
|
import kotlinx.android.synthetic.main.main_activity.*
|
||||||
@ -67,7 +67,7 @@ class SearchActivity : MainActivity() {
|
|||||||
// Get the search query provided in extras, and if not null, perform a global search with it.
|
// Get the search query provided in extras, and if not null, perform a global search with it.
|
||||||
val query = intent.getStringExtra(SearchManager.QUERY)
|
val query = intent.getStringExtra(SearchManager.QUERY)
|
||||||
if (query != null && query.isNotEmpty()) {
|
if (query != null && query.isNotEmpty()) {
|
||||||
router.replaceTopController(CatalogueSearchController(query).withFadeTransaction())
|
router.replaceTopController(SourceSearchController(query).withFadeTransaction())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
INTENT_SEARCH -> {
|
INTENT_SEARCH -> {
|
||||||
@ -77,7 +77,7 @@ class SearchActivity : MainActivity() {
|
|||||||
if (router.backstackSize > 1) {
|
if (router.backstackSize > 1) {
|
||||||
router.popToRoot()
|
router.popToRoot()
|
||||||
}
|
}
|
||||||
router.replaceTopController(CatalogueSearchController(query, filter).withFadeTransaction())
|
router.replaceTopController(SourceSearchController(query, filter).withFadeTransaction())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> return false
|
else -> return false
|
||||||
|
@ -83,7 +83,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.CatalogueController
|
import eu.kanade.tachiyomi.ui.source.SourceController
|
||||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
||||||
import eu.kanade.tachiyomi.ui.library.LibraryController
|
import eu.kanade.tachiyomi.ui.library.LibraryController
|
||||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||||
@ -136,7 +136,7 @@ class MangaDetailsController : BaseController,
|
|||||||
constructor(
|
constructor(
|
||||||
manga: Manga?,
|
manga: Manga?,
|
||||||
fromCatalogue: Boolean = false,
|
fromCatalogue: Boolean = false,
|
||||||
smartSearchConfig: CatalogueController.SmartSearchConfig? = null,
|
smartSearchConfig: SourceController.SmartSearchConfig? = null,
|
||||||
update: Boolean = false
|
update: Boolean = false
|
||||||
) : super(Bundle().apply {
|
) : super(Bundle().apply {
|
||||||
putLong(MANGA_EXTRA, manga?.id ?: 0)
|
putLong(MANGA_EXTRA, manga?.id ?: 0)
|
||||||
|
@ -7,7 +7,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.catalogue_list_item.*
|
import kotlinx.android.synthetic.main.manga_list_item.*
|
||||||
|
|
||||||
class MangaHolder(
|
class MangaHolder(
|
||||||
private val view: View,
|
private val view: View,
|
||||||
|
@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
class MangaItem(val manga: Manga) : AbstractFlexibleItem<MangaHolder>() {
|
class MangaItem(val manga: Manga) : AbstractFlexibleItem<MangaHolder>() {
|
||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_list_item
|
return R.layout.manga_list_item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): MangaHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): MangaHolder {
|
||||||
|
@ -16,15 +16,15 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault
|
|||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchController
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchPresenter
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchPresenter
|
||||||
import eu.kanade.tachiyomi.ui.main.BottomNavBarInterface
|
import eu.kanade.tachiyomi.ui.main.BottomNavBarInterface
|
||||||
import eu.kanade.tachiyomi.ui.migration.manga.process.MigrationListController
|
import eu.kanade.tachiyomi.ui.migration.manga.process.MigrationListController
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class SearchController(
|
class SearchController(
|
||||||
private var manga: Manga? = null
|
private var manga: Manga? = null
|
||||||
) : CatalogueSearchController(manga?.title), BottomNavBarInterface {
|
) : SourceSearchController(manga?.title), BottomNavBarInterface {
|
||||||
|
|
||||||
private var newManga: Manga? = null
|
private var newManga: Manga? = null
|
||||||
private var progress = 1
|
private var progress = 1
|
||||||
@ -44,7 +44,7 @@ class SearchController(
|
|||||||
return super.getTitle()
|
return super.getTitle()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPresenter(): CatalogueSearchPresenter {
|
override fun createPresenter(): SourceSearchPresenter {
|
||||||
return SearchPresenter(initialQuery, manga!!)
|
return SearchPresenter(initialQuery, manga!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,14 +2,14 @@ package eu.kanade.tachiyomi.ui.migration
|
|||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchCardItem
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchCardItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchItem
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchPresenter
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchPresenter
|
||||||
|
|
||||||
class SearchPresenter(
|
class SearchPresenter(
|
||||||
initialQuery: String? = "",
|
initialQuery: String? = "",
|
||||||
private val manga: Manga
|
private val manga: Manga
|
||||||
) : CatalogueSearchPresenter(initialQuery) {
|
) : SourceSearchPresenter(initialQuery) {
|
||||||
|
|
||||||
override fun getEnabledSources(): List<CatalogueSource> {
|
override fun getEnabledSources(): List<CatalogueSource> {
|
||||||
// Put the source of the selected manga at the top
|
// Put the source of the selected manga at the top
|
||||||
@ -17,8 +17,8 @@ class SearchPresenter(
|
|||||||
.sortedByDescending { it.id == manga.source }
|
.sortedByDescending { it.id == manga.source }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createCatalogueSearchItem(source: CatalogueSource, results: List<CatalogueSearchCardItem>?): CatalogueSearchItem {
|
override fun createCatalogueSearchItem(source: CatalogueSource, results: List<SourceSearchCardItem>?): SourceSearchItem {
|
||||||
// Set the catalogue search item as highlighted if the source matches that of the selected manga
|
// Set the catalogue search item as highlighted if the source matches that of the selected manga
|
||||||
return CatalogueSearchItem(source, results, source.id == manga.source)
|
return SourceSearchItem(source, results, source.id == manga.source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import eu.davidea.flexibleadapter.items.AbstractHeaderItem
|
|||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card.*
|
import kotlinx.android.synthetic.main.source_header_item.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item that contains the selection header.
|
* Item that contains the selection header.
|
||||||
@ -18,7 +18,7 @@ class SelectionHeader : AbstractHeaderItem<SelectionHeader.Holder>() {
|
|||||||
* Returns the layout resource of this item.
|
* Returns the layout resource of this item.
|
||||||
*/
|
*/
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_main_controller_card
|
return R.layout.source_header_item
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,9 +6,9 @@ import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|||||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||||
import eu.kanade.tachiyomi.util.view.roundTextIcon
|
import eu.kanade.tachiyomi.util.view.roundTextIcon
|
||||||
import io.github.mthli.slice.Slice
|
import io.github.mthli.slice.Slice
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card_item.card
|
import kotlinx.android.synthetic.main.source_item.card
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card_item.edit_button
|
import kotlinx.android.synthetic.main.source_item.edit_button
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card_item.title
|
import kotlinx.android.synthetic.main.source_item.title
|
||||||
import kotlinx.android.synthetic.main.migration_card_item.*
|
import kotlinx.android.synthetic.main.migration_card_item.*
|
||||||
|
|
||||||
class SourceHolder(view: View, override val adapter: SourceAdapter) :
|
class SourceHolder(view: View, override val adapter: SourceAdapter) :
|
||||||
|
@ -145,7 +145,7 @@ class PreMigrationController(bundle: Bundle? = null) : BaseController(bundle), F
|
|||||||
|
|
||||||
fun isEnabled(id: String): Boolean {
|
fun isEnabled(id: String): Boolean {
|
||||||
val sourcesSaved = prefs.migrationSources().getOrDefault()
|
val sourcesSaved = prefs.migrationSources().getOrDefault()
|
||||||
val hiddenCatalogues = prefs.hiddenCatalogues().getOrDefault()
|
val hiddenCatalogues = prefs.hiddenSources().getOrDefault()
|
||||||
return if (sourcesSaved.isEmpty()) id !in hiddenCatalogues
|
return if (sourcesSaved.isEmpty()) id !in hiddenCatalogues
|
||||||
else sourcesSaved.split("/").contains(id)
|
else sourcesSaved.split("/").contains(id)
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.util.view.invisible
|
|||||||
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.catalogue_grid_item.view.*
|
import kotlinx.android.synthetic.main.manga_grid_item.view.*
|
||||||
import kotlinx.android.synthetic.main.migration_process_item.*
|
import kotlinx.android.synthetic.main.migration_process_item.*
|
||||||
import kotlinx.android.synthetic.main.unread_download_badge.view.*
|
import kotlinx.android.synthetic.main.unread_download_badge.view.*
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -17,7 +17,7 @@ import eu.kanade.tachiyomi.data.database.models.History
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.ProgressItem
|
import eu.kanade.tachiyomi.ui.source.browse.ProgressItem
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||||
import eu.kanade.tachiyomi.util.system.launchUI
|
import eu.kanade.tachiyomi.util.system.launchUI
|
||||||
|
@ -85,7 +85,7 @@ class SettingsSourcesController : SettingsController() {
|
|||||||
* @param group the language category.
|
* @param group the language category.
|
||||||
*/
|
*/
|
||||||
private fun addLanguageSources(group: PreferenceGroup, sources: List<HttpSource>) {
|
private fun addLanguageSources(group: PreferenceGroup, sources: List<HttpSource>) {
|
||||||
val hiddenCatalogues = preferences.hiddenCatalogues().getOrDefault()
|
val hiddenCatalogues = preferences.hiddenSources().getOrDefault()
|
||||||
|
|
||||||
val selectAllPreference = CheckBoxPreference(group.context).apply {
|
val selectAllPreference = CheckBoxPreference(group.context).apply {
|
||||||
|
|
||||||
@ -97,12 +97,12 @@ class SettingsSourcesController : SettingsController() {
|
|||||||
|
|
||||||
onChange { newValue ->
|
onChange { newValue ->
|
||||||
val checked = newValue as Boolean
|
val checked = newValue as Boolean
|
||||||
val current = preferences.hiddenCatalogues().get() ?: mutableSetOf()
|
val current = preferences.hiddenSources().get() ?: mutableSetOf()
|
||||||
if (checked)
|
if (checked)
|
||||||
current.removeAll(sources.map { it.id.toString() })
|
current.removeAll(sources.map { it.id.toString() })
|
||||||
else
|
else
|
||||||
current.addAll(sources.map { it.id.toString() })
|
current.addAll(sources.map { it.id.toString() })
|
||||||
preferences.hiddenCatalogues().set(current)
|
preferences.hiddenSources().set(current)
|
||||||
group.removeAll()
|
group.removeAll()
|
||||||
addLanguageSources(group, sortedSources(sources))
|
addLanguageSources(group, sortedSources(sources))
|
||||||
true
|
true
|
||||||
@ -126,9 +126,9 @@ class SettingsSourcesController : SettingsController() {
|
|||||||
|
|
||||||
onChange { newValue ->
|
onChange { newValue ->
|
||||||
val checked = newValue as Boolean
|
val checked = newValue as Boolean
|
||||||
val current = preferences.hiddenCatalogues().getOrDefault()
|
val current = preferences.hiddenSources().getOrDefault()
|
||||||
|
|
||||||
preferences.hiddenCatalogues().set(
|
preferences.hiddenSources().set(
|
||||||
if (checked) current - id
|
if (checked) current - id
|
||||||
else current + id
|
else current + id
|
||||||
)
|
)
|
||||||
@ -220,7 +220,7 @@ class SettingsSourcesController : SettingsController() {
|
|||||||
private fun sortedSources(sources: List<HttpSource>?): List<HttpSource> {
|
private fun sortedSources(sources: List<HttpSource>?): List<HttpSource> {
|
||||||
val sourceAlpha = sources.orEmpty().sortedBy { it.name }
|
val sourceAlpha = sources.orEmpty().sortedBy { it.name }
|
||||||
return if (sorting == SourcesSort.Enabled) {
|
return if (sorting == SourcesSort.Enabled) {
|
||||||
val hiddenCatalogues = preferences.hiddenCatalogues().getOrDefault()
|
val hiddenCatalogues = preferences.hiddenSources().getOrDefault()
|
||||||
sourceAlpha.filter { it.id.toString() !in hiddenCatalogues } +
|
sourceAlpha.filter { it.id.toString() !in hiddenCatalogues } +
|
||||||
sourceAlpha.filterNot { it.id.toString() !in hiddenCatalogues }
|
sourceAlpha.filterNot { it.id.toString() !in hiddenCatalogues }
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -6,7 +6,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card.*
|
import kotlinx.android.synthetic.main.source_header_item.*
|
||||||
|
|
||||||
class LangHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
class LangHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
BaseFlexibleViewHolder(view, adapter) {
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -18,7 +18,7 @@ data class LangItem(val code: String) : AbstractHeaderItem<LangHolder>() {
|
|||||||
* Returns the layout resource of this item.
|
* Returns the layout resource of this item.
|
||||||
*/
|
*/
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_main_controller_card
|
return R.layout.source_header_item
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
@ -8,9 +8,9 @@ import eu.kanade.tachiyomi.util.system.getResourceColor
|
|||||||
/**
|
/**
|
||||||
* Adapter that holds the catalogue cards.
|
* Adapter that holds the catalogue cards.
|
||||||
*
|
*
|
||||||
* @param controller instance of [CatalogueController].
|
* @param controller instance of [SourceController].
|
||||||
*/
|
*/
|
||||||
class CatalogueAdapter(val controller: CatalogueController) :
|
class SourceAdapter(val controller: SourceController) :
|
||||||
FlexibleAdapter<IFlexible<*>>(null, controller, true) {
|
FlexibleAdapter<IFlexible<*>>(null, controller, true) {
|
||||||
|
|
||||||
val cardBackground = controller.activity!!.getResourceColor(R.attr.background_card)
|
val cardBackground = controller.activity!!.getResourceColor(R.attr.background_card)
|
||||||
@ -31,7 +31,7 @@ class CatalogueAdapter(val controller: CatalogueController) :
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener which should be called when user clicks browse.
|
* Listener which should be called when user clicks browse.
|
||||||
* Note: Should only be handled by [CatalogueController]
|
* Note: Should only be handled by [SourceController]
|
||||||
*/
|
*/
|
||||||
interface OnBrowseClickListener {
|
interface OnBrowseClickListener {
|
||||||
fun onBrowseClick(position: Int)
|
fun onBrowseClick(position: Int)
|
||||||
@ -39,7 +39,7 @@ class CatalogueAdapter(val controller: CatalogueController) :
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener which should be called when user clicks latest.
|
* Listener which should be called when user clicks latest.
|
||||||
* Note: Should only be handled by [CatalogueController]
|
* Note: Should only be handled by [SourceController]
|
||||||
*/
|
*/
|
||||||
interface OnLatestClickListener {
|
interface OnLatestClickListener {
|
||||||
fun onLatestClick(position: Int)
|
fun onLatestClick(position: Int)
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.Manifest.permission.WRITE_EXTERNAL_STORAGE
|
import android.Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
@ -27,38 +27,38 @@ import eu.kanade.tachiyomi.source.Source
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCatalogueController
|
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
|
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.latest.LatestUpdatesController
|
|
||||||
import eu.kanade.tachiyomi.ui.extension.SettingsExtensionsController
|
import eu.kanade.tachiyomi.ui.extension.SettingsExtensionsController
|
||||||
import eu.kanade.tachiyomi.ui.main.BottomSheetController
|
import eu.kanade.tachiyomi.ui.main.BottomSheetController
|
||||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||||
import eu.kanade.tachiyomi.ui.main.RootSearchInterface
|
import eu.kanade.tachiyomi.ui.main.RootSearchInterface
|
||||||
import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController
|
import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.global_search.SourceSearchController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.latest.LatestUpdatesController
|
||||||
import eu.kanade.tachiyomi.util.view.applyWindowInsetsForRootController
|
import eu.kanade.tachiyomi.util.view.applyWindowInsetsForRootController
|
||||||
import eu.kanade.tachiyomi.util.view.scrollViewWith
|
import eu.kanade.tachiyomi.util.view.scrollViewWith
|
||||||
import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener
|
import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller.*
|
|
||||||
import kotlinx.android.synthetic.main.extensions_bottom_sheet.*
|
import kotlinx.android.synthetic.main.extensions_bottom_sheet.*
|
||||||
import kotlinx.android.synthetic.main.main_activity.*
|
import kotlinx.android.synthetic.main.main_activity.*
|
||||||
|
import kotlinx.android.synthetic.main.source_controller.*
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This controller shows and manages the different catalogues enabled by the user.
|
* This controller shows and manages the different catalogues enabled by the user.
|
||||||
* This controller should only handle UI actions, IO actions should be done by [CataloguePresenter]
|
* This controller should only handle UI actions, IO actions should be done by [SourcePresenter]
|
||||||
* [CatalogueAdapter.OnBrowseClickListener] call function data on browse item click.
|
* [SourceAdapter.OnBrowseClickListener] call function data on browse item click.
|
||||||
* [CatalogueAdapter.OnLatestClickListener] call function data on latest item click
|
* [SourceAdapter.OnLatestClickListener] call function data on latest item click
|
||||||
*/
|
*/
|
||||||
class CatalogueController : NucleusController<CataloguePresenter>(),
|
class SourceController : NucleusController<SourcePresenter>(),
|
||||||
FlexibleAdapter.OnItemClickListener,
|
FlexibleAdapter.OnItemClickListener,
|
||||||
FlexibleAdapter.OnItemLongClickListener,
|
FlexibleAdapter.OnItemLongClickListener,
|
||||||
CatalogueAdapter.OnBrowseClickListener,
|
SourceAdapter.OnBrowseClickListener,
|
||||||
RootSearchInterface,
|
RootSearchInterface,
|
||||||
BottomSheetController,
|
BottomSheetController,
|
||||||
CatalogueAdapter.OnLatestClickListener {
|
SourceAdapter.OnLatestClickListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application preferences.
|
* Application preferences.
|
||||||
@ -68,7 +68,7 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
/**
|
/**
|
||||||
* Adapter containing sources.
|
* Adapter containing sources.
|
||||||
*/
|
*/
|
||||||
private var adapter: CatalogueAdapter? = null
|
private var adapter: SourceAdapter? = null
|
||||||
|
|
||||||
var extQuery = ""
|
var extQuery = ""
|
||||||
private set
|
private set
|
||||||
@ -90,26 +90,26 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
else applicationContext?.getString(R.string.sources)
|
else applicationContext?.getString(R.string.sources)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPresenter(): CataloguePresenter {
|
override fun createPresenter(): SourcePresenter {
|
||||||
return CataloguePresenter()
|
return SourcePresenter()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiate the view with [R.layout.catalogue_main_controller].
|
* Initiate the view with [R.layout.source_controller].
|
||||||
*
|
*
|
||||||
* @param inflater used to load the layout xml.
|
* @param inflater used to load the layout xml.
|
||||||
* @param container containing parent views.
|
* @param container containing parent views.
|
||||||
* @return inflated view.
|
* @return inflated view.
|
||||||
*/
|
*/
|
||||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
||||||
return inflater.inflate(R.layout.catalogue_main_controller, container, false)
|
return inflater.inflate(R.layout.source_controller, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View) {
|
override fun onViewCreated(view: View) {
|
||||||
super.onViewCreated(view)
|
super.onViewCreated(view)
|
||||||
view.applyWindowInsetsForRootController(activity!!.bottom_nav)
|
view.applyWindowInsetsForRootController(activity!!.bottom_nav)
|
||||||
|
|
||||||
adapter = CatalogueAdapter(this)
|
adapter = SourceAdapter(this)
|
||||||
|
|
||||||
// Create recycler and set adapter.
|
// Create recycler and set adapter.
|
||||||
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context)
|
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context)
|
||||||
@ -212,14 +212,14 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
val item = adapter?.getItem(position) as? SourceItem ?: return false
|
val item = adapter?.getItem(position) as? SourceItem ?: return false
|
||||||
val source = item.source
|
val source = item.source
|
||||||
// Open the catalogue view.
|
// Open the catalogue view.
|
||||||
openCatalogue(source, BrowseCatalogueController(source))
|
openCatalogue(source, BrowseSourceController(source))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemLongClick(position: Int) {
|
override fun onItemLongClick(position: Int) {
|
||||||
val activity = activity ?: return
|
val activity = activity ?: return
|
||||||
val item = adapter?.getItem(position) as? SourceItem ?: return
|
val item = adapter?.getItem(position) as? SourceItem ?: return
|
||||||
val isPinned = item.header?.code?.equals(CataloguePresenter.PINNED_KEY) ?: false
|
val isPinned = item.header?.code?.equals(SourcePresenter.PINNED_KEY) ?: false
|
||||||
|
|
||||||
MaterialDialog(activity)
|
MaterialDialog(activity)
|
||||||
.title(text = item.source.name)
|
.title(text = item.source.name)
|
||||||
@ -235,8 +235,8 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun hideCatalogue(source: Source) {
|
private fun hideCatalogue(source: Source) {
|
||||||
val current = preferences.hiddenCatalogues().getOrDefault()
|
val current = preferences.hiddenSources().getOrDefault()
|
||||||
preferences.hiddenCatalogues().set(current + source.id.toString())
|
preferences.hiddenSources().set(current + source.id.toString())
|
||||||
|
|
||||||
presenter.updateSources()
|
presenter.updateSources()
|
||||||
}
|
}
|
||||||
@ -253,14 +253,14 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when browse is clicked in [CatalogueAdapter]
|
* Called when browse is clicked in [SourceAdapter]
|
||||||
*/
|
*/
|
||||||
override fun onBrowseClick(position: Int) {
|
override fun onBrowseClick(position: Int) {
|
||||||
onItemClick(view!!, position)
|
onItemClick(view!!, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when latest is clicked in [CatalogueAdapter]
|
* Called when latest is clicked in [SourceAdapter]
|
||||||
*/
|
*/
|
||||||
override fun onLatestClick(position: Int) {
|
override fun onLatestClick(position: Int) {
|
||||||
val item = adapter?.getItem(position) as? SourceItem ?: return
|
val item = adapter?.getItem(position) as? SourceItem ?: return
|
||||||
@ -270,7 +270,7 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
/**
|
/**
|
||||||
* Opens a catalogue with the given controller.
|
* Opens a catalogue with the given controller.
|
||||||
*/
|
*/
|
||||||
private fun openCatalogue(source: CatalogueSource, controller: BrowseCatalogueController) {
|
private fun openCatalogue(source: CatalogueSource, controller: BrowseSourceController) {
|
||||||
preferences.lastUsedCatalogueSource().set(source.id)
|
preferences.lastUsedCatalogueSource().set(source.id)
|
||||||
router.pushController(controller.withFadeTransaction())
|
router.pushController(controller.withFadeTransaction())
|
||||||
}
|
}
|
||||||
@ -326,7 +326,7 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun performGlobalSearch(query: String) {
|
private fun performGlobalSearch(query: String) {
|
||||||
router.pushController(CatalogueSearchController(query).withFadeTransaction())
|
router.pushController(SourceSearchController(query).withFadeTransaction())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
@ -6,9 +6,9 @@ import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.util.view.roundTextIcon
|
import eu.kanade.tachiyomi.util.view.roundTextIcon
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import kotlinx.android.synthetic.main.catalogue_main_controller_card_item.*
|
import kotlinx.android.synthetic.main.source_item.*
|
||||||
|
|
||||||
class SourceHolder(view: View, val adapter: CatalogueAdapter) :
|
class SourceHolder(view: View, val adapter: SourceAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
BaseFlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
/*override val slice = Slice(card).apply {
|
/*override val slice = Slice(card).apply {
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -21,14 +21,14 @@ data class SourceItem(val source: CatalogueSource, val header: LangItem? = null)
|
|||||||
* Returns the layout resource of this item.
|
* Returns the layout resource of this item.
|
||||||
*/
|
*/
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_main_controller_card_item
|
return R.layout.source_item
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new view holder for this item.
|
* Creates a new view holder for this item.
|
||||||
*/
|
*/
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): SourceHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): SourceHolder {
|
||||||
return SourceHolder(view, adapter as CatalogueAdapter)
|
return SourceHolder(view, adapter as SourceAdapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue
|
package eu.kanade.tachiyomi.ui.source
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
@ -16,16 +16,16 @@ import java.util.TreeMap
|
|||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Presenter of [CatalogueController]
|
* Presenter of [SourceController]
|
||||||
* Function calls should be done from here. UI calls should be done from the controller.
|
* Function calls should be done from here. UI calls should be done from the controller.
|
||||||
*
|
*
|
||||||
* @param sourceManager manages the different sources.
|
* @param sourceManager manages the different sources.
|
||||||
* @param preferences application preferences.
|
* @param preferences application preferences.
|
||||||
*/
|
*/
|
||||||
class CataloguePresenter(
|
class SourcePresenter(
|
||||||
val sourceManager: SourceManager = Injekt.get(),
|
val sourceManager: SourceManager = Injekt.get(),
|
||||||
private val preferences: PreferencesHelper = Injekt.get()
|
private val preferences: PreferencesHelper = Injekt.get()
|
||||||
) : BasePresenter<CatalogueController>() {
|
) : BasePresenter<SourceController>() {
|
||||||
|
|
||||||
var sources = getEnabledSources()
|
var sources = getEnabledSources()
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ class CataloguePresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
sourceSubscription = Observable.just(sourceItems)
|
sourceSubscription = Observable.just(sourceItems)
|
||||||
.subscribeLatestCache(CatalogueController::setSources)
|
.subscribeLatestCache(SourceController::setSources)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadLastUsedSource() {
|
private fun loadLastUsedSource() {
|
||||||
@ -88,7 +88,7 @@ class CataloguePresenter(
|
|||||||
sharedObs.skip(1).delay(500, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread()))
|
sharedObs.skip(1).delay(500, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread()))
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.map { (sourceManager.get(it) as? CatalogueSource)?.let { SourceItem(it) } }
|
.map { (sourceManager.get(it) as? CatalogueSource)?.let { SourceItem(it) } }
|
||||||
.subscribeLatestCache(CatalogueController::setLastUsedSource)
|
.subscribeLatestCache(SourceController::setLastUsedSource)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateSources() {
|
fun updateSources() {
|
||||||
@ -103,7 +103,7 @@ class CataloguePresenter(
|
|||||||
*/
|
*/
|
||||||
private fun getEnabledSources(): List<CatalogueSource> {
|
private fun getEnabledSources(): List<CatalogueSource> {
|
||||||
val languages = preferences.enabledLanguages().getOrDefault()
|
val languages = preferences.enabledLanguages().getOrDefault()
|
||||||
val hiddenCatalogues = preferences.hiddenCatalogues().getOrDefault()
|
val hiddenCatalogues = preferences.hiddenSources().getOrDefault()
|
||||||
|
|
||||||
return sourceManager.getCatalogueSources()
|
return sourceManager.getCatalogueSources()
|
||||||
.filter { it.lang in languages }
|
.filter { it.lang in languages }
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@ -27,10 +27,10 @@ import eu.kanade.tachiyomi.source.model.FilterList
|
|||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
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.catalogue.CatalogueController
|
|
||||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
||||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
||||||
|
import eu.kanade.tachiyomi.ui.source.SourceController
|
||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.system.connectivityManager
|
import eu.kanade.tachiyomi.util.system.connectivityManager
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
@ -42,7 +42,7 @@ import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
|||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import eu.kanade.tachiyomi.util.view.visibleIf
|
import eu.kanade.tachiyomi.util.view.visibleIf
|
||||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||||
import kotlinx.android.synthetic.main.catalogue_controller.*
|
import kotlinx.android.synthetic.main.browse_source_controller.*
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
@ -53,8 +53,8 @@ import java.util.concurrent.TimeUnit
|
|||||||
/**
|
/**
|
||||||
* Controller to manage the catalogues available in the app.
|
* Controller to manage the catalogues available in the app.
|
||||||
*/
|
*/
|
||||||
open class BrowseCatalogueController(bundle: Bundle) :
|
open class BrowseSourceController(bundle: Bundle) :
|
||||||
NucleusController<BrowseCataloguePresenter>(bundle),
|
NucleusController<BrowseSourcePresenter>(bundle),
|
||||||
FlexibleAdapter.OnItemClickListener,
|
FlexibleAdapter.OnItemClickListener,
|
||||||
FlexibleAdapter.OnItemLongClickListener,
|
FlexibleAdapter.OnItemLongClickListener,
|
||||||
FlexibleAdapter.EndlessScrollListener,
|
FlexibleAdapter.EndlessScrollListener,
|
||||||
@ -63,7 +63,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
constructor(
|
constructor(
|
||||||
source: CatalogueSource,
|
source: CatalogueSource,
|
||||||
searchQuery: String? = null,
|
searchQuery: String? = null,
|
||||||
smartSearchConfig: CatalogueController.SmartSearchConfig? = null
|
smartSearchConfig: SourceController.SmartSearchConfig? = null
|
||||||
) : this(Bundle().apply {
|
) : this(Bundle().apply {
|
||||||
putLong(SOURCE_ID_KEY, source.id)
|
putLong(SOURCE_ID_KEY, source.id)
|
||||||
|
|
||||||
@ -93,11 +93,6 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
*/
|
*/
|
||||||
private var snack: Snackbar? = null
|
private var snack: Snackbar? = null
|
||||||
|
|
||||||
/**
|
|
||||||
* Navigation view containing filter items.
|
|
||||||
*/
|
|
||||||
private var navView: CatalogueNavigationView? = null
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recycler view with the list of results.
|
* Recycler view with the list of results.
|
||||||
*/
|
*/
|
||||||
@ -121,12 +116,12 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
return presenter.source.name
|
return presenter.source.name
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPresenter(): BrowseCataloguePresenter {
|
override fun createPresenter(): BrowseSourcePresenter {
|
||||||
return BrowseCataloguePresenter(args.getLong(SOURCE_ID_KEY))
|
return BrowseSourcePresenter(args.getLong(SOURCE_ID_KEY))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
||||||
return inflater.inflate(R.layout.catalogue_controller, container, false)
|
return inflater.inflate(R.layout.browse_source_controller, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View) {
|
override fun onViewCreated(view: View) {
|
||||||
@ -136,8 +131,6 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
adapter = FlexibleAdapter(null, this)
|
adapter = FlexibleAdapter(null, this)
|
||||||
setupRecycler(view)
|
setupRecycler(view)
|
||||||
|
|
||||||
navView?.setFilters(presenter.filterItems)
|
|
||||||
|
|
||||||
fab.visibleIf(presenter.sourceFilters.isNotEmpty())
|
fab.visibleIf(presenter.sourceFilters.isNotEmpty())
|
||||||
fab.setOnClickListener { showFilters() }
|
fab.setOnClickListener { showFilters() }
|
||||||
progress?.visible()
|
progress?.visible()
|
||||||
@ -170,7 +163,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
|
addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(catalogue_view.inflate(R.layout.catalogue_recycler_autofit) as AutofitRecyclerView).apply {
|
(catalogue_view.inflate(R.layout.manga_recycler_autofit) as AutofitRecyclerView).apply {
|
||||||
columnWidth = when (preferences.gridSize().getOrDefault()) {
|
columnWidth = when (preferences.gridSize().getOrDefault()) {
|
||||||
0 -> 1f
|
0 -> 1f
|
||||||
2 -> 1.66f
|
2 -> 1.66f
|
||||||
@ -180,7 +173,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
(layoutManager as androidx.recyclerview.widget.GridLayoutManager).spanSizeLookup = object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() {
|
(layoutManager as androidx.recyclerview.widget.GridLayoutManager).spanSizeLookup = object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() {
|
||||||
override fun getSpanSize(position: Int): Int {
|
override fun getSpanSize(position: Int): Int {
|
||||||
return when (adapter?.getItemViewType(position)) {
|
return when (adapter?.getItemViewType(position)) {
|
||||||
R.layout.catalogue_grid_item, null -> 1
|
R.layout.manga_grid_item, null -> 1
|
||||||
else -> spanCount
|
else -> spanCount
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -229,7 +222,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
|
|
||||||
val searchEventsObservable = searchView.queryTextChangeEvents()
|
val searchEventsObservable = searchView.queryTextChangeEvents()
|
||||||
.skip(1)
|
.skip(1)
|
||||||
.filter { router.backstack.lastOrNull()?.controller() == this@BrowseCatalogueController }
|
.filter { router.backstack.lastOrNull()?.controller() == this@BrowseSourceController }
|
||||||
.share()
|
.share()
|
||||||
val writingObservable = searchEventsObservable
|
val writingObservable = searchEventsObservable
|
||||||
.filter { !it.isSubmitted }
|
.filter { !it.isSubmitted }
|
||||||
@ -278,7 +271,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showFilters() {
|
private fun showFilters() {
|
||||||
val sheet = CatalogueSearchSheet(activity!!)
|
val sheet = SourceSearchSheet(activity!!)
|
||||||
sheet.setFilters(presenter.filterItems)
|
sheet.setFilters(presenter.filterItems)
|
||||||
presenter.filtersChanged = false
|
presenter.filtersChanged = false
|
||||||
val oldFilters = mutableListOf<Any?>()
|
val oldFilters = mutableListOf<Any?>()
|
||||||
@ -358,7 +351,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
* @param page the current page.
|
* @param page the current page.
|
||||||
* @param mangas the list of manga of the page.
|
* @param mangas the list of manga of the page.
|
||||||
*/
|
*/
|
||||||
fun onAddPage(page: Int, mangas: List<CatalogueItem>) {
|
fun onAddPage(page: Int, mangas: List<BrowseSourceItem>) {
|
||||||
val adapter = adapter ?: return
|
val adapter = adapter ?: return
|
||||||
hideProgressBar()
|
hideProgressBar()
|
||||||
if (page == 1) {
|
if (page == 1) {
|
||||||
@ -381,7 +374,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
|
|
||||||
snack?.dismiss()
|
snack?.dismiss()
|
||||||
val message = if (error is NoResultsException) catalogue_view.context.getString(R.string.no_results_found) else (error.message ?: "")
|
val message = if (error is NoResultsException) catalogue_view.context.getString(R.string.no_results_found) else (error.message ?: "")
|
||||||
snack = catalouge_layout?.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
snack = source_layout?.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
||||||
setAction(R.string.retry) {
|
setAction(R.string.retry) {
|
||||||
// If not the first page, show bottom progress bar.
|
// If not the first page, show bottom progress bar.
|
||||||
if (adapter.mainItemCount > 0) {
|
if (adapter.mainItemCount > 0) {
|
||||||
@ -442,7 +435,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
if (!isListMode || !view.context.connectivityManager.isActiveNetworkMetered) {
|
if (!isListMode || !view.context.connectivityManager.isActiveNetworkMetered) {
|
||||||
// Initialize mangas if going to grid view or if over wifi when going to list view
|
// Initialize mangas if going to grid view or if over wifi when going to list view
|
||||||
val mangas = (0 until adapter.itemCount).mapNotNull {
|
val mangas = (0 until adapter.itemCount).mapNotNull {
|
||||||
(adapter.getItem(it) as? CatalogueItem)?.manga
|
(adapter.getItem(it) as? BrowseSourceItem)?.manga
|
||||||
}
|
}
|
||||||
presenter.initializeMangas(mangas)
|
presenter.initializeMangas(mangas)
|
||||||
}
|
}
|
||||||
@ -454,13 +447,13 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
* @param manga the manga to find.
|
* @param manga the manga to find.
|
||||||
* @return the holder of the manga or null if it's not bound.
|
* @return the holder of the manga or null if it's not bound.
|
||||||
*/
|
*/
|
||||||
private fun getHolder(manga: Manga): CatalogueHolder? {
|
private fun getHolder(manga: Manga): BrowseSourceHolder? {
|
||||||
val adapter = adapter ?: return null
|
val adapter = adapter ?: return null
|
||||||
|
|
||||||
adapter.allBoundViewHolders.forEach { holder ->
|
adapter.allBoundViewHolders.forEach { holder ->
|
||||||
val item = adapter.getItem(holder.adapterPosition) as? CatalogueItem
|
val item = adapter.getItem(holder.adapterPosition) as? BrowseSourceItem
|
||||||
if (item != null && item.manga.id!! == manga.id!!) {
|
if (item != null && item.manga.id!! == manga.id!!) {
|
||||||
return holder as CatalogueHolder
|
return holder as BrowseSourceHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,7 +483,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
* @return true if the item should be selected, false otherwise.
|
* @return true if the item should be selected, false otherwise.
|
||||||
*/
|
*/
|
||||||
override fun onItemClick(view: View?, position: Int): Boolean {
|
override fun onItemClick(view: View?, position: Int): Boolean {
|
||||||
val item = adapter?.getItem(position) as? CatalogueItem ?: return false
|
val item = adapter?.getItem(position) as? BrowseSourceItem ?: return false
|
||||||
router.pushController(MangaDetailsController(item.manga, true).withFadeTransaction())
|
router.pushController(MangaDetailsController(item.manga, true).withFadeTransaction())
|
||||||
|
|
||||||
return false
|
return false
|
||||||
@ -506,12 +499,12 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
* @param position the position of the element clicked.
|
* @param position the position of the element clicked.
|
||||||
*/
|
*/
|
||||||
override fun onItemLongClick(position: Int) {
|
override fun onItemLongClick(position: Int) {
|
||||||
val manga = (adapter?.getItem(position) as? CatalogueItem?)?.manga ?: return
|
val manga = (adapter?.getItem(position) as? BrowseSourceItem?)?.manga ?: return
|
||||||
snack?.dismiss()
|
snack?.dismiss()
|
||||||
if (manga.favorite) {
|
if (manga.favorite) {
|
||||||
presenter.changeMangaFavorite(manga)
|
presenter.changeMangaFavorite(manga)
|
||||||
adapter?.notifyItemChanged(position)
|
adapter?.notifyItemChanged(position)
|
||||||
snack = catalouge_layout?.snack(R.string.removed_from_library, Snackbar.LENGTH_INDEFINITE) {
|
snack = source_layout?.snack(R.string.removed_from_library, Snackbar.LENGTH_INDEFINITE) {
|
||||||
setAction(R.string.undo) {
|
setAction(R.string.undo) {
|
||||||
if (!manga.favorite) addManga(manga, position)
|
if (!manga.favorite) addManga(manga, position)
|
||||||
}
|
}
|
||||||
@ -525,7 +518,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
(activity as? MainActivity)?.setUndoSnackBar(snack)
|
(activity as? MainActivity)?.setUndoSnackBar(snack)
|
||||||
} else {
|
} else {
|
||||||
addManga(manga, position)
|
addManga(manga, position)
|
||||||
snack = catalouge_layout?.snack(R.string.added_to_library)
|
snack = source_layout?.snack(R.string.added_to_library)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.data.glide.GlideApp
|
|||||||
import eu.kanade.tachiyomi.ui.library.LibraryCategoryAdapter
|
import eu.kanade.tachiyomi.ui.library.LibraryCategoryAdapter
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.catalogue_grid_item.*
|
import kotlinx.android.synthetic.main.manga_grid_item.*
|
||||||
import kotlinx.android.synthetic.main.unread_download_badge.*
|
import kotlinx.android.synthetic.main.unread_download_badge.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,11 +24,11 @@ import kotlinx.android.synthetic.main.unread_download_badge.*
|
|||||||
* @param listener a listener to react to single tap and long tap events.
|
* @param listener a listener to react to single tap and long tap events.
|
||||||
* @constructor creates a new library holder.
|
* @constructor creates a new library holder.
|
||||||
*/
|
*/
|
||||||
class CatalogueGridHolder(
|
class BrowseSourceGridHolder(
|
||||||
private val view: View,
|
private val view: View,
|
||||||
private val adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
private val adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
||||||
compact: Boolean
|
compact: Boolean
|
||||||
) : CatalogueHolder(view, adapter) {
|
) : BrowseSourceHolder(view, adapter) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (compact) {
|
if (compact) {
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|||||||
* @param view the inflated view for this holder.
|
* @param view the inflated view for this holder.
|
||||||
* @param adapter the adapter handling this holder.
|
* @param adapter the adapter handling this holder.
|
||||||
*/
|
*/
|
||||||
abstract class CatalogueHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
abstract class BrowseSourceHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
BaseFlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -18,23 +18,23 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault
|
|||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||||
import kotlinx.android.synthetic.main.catalogue_grid_item.view.*
|
import kotlinx.android.synthetic.main.manga_grid_item.view.*
|
||||||
|
|
||||||
class CatalogueItem(
|
class BrowseSourceItem(
|
||||||
val manga: Manga,
|
val manga: Manga,
|
||||||
private val catalogueAsList: Preference<Boolean>,
|
private val catalogueAsList: Preference<Boolean>,
|
||||||
private val catalogueListType: Preference<Int>
|
private val catalogueListType: Preference<Int>
|
||||||
) :
|
) :
|
||||||
AbstractFlexibleItem<CatalogueHolder>() {
|
AbstractFlexibleItem<BrowseSourceHolder>() {
|
||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return if (catalogueAsList.getOrDefault())
|
return if (catalogueAsList.getOrDefault())
|
||||||
R.layout.catalogue_list_item
|
R.layout.manga_list_item
|
||||||
else
|
else
|
||||||
R.layout.catalogue_grid_item
|
R.layout.manga_grid_item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): CatalogueHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): BrowseSourceHolder {
|
||||||
val parent = adapter.recyclerView
|
val parent = adapter.recyclerView
|
||||||
return if (parent is AutofitRecyclerView) {
|
return if (parent is AutofitRecyclerView) {
|
||||||
val listType = catalogueListType.getOrDefault()
|
val listType = catalogueListType.getOrDefault()
|
||||||
@ -66,15 +66,15 @@ class CatalogueItem(
|
|||||||
(parent.itemWidth / 3f * 3.7f).toInt()
|
(parent.itemWidth / 3f * 3.7f).toInt()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
CatalogueGridHolder(view, adapter, listType == 1)
|
BrowseSourceGridHolder(view, adapter, listType == 1)
|
||||||
} else {
|
} else {
|
||||||
CatalogueListHolder(view, adapter)
|
BrowseSourceListHolder(view, adapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bindViewHolder(
|
override fun bindViewHolder(
|
||||||
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
||||||
holder: CatalogueHolder,
|
holder: BrowseSourceHolder,
|
||||||
position: Int,
|
position: Int,
|
||||||
payloads: MutableList<Any?>?
|
payloads: MutableList<Any?>?
|
||||||
) {
|
) {
|
||||||
@ -84,7 +84,7 @@ class CatalogueItem(
|
|||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other is CatalogueItem) {
|
if (other is BrowseSourceItem) {
|
||||||
return manga.id!! == other.manga.id!!
|
return manga.id!! == other.manga.id!!
|
||||||
}
|
}
|
||||||
return false
|
return false
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.catalogue_list_item.*
|
import kotlinx.android.synthetic.main.manga_list_item.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
||||||
@ -21,8 +21,8 @@ import kotlinx.android.synthetic.main.catalogue_list_item.*
|
|||||||
* @param adapter the adapter handling this holder.
|
* @param adapter the adapter handling this holder.
|
||||||
* @constructor creates a new catalogue holder.
|
* @constructor creates a new catalogue holder.
|
||||||
*/
|
*/
|
||||||
class CatalogueListHolder(private val view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
class BrowseSourceListHolder(private val view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>) :
|
||||||
CatalogueHolder(view, adapter) {
|
BrowseSourceHolder(view, adapter) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
@ -7,7 +7,7 @@ import rx.Observable
|
|||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
import rx.schedulers.Schedulers
|
import rx.schedulers.Schedulers
|
||||||
|
|
||||||
open class CataloguePager(val source: CatalogueSource, val query: String, val filters: FilterList) : Pager() {
|
open class BrowseSourcePager(val source: CatalogueSource, val query: String, val filters: FilterList) : Pager() {
|
||||||
|
|
||||||
override fun requestNext(): Observable<MangasPage> {
|
override fun requestNext(): Observable<MangasPage> {
|
||||||
val page = currentPage
|
val page = currentPage
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
@ -16,19 +16,19 @@ import eu.kanade.tachiyomi.source.model.Filter
|
|||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.CheckboxItem
|
import eu.kanade.tachiyomi.ui.source.filter.CheckboxItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.CheckboxSectionItem
|
import eu.kanade.tachiyomi.ui.source.filter.CheckboxSectionItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.GroupItem
|
import eu.kanade.tachiyomi.ui.source.filter.GroupItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.HeaderItem
|
import eu.kanade.tachiyomi.ui.source.filter.HeaderItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.SelectItem
|
import eu.kanade.tachiyomi.ui.source.filter.SelectItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.SelectSectionItem
|
import eu.kanade.tachiyomi.ui.source.filter.SelectSectionItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.SeparatorItem
|
import eu.kanade.tachiyomi.ui.source.filter.SeparatorItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.SortGroup
|
import eu.kanade.tachiyomi.ui.source.filter.SortGroup
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.SortItem
|
import eu.kanade.tachiyomi.ui.source.filter.SortItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.TextItem
|
import eu.kanade.tachiyomi.ui.source.filter.TextItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.TextSectionItem
|
import eu.kanade.tachiyomi.ui.source.filter.TextSectionItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.TriStateItem
|
import eu.kanade.tachiyomi.ui.source.filter.TriStateItem
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.filter.TriStateSectionItem
|
import eu.kanade.tachiyomi.ui.source.filter.TriStateSectionItem
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
@ -40,15 +40,15 @@ import uy.kohesive.injekt.api.get
|
|||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Presenter of [BrowseCatalogueController].
|
* Presenter of [BrowseSourceController].
|
||||||
*/
|
*/
|
||||||
open class BrowseCataloguePresenter(
|
open class BrowseSourcePresenter(
|
||||||
sourceId: Long,
|
sourceId: Long,
|
||||||
sourceManager: SourceManager = Injekt.get(),
|
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(),
|
||||||
private val coverCache: CoverCache = Injekt.get()
|
private val coverCache: CoverCache = Injekt.get()
|
||||||
) : BasePresenter<BrowseCatalogueController>() {
|
) : BasePresenter<BrowseSourceController>() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selected source.
|
* Selected source.
|
||||||
@ -120,7 +120,7 @@ open class BrowseCataloguePresenter(
|
|||||||
query = savedState.getString(::query.name, "")
|
query = savedState.getString(::query.name, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
add(prefs.catalogueAsList().asObservable()
|
add(prefs.browseAsList().asObservable()
|
||||||
.subscribe { setDisplayMode(it) })
|
.subscribe { setDisplayMode(it) })
|
||||||
|
|
||||||
restartPager()
|
restartPager()
|
||||||
@ -148,8 +148,8 @@ open class BrowseCataloguePresenter(
|
|||||||
|
|
||||||
val sourceId = source.id
|
val sourceId = source.id
|
||||||
|
|
||||||
val catalogueAsList = prefs.catalogueAsList()
|
val browseAsList = prefs.browseAsList()
|
||||||
val catalougeListType = prefs.libraryLayout()
|
val sourceListType = prefs.libraryLayout()
|
||||||
|
|
||||||
// Prepare the pager.
|
// Prepare the pager.
|
||||||
pagerSubscription?.let { remove(it) }
|
pagerSubscription?.let { remove(it) }
|
||||||
@ -157,7 +157,7 @@ open class BrowseCataloguePresenter(
|
|||||||
.observeOn(Schedulers.io())
|
.observeOn(Schedulers.io())
|
||||||
.map { it.first to it.second.map { networkToLocalManga(it, sourceId) } }
|
.map { it.first to it.second.map { networkToLocalManga(it, sourceId) } }
|
||||||
.doOnNext { initializeMangas(it.second) }
|
.doOnNext { initializeMangas(it.second) }
|
||||||
.map { it.first to it.second.map { CatalogueItem(it, catalogueAsList, catalougeListType) } }
|
.map { it.first to it.second.map { BrowseSourceItem(it, browseAsList, sourceListType) } }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribeReplay({ view, (page, mangas) ->
|
.subscribeReplay({ view, (page, mangas) ->
|
||||||
view.onAddPage(page, mangas)
|
view.onAddPage(page, mangas)
|
||||||
@ -179,7 +179,7 @@ open class BrowseCataloguePresenter(
|
|||||||
pageSubscription = Observable.defer { pager.requestNext() }
|
pageSubscription = Observable.defer { pager.requestNext() }
|
||||||
.subscribeFirst({ _, _ ->
|
.subscribeFirst({ _, _ ->
|
||||||
// Nothing to do when onNext is emitted.
|
// Nothing to do when onNext is emitted.
|
||||||
}, BrowseCatalogueController::onAddPageError)
|
}, BrowseSourceController::onAddPageError)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -294,7 +294,7 @@ open class BrowseCataloguePresenter(
|
|||||||
* Changes the active display mode.
|
* Changes the active display mode.
|
||||||
*/
|
*/
|
||||||
fun swapDisplayMode() {
|
fun swapDisplayMode() {
|
||||||
prefs.catalogueAsList().set(!isListMode)
|
prefs.browseAsList().set(!isListMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -307,7 +307,7 @@ open class BrowseCataloguePresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open fun createPager(query: String, filters: FilterList): Pager {
|
open fun createPager(query: String, filters: FilterList): Pager {
|
||||||
return CataloguePager(source, query, filters)
|
return BrowseSourcePager(source, query, filters)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FilterList.toItems(): List<IFlexible<*>> {
|
private fun FilterList.toItems(): List<IFlexible<*>> {
|
@ -0,0 +1,3 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
|
class NoResultsException : Exception()
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import com.jakewharton.rxrelay.PublishRelay
|
import com.jakewharton.rxrelay.PublishRelay
|
||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
@ -15,7 +15,7 @@ class ProgressItem : AbstractFlexibleItem<ProgressItem.Holder>() {
|
|||||||
private var loadMore = true
|
private var loadMore = true
|
||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_progress_item
|
return R.layout.source_progress_item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): Holder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): Holder {
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.browse
|
package eu.kanade.tachiyomi.ui.source.browse
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
@ -16,10 +16,10 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|||||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.util.view.setEdgeToEdge
|
import eu.kanade.tachiyomi.util.view.setEdgeToEdge
|
||||||
import kotlinx.android.synthetic.main.catalogue_filter_sheet.*
|
import kotlinx.android.synthetic.main.source_filter_sheet.*
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class CatalogueSearchSheet(activity: Activity) :
|
class SourceSearchSheet(activity: Activity) :
|
||||||
BottomSheetDialog(activity, R.style.BottomSheetDialogTheme) {
|
BottomSheetDialog(activity, R.style.BottomSheetDialogTheme) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,7 +43,7 @@ class CatalogueSearchSheet(activity: Activity) :
|
|||||||
var onResetClicked = {}
|
var onResetClicked = {}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val view = activity.layoutInflater.inflate(R.layout.catalogue_filter_sheet, null)
|
val view = activity.layoutInflater.inflate(R.layout.source_filter_sheet, null)
|
||||||
setContentView(view)
|
setContentView(view)
|
||||||
toolbar_title.text = context.getString(R.string.search_filters)
|
toolbar_title.text = context.getString(R.string.search_filters)
|
||||||
search_btn.setOnClickListener { dismiss() }
|
search_btn.setOnClickListener { dismiss() }
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.CheckBox
|
import android.widget.CheckBox
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.View
|
import android.view.View
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import eu.davidea.flexibleadapter.items.ISectionable
|
import eu.davidea.flexibleadapter.items.ISectionable
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
import eu.kanade.tachiyomi.source.model.Filter
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.View
|
import android.view.View
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.CheckedTextView
|
import android.widget.CheckedTextView
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.filter
|
package eu.kanade.tachiyomi.ui.source.filter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.CheckedTextView
|
import android.widget.CheckedTextView
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@ -8,10 +8,10 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
/**
|
/**
|
||||||
* Adapter that holds the search cards.
|
* Adapter that holds the search cards.
|
||||||
*
|
*
|
||||||
* @param controller instance of [CatalogueSearchController].
|
* @param controller instance of [SourceSearchController].
|
||||||
*/
|
*/
|
||||||
class CatalogueSearchAdapter(val controller: CatalogueSearchController) :
|
class SourceSearchAdapter(val controller: SourceSearchController) :
|
||||||
FlexibleAdapter<CatalogueSearchItem>(null, controller, true) {
|
FlexibleAdapter<SourceSearchItem>(null, controller, true) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bundle where the view state of the holders is saved.
|
* Bundle where the view state of the holders is saved.
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
@ -6,10 +6,10 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
/**
|
/**
|
||||||
* Adapter that holds the manga items from search results.
|
* Adapter that holds the manga items from search results.
|
||||||
*
|
*
|
||||||
* @param controller instance of [CatalogueSearchController].
|
* @param controller instance of [SourceSearchController].
|
||||||
*/
|
*/
|
||||||
class CatalogueSearchCardAdapter(controller: CatalogueSearchController) :
|
class SourceSearchCardAdapter(controller: SourceSearchController) :
|
||||||
FlexibleAdapter<CatalogueSearchCardItem>(null, controller, true) {
|
FlexibleAdapter<SourceSearchCardItem>(null, controller, true) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen for browse item clicks.
|
* Listen for browse item clicks.
|
||||||
@ -18,7 +18,7 @@ class CatalogueSearchCardAdapter(controller: CatalogueSearchController) :
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener which should be called when user clicks browse.
|
* Listener which should be called when user clicks browse.
|
||||||
* Note: Should only be handled by [CatalogueSearchController]
|
* Note: Should only be handled by [SourceSearchController]
|
||||||
*/
|
*/
|
||||||
interface OnMangaClickListener {
|
interface OnMangaClickListener {
|
||||||
fun onMangaClick(manga: Manga)
|
fun onMangaClick(manga: Manga)
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
@ -6,9 +6,9 @@ import eu.kanade.tachiyomi.data.database.models.Manga
|
|||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.catalogue_global_search_controller_card_item.*
|
import kotlinx.android.synthetic.main.source_global_search_controller_card_item.*
|
||||||
|
|
||||||
class CatalogueSearchCardHolder(view: View, adapter: CatalogueSearchCardAdapter) :
|
class SourceSearchCardHolder(view: View, adapter: SourceSearchCardAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
BaseFlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
init {
|
init {
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -8,19 +8,19 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
|||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
|
|
||||||
class CatalogueSearchCardItem(val manga: Manga) : AbstractFlexibleItem<CatalogueSearchCardHolder>() {
|
class SourceSearchCardItem(val manga: Manga) : AbstractFlexibleItem<SourceSearchCardHolder>() {
|
||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_global_search_controller_card_item
|
return R.layout.source_global_search_controller_card_item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): CatalogueSearchCardHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): SourceSearchCardHolder {
|
||||||
return CatalogueSearchCardHolder(view, adapter as CatalogueSearchCardAdapter)
|
return SourceSearchCardHolder(view, adapter as SourceSearchCardAdapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bindViewHolder(
|
override fun bindViewHolder(
|
||||||
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
||||||
holder: CatalogueSearchCardHolder,
|
holder: SourceSearchCardHolder,
|
||||||
position: Int,
|
position: Int,
|
||||||
payloads: MutableList<Any?>?
|
payloads: MutableList<Any?>?
|
||||||
) {
|
) {
|
||||||
@ -28,7 +28,7 @@ class CatalogueSearchCardItem(val manga: Manga) : AbstractFlexibleItem<Catalogue
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other is CatalogueSearchCardItem) {
|
if (other is SourceSearchCardItem) {
|
||||||
return manga.id == other.manga.id
|
return manga.id == other.manga.id
|
||||||
}
|
}
|
||||||
return false
|
return false
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@ -17,23 +17,23 @@ import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
|||||||
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
|
||||||
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
||||||
import eu.kanade.tachiyomi.util.view.applyWindowInsetsForController
|
import eu.kanade.tachiyomi.util.view.applyWindowInsetsForController
|
||||||
import kotlinx.android.synthetic.main.catalogue_global_search_controller.*
|
import kotlinx.android.synthetic.main.source_global_search_controller.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This controller shows and manages the different search result in global search.
|
* This controller shows and manages the different search result in global search.
|
||||||
* This controller should only handle UI actions, IO actions should be done by [CatalogueSearchPresenter]
|
* This controller should only handle UI actions, IO actions should be done by [SourceSearchPresenter]
|
||||||
* [CatalogueSearchCardAdapter.OnMangaClickListener] called when manga is clicked in global search
|
* [SourceSearchCardAdapter.OnMangaClickListener] called when manga is clicked in global search
|
||||||
*/
|
*/
|
||||||
open class CatalogueSearchController(
|
open class SourceSearchController(
|
||||||
protected val initialQuery: String? = null,
|
protected val initialQuery: String? = null,
|
||||||
protected val extensionFilter: String? = null
|
protected val extensionFilter: String? = null
|
||||||
) : NucleusController<CatalogueSearchPresenter>(),
|
) : NucleusController<SourceSearchPresenter>(),
|
||||||
CatalogueSearchCardAdapter.OnMangaClickListener {
|
SourceSearchCardAdapter.OnMangaClickListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter containing search results grouped by lang.
|
* Adapter containing search results grouped by lang.
|
||||||
*/
|
*/
|
||||||
protected var adapter: CatalogueSearchAdapter? = null
|
protected var adapter: SourceSearchAdapter? = null
|
||||||
|
|
||||||
private var customTitle: String? = null
|
private var customTitle: String? = null
|
||||||
|
|
||||||
@ -45,14 +45,14 @@ open class CatalogueSearchController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiate the view with [R.layout.catalogue_global_search_controller].
|
* Initiate the view with [R.layout.source_global_search_controller].
|
||||||
*
|
*
|
||||||
* @param inflater used to load the layout xml.
|
* @param inflater used to load the layout xml.
|
||||||
* @param container containing parent views.
|
* @param container containing parent views.
|
||||||
* @return inflated view
|
* @return inflated view
|
||||||
*/
|
*/
|
||||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): android.view.View {
|
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): android.view.View {
|
||||||
return inflater.inflate(R.layout.catalogue_global_search_controller, container, false)
|
return inflater.inflate(R.layout.source_global_search_controller, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,12 +65,12 @@ open class CatalogueSearchController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the [CatalogueSearchPresenter] used in controller.
|
* Create the [SourceSearchPresenter] used in controller.
|
||||||
*
|
*
|
||||||
* @return instance of [CatalogueSearchPresenter]
|
* @return instance of [SourceSearchPresenter]
|
||||||
*/
|
*/
|
||||||
override fun createPresenter(): CatalogueSearchPresenter {
|
override fun createPresenter(): SourceSearchPresenter {
|
||||||
return CatalogueSearchPresenter(initialQuery, extensionFilter)
|
return SourceSearchPresenter(initialQuery, extensionFilter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -138,7 +138,7 @@ open class CatalogueSearchController(
|
|||||||
super.onViewCreated(view)
|
super.onViewCreated(view)
|
||||||
view.applyWindowInsetsForController()
|
view.applyWindowInsetsForController()
|
||||||
|
|
||||||
adapter = CatalogueSearchAdapter(this)
|
adapter = SourceSearchAdapter(this)
|
||||||
|
|
||||||
// Create recycler and set adapter.
|
// Create recycler and set adapter.
|
||||||
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context)
|
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context)
|
||||||
@ -171,13 +171,13 @@ open class CatalogueSearchController(
|
|||||||
* @param source used to find holder containing source
|
* @param source used to find holder containing source
|
||||||
* @return the holder of the manga or null if it's not bound.
|
* @return the holder of the manga or null if it's not bound.
|
||||||
*/
|
*/
|
||||||
private fun getHolder(source: CatalogueSource): CatalogueSearchHolder? {
|
private fun getHolder(source: CatalogueSource): SourceSearchHolder? {
|
||||||
val adapter = adapter ?: return null
|
val adapter = adapter ?: return null
|
||||||
|
|
||||||
adapter.allBoundViewHolders.forEach { holder ->
|
adapter.allBoundViewHolders.forEach { holder ->
|
||||||
val item = adapter.getItem(holder.adapterPosition)
|
val item = adapter.getItem(holder.adapterPosition)
|
||||||
if (item != null && source.id == item.source.id) {
|
if (item != null && source.id == item.source.id) {
|
||||||
return holder as CatalogueSearchHolder
|
return holder as SourceSearchHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ open class CatalogueSearchController(
|
|||||||
*
|
*
|
||||||
* @param searchResult result of search.
|
* @param searchResult result of search.
|
||||||
*/
|
*/
|
||||||
fun setItems(searchResult: List<CatalogueSearchItem>) {
|
fun setItems(searchResult: List<SourceSearchItem>) {
|
||||||
if (extensionFilter != null) {
|
if (extensionFilter != null) {
|
||||||
val results = searchResult.first().results
|
val results = searchResult.first().results
|
||||||
if (results != null && results.size == 1) {
|
if (results != null && results.size == 1) {
|
@ -1,28 +1,27 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import kotlinx.android.synthetic.main.catalogue_global_search_controller_card.*
|
import kotlinx.android.synthetic.main.source_global_search_controller_card.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder that binds the [CatalogueSearchItem] containing catalogue cards.
|
* Holder that binds the [SourceSearchItem] containing catalogue cards.
|
||||||
*
|
*
|
||||||
* @param view view of [CatalogueSearchItem]
|
* @param view view of [SourceSearchItem]
|
||||||
* @param adapter instance of [CatalogueSearchAdapter]
|
* @param adapter instance of [SourceSearchAdapter]
|
||||||
*/
|
*/
|
||||||
class CatalogueSearchHolder(view: View, val adapter: CatalogueSearchAdapter) :
|
class SourceSearchHolder(view: View, val adapter: SourceSearchAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
BaseFlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter containing manga from search results.
|
* Adapter containing manga from search results.
|
||||||
*/
|
*/
|
||||||
private val mangaAdapter = CatalogueSearchCardAdapter(adapter.controller)
|
private val mangaAdapter = SourceSearchCardAdapter(adapter.controller)
|
||||||
|
|
||||||
private var lastBoundResults: List<CatalogueSearchCardItem>? = null
|
private var lastBoundResults: List<SourceSearchCardItem>? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Set layout horizontal.
|
// Set layout horizontal.
|
||||||
@ -36,7 +35,7 @@ class CatalogueSearchHolder(view: View, val adapter: CatalogueSearchAdapter) :
|
|||||||
*
|
*
|
||||||
* @param item item of card.
|
* @param item item of card.
|
||||||
*/
|
*/
|
||||||
fun bind(item: CatalogueSearchItem) {
|
fun bind(item: SourceSearchItem) {
|
||||||
val source = item.source
|
val source = item.source
|
||||||
val results = item.results
|
val results = item.results
|
||||||
|
|
||||||
@ -81,11 +80,11 @@ class CatalogueSearchHolder(view: View, val adapter: CatalogueSearchAdapter) :
|
|||||||
* @param manga the manga to find.
|
* @param manga the manga to find.
|
||||||
* @return the holder of the manga or null if it's not bound.
|
* @return the holder of the manga or null if it's not bound.
|
||||||
*/
|
*/
|
||||||
private fun getHolder(manga: Manga): CatalogueSearchCardHolder? {
|
private fun getHolder(manga: Manga): SourceSearchCardHolder? {
|
||||||
mangaAdapter.allBoundViewHolders.forEach { holder ->
|
mangaAdapter.allBoundViewHolders.forEach { holder ->
|
||||||
val item = mangaAdapter.getItem(holder.adapterPosition)
|
val item = mangaAdapter.getItem(holder.adapterPosition)
|
||||||
if (item != null && item.manga.id!! == manga.id!!) {
|
if (item != null && item.manga.id!! == manga.id!!) {
|
||||||
return holder as CatalogueSearchCardHolder
|
return holder as SourceSearchCardHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -15,8 +15,8 @@ import eu.kanade.tachiyomi.source.CatalogueSource
|
|||||||
* @param results the search results.
|
* @param results the search results.
|
||||||
* @param highlighted whether this search item should be highlighted/marked in the catalogue search view.
|
* @param highlighted whether this search item should be highlighted/marked in the catalogue search view.
|
||||||
*/
|
*/
|
||||||
class CatalogueSearchItem(val source: CatalogueSource, val results: List<CatalogueSearchCardItem>?, val highlighted: Boolean = false) :
|
class SourceSearchItem(val source: CatalogueSource, val results: List<SourceSearchCardItem>?, val highlighted: Boolean = false) :
|
||||||
AbstractFlexibleItem<CatalogueSearchHolder>() {
|
AbstractFlexibleItem<SourceSearchHolder>() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set view.
|
* Set view.
|
||||||
@ -24,16 +24,16 @@ class CatalogueSearchItem(val source: CatalogueSource, val results: List<Catalog
|
|||||||
* @return id of view
|
* @return id of view
|
||||||
*/
|
*/
|
||||||
override fun getLayoutRes(): Int {
|
override fun getLayoutRes(): Int {
|
||||||
return R.layout.catalogue_global_search_controller_card
|
return R.layout.source_global_search_controller_card
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create view holder (see [CatalogueSearchAdapter].
|
* Create view holder (see [SourceSearchAdapter].
|
||||||
*
|
*
|
||||||
* @return holder of view.
|
* @return holder of view.
|
||||||
*/
|
*/
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): CatalogueSearchHolder {
|
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): SourceSearchHolder {
|
||||||
return CatalogueSearchHolder(view, adapter as CatalogueSearchAdapter)
|
return SourceSearchHolder(view, adapter as SourceSearchAdapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +41,7 @@ class CatalogueSearchItem(val source: CatalogueSource, val results: List<Catalog
|
|||||||
*/
|
*/
|
||||||
override fun bindViewHolder(
|
override fun bindViewHolder(
|
||||||
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
||||||
holder: CatalogueSearchHolder,
|
holder: SourceSearchHolder,
|
||||||
position: Int,
|
position: Int,
|
||||||
payloads: MutableList<Any?>?
|
payloads: MutableList<Any?>?
|
||||||
) {
|
) {
|
||||||
@ -54,7 +54,7 @@ class CatalogueSearchItem(val source: CatalogueSource, val results: List<Catalog
|
|||||||
* @return items are equal?
|
* @return items are equal?
|
||||||
*/
|
*/
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other is CatalogueSearchItem) {
|
if (other is SourceSearchItem) {
|
||||||
return source.id == other.source.id
|
return source.id == other.source.id
|
||||||
}
|
}
|
||||||
return false
|
return false
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.global_search
|
package eu.kanade.tachiyomi.ui.source.global_search
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.source.model.FilterList
|
|||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCataloguePresenter
|
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourcePresenter
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
@ -25,20 +25,20 @@ import uy.kohesive.injekt.api.get
|
|||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Presenter of [CatalogueSearchController]
|
* Presenter of [SourceSearchController]
|
||||||
* Function calls should be done from here. UI calls should be done from the controller.
|
* Function calls should be done from here. UI calls should be done from the controller.
|
||||||
*
|
*
|
||||||
* @param sourceManager manages the different sources.
|
* @param sourceManager manages the different sources.
|
||||||
* @param db manages the database calls.
|
* @param db manages the database calls.
|
||||||
* @param preferencesHelper manages the preference calls.
|
* @param preferencesHelper manages the preference calls.
|
||||||
*/
|
*/
|
||||||
open class CatalogueSearchPresenter(
|
open class SourceSearchPresenter(
|
||||||
val initialQuery: String? = "",
|
private val initialQuery: String? = "",
|
||||||
val initialExtensionFilter: String? = null,
|
private val initialExtensionFilter: String? = null,
|
||||||
val sourceManager: SourceManager = Injekt.get(),
|
val sourceManager: SourceManager = Injekt.get(),
|
||||||
val db: DatabaseHelper = Injekt.get(),
|
val db: DatabaseHelper = Injekt.get(),
|
||||||
val preferencesHelper: PreferencesHelper = Injekt.get()
|
private val preferencesHelper: PreferencesHelper = Injekt.get()
|
||||||
) : BasePresenter<CatalogueSearchController>() {
|
) : BasePresenter<SourceSearchController>() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enabled sources.
|
* Enabled sources.
|
||||||
@ -73,12 +73,12 @@ open class CatalogueSearchPresenter(
|
|||||||
override fun onCreate(savedState: Bundle?) {
|
override fun onCreate(savedState: Bundle?) {
|
||||||
super.onCreate(savedState)
|
super.onCreate(savedState)
|
||||||
|
|
||||||
extensionFilter = savedState?.getString(CatalogueSearchPresenter::extensionFilter.name)
|
extensionFilter = savedState?.getString(SourceSearchPresenter::extensionFilter.name)
|
||||||
?: initialExtensionFilter
|
?: initialExtensionFilter
|
||||||
|
|
||||||
// Perform a search with previous or initial state
|
// Perform a search with previous or initial state
|
||||||
search(
|
search(
|
||||||
savedState?.getString(BrowseCataloguePresenter::query.name) ?: initialQuery.orEmpty()
|
savedState?.getString(BrowseSourcePresenter::query.name) ?: initialQuery.orEmpty()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,8 +89,8 @@ open class CatalogueSearchPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onSave(state: Bundle) {
|
override fun onSave(state: Bundle) {
|
||||||
state.putString(BrowseCataloguePresenter::query.name, query)
|
state.putString(BrowseSourcePresenter::query.name, query)
|
||||||
state.putString(CatalogueSearchPresenter::extensionFilter.name, extensionFilter)
|
state.putString(SourceSearchPresenter::extensionFilter.name, extensionFilter)
|
||||||
super.onSave(state)
|
super.onSave(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ open class CatalogueSearchPresenter(
|
|||||||
*/
|
*/
|
||||||
protected open fun getEnabledSources(): List<CatalogueSource> {
|
protected open fun getEnabledSources(): List<CatalogueSource> {
|
||||||
val languages = preferencesHelper.enabledLanguages().getOrDefault()
|
val languages = preferencesHelper.enabledLanguages().getOrDefault()
|
||||||
val hiddenCatalogues = preferencesHelper.hiddenCatalogues().getOrDefault()
|
val hiddenCatalogues = preferencesHelper.hiddenSources().getOrDefault()
|
||||||
|
|
||||||
return sourceManager.getCatalogueSources()
|
return sourceManager.getCatalogueSources()
|
||||||
.filter { it.lang in languages }
|
.filter { it.lang in languages }
|
||||||
@ -132,9 +132,9 @@ open class CatalogueSearchPresenter(
|
|||||||
*/
|
*/
|
||||||
protected open fun createCatalogueSearchItem(
|
protected open fun createCatalogueSearchItem(
|
||||||
source: CatalogueSource,
|
source: CatalogueSource,
|
||||||
results: List<CatalogueSearchCardItem>?
|
results: List<SourceSearchCardItem>?
|
||||||
): CatalogueSearchItem {
|
): SourceSearchItem {
|
||||||
return CatalogueSearchItem(source, results)
|
return SourceSearchItem(source, results)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -178,7 +178,7 @@ open class CatalogueSearchPresenter(
|
|||||||
.map {
|
.map {
|
||||||
createCatalogueSearchItem(
|
createCatalogueSearchItem(
|
||||||
source,
|
source,
|
||||||
it.map { CatalogueSearchCardItem(it) })
|
it.map { SourceSearchCardItem(it) })
|
||||||
}
|
}
|
||||||
}, 5).observeOn(AndroidSchedulers.mainThread())
|
}, 5).observeOn(AndroidSchedulers.mainThread())
|
||||||
// Update matching source with the obtained results
|
// Update matching source with the obtained results
|
@ -1,19 +1,19 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.latest
|
package eu.kanade.tachiyomi.ui.source.latest
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCatalogueController
|
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCataloguePresenter
|
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourcePresenter
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import kotlinx.android.synthetic.main.catalogue_controller.*
|
import kotlinx.android.synthetic.main.browse_source_controller.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller that shows the latest manga from the catalogue. Inherit [BrowseCatalogueController].
|
* Controller that shows the latest manga from the catalogue. Inherit [BrowseSourceController].
|
||||||
*/
|
*/
|
||||||
class LatestUpdatesController(bundle: Bundle) : BrowseCatalogueController(bundle) {
|
class LatestUpdatesController(bundle: Bundle) : BrowseSourceController(bundle) {
|
||||||
|
|
||||||
constructor(source: CatalogueSource) : this(Bundle().apply {
|
constructor(source: CatalogueSource) : this(Bundle().apply {
|
||||||
putLong(SOURCE_ID_KEY, source.id)
|
putLong(SOURCE_ID_KEY, source.id)
|
||||||
@ -24,7 +24,7 @@ class LatestUpdatesController(bundle: Bundle) : BrowseCatalogueController(bundle
|
|||||||
fab.gone()
|
fab.gone()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPresenter(): BrowseCataloguePresenter {
|
override fun createPresenter(): BrowseSourcePresenter {
|
||||||
return LatestUpdatesPresenter(args.getLong(SOURCE_ID_KEY))
|
return LatestUpdatesPresenter(args.getLong(SOURCE_ID_KEY))
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.latest
|
package eu.kanade.tachiyomi.ui.source.latest
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.Pager
|
import eu.kanade.tachiyomi.ui.source.browse.Pager
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
import rx.schedulers.Schedulers
|
import rx.schedulers.Schedulers
|
@ -1,13 +1,13 @@
|
|||||||
package eu.kanade.tachiyomi.ui.catalogue.latest
|
package eu.kanade.tachiyomi.ui.source.latest
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCataloguePresenter
|
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourcePresenter
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.browse.Pager
|
import eu.kanade.tachiyomi.ui.source.browse.Pager
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Presenter of [LatestUpdatesController]. Inherit BrowseCataloguePresenter.
|
* Presenter of [LatestUpdatesController]. Inherit BrowseCataloguePresenter.
|
||||||
*/
|
*/
|
||||||
class LatestUpdatesPresenter(sourceId: Long) : BrowseCataloguePresenter(sourceId) {
|
class LatestUpdatesPresenter(sourceId: Long) : BrowseSourcePresenter(sourceId) {
|
||||||
|
|
||||||
override fun createPager(query: String, filters: FilterList): Pager {
|
override fun createPager(query: String, filters: FilterList): Pager {
|
||||||
return LatestUpdatesPager(source)
|
return LatestUpdatesPager(source)
|
@ -7,7 +7,7 @@ import android.os.Build
|
|||||||
import android.view.ContextThemeWrapper
|
import android.view.ContextThemeWrapper
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.ui.catalogue.CataloguePresenter
|
import eu.kanade.tachiyomi.ui.source.SourcePresenter
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ object LocaleHelper {
|
|||||||
return when (lang) {
|
return when (lang) {
|
||||||
null -> ""
|
null -> ""
|
||||||
"" -> context.getString(R.string.other)
|
"" -> context.getString(R.string.other)
|
||||||
CataloguePresenter.PINNED_KEY -> context.getString(R.string.pinned)
|
SourcePresenter.PINNED_KEY -> context.getString(R.string.pinned)
|
||||||
"all" -> context.getString(R.string.all)
|
"all" -> context.getString(R.string.all)
|
||||||
else -> {
|
else -> {
|
||||||
val locale = getLocale(lang)
|
val locale = getLocale(lang)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/catalouge_layout"
|
android:id="@+id/source_layout"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -12,7 +12,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:id="@+id/catalogue_view"
|
android:id="@+id/catalogue_view"
|
||||||
tools:context="eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCatalogueController">
|
tools:context="eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController">
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/progress"
|
android:id="@+id/progress"
|
@ -7,4 +7,4 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:columnWidth="140dp"
|
android:columnWidth="140dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
tools:listitem="@layout/catalogue_grid_item" />
|
tools:listitem="@layout/manga_grid_item" />
|
||||||
|
@ -8,5 +8,5 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:columnWidth="120dp"
|
android:columnWidth="120dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
tools:listitem="@layout/catalogue_grid_item"
|
tools:listitem="@layout/manga_grid_item"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto" />
|
xmlns:app="http://schemas.android.com/apk/res-auto" />
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/migration_manga_card_from"
|
android:id="@+id/migration_manga_card_from"
|
||||||
layout="@layout/catalogue_grid_item"
|
layout="@layout/manga_grid_item"
|
||||||
android:layout_width="150dp"
|
android:layout_width="150dp"
|
||||||
app:layout_constraintVertical_bias="1.0"
|
app:layout_constraintVertical_bias="1.0"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/migration_manga_card_to"
|
android:id="@+id/migration_manga_card_to"
|
||||||
layout="@layout/catalogue_grid_item"
|
layout="@layout/manga_grid_item"
|
||||||
app:layout_constraintVertical_bias="1.0"
|
app:layout_constraintVertical_bias="1.0"
|
||||||
android:layout_width="150dp"
|
android:layout_width="150dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:layout_marginBottom="30dp"
|
android:layout_marginBottom="30dp"
|
||||||
android:paddingBottom="20dp"
|
android:paddingBottom="20dp"
|
||||||
tools:listitem="@layout/catalogue_main_controller_card" />
|
tools:listitem="@layout/source_header_item" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
@ -12,6 +12,6 @@
|
|||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="4dp"
|
||||||
tools:listitem="@layout/catalogue_global_search_controller_card" />
|
tools:listitem="@layout/source_global_search_controller_card" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
@ -44,7 +44,7 @@
|
|||||||
android:paddingEnd="4dp"
|
android:paddingEnd="4dp"
|
||||||
android:paddingStart="4dp"
|
android:paddingStart="4dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
tools:listitem="@layout/catalogue_global_search_controller_card_item" />
|
tools:listitem="@layout/source_global_search_controller_card_item" />
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user