Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@indramahkota
Created July 5, 2019 13:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save indramahkota/7036586ac47677c5b8e6eac9c0bb368d to your computer and use it in GitHub Desktop.
Save indramahkota/7036586ac47677c5b8e6eac9c0bb368d to your computer and use it in GitHub Desktop.
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