diff --git a/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/presenter/MoviesListPresenter.java b/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/presenter/MoviesListPresenter.java index 1856c67..f84fc80 100644 --- a/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/presenter/MoviesListPresenter.java +++ b/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/presenter/MoviesListPresenter.java @@ -17,11 +17,11 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; -public class MoviesListPresenter implements Presenter { +public class MoviesListPresenter implements Presenter { - private static final int ACTION_LIST_POPULAR = 0; - private static final int ACTION_LIST_TOP_RATED = 1; - private static final int ACTION_LIST_FAVORITES = 2; + public static final int ACTION_LIST_POPULAR = 0; + public static final int ACTION_LIST_TOP_RATED = 1; + public static final int ACTION_LIST_FAVORITES = 2; private MoviesRepository moviesRepository; private FavoritesLocalDataSource favoritesLocalDataSource; @@ -54,20 +54,33 @@ public void destroy() { } @Override - public void attachTo(MovieListView view) { + public void attachTo(MovieListView view) { attachTo(view, ACTION_LIST_POPULAR); } + + @Override + public void attachTo(MovieListView view, Integer selectedActionId) { this.movieListView = view; - onAttachLoadMoviesList(); + onAttachLoadMoviesList(selectedActionId); } - private void onAttachLoadMoviesList() { + private void onAttachLoadMoviesList(Integer selectedActionId) { initialize( this.connectivityObserver.observeConnectivity() .firstOrError() .doOnSuccess(isConnected -> MoviesListPresenter.this.isConnected = isConnected) .flatMap(isConnected -> { if (isConnected) { - this.currentAction = ACTION_LIST_POPULAR; - return moviesRepository.listPopularMovies(); + switch (selectedActionId) { + case ACTION_LIST_TOP_RATED: + this.currentAction = ACTION_LIST_TOP_RATED; + return moviesRepository.listTopRatedMovies(); + case ACTION_LIST_FAVORITES: + this.currentAction = ACTION_LIST_FAVORITES; + return favoritesLocalDataSource.list(); + case ACTION_LIST_POPULAR: + default: + this.currentAction = ACTION_LIST_POPULAR; + return moviesRepository.listPopularMovies(); + } } else { this.currentAction = ACTION_LIST_FAVORITES; return favoritesLocalDataSource.list(); @@ -85,11 +98,6 @@ private void observeConnectivityChanges() { ); } - @Override - public void attachTo(MovieListView view, Void data) { - attachTo(view); - } - public void onRetry() { switch (this.currentAction) { case ACTION_LIST_POPULAR: diff --git a/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/view/MovieListActivity.java b/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/view/MovieListActivity.java index a82ea5c..dbd03e3 100644 --- a/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/view/MovieListActivity.java +++ b/app/src/main/java/br/com/ecarrara/popularmovies/movies/presentation/view/MovieListActivity.java @@ -26,6 +26,9 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static br.com.ecarrara.popularmovies.movies.presentation.presenter.MoviesListPresenter.ACTION_LIST_FAVORITES; +import static br.com.ecarrara.popularmovies.movies.presentation.presenter.MoviesListPresenter.ACTION_LIST_POPULAR; +import static br.com.ecarrara.popularmovies.movies.presentation.presenter.MoviesListPresenter.ACTION_LIST_TOP_RATED; public class MovieListActivity extends AppCompatActivity implements MovieListView, MovieListAdapter.MovieSelectedListener, @@ -40,10 +43,14 @@ public class MovieListActivity extends AppCompatActivity @BindView(R.id.bottom_navigation_menu_movies_filtering) BottomNavigationView moviesFilteringBottomNavigationView; private static final String LAST_KNOWN_MOVIE_LIST_POSITION_KEY = "last_known_movie_list_position"; + private static final String LAST_KNOWN_MOVIE_LIST_FILTER_KEY = "last_known_movie_list_filter"; + private static final int DEFAULT_MOVIE_LIST_INITIAL_POSITION = 0; + private static final int DEFAULT_MOVIE_LIST_INITIAL_FILTER = ACTION_LIST_POPULAR; private MovieListAdapter movieListAdapter; private int lastKnownMovieListPosition = DEFAULT_MOVIE_LIST_INITIAL_POSITION; + private int lastKnownMovieListFilter = DEFAULT_MOVIE_LIST_INITIAL_FILTER; @Override protected void onCreate(Bundle savedInstanceState) { @@ -58,6 +65,10 @@ private void processSavedInstanceState(Bundle savedInstanceState) { if(savedInstanceState != null) { lastKnownMovieListPosition = savedInstanceState.getInt( LAST_KNOWN_MOVIE_LIST_POSITION_KEY, DEFAULT_MOVIE_LIST_INITIAL_POSITION); + lastKnownMovieListFilter = savedInstanceState.getInt( + LAST_KNOWN_MOVIE_LIST_FILTER_KEY, DEFAULT_MOVIE_LIST_INITIAL_FILTER + ); + } } @@ -85,13 +96,14 @@ private int computeNumberOfColumns() { @Override protected void onResume() { super.onResume(); - this.moviesListPresenter.attachTo(this); + this.moviesListPresenter.attachTo(this, lastKnownMovieListFilter); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(LAST_KNOWN_MOVIE_LIST_POSITION_KEY, ((GridLayoutManager)movieListView.getLayoutManager()).findFirstVisibleItemPosition()); + outState.putInt(LAST_KNOWN_MOVIE_LIST_FILTER_KEY, lastKnownMovieListFilter); super.onSaveInstanceState(outState); } @@ -109,7 +121,7 @@ public void displayMoviesList(List movieListItemModelLis } private void restoreMovieListPosition() { - if(movieListAdapter.getItemCount() < lastKnownMovieListPosition) { + if(movieListAdapter.getItemCount() >= lastKnownMovieListPosition) { movieListView.scrollToPosition(lastKnownMovieListPosition); } } @@ -200,14 +212,18 @@ public void onMovieSelected(Integer movieId) { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { + lastKnownMovieListPosition = DEFAULT_MOVIE_LIST_INITIAL_POSITION; switch (item.getItemId()) { case R.id.menu_action_load_most_popular: + lastKnownMovieListFilter = ACTION_LIST_POPULAR; this.moviesListPresenter.onListPopularMovies(); break; case R.id.menu_action_load_top_rated: + lastKnownMovieListFilter = ACTION_LIST_TOP_RATED; this.moviesListPresenter.onListTopRatedMovies(); break; case R.id.menu_action_load_favorites: + lastKnownMovieListFilter = ACTION_LIST_FAVORITES; this.moviesListPresenter.onListFavorites(); break; }