Skip to content

Commit 0ccb84f

Browse files
author
Michel Feinstein
committed
Fourth Commit
1 parent e3f410d commit 0ccb84f

File tree

3 files changed

+31
-24
lines changed

3 files changed

+31
-24
lines changed

app/src/main/java/br/com/feinstein/technicaltest_mf/activities/RepositoryListActivity.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import br.com.feinstein.technicaltest_mf.models.GithubRepository;
2121
import butterknife.BindView;
2222
import butterknife.ButterKnife;
23-
import io.reactivex.Observable;
24-
import io.reactivex.Single;
23+
import io.reactivex.Flowable;
2524
import io.reactivex.SingleTransformer;
2625
import io.reactivex.android.schedulers.AndroidSchedulers;
2726
import 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);

app/src/main/java/br/com/feinstein/technicaltest_mf/adapters/EndlessRecyclerViewScrollListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ public void resetState() {
100100
this.loading = true;
101101
}
102102

103+
/**
104+
* resets the loading state, useful when {@link EndlessRecyclerViewScrollListener#onLoadMore(int, int, RecyclerView)}
105+
* got canceled and needs to be called again.
106+
*/
107+
public void resetLoadingState() {
108+
this.loading = false;
109+
}
110+
103111
// Defines the process for actually loading more data based on page
104112
public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view);
105113
}

app/src/main/java/br/com/feinstein/technicaltest_mf/fragments/RepositoryDetailFragment.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import butterknife.BindView;
2323
import butterknife.ButterKnife;
2424
import butterknife.Unbinder;
25+
import io.reactivex.Flowable;
2526
import io.reactivex.android.schedulers.AndroidSchedulers;
2627
import io.reactivex.disposables.CompositeDisposable;
2728
import io.reactivex.schedulers.Schedulers;
@@ -94,15 +95,15 @@ private void loadPullRequests() {
9495
return;
9596
}
9697

97-
if (!swipeRefreshLayout.isRefreshing()) {
98-
swipeRefreshLayout.setRefreshing(true);
99-
}
100-
10198
compositeDisposable.add(
10299
dataRepository.getGithubPullRequests(repositoryOwnerName, repositoryName)
103100
.subscribeOn(Schedulers.io())
104101
.timeout(1, TimeUnit.MINUTES)
105102
.observeOn(AndroidSchedulers.mainThread())
103+
.doOnSubscribe((d) -> {
104+
if (!swipeRefreshLayout.isRefreshing()) {
105+
swipeRefreshLayout.setRefreshing(true);
106+
}})
106107
.doOnError((throwable) -> {
107108
Toast.makeText(getContext(),
108109
getString(R.string.network_error_message),
@@ -111,16 +112,17 @@ private void loadPullRequests() {
111112
// getString(R.string.network_error_message),
112113
// Snackbar.LENGTH_LONG).show();
113114
})
114-
.retry()
115+
.retryWhen(errors -> errors.flatMap(error -> Flowable.timer(30, TimeUnit.SECONDS)))
116+
.doFinally(() -> {
117+
if (swipeRefreshLayout.isRefreshing()) {
118+
swipeRefreshLayout.setRefreshing(false);
119+
}
120+
})
115121
.subscribe(newPullRequests -> {
116122
pullRequests.clear();
117123
pullRequests.addAll(newPullRequests);
118124

119125
recyclerView.getAdapter().notifyDataSetChanged();
120-
121-
if (swipeRefreshLayout.isRefreshing()) {
122-
swipeRefreshLayout.setRefreshing(false);
123-
}
124126
})
125127
);
126128
}

0 commit comments

Comments
 (0)