Skip to content

Commit

Permalink
Merge pull request #29 from intive-FDV/fix/loading_screen_not_showing
Browse files Browse the repository at this point in the history
Fix/loading screen not showing
  • Loading branch information
urielgarridointive authored Oct 4, 2021
2 parents e58edd3 + f066f35 commit 31a0be8
Show file tree
Hide file tree
Showing 8 changed files with 123 additions and 112 deletions.
52 changes: 24 additions & 28 deletions app/src/main/java/com/intive/tmdbandroid/home/ui/MoviesFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import com.intive.tmdbandroid.home.ui.adapters.ScreeningPageAdapter
import com.intive.tmdbandroid.home.viewmodel.MoviesViewModel
import com.intive.tmdbandroid.model.Screening
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.collect
import timber.log.Timber
import kotlin.math.floor

Expand All @@ -29,26 +29,22 @@ class MoviesFragment : Fragment() {
defaultViewModelProviderFactory
}

private val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to true
)
)
requireActivity().startActivity(intent)
}
private val moviePageAdapter = ScreeningPageAdapter(clickListener)
private lateinit var moviePageAdapter: ScreeningPageAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (savedInstanceState == null) {
Timber.i("MAS - movies instance == null")
viewModel.popularMovies()
val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to true
)
)
requireActivity().startActivity(intent)
}
moviePageAdapter = ScreeningPageAdapter(clickListener)
}

