fix shimmer items having the wrong size, update MediaFragmentSimilar to not depend on a specific view model
This commit is contained in:
		@ -42,9 +42,12 @@ import kotlinx.coroutines.launch
 | 
				
			|||||||
import org.mosad.teapod.R
 | 
					import org.mosad.teapod.R
 | 
				
			||||||
import org.mosad.teapod.databinding.FragmentHomeBinding
 | 
					import org.mosad.teapod.databinding.FragmentHomeBinding
 | 
				
			||||||
import org.mosad.teapod.ui.activity.main.viewmodel.HomeViewModel
 | 
					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.MediaEpisodeListAdapter
 | 
				
			||||||
import org.mosad.teapod.util.adapter.MediaItemListAdapter
 | 
					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() {
 | 
					class HomeFragment : Fragment() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -188,7 +191,7 @@ class HomeFragment : Fragment() {
 | 
				
			|||||||
    private fun setShimmerLayoutItemSize(shimmerLayout: ShimmerFrameLayout) {
 | 
					    private fun setShimmerLayoutItemSize(shimmerLayout: ShimmerFrameLayout) {
 | 
				
			||||||
        (shimmerLayout.children.first() as? LinearLayout)?.children?.forEach { child ->
 | 
					        (shimmerLayout.children.first() as? LinearLayout)?.children?.forEach { child ->
 | 
				
			||||||
            child.layoutParams.apply {
 | 
					            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
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,7 @@ import org.mosad.teapod.util.playerIntent
 | 
				
			|||||||
import org.mosad.teapod.util.tmdb.TMDBApiController
 | 
					import org.mosad.teapod.util.tmdb.TMDBApiController
 | 
				
			||||||
import org.mosad.teapod.util.tmdb.TMDBMovie
 | 
					import org.mosad.teapod.util.tmdb.TMDBMovie
 | 
				
			||||||
import org.mosad.teapod.util.tmdb.TMDBTVShow
 | 
					import org.mosad.teapod.util.tmdb.TMDBTVShow
 | 
				
			||||||
 | 
					import org.mosad.teapod.util.toItemMediaList
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The media detail fragment.
 | 
					 * The media detail fragment.
 | 
				
			||||||
@ -126,6 +127,20 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
 | 
				
			|||||||
            pagerAdapter.notifyItemInserted(fragments.indexOf(it))
 | 
					            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)
 | 
					        // specific gui (via tmdb)
 | 
				
			||||||
        when (tmdbResult) {
 | 
					        when (tmdbResult) {
 | 
				
			||||||
            is TMDBTVShow -> {
 | 
					            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
 | 
					        binding.frameLoading.visibility = View.GONE // hide loading indicator
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -27,17 +27,13 @@ import android.view.LayoutInflater
 | 
				
			|||||||
import android.view.View
 | 
					import android.view.View
 | 
				
			||||||
import android.view.ViewGroup
 | 
					import android.view.ViewGroup
 | 
				
			||||||
import androidx.fragment.app.Fragment
 | 
					import androidx.fragment.app.Fragment
 | 
				
			||||||
import androidx.fragment.app.viewModels
 | 
					 | 
				
			||||||
import org.mosad.teapod.databinding.FragmentMediaSimilarBinding
 | 
					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.adapter.MediaItemListAdapter
 | 
				
			||||||
import org.mosad.teapod.util.decoration.MediaItemDecoration
 | 
					 | 
				
			||||||
import org.mosad.teapod.util.showFragment
 | 
					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
 | 
					    private lateinit var binding: FragmentMediaSimilarBinding
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
 | 
					    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
 | 
				
			||||||
@ -55,6 +51,6 @@ class MediaFragmentSimilar : Fragment()  {
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val adapterSimilar = binding.recyclerMediaSimilar.adapter as MediaItemListAdapter
 | 
					        val adapterSimilar = binding.recyclerMediaSimilar.adapter as MediaItemListAdapter
 | 
				
			||||||
        adapterSimilar.submitList(model.similarTo.toItemMediaList())
 | 
					        adapterSimilar.submitList(items)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -8,18 +8,14 @@
 | 
				
			|||||||
    <com.google.android.material.card.MaterialCardView
 | 
					    <com.google.android.material.card.MaterialCardView
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="wrap_content"
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
        android:layout_marginStart="4dp"
 | 
					 | 
				
			||||||
        android:layout_marginEnd="3dp"
 | 
					 | 
				
			||||||
        android:backgroundTint="?themeSecondary"
 | 
					        android:backgroundTint="?themeSecondary"
 | 
				
			||||||
        app:cardCornerRadius="7dp"
 | 
					        app:cardCornerRadius="7dp"
 | 
				
			||||||
        app:cardElevation="4dp"
 | 
					        app:cardElevation="4dp"
 | 
				
			||||||
        app:layout_constrainedWidth="true"
 | 
					        app:cardUseCompatPadding="true"
 | 
				
			||||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
					        app:layout_constraintBottom_toBottomOf="parent"
 | 
				
			||||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
					        app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||||
        app:layout_constraintStart_toStartOf="parent"
 | 
					        app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||||
        app:layout_constraintTop_toTopOf="parent"
 | 
					        app:layout_constraintTop_toTopOf="parent">
 | 
				
			||||||
        app:layout_constraintWidth_default="percent"
 | 
					 | 
				
			||||||
        app:layout_constraintWidth_percent="0.96">
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <androidx.constraintlayout.widget.ConstraintLayout
 | 
					        <androidx.constraintlayout.widget.ConstraintLayout
 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,9 @@
 | 
				
			|||||||
    <!-- search fragment -->
 | 
					    <!-- search fragment -->
 | 
				
			||||||
    <string name="search_hint">Suche nach Filmen und Serien</string>
 | 
					    <string name="search_hint">Suche nach Filmen und Serien</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- my lists fragment -->
 | 
				
			||||||
 | 
					    <string name="downloads">Downloads</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- media fragment -->
 | 
					    <!-- media fragment -->
 | 
				
			||||||
    <string name="button_play">Abspielen</string>
 | 
					    <string name="button_play">Abspielen</string>
 | 
				
			||||||
    <plurals name="text_episodes_count">
 | 
					    <plurals name="text_episodes_count">
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,10 @@
 | 
				
			|||||||
    <string name="media_poster_desc" translatable="false">poster</string>
 | 
					    <string name="media_poster_desc" translatable="false">poster</string>
 | 
				
			||||||
    <string name="media_poster_backdrop_desc" translatable="false">poster backdrop</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 -->
 | 
					    <!-- media fragment -->
 | 
				
			||||||
    <string name="button_play">Play</string>
 | 
					    <string name="button_play">Play</string>
 | 
				
			||||||
    <string name="text_title_ex" translatable="false">A Silent Voice</string>
 | 
					    <string name="text_title_ex" translatable="false">A Silent Voice</string>
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user