fix shimmer items having the wrong size, update MediaFragmentSimilar to not depend on a specific view model

This commit is contained in:
Jannik 2022-12-26 19:40:03 +01:00
parent e113a9c795
commit e0f05169f5
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
6 changed files with 32 additions and 29 deletions

View File

@ -42,9 +42,12 @@ import kotlinx.coroutines.launch
import org.mosad.teapod.R
import org.mosad.teapod.databinding.FragmentHomeBinding
import org.mosad.teapod.ui.activity.main.viewmodel.HomeViewModel
import org.mosad.teapod.util.*
import org.mosad.teapod.util.adapter.MediaEpisodeListAdapter
import org.mosad.teapod.util.adapter.MediaItemListAdapter
import org.mosad.teapod.util.playerIntent
import org.mosad.teapod.util.setDrawableTop
import org.mosad.teapod.util.showFragment
import org.mosad.teapod.util.toItemMediaList
class HomeFragment : Fragment() {
@ -188,7 +191,7 @@ class HomeFragment : Fragment() {
private fun setShimmerLayoutItemSize(shimmerLayout: ShimmerFrameLayout) {
(shimmerLayout.children.first() as? LinearLayout)?.children?.forEach { child ->
child.layoutParams.apply {
width = (binding.root.measuredWidth / requireContext().resources.getInteger(R.integer.item_media_columns)) - itemOffset
width = (resources.displayMetrics.widthPixels / requireContext().resources.getInteger(R.integer.item_media_columns)) - itemOffset
}
}
}

View File

@ -26,6 +26,7 @@ import org.mosad.teapod.util.playerIntent
import org.mosad.teapod.util.tmdb.TMDBApiController
import org.mosad.teapod.util.tmdb.TMDBMovie
import org.mosad.teapod.util.tmdb.TMDBTVShow
import org.mosad.teapod.util.toItemMediaList
/**
* The media detail fragment.
@ -126,6 +127,20 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
pagerAdapter.notifyItemInserted(fragments.indexOf(it))
}
// if has similar titles
if (model.similarTo.total > 0) {
MediaFragmentSimilar(model.similarTo.toItemMediaList()).also {
fragments.add(it)
pagerAdapter.notifyItemInserted(fragments.indexOf(it))
}
}
// disable scrolling on appbar, if no tabs where added
if(fragments.isEmpty()) {
val params = binding.linearMedia.layoutParams as AppBarLayout.LayoutParams
params.scrollFlags = 0 // clear all scroll flags
}
// specific gui (via tmdb)
when (tmdbResult) {
is TMDBTVShow -> {
@ -154,20 +169,6 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
}
}
// if has similar titles
if (model.similarTo.total > 0) {
MediaFragmentSimilar().also {
fragments.add(it)
pagerAdapter.notifyItemInserted(fragments.indexOf(it))
}
}
// disable scrolling on appbar, if no tabs where added
if(fragments.isEmpty()) {
val params = binding.linearMedia.layoutParams as AppBarLayout.LayoutParams
params.scrollFlags = 0 // clear all scroll flags
}
binding.frameLoading.visibility = View.GONE // hide loading indicator
}

View File

@ -27,17 +27,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import org.mosad.teapod.databinding.FragmentMediaSimilarBinding
import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
import org.mosad.teapod.util.ItemMedia
import org.mosad.teapod.util.adapter.MediaItemListAdapter
import org.mosad.teapod.util.decoration.MediaItemDecoration
import org.mosad.teapod.util.showFragment
import org.mosad.teapod.util.toItemMediaList
class MediaFragmentSimilar : Fragment() {
class MediaFragmentSimilar(val items: List<ItemMedia>) : Fragment() {
private val model: MediaFragmentViewModel by viewModels({requireParentFragment()})
private lateinit var binding: FragmentMediaSimilarBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@ -55,6 +51,6 @@ class MediaFragmentSimilar : Fragment() {
)
val adapterSimilar = binding.recyclerMediaSimilar.adapter as MediaItemListAdapter
adapterSimilar.submitList(model.similarTo.toItemMediaList())
adapterSimilar.submitList(items)
}
}

View File

@ -8,18 +8,14 @@
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="3dp"
android:backgroundTint="?themeSecondary"
app:cardCornerRadius="7dp"
app:cardElevation="4dp"
app:layout_constrainedWidth="true"
app:cardUseCompatPadding="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.96">
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@ -18,6 +18,9 @@
<!-- search fragment -->
<string name="search_hint">Suche nach Filmen und Serien</string>
<!-- my lists fragment -->
<string name="downloads">Downloads</string>
<!-- media fragment -->
<string name="button_play">Abspielen</string>
<plurals name="text_episodes_count">

View File

@ -21,6 +21,10 @@
<string name="media_poster_desc" translatable="false">poster</string>
<string name="media_poster_backdrop_desc" translatable="false">poster backdrop</string>
<!-- my lists fragment -->
<string name="crunchylists" translatable="false">Crunchylists</string>
<string name="downloads">Downloads</string>
<!-- media fragment -->
<string name="button_play">Play</string>
<string name="text_title_ex" translatable="false">A Silent Voice</string>