override fun onCreateView(
Expand All @@ -60,35 +56,35 @@ class MoviesFragment : Fragment() {
context ?: return binding.root

initViews(binding)

subscribePopularData(binding)

return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (savedInstanceState == null)
viewModel.popularMovies()
}

private fun subscribePopularData(binding: FragmentMoviesBinding) {
binding.layoutProgressbar.progressBar.visibility = View.VISIBLE
lifecycleScope.launchWhenStarted {
viewModel.uiState.collectLatest { resultMovies ->
lifecycleScope.launchWhenCreated {
viewModel.uiState.collect { resultMovies ->
Timber.i("MAS - popular movies status: $resultMovies")

when (resultMovies) {
is State.Success<PagingData<Screening>> -> {
binding.layoutError.errorContainer.visibility = View.GONE
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE

moviePageAdapter.submitData(resultMovies.data)

if (moviePageAdapter.itemCount == 0) {
binding.layoutEmpty.root.visibility = View.VISIBLE
} else binding.layoutEmpty.root.visibility = View.GONE
}
is State.Error -> {
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE
binding.layoutError.errorContainer.visibility = View.VISIBLE
}
is State.Loading -> {
binding.layoutProgressbar.progressBar.visibility = View.VISIBLE
binding.layoutProgressbar.root.visibility = View.VISIBLE
binding.layoutError.errorContainer.visibility = View.GONE
}
}
Expand Down
53 changes: 24 additions & 29 deletions app/src/main/java/com/intive/tmdbandroid/home/ui/TVShowsFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import com.intive.tmdbandroid.home.ui.adapters.ScreeningPageAdapter
import com.intive.tmdbandroid.home.viewmodel.TVShowsViewModel
import com.intive.tmdbandroid.model.Screening
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.collect
import timber.log.Timber
import kotlin.math.floor

Expand All @@ -28,27 +28,22 @@ class TVShowsFragment : Fragment() {
private val viewModel: TVShowsViewModel by navGraphViewModels(R.id.bottom_nav_graph) {
defaultViewModelProviderFactory
}

private val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to false
)
)
requireActivity().startActivity(intent)
}
private val tvShowPageAdapter = ScreeningPageAdapter(clickListener)
private lateinit var tvShowPageAdapter: ScreeningPageAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (savedInstanceState == null) {
Timber.i("MAS - tvshows instance = null")
viewModel.popularTVShows()
val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to false
)
)
requireActivity().startActivity(intent)
}
tvShowPageAdapter = ScreeningPageAdapter(clickListener)
}

override fun onCreateView(
Expand All @@ -60,35 +55,35 @@ class TVShowsFragment : Fragment() {
context ?: return binding.root

initViews(binding)

subscribePopularData(binding)

return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (savedInstanceState == null)
viewModel.popularTVShows()
}

private fun subscribePopularData(binding: FragmentTvshowsBinding) {
binding.layoutProgressbar.progressBar.visibility = View.VISIBLE
lifecycleScope.launchWhenStarted {
viewModel.uiState.collectLatest { resultTVShows ->
lifecycleScope.launchWhenCreated {
viewModel.uiState.collect { resultTVShows ->
Timber.i("MAS - popular tvshows status: $resultTVShows")

when (resultTVShows) {
is State.Success<PagingData<Screening>> -> {
binding.layoutError.errorContainer.visibility = View.GONE
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE

tvShowPageAdapter.submitData(resultTVShows.data)

if (tvShowPageAdapter.itemCount == 0) {
binding.layoutEmpty.root.visibility = View.VISIBLE
} else binding.layoutEmpty.root.visibility = View.GONE
}
is State.Error -> {
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE
binding.layoutError.errorContainer.visibility = View.VISIBLE
}
is State.Loading -> {
binding.layoutProgressbar.progressBar.visibility = View.VISIBLE
binding.layoutProgressbar.root.visibility = View.VISIBLE
binding.layoutError.errorContainer.visibility = View.GONE
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.navGraphViewModels
import androidx.recyclerview.widget.GridLayoutManager
import com.intive.tmdbandroid.R
import com.intive.tmdbandroid.common.State
import com.intive.tmdbandroid.databinding.FragmentHomeBinding
import com.intive.tmdbandroid.databinding.FragmentWatchlistBinding
import com.intive.tmdbandroid.detailandsearch.ui.DetailAndSearchActivity
import com.intive.tmdbandroid.home.ui.adapters.WatchlistAdapter
import com.intive.tmdbandroid.home.viewmodel.WatchlistViewModel
Expand All @@ -27,31 +28,31 @@ class WatchlistFragment : Fragment() {
defaultViewModelProviderFactory
}

private val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
val isMovie = screening.media_type == "movie"
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to isMovie
)
)
requireActivity().startActivity(intent)
}
private val watchlistAdapter = WatchlistAdapter(clickListener)
private lateinit var watchlistAdapter: WatchlistAdapter

override fun onResume() {
super.onResume()
viewModel.watchlistScreening()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val clickListener = { screening: Screening ->
val intent = Intent(requireActivity(), DetailAndSearchActivity::class.java)
val isMovie = screening.media_type == "movie"
intent.putExtras(
bundleOf(
"action" to "detail",
"screeningID" to screening.id,
"isMovieBoolean" to isMovie
)
)
requireActivity().startActivity(intent)
}
watchlistAdapter = WatchlistAdapter(clickListener)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
val binding = FragmentHomeBinding.inflate(inflater, container, false)
val binding = FragmentWatchlistBinding.inflate(inflater, container, false)
context ?: return binding.root

initViews(binding)
Expand All @@ -61,29 +62,35 @@ class WatchlistFragment : Fragment() {
return binding.root
}

private fun subscribeWatchlistData(binding: FragmentHomeBinding) {
lifecycleScope.launchWhenStarted {
override fun onResume() {
super.onResume()
viewModel.watchlistScreening()
}

private fun subscribeWatchlistData(binding: FragmentWatchlistBinding) {
lifecycleScope.launchWhenResumed {
viewModel.uiState.collectLatest {
when(it) {
is State.Success<List<Screening>> -> {
binding.layoutError.errorContainer.visibility = View.GONE
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE
binding.layoutEmpty.root.isVisible = it.data.isEmpty()
watchlistAdapter.submitList(it.data)
}
is State.Error -> {
binding.layoutProgressbar.progressBar.visibility = View.GONE
binding.layoutProgressbar.root.visibility = View.GONE
binding.layoutError.errorContainer.visibility = View.VISIBLE
}
is State.Loading -> {
binding.layoutProgressbar.progressBar.visibility = View.VISIBLE
binding.layoutProgressbar.root.visibility = View.VISIBLE
binding.layoutError.errorContainer.visibility = View.GONE
}
}
}
}
}

private fun initViews(binding: FragmentHomeBinding) {
private fun initViews(binding: FragmentWatchlistBinding) {
val rvWatchlist = binding.rvWatchlist

rvWatchlist.apply {
Expand Down
18 changes: 10 additions & 8 deletions app/src/main/res/layout/fragment_movies.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,21 @@
<include
android:id="@+id/layout_error"
layout="@layout/layout_error"
android:padding="5dp" />

<include
android:id="@+id/layout_empty"
layout="@layout/layout_empty"
android:padding="5dp"
android:visibility="gone"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"/>

<include layout="@layout/layout_progressbar"
android:id="@+id/layout_progressbar" />
android:id="@+id/layout_progressbar"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
18 changes: 10 additions & 8 deletions app/src/main/res/layout/fragment_tvshows.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,21 @@
<include
android:id="@+id/layout_error"
layout="@layout/layout_error"
android:padding="5dp" />

<include
android:id="@+id/layout_empty"
layout="@layout/layout_empty"
android:padding="5dp"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"/>

<include layout="@layout/layout_progressbar"
android:id="@+id/layout_progressbar" />
android:id="@+id/layout_progressbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,34 @@
<include
android:id="@+id/layout_error"
layout="@layout/layout_error"
android:padding="5dp" />
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<include
android:id="@+id/layout_empty"
layout="@layout/layout_empty"
android:padding="5dp"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<include layout="@layout/layout_progressbar"
android:id="@+id/layout_progressbar" />
android:id="@+id/layout_progressbar"
tools:visibility="visible"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit 31a0be8

Please sign in to comment.