Skip to content

Instantly share code, notes, and snippets.

View vvsevolodovich's full-sized avatar

Vladimir Ivanov vvsevolodovich

View GitHub Profile
@vvsevolodovich
vvsevolodovich / ApiClientRxImpl.kt
Created April 17, 2018 15:24
Single.fromCallable
override fun login(auth: Authorization): Single<GithubUser> = Single.fromCallable {
val response = get("https://api.github.com/user", auth = auth)
if (response.statusCode != 200) {
throw RuntimeException("Incorrect login or password")
}
val jsonObject = response.jsonObject
with(jsonObject) {
return@with GithubUser(getString("login"), getInt("id"),
getString("repos_url"), getString("name"))
@vvsevolodovich
vvsevolodovich / Single.java
Created April 17, 2018 15:01
SingleSubscribe
@SchedulerSupport(SchedulerSupport.NONE)
@Override
public final void subscribe(SingleObserver<? super T> subscriber) {
ObjectHelper.requireNonNull(subscriber, "subscriber is null");
subscriber = RxJavaPlugins.onSubscribe(this, subscriber);
ObjectHelper.requireNonNull(subscriber, "subscriber returned by the RxJavaPlugins hook is null");
try {
apiClient.login(auth)
// some code ommitted
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@vvsevolodovich
vvsevolodovich / LoginPresenter.kt
Created April 13, 2018 07:55
Objects under the hood
// new SingleFlatMap()
val flatMap = apiClient.login(auth)
.flatMap { apiClient.getRepositories(it.repos_url, auth) }
// new SingleMap
val map = flatMap
.map { list -> list.map { it.full_name } }
// new SingleSubscribeOn
val subscribeOn = map
.subscribeOn(Schedulers.io())
// new SingleObserveOn
private fun attemptLoginRx() {
showProgress(true)
apiClient.login(auth)
.flatMap {
user -> apiClient.getRepositories(user.repos_url, auth)
}
.map {
list -> list.map { it.full_name }
}
public abstract class Scheduler {
@NonNull
public Disposable scheduleDirect(@NonNull Runnable run) { ... }
@NonNull
public Disposable scheduleDirect(@NonNull Runnable run, long delay, @NonNull TimeUnit unit) { ... }
@NonNull
public Disposable schedulePeriodicallyDirect(@NonNull Runnable run, long initialDelay, long period, @NonNull TimeUnit unit) { ... } {
@vvsevolodovich
vvsevolodovich / SplashActivity.java
Created March 12, 2018 09:05
Splash with rerunning the code on UI
public class SplashActivity extends Activity {
@Subscribe
public void on(DatabaseLoadedEvent event) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.GONE);
showMainActivity();
}
@vvsevolodovich
vvsevolodovich / Background.java
Created March 12, 2018 09:05
Background with posting event on UI
public void postEventOnUiThread(final Object event) {
mUiHandler.post(new Runnable() {
@Override
public void run() {
mEventBus.post(event);
}
});
}
@vvsevolodovich
vvsevolodovich / SplashActivity.java
Created March 12, 2018 09:04
SplashActivity with event listening
public class SplashActivity extends Activity {
@Override
protected void onStart() {
super.onStart();
eventBus.register(this);
}
@Override
protected void onStop() {
@vvsevolodovich
vvsevolodovich / ApplicationInitializer.java
Last active March 12, 2018 09:02
App db init with posting an event
mBackground.execute(new Runnable() {
@Override
public void run() {
try {
initDatabaseInternal();
mBackground.post(new DatabaseLoadedEvent());
} catch (Exception e) {
Log.e("Failed to init db", e);