package com.chriszou.auttutorial.async;
import android.os.Handler;
import android.os.Looper;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by xiaochuang on 8/6/16.
*/
public class RepoModel {
private Handler mUiHandler = new Handler(Looper.getMainLooper());
public RepoModel() {
}
public Observable<List<Repo>> loadRepos() {
return Observable.create(new OnSubscribe<List<Repo>>() {
@Override
public void call(Subscriber<? super List<Repo>> subscriber) {
try {
//Imagine you're getting repos from network or database
Thread.sleep(2000);
final List<Repo> repos = new ArrayList<>();
repos.add(new Repo("android-unit-testing-tutorial", "A repo that demos how to do android unit testing"));
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(repos);
subscriber.onCompleted();
}
} catch (InterruptedException e) {
e.printStackTrace();
if (!subscriber.isUnsubscribed()) {
subscriber.onError(e);
}
}
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
public void loadRepos(final RepoCallback callback) {
new Thread(new Runnable() {
@Override
public void run() {
try {
//Imagine you're getting repos from network or database
Thread.sleep(1000);
final List<Repo> repos = new ArrayList<>();
repos.add(new Repo("android-unit-testing-tutorial", "A repo that demos how to do android unit testing"));
mUiHandler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(repos);
}
});
} catch (final InterruptedException e) {
e.printStackTrace();
mUiHandler.post(new Runnable() {
@Override
public void run() {
callback.onFailure(500, e.getMessage());
}
});
}
}
}).start();
}
interface RepoCallback {
void onSuccess(List<Repo> repos);
void onFailure(int code, String msg);
}
}