Created
July 5, 2019 13:01
-
-
Save indramahkota/7036586ac47677c5b8e6eac9c0bb368d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.indramahkota.moviecatalogue.fragments; | |
import android.os.Bundle; | |
import android.util.Log; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.SearchView; | |
import android.widget.Toast; | |
import androidx.annotation.NonNull; | |
import androidx.annotation.Nullable; | |
import androidx.fragment.app.Fragment; | |
import androidx.lifecycle.Observer; | |
import androidx.lifecycle.ViewModelProviders; | |
import androidx.recyclerview.widget.LinearLayoutManager; | |
import androidx.recyclerview.widget.RecyclerView; | |
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | |
import com.facebook.shimmer.ShimmerFrameLayout; | |
import com.indramahkota.moviecatalogue.BuildConfig; | |
import com.indramahkota.moviecatalogue.R; | |
import com.indramahkota.moviecatalogue.adapters.MovieAdapter; | |
import com.indramahkota.moviecatalogue.models.DiscoverMovie; | |
import com.indramahkota.moviecatalogue.models.others.Progress; | |
import com.indramahkota.moviecatalogue.viewmodels.ListMovieViewModel; | |
import java.util.List; | |
public class MovieFragment extends Fragment { | |
private static final String STATE_SCROLL = "state_scroll"; | |
private RecyclerView rvMovies; | |
private LinearLayoutManager linearLayoutManager; | |
private ShimmerFrameLayout mShimmerViewContainer; | |
private Integer scrollPosition = 0; | |
private ListMovieViewModel viewModel; | |
private List<DiscoverMovie> discoverMovies; | |
private SwipeRefreshLayout swipeRefreshLayout; | |
public MovieFragment() { } | |
@Override | |
public void onCreate(@Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
if (savedInstanceState != null) { | |
scrollPosition = savedInstanceState.getInt(STATE_SCROLL); | |
} | |
} | |
@Override | |
public void onSaveInstanceState(@NonNull Bundle outState) { | |
super.onSaveInstanceState(outState); | |
scrollPosition = linearLayoutManager.findFirstVisibleItemPosition(); | |
outState.putInt(STATE_SCROLL, scrollPosition); | |
} | |
@Override | |
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, | |
Bundle savedInstanceState) { | |
return inflater.inflate(R.layout.fragment_movie_tv_container, container, false); | |
} | |
@Override | |
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { | |
super.onViewCreated(view, savedInstanceState); | |
Log.d("MovieFragment", "created"); | |
swipeRefreshLayout = view.findViewById(R.id.swipe_to_refresh); | |
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { | |
@Override | |
public void onRefresh() { | |
Log.d("MovieFragment", "Swipe on refresh"); | |
viewModel.setListMovie(BuildConfig.TMDB_API_KEY); | |
} | |
}); | |
mShimmerViewContainer = view.findViewById(R.id.shimmer_view_fragment_container); | |
mShimmerViewContainer.setVisibility(View.VISIBLE); | |
linearLayoutManager = new LinearLayoutManager(view.getContext()); | |
rvMovies = view.findViewById(R.id.rv_fragment_category); | |
rvMovies.setLayoutManager(linearLayoutManager); | |
rvMovies.setHasFixedSize(true); | |
if(discoverMovies != null) { | |
Log.d("MovieFragment", "discoverMovies != null"); | |
MovieAdapter listMovieAdapter = new MovieAdapter(discoverMovies, getContext()); | |
listMovieAdapter.notifyDataSetChanged(); | |
rvMovies.setAdapter(listMovieAdapter); | |
linearLayoutManager.scrollToPosition(scrollPosition); | |
viewModel.setProgress(new Progress(false, -1, 1)); | |
mShimmerViewContainer.setVisibility(View.GONE); | |
} | |
Log.d("MovieFragment", "exec line"); | |
viewModel = ViewModelProviders.of(this).get(ListMovieViewModel.class); | |
viewModel.getListMovie().observe(this, new Observer<List<DiscoverMovie>>() { | |
@Override | |
public void onChanged(List<DiscoverMovie> discMovies) { | |
Log.d("MovieFragment", "data changed"); | |
discoverMovies = discMovies; | |
MovieAdapter listMovieAdapter = new MovieAdapter(discoverMovies, getContext()); | |
listMovieAdapter.notifyDataSetChanged(); | |
rvMovies.setAdapter(listMovieAdapter); | |
linearLayoutManager.scrollToPosition(scrollPosition); | |
swipeRefreshLayout.setRefreshing(false); | |
} | |
}); | |
viewModel.getProgress().observe(this, new Observer<Progress>() { | |
@Override | |
public void onChanged(Progress progress) { | |
swipeRefreshLayout.setRefreshing(false); | |
if(progress != null) { | |
if(!progress.getLoading()) { | |
mShimmerViewContainer.setVisibility(View.GONE); | |
rvMovies.setVisibility(View.VISIBLE); | |
} else { | |
mShimmerViewContainer.setVisibility(View.VISIBLE); | |
rvMovies.setVisibility(View.GONE); | |
} | |
if(progress.getErrorCode() == 1 || progress.getErrorCode() == 2) { | |
Toast.makeText(getContext(), getResources().getString(R.string.load_failed), Toast.LENGTH_SHORT).show(); | |
} | |
} | |
} | |
}); | |
viewModel.setListMovie(BuildConfig.TMDB_API_KEY); | |
SearchView searchView = view.findViewById(R.id.searchView); | |
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { | |
@Override | |
public boolean onQueryTextSubmit(String query) { | |
viewModel.searchMovie(BuildConfig.TMDB_API_KEY, query); | |
return true; | |
} | |
@Override | |
public boolean onQueryTextChange(String newText) { | |
return false; | |
} | |
}); | |
searchView.setOnCloseListener(new SearchView.OnCloseListener() { | |
@Override | |
public boolean onClose() { | |
viewModel.setListMovie(BuildConfig.TMDB_API_KEY); | |
return false; | |
} | |
}); | |
} | |
@Override | |
public void onResume() { | |
super.onResume(); | |
Log.d("MovieFragment", "resume"); | |
mShimmerViewContainer.startShimmer(); | |
} | |
@Override | |
public void onPause() { | |
super.onPause(); | |
Log.d("MovieFragment", "stop"); | |
mShimmerViewContainer.stopShimmer(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment