forked from arriolac/GitHubRxJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainViewModel.java
More file actions
47 lines (40 loc) · 1.78 KB
/
MainViewModel.java
File metadata and controls
47 lines (40 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.chrisarriola.githubrxjava;
import android.databinding.ObservableField;
import com.manaschaudhari.android_mvvm.ViewModel;
import java.util.ArrayList;
import java.util.List;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import rx.subjects.PublishSubject;
import static com.manaschaudhari.android_mvvm.FieldUtils.toObservable;
public class MainViewModel implements ViewModel {
public final Observable<List<GithubRepoVM>> repositories;
public final ObservableField<String> username = new ObservableField<>();
public final PublishSubject<Void> onSearchClick = PublishSubject.create();
public MainViewModel() {
repositories =
toObservable(this.username)
.sample(onSearchClick)
.switchMap(new Func1<String, Observable<List<GithubRepoVM>>>() {
@Override
public Observable<List<GithubRepoVM>> call(String username) {
return GitHubClient.getInstance()
.getStarredRepos(username)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<List<GitHubRepo>, List<GithubRepoVM>>() {
@Override
public List<GithubRepoVM> call(List<GitHubRepo> gitHubRepos) {
List<GithubRepoVM> vms = new ArrayList<>();
for (GitHubRepo repo : gitHubRepos) {
vms.add(new GithubRepoVM(repo));
}
return vms;
}
});
}
});
}
}