Advertisement
vmeansdev

TrueMVP

Sep 25th, 2019
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.98 KB | None | 0 0
  1. public interface PhotosContract {
  2.  
  3.     interface Model {
  4.         ...
  5.         List<Photo> photos();
  6.     }
  7.  
  8.     interface View {
  9.         void onPhotosAdded();
  10.         ...
  11.     }
  12.  
  13.     interface Presenter {
  14.         ...
  15.         List<Photo> photos();
  16.  
  17.         void onPhotosLoaded();
  18.         ...
  19.     }
  20. }
  21.  
  22. ...
  23.  
  24. interface PhotoDataSource {
  25.     List<Photo> photos();
  26. }
  27.  
  28. public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.PhotoHolder> {
  29.     ...
  30.  
  31.     private PhotoDataSource dataSource;
  32.  
  33.     public PhotoAdapter(PhotoDataSource dataSource) {
  34.         this.dataSource = dataSource;
  35.     }
  36.  
  37.     private List<Photo> getPhotos() {
  38.         return dataSource.photos();
  39.     }
  40.  
  41.     ...
  42.  
  43.     @Override
  44.     public void onBindViewHolder(@NonNull final PhotoHolder holder, int position) {
  45.         ...
  46.         Photo photo = getPhotos().get(position);
  47.         ...
  48.     }
  49.  
  50.     @Override
  51.     public int getItemCount() {
  52.         return getPhotos().size();
  53.     }
  54.  
  55.     ...
  56. }
  57.  
  58. public class WPFragment extends Fragment implements PhotosContract.View {
  59.     ...
  60.  
  61.     @Nullable
  62.     @Override
  63.     public View onCreateView(
  64.         @NonNull LayoutInflater inflater,
  65.         @Nullable ViewGroup container,
  66.         @Nullable Bundle savedInstanceState
  67.     ) {
  68.         ...
  69.         adapter = new PhotoAdapter(new PhotoDataSource() {
  70.             @Override
  71.             List<Photo> photos() {
  72.                 return presenter.photos();
  73.             }
  74.         });
  75.         return view;
  76.     }
  77.  
  78.     ...
  79.  
  80.     @Override
  81.     public void onPhotosAdded() {
  82.         adapter.notifyDataSetChanged();
  83.     }
  84.  
  85.     ...
  86. }
  87.  
  88. ...
  89.  
  90. public class PhotosPresenter implements PhotosContract.Presenter {
  91.  
  92.     ...
  93.  
  94.     @Override
  95.     public void onPhotosLoaded() {
  96.         if (viewExists()) {
  97.             view.get().onPhotosAdded();
  98.             isLoading = false;
  99.         }
  100.     }
  101.  
  102.     @Override
  103.     public List<Photo> photos() {
  104.         return model.photos();
  105.     }
  106.  
  107. }
  108.  
  109. ...
  110.  
  111.  
  112. public class UnsplashService implements PhotosContract.Model {
  113.  
  114.     private List<Photo> photos = new ArrayList<>();
  115.  
  116.     @Override
  117.     public void loadPhotos(int page) {
  118.         Call<List<Photo>> call = photosEndPoint.getPhotos(USER_ID, page, ORIENTATION, ORDER);
  119.         Log.d(TAG, "REQUEST: " + call.request().toString());
  120.         call.enqueue(new Callback<List<Photo>>() {
  121.             @Override
  122.             public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
  123.                 if (response.isSuccessful()) {
  124.                     photos.addAll(response.body());
  125.                     presenter.onPhotosLoaded();
  126.                 } else {
  127.                     presenter.onLoadFailure();
  128.                 }
  129.             }
  130.  
  131.             @Override
  132.             public void onFailure(Call<List<Photo>> call, Throwable t) {
  133.                 presenter.onLoadFailure();
  134.             }
  135.         });
  136.     }
  137.  
  138.     @Override
  139.     public List<Photo> photos() {
  140.         return this.photos;
  141.     }
  142.  
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement