Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The android past · present · future#

Erik Jhordan Rey
April 21, 2016
620

The android past · present · future#

GDG Open Lima hangouts, April 2016

Erik Jhordan Rey

April 21, 2016
Tweet

Transcript

  1. Model View Presenter View Presenter Model User interaction notify user

    event request data Update UI with entities delivers entities
  2. public interface ArtistsMvpView extends MvpView{ void showLoading(); void hideLoading(); void

    showArtistNotFoundMessage(); void showConnectionErrorMessage(); void renderArtists(List<Artist> artists); void launchArtistDetail(Artist artist); } View
  3. public class ArtistsPresenter implements Presenter<ArtistsMvpView>, ArtistCallback { private ArtistsMvpView artistsMvpView;

    private ArtistsInteractor artistsInteractor; public ArtistsPresenter() { } @Override public void setView(ArtistsMvpView view) { if (view == null) throw new IllegalArgumentException("You can't set a null view"); artistsMvpView = view; artistsInteractor = new ArtistsInteractor(artistsMvpView.getContext()); } @Override public void detachView() { artistsMvpView = null; } public void onSearchArtist(String string) { artistsMvpView.showLoading(); artistsInteractor.loadDataFromApi(string, this); } public void launchArtistDetail(Artist artist) { artistsMvpView.launchArtistDetail(artist); } //more methods } Presenter
  4. Interactor public class ArtistsInteractor { public void loadDataFromApi(String query, ArtistCallback

    artistCallback) { mSpotifyService.searchArtist(query) .subscribeOn(mSpotifyApp.SubscribeScheduler()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ArtistsSearch -> onSuccess(ArtistsSearch, artistCallback), throwable -> onError(throwable, artistCallback)); } // more methods }
  5. User interaction public void onSearchArtist(String string) { artistsMvpView.showLoading(); artistsInteractor.loadDataFromApi(string, this);

    } View Presenter public void loadDataFromApi(String query, ArtistCallback artistCallback) { mSpotifyService.searchArtist(query) .subscribeOn(mSpotifyApp.SubscribeScheduler()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ArtistsSearch -> onSuccess(ArtistsSearch, artistCallback), throwable -> onError(throwable, artistCallback)); } Interactor @Override public boolean onQueryTextSubmit(String query) { artistsPresenter.onSearchArtist(query); return true; } Notify user event Request data Search an Artist
  6. private void onSuccess(ArtistsSearch artistsSearch, ArtistCallback artistCallback) { if (artistsSearch.getArtists() !=

    null) { if (artistsSearch.getArtists().size() > 0) { artistCallback.onResponse(artistsSearch.getArtists()); } else { artistCallback.onArtistNotFound(); } } Delivers entities Interactor @Override public void onResponse(List<Artist> artists) { artistsMvpView.hideLoading(); artistsMvpView.renderArtists(artists); } Presenter View Update UI with entities @Override public void renderArtists(List<Artist> artists) { ArtistsAdapter adapter = (ArtistsAdapter) rv_artist.getAdapter(); adapter.setArtists(artists); adapter.notifyDataSetChanged(); }
  7. Model View ViewModel View ViewModel Model DataBinding and Commands ViewModel

    updates the model Send Notifications Send Notifications
  8. • These patterns try to solve the same problems •

    Both patterns are going to improve code quality and testability. • Think about these patterns and use the one you understand better.
  9. • Effective Android UI https://www.youtube. com/watch?v=N6yqe88ysNw • Data Binding --

    Write Apps Faster https://www. youtube.com/watch?v=NBbeQMOcnZ0 • MVVM_Hacker_News https://github.com/hitherejoe/MVVM_Hacker_News • My Personal Blog https://erikcaffrey.github.io
  10. Erik Jhordan González Reyes Android Developer +Erik Jhordan Rey Caffrey

    @ErikJhordan_Rey erikcaffrey erikcaffrey.github.io