Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The android past · present · future#
Search
Erik Jhordan Rey
April 21, 2016
680
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The android past · present · future#
GDG Open Lima hangouts, April 2016
Erik Jhordan Rey
April 21, 2016
More Decks by Erik Jhordan Rey
See All by Erik Jhordan Rey
The Agentic Era Of Mobile Engineering
erikjhordan_rey
0
68
The android eras tour
erikjhordan_rey
0
220
Android Apps in modular structure paradigms
erikjhordan_rey
0
320
Discipline your Android builds to be delivered at any time.
erikjhordan_rey
0
720
Technologies to develop mobile apps
erikjhordan_rey
1
320
Dependency Injection the masterpiece on Android
erikjhordan_rey
0
590
Building scalable applications inspired into Micro-service Architecture
erikjhordan_rey
0
270
Building scalable applications inspired into Micro-service Architecture
erikjhordan_rey
0
590
Pragmatic Mobile Testing Strategies
erikjhordan_rey
1
710
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
My Coaching Mixtape
mlcsv
0
310
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Leo the Paperboy
mayatellez
9
2.3k
HDC tutorial
michielstock
2
860
Chasing Engaging Ingredients in Design
codingconduct
0
300
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
A Soul's Torment
seathinner
7
3.6k
Transcript
None
None
• • •
None
• • •
None
None
None
None
None
None
Model View Presenter View Presenter Model User interaction notify user
event request data Update UI with entities delivers entities
Kata
MVP Example
public interface ArtistsMvpView extends MvpView{ void showLoading(); void hideLoading(); void
showArtistNotFoundMessage(); void showConnectionErrorMessage(); void renderArtists(List<Artist> artists); void launchArtistDetail(Artist artist); } View
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
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 }
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
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(); }
None
None
None
Model View ViewModel View ViewModel Model DataBinding and Commands ViewModel
updates the model Send Notifications Send Notifications
None
• •
dataBinding { enabled = true }
None
None
None
Kata
None
None
• 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.
None
• 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
Erik Jhordan González Reyes Android Developer +Erik Jhordan Rey Caffrey
@ErikJhordan_Rey erikcaffrey erikcaffrey.github.io
None