Skip to content

Commit

Permalink
Added transformers util class
Browse files Browse the repository at this point in the history
Added transformers class to simplify the process of adding schedulers to Flowables and Completables
  • Loading branch information
Jon6193 committed Jul 5, 2017
1 parent ab29b00 commit dc2dfd7
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@
import com.jonathanpetitfrere.mvvm.repository.mapper.UserMapper;
import com.jonathanpetitfrere.mvvm.repository.persistence.dao.UserDao;
import com.jonathanpetitfrere.mvvm.repository.persistence.entity.User;
import com.jonathanpetitfrere.mvvm.util.Transformers;

import java.util.List;

import javax.inject.Inject;
import javax.inject.Singleton;

import io.reactivex.Completable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;

/**
Expand All @@ -34,20 +33,21 @@ public class UserRepository {
@Inject
UserMapper mapper;

@Inject
Transformers transformers;

@Inject
UserRepository() {}

public LiveData<User> getUser(String email) {
MutableLiveData<User> liveData = new MutableLiveData<>();

userDao.loadUser(email)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.compose(transformers.applySchedulersToFlowable())
.subscribe(liveData::setValue, Timber::d);

userApi.getUser(email)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.compose(transformers.applySchedulersToFlowable())
.map(mapper::toEntity)
.subscribe(userDao::saveUser, Timber::d);

Expand All @@ -58,13 +58,11 @@ public LiveData<List<User>> getUsers() {
MutableLiveData<List<User>> liveData = new MutableLiveData<>();

userDao.getUsers()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.compose(transformers.applySchedulersToFlowable())
.subscribe(liveData::setValue, Timber::d);

userApi.getUsers()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.compose(transformers.applySchedulersToFlowable())
.flatMapIterable(users -> users)
.map(mapper::toEntity)
.subscribe(userDao::saveUser, Timber::d);
Expand All @@ -76,8 +74,7 @@ public LiveData<Boolean> saveUser(User user) {
MutableLiveData<Boolean> liveData = new MutableLiveData<>();

Completable.fromAction(() -> userDao.saveUser(user))
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.compose(transformers.applySchedulersToCompletable())
.subscribe(() -> liveData.setValue(true), throwable -> {
Timber.d(throwable);
liveData.setValue(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,17 @@

import com.jonathanpetitfrere.mvvm.MvvmApplication;

import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.internal.disposables.DisposableContainer;

/**
* @author jpetit
*/

public abstract class BaseAndroidViewModel extends AndroidViewModel {

private CompositeDisposable compositeDisposable;

public BaseAndroidViewModel(Application application) {
super(application);
}

protected MvvmApplication getMvvmApplication() {
return (MvvmApplication) getApplication();
}

protected CompositeDisposable disposables() {
if(compositeDisposable == null || compositeDisposable.isDisposed()) {
compositeDisposable = new CompositeDisposable();
}

return compositeDisposable;
}

@Override
protected void onCleared() {
super.onCleared();
compositeDisposable.dispose();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,10 @@

import android.arch.lifecycle.ViewModel;

import io.reactivex.disposables.CompositeDisposable;

/**
* @author jpetit
*/

public abstract class BaseViewModel extends ViewModel {

private CompositeDisposable compositeDisposable;

protected CompositeDisposable disposables() {
if(compositeDisposable == null || compositeDisposable.isDisposed()) {
compositeDisposable = new CompositeDisposable();
}

return compositeDisposable;
}

@Override
protected void onCleared() {
super.onCleared();
compositeDisposable.dispose();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.jonathanpetitfrere.mvvm.util;

import javax.inject.Inject;
import javax.inject.Singleton;

import io.reactivex.CompletableTransformer;
import io.reactivex.FlowableTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

/**
* @author jpetit
*/

@Singleton
public class Transformers {

@Inject
Transformers(){}

public <T> FlowableTransformer<T, T> applySchedulersToFlowable() {
return flowable -> flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}

public CompletableTransformer applySchedulersToCompletable() {
return completable -> completable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}

0 comments on commit dc2dfd7

Please sign in to comment.