From c62ec99affc8fc01cc31590cd8e79b9e8cfa5ef7 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 5 Mar 2020 01:12:01 -0800 Subject: [PATCH] Fixed bug with uniform gird Also fixed search text being cleared --- .../tachiyomi/ui/library/LibraryGridHolder.kt | 26 +++++++-- .../tachiyomi/ui/library/LibraryItem.kt | 5 +- .../ui/library/LibraryListController.kt | 58 +------------------ .../tachiyomi/ui/library/LibraryPresenter.kt | 4 +- .../ui/manga/MangaDetailsController.kt | 16 ++--- .../tachiyomi/util/view/ViewExtensions.kt | 18 +++++- .../main/res/layout/catalogue_grid_item.xml | 5 -- app/src/main/res/values/strings.xml | 2 +- 8 files changed, 48 insertions(+), 86 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt index 2a21f7df60..093753eb1e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt @@ -5,6 +5,7 @@ import android.view.View import android.widget.FrameLayout import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.signature.ObjectKey +import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.util.view.gone @@ -66,15 +67,28 @@ class LibraryGridHolder( if (item.manga.thumbnail_url == null) GlideApp.with(view.context).clear(cover_thumbnail) else { val id = item.manga.id ?: return - var glide = GlideApp.with(adapter.recyclerView.context).load(item.manga) - .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) - .signature(ObjectKey(MangaImpl.getLastCoverFetch(id).toString())) - glide = if (fixedSize) glide.centerCrop().override(cover_thumbnail.maxHeight) - else glide.override(cover_thumbnail.maxHeight) - glide.into(cover_thumbnail) + if (cover_thumbnail.height == 0) { + val oldPos = adapterPosition + adapter.recyclerView.post { + if (oldPos == adapterPosition) + setCover(item.manga, id) + } + } + else setCover(item.manga, id) } } + private fun setCover(manga: Manga, id: Long) { + GlideApp.with(adapter.recyclerView.context).load(manga) + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) + .signature(ObjectKey(MangaImpl.getLastCoverFetch(id).toString())) + .apply { + if (fixedSize) centerCrop() + else override(cover_thumbnail.maxHeight) + } + .into(cover_thumbnail) + } + private fun playButtonClicked() { adapter.libraryListener.startReading(adapterPosition) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt index 73799631ea..2e1209490b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt @@ -22,7 +22,6 @@ import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.widget.AutofitRecyclerView import kotlinx.android.synthetic.main.catalogue_grid_item.view.* -import timber.log.Timber import uy.kohesive.injekt.injectLazy class LibraryItem(val manga: LibraryManga, @@ -71,8 +70,8 @@ class LibraryItem(val manga: LibraryManga, constraint_layout.layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT ) - cover_thumbnail.maxHeight = (parent.itemWidth / 3f * 3.7f).toInt() - cover_thumbnail.minimumHeight = (parent.itemWidth / 3f * 3.7f).toInt() + cover_thumbnail.maxHeight = Int.MAX_VALUE + cover_thumbnail.minimumHeight = 0 constraint_layout.minHeight = 0 cover_thumbnail.scaleType = ImageView.ScaleType.CENTER_CROP cover_thumbnail.adjustViewBounds = false diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt index 3f395484cc..6d99e585bb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt @@ -96,31 +96,14 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), activeCategory = order val category = presenter.categories.find { it.order == order } - //val categortPosition = presenter.categories.indexOf(category) customTitleSpinner.category_title.text = category?.name ?: "" - /*if (spinner.selectedItemPosition != categortPosition) { - updateScroll = true - spinner.setSelection(categortPosition, true) - }*/ } } } override fun onViewCreated(view: View) { super.onViewCreated(view) - /*launchUI { - view.updateLayoutParams { - val attrsArray = intArrayOf(android.R.attr.actionBarSize) - val array = view.context.obtainStyledAttributes(attrsArray) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - topMargin = - view.rootWindowInsets.systemWindowInsetTop + array.getDimensionPixelSize( - 0, 0 - ) - } - array.recycle() - } - }*/ + // pad the recycler if the filter bottom sheet is visible if (!phoneLandscape) { val height = view.context.resources.getDimensionPixelSize(R.dimen.rounder_radius) + 4.dpToPx @@ -135,19 +118,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), override fun layoutView(view: View) { adapter = LibraryCategoryAdapter(this) - /* recycler = - (library_layout.inflate(R.layout.library_grid_recycler) as AutofitRecyclerView).apply { - spanCount = if (libraryLayout == 0) 1 else mangaPerRow - manager.spanSizeLookup = (object : GridLayoutManager.SpanSizeLookup() { - override fun getSpanSize(position: Int): Int { - if (libraryLayout == 0) return 1 - val item = this@LibraryListController.adapter.getItem(position) - return if (item is LibraryHeaderItem) manager.spanCount else 1 - } - }) - }*/ - - //recycler.spanCount = if (libraryLayout == 0) 1 else mangaPerRow if (libraryLayout == 0)recycler.spanCount = 1 else recycler.columnWidth = (90 + (preferences.gridSize().getOrDefault() * 30)).dpToPx recycler.manager.spanSizeLookup = (object : GridLayoutManager.SpanSizeLookup() { @@ -159,22 +129,12 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), }) recycler.setHasFixedSize(true) recycler.adapter = adapter - //recycler_layout.addView(recycler) adapter.fastScroller = fast_scroller recycler.addOnScrollListener(scrollListener) - /* val dropdown = library_layout.inflate(R.layout.expanded_dropdown_menu) as - TextInputLayout // ReSpinner(view .context) - spinner = dropdown.filled_exposed_dropdown*/ - val tv = TypedValue() activity!!.theme.resolveAttribute(R.attr.actionBarTintColor, tv, true) - /*spinner.backgroundTintList = ContextCompat.getColorStateList( - view.context, tv.resourceId - ) - (spinner.parent.parent as ViewGroup).removeView(spinner.parent as View) - (activity as MainActivity).supportActionBar?.customView = spinner.parent as View*/ customTitleSpinner = library_layout.inflate(R.layout.spinner_title) as LinearLayout (activity as MainActivity).supportActionBar?.setDisplayShowCustomEnabled(false) spinnerAdapter = SpinnerAdapter( @@ -192,9 +152,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), true } (activity as MainActivity).supportActionBar?.customView = customTitleSpinner - //spinnerAdapter?.setDropDownViewResource(R.layout.library_spinner_entry_text) - //spinner.setAdapter(spinnerAdapter) - // spinner.adapter = spinnerAdapter } override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { @@ -230,15 +187,11 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), } adapter.setItems(mangaMap) - - //spinner.onItemSelectedListener = null val categoryNames = presenter.categories.map { it.name }.toTypedArray() spinnerAdapter = SpinnerAdapter(recyclerLayout.context, R.layout.library_spinner_textview, if (categoryNames.isNotEmpty()) categoryNames else arrayOf(recyclerLayout.context.getString(R.string.label_library)) ) - //spinnerAdapter?.setDropDownViewResource(R.layout.library_spinner_entry_text) - //spinner.setAdapter(spinnerAdapter) val isCurrentController = router?.backstack?.lastOrNull()?.controller() == this @@ -246,7 +199,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), ?.setDisplayShowCustomEnabled(isCurrentController && presenter.categories.size > 1) if (isCurrentController) setTitle() - //spinner.setSelection(min(presenter.categories.size - 1, activeCategory)) customTitleSpinner.category_title.text = presenter.categories[clamp(activeCategory, 0, @@ -265,7 +217,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), updateScroll = true } adapter.isLongPressDragEnabled = canDrag() - //tabsVisibilityRelay.call(false) titlePopupMenu.menu.clear() presenter.categories.forEach { category -> @@ -275,13 +226,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), titlePopupMenu.show() } - /*spinner.onItemSelectedListener = IgnoreFirstSpinnerListener { pos -> - if (updateScroll) { - updateScroll = false - return@IgnoreFirstSpinnerListener - } - scrollToHeader(presenter.categories[pos].order) - }*/ } private fun scrollToHeader(pos: Int, fade:Boolean = false) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 96d0d26486..5e4f388427 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -507,7 +507,7 @@ class LibraryPresenter( suspend fun updateView(categories: List, mangaMap: LibraryMap, freshStart:Boolean = false) { - if (!preferences.libraryAsSingleList().getOrDefault()) { + if (view !is LibraryListController) { view.onNextLibraryUpdate(categories, mangaMap, freshStart) } else { @@ -536,7 +536,7 @@ class LibraryPresenter( fun updateViewBlocking() { val mangaMap = currentMangaMap ?: return - if (!preferences.libraryAsSingleList().getOrDefault()) { + if (view !is LibraryListController) { if (mangaMap.values.firstOrNull()?.firstOrNull()?.header != null) return view.onNextLibraryUpdate(categories, mangaMap, true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt index 5604ddf598..4d13eb27d8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt @@ -161,7 +161,7 @@ class MangaDetailsController : BaseController, DividerItemDecoration.VERTICAL ) ) - recycler.setHasFixedSize(true) + recycler.setHasFixedSize(false) adapter?.fastScroller = fast_scroller val attrsArray = intArrayOf(android.R.attr.actionBarSize) val array = view.context.obtainStyledAttributes(attrsArray) @@ -290,6 +290,7 @@ class MangaDetailsController : BaseController, else if (type == ControllerChangeType.PUSH_EXIT || type == ControllerChangeType.POP_EXIT) { if (router.backstack.lastOrNull()?.controller() is DialogController) return + if (type == ControllerChangeType.POP_EXIT) setHasOptionsMenu(false) colorAnimator?.cancel() (activity as MainActivity).toolbar.setBackgroundColor(activity?.getResourceColor( @@ -333,17 +334,10 @@ class MangaDetailsController : BaseController, fun refreshAdapter() = adapter?.notifyDataSetChanged() override fun onItemClick(view: View?, position: Int): Boolean { - val adapter = adapter ?: return false - val chapter = adapter.getItem(position)?.chapter ?: return false + val chapter = adapter?.getItem(position)?.chapter ?: return false if (chapter.isHeader) return false - /*if (actionMode != null && adapter.mode == SelectableAdapter.Mode.MULTI) { - lastClickPosition = position - toggleSelection(position) - return true - } else {*/ - openChapter(chapter) - return false - //} + openChapter(chapter) + return false } override fun onItemLongClick(position: Int) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt index 6ec2891d5e..9f01cce7f6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt @@ -208,6 +208,19 @@ fun View.applyWindowInsetsForController() { requestApplyInsetsWhenAttached() } +fun View.checkHeightThen(f: () -> Unit) { + viewTreeObserver.addOnGlobalLayoutListener( + object : ViewTreeObserver.OnGlobalLayoutListener { + override fun onGlobalLayout() { + if (height > 0) { + viewTreeObserver.removeOnGlobalLayoutListener(this) + f() + } + } + } + ) +} + fun View.applyWindowInsetsForRootController(bottomNav: View) { viewTreeObserver.addOnGlobalLayoutListener( object : ViewTreeObserver.OnGlobalLayoutListener { @@ -279,10 +292,13 @@ fun Controller.setOnQueryTextChangeListener(searchView: SearchView, f: (text: St if (router.backstack.lastOrNull()?.controller() == this@setOnQueryTextChangeListener) { return f(newText) } - return true + return false } override fun onQueryTextSubmit(query: String?): Boolean { + if (router.backstack.lastOrNull()?.controller() == this@setOnQueryTextChangeListener) { + return f(query) + } return true } }) diff --git a/app/src/main/res/layout/catalogue_grid_item.xml b/app/src/main/res/layout/catalogue_grid_item.xml index efe561263f..12eb0bc919 100644 --- a/app/src/main/res/layout/catalogue_grid_item.xml +++ b/app/src/main/res/layout/catalogue_grid_item.xml @@ -36,11 +36,6 @@ android:adjustViewBounds="true" android:background="?android:attr/colorBackground" android:maxHeight="250dp" - app:layout_constrainedHeight="true" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" tools:background="?android:attr/colorBackground" tools:ignore="ContentDescription" tools:src="@mipmap/ic_launcher" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a21db6704..2fbdbc652d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -449,7 +449,7 @@ Remember this choice Manga already in category Category - Uniform Grid + Uniform covers Small Medium Large