diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListAdapter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListAdapter.kt index 93b65c0da..323eba0d3 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListAdapter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListAdapter.kt @@ -7,12 +7,14 @@ import org.koitharu.kotatsu.core.ui.list.fastscroll.FastScroller import org.koitharu.kotatsu.list.ui.adapter.MangaListAdapter import org.koitharu.kotatsu.list.ui.adapter.MangaListListener import org.koitharu.kotatsu.list.ui.model.ListHeader +import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver class HistoryListAdapter( coil: ImageLoader, lifecycleOwner: LifecycleOwner, - listener: MangaListListener -) : MangaListAdapter(coil, lifecycleOwner, listener), FastScroller.SectionIndexer { + listener: MangaListListener, + sizeResolver: ItemSizeResolver, +) : MangaListAdapter(coil, lifecycleOwner, listener, sizeResolver), FastScroller.SectionIndexer { override fun getSectionText(context: Context, position: Int): CharSequence? { val list = items diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListFragment.kt index 4d455ba5a..825115da3 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListFragment.kt @@ -13,6 +13,7 @@ import org.koitharu.kotatsu.core.util.ext.addMenuProvider import org.koitharu.kotatsu.core.util.ext.observe import org.koitharu.kotatsu.databinding.FragmentListBinding import org.koitharu.kotatsu.list.ui.MangaListFragment +import org.koitharu.kotatsu.list.ui.size.DynamicItemSizeResolver import org.koitharu.kotatsu.parsers.model.MangaSource @AndroidEntryPoint @@ -55,5 +56,10 @@ class HistoryListFragment : MangaListFragment() { } } - override fun onCreateAdapter() = HistoryListAdapter(coil, viewLifecycleOwner, this) + override fun onCreateAdapter() = HistoryListAdapter( + coil, + viewLifecycleOwner, + this, + DynamicItemSizeResolver(resources, settings, adjustWidth = false), + ) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/MangaListFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/MangaListFragment.kt index bb65f865a..733e9a15e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/MangaListFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/MangaListFragment.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.launch import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver import org.koitharu.kotatsu.core.exceptions.resolve.SnackbarErrorObserver +import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.core.ui.BaseFragment import org.koitharu.kotatsu.core.ui.list.FitHeightGridLayoutManager @@ -49,6 +50,7 @@ import org.koitharu.kotatsu.list.ui.adapter.TypedListSpacingDecoration import org.koitharu.kotatsu.list.ui.model.ListHeader import org.koitharu.kotatsu.list.ui.model.ListModel import org.koitharu.kotatsu.list.ui.model.MangaItemModel +import org.koitharu.kotatsu.list.ui.size.DynamicItemSizeResolver import org.koitharu.kotatsu.main.ui.MainActivity import org.koitharu.kotatsu.main.ui.owners.AppBarOwner import org.koitharu.kotatsu.parsers.model.Manga @@ -69,6 +71,9 @@ abstract class MangaListFragment : @Inject lateinit var coil: ImageLoader + @Inject + lateinit var settings: AppSettings + private var listAdapter: MangaListAdapter? = null private var paginationListener: PaginationScrollListener? = null private var selectionController: ListSelectionController? = null @@ -195,6 +200,7 @@ abstract class MangaListFragment : coil = coil, lifecycleOwner = viewLifecycleOwner, listener = this, + sizeResolver = DynamicItemSizeResolver(resources, settings, adjustWidth = false) ) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt index e18661cb5..d86caff0c 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt @@ -23,7 +23,7 @@ import org.koitharu.kotatsu.parsers.model.Manga fun mangaGridItemAD( coil: ImageLoader, lifecycleOwner: LifecycleOwner, - sizeResolver: ItemSizeResolver?, + sizeResolver: ItemSizeResolver, clickListener: OnListItemClickListener, ) = adapterDelegateViewBinding( { inflater, parent -> ItemMangaGridBinding.inflate(inflater, parent, false) }, @@ -36,7 +36,7 @@ fun mangaGridItemAD( itemView.setOnLongClickListener { clickListener.onItemLongClick(item.manga, it) } - sizeResolver?.attachToView(lifecycleOwner, itemView, binding.textViewTitle, binding.progressView) + sizeResolver.attachToView(lifecycleOwner, itemView, binding.textViewTitle, binding.progressView) bind { payloads -> binding.textViewTitle.text = item.title diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt index 723dabf71..c53e556d7 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt @@ -4,17 +4,19 @@ import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import org.koitharu.kotatsu.core.ui.BaseListAdapter import org.koitharu.kotatsu.list.ui.model.ListModel +import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver open class MangaListAdapter( coil: ImageLoader, lifecycleOwner: LifecycleOwner, listener: MangaListListener, + sizeResolver: ItemSizeResolver, ) : BaseListAdapter() { init { addDelegate(ListItemType.MANGA_LIST, mangaListItemAD(coil, lifecycleOwner, listener)) addDelegate(ListItemType.MANGA_LIST_DETAILED, mangaListDetailedItemAD(coil, lifecycleOwner, listener)) - addDelegate(ListItemType.MANGA_GRID, mangaGridItemAD(coil, lifecycleOwner, null, listener)) + addDelegate(ListItemType.MANGA_GRID, mangaGridItemAD(coil, lifecycleOwner, sizeResolver, listener)) addDelegate(ListItemType.FOOTER_LOADING, loadingFooterAD()) addDelegate(ListItemType.STATE_LOADING, loadingStateAD()) addDelegate(ListItemType.STATE_ERROR, errorStateListAD(listener)) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/size/DynamicItemSizeResolver.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/size/DynamicItemSizeResolver.kt index cf9fbd7cf..a26cf770f 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/size/DynamicItemSizeResolver.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/size/DynamicItemSizeResolver.kt @@ -5,7 +5,6 @@ import android.content.res.Resources import android.view.View import android.widget.TextView import androidx.annotation.StyleRes -import androidx.core.view.updateLayoutParams import androidx.core.widget.TextViewCompat import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner @@ -14,7 +13,11 @@ import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.history.ui.util.ReadingProgressView import kotlin.math.roundToInt -class DynamicItemSizeResolver(resources: Resources, private val settings: AppSettings) : ItemSizeResolver { +class DynamicItemSizeResolver( + resources: Resources, + private val settings: AppSettings, + private val adjustWidth: Boolean, +) : ItemSizeResolver { private val gridWidth = resources.getDimension(R.dimen.preferred_grid_width) private val scaleFactor: Float @@ -72,8 +75,12 @@ class DynamicItemSizeResolver(resources: Resources, private val settings: AppSet fun update() { val newWidth = cellWidth textView?.adjustTextAppearance(newWidth) - view.updateLayoutParams { - width = newWidth + if (adjustWidth) { + val lp = view.layoutParams + if (lp.width != newWidth) { + lp.width = newWidth + view.layoutParams = lp + } } progressView?.adjustSize(newWidth) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/multi/MultiSearchActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/multi/MultiSearchActivity.kt index 363e944c3..9e69d5df6 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/multi/MultiSearchActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/multi/MultiSearchActivity.kt @@ -65,7 +65,7 @@ class MultiSearchActivity : val itemCLickListener = OnListItemClickListener { item, view -> startActivity(SearchActivity.newIntent(view.context, item.source, viewModel.query)) } - val sizeResolver = DynamicItemSizeResolver(resources, settings) + val sizeResolver = DynamicItemSizeResolver(resources, settings, adjustWidth = true) val selectionDecoration = MangaSelectionDecoration(this) selectionController = ListSelectionController( activity = this,