Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
ecarrara-araujo committed Sep 14, 2017
2 parents 7058e7e + 8f21a6d commit 3d49cbe
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;

public class MoviesListPresenter implements Presenter<MovieListView, Void> {
public class MoviesListPresenter implements Presenter<MovieListView, Integer> {

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;
Expand Down Expand Up @@ -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();
Expand All @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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) {
Expand All @@ -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
);

}
}

Expand Down Expand Up @@ -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);
}

Expand All @@ -109,7 +121,7 @@ public void displayMoviesList(List<MovieListItemViewModel> movieListItemModelLis
}

private void restoreMovieListPosition() {
if(movieListAdapter.getItemCount() < lastKnownMovieListPosition) {
if(movieListAdapter.getItemCount() >= lastKnownMovieListPosition) {
movieListView.scrollToPosition(lastKnownMovieListPosition);
}
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 3d49cbe

Please sign in to comment.