2020import br .com .feinstein .technicaltest_mf .models .GithubRepository ;
2121import butterknife .BindView ;
2222import butterknife .ButterKnife ;
23- import io .reactivex .Observable ;
24- import io .reactivex .Single ;
23+ import io .reactivex .Flowable ;
2524import io .reactivex .SingleTransformer ;
2625import io .reactivex .android .schedulers .AndroidSchedulers ;
2726import io .reactivex .disposables .CompositeDisposable ;
@@ -35,8 +34,9 @@ public class RepositoryListActivity extends AppCompatActivity {
3534 private GithubDataRepository dataRepository ;
3635 private boolean mTwoPane ;
3736 private List <GithubRepository > repositories = new ArrayList <>();
38- private CompositeDisposable compositeDisposable = new CompositeDisposable () ;
37+ private CompositeDisposable compositeDisposable ;
3938 private SingleTransformer <List <GithubRepository >, List <GithubRepository >> configurationTransformer ;
39+ private EndlessRecyclerViewScrollListener endlessScrollListener ;
4040
4141 @ BindView (R .id .toolbar ) Toolbar toolbar ;
4242 @ BindView (R .id .repository_list ) RecyclerView recyclerView ;
@@ -57,26 +57,21 @@ protected void onCreate(Bundle savedInstanceState) {
5757 mTwoPane = true ;
5858 }
5959
60- dataRepository = new GithubDataRepository (); // TODO: Inject with Dagger 2
61-
6260 swipeRefreshLayout .setColorSchemeResources (R .color .colorPrimary );
6361 swipeRefreshLayout .setOnRefreshListener (this ::loadFirstItems );
6462
63+ dataRepository = new GithubDataRepository (); // TODO: Inject with Dagger 2
64+ compositeDisposable = new CompositeDisposable ();
6565 createConfigurationTransformer ();
6666
6767 setupRecyclerView ();
6868 loadFirstItems ();
6969 }
7070
71- // @Override
72- // protected void onResume() {
73- // super.onResume();
74- // compositeDisposable = new CompositeDisposable();
75- // }
76-
7771 @ Override
7872 protected void onPause () {
7973 compositeDisposable .clear ();
74+ endlessScrollListener .resetLoadingState ();
8075 super .onPause ();
8176 }
8277
@@ -92,9 +87,10 @@ private void setupRecyclerView() {
9287 GithubRepositoriesRecyclerViewAdapter adapter = new GithubRepositoriesRecyclerViewAdapter (this ,
9388 repositories , mTwoPane );
9489 recyclerView .setAdapter (adapter );
95- recyclerView . addOnScrollListener ( new EndlessRecyclerViewScrollListener (linearLayoutManager ) {
90+ endlessScrollListener = new EndlessRecyclerViewScrollListener (linearLayoutManager ) {
9691 @ Override
9792 public void onLoadMore (int page , int totalItemsCount , RecyclerView view ) {
93+ compositeDisposable .clear ();
9894 compositeDisposable .add (
9995 dataRepository .getGithubRepositoriesFromPage (page + 1 )
10096 .compose (configurationTransformer )
@@ -104,13 +100,15 @@ public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
104100 })
105101 );
106102 }
107- });
103+ };
104+ recyclerView .addOnScrollListener (endlessScrollListener );
108105 }
109106
110107 /**
111108 * Carrega os primeiros items da lista
112109 */
113110 private void loadFirstItems () {
111+ compositeDisposable .clear ();
114112 compositeDisposable .add (
115113 dataRepository .getGithubRepositoriesFromPage (1 )
116114 .compose (configurationTransformer )
@@ -131,7 +129,6 @@ private void createConfigurationTransformer() {
131129 .timeout (1 , TimeUnit .MINUTES )
132130 .observeOn (AndroidSchedulers .mainThread ())
133131 .doOnSubscribe ((d ) -> {
134- compositeDisposable .clear ();
135132 if (!swipeRefreshLayout .isRefreshing ()) {
136133 swipeRefreshLayout .setRefreshing (true );
137134 }})
@@ -143,7 +140,7 @@ private void createConfigurationTransformer() {
143140 // getString(R.string.network_error_message),
144141 // Snackbar.LENGTH_LONG).show();
145142 })
146- .retry ( )
143+ .retryWhen ( errors -> errors . flatMap ( error -> Flowable . timer ( 30 , TimeUnit . SECONDS )) )
147144 .doFinally (() -> {
148145 if (swipeRefreshLayout .isRefreshing ()) {
149146 swipeRefreshLayout .setRefreshing (false );
0 commit comments