Skip to content

Commit 4f2515c

Browse files
authored
Merge pull request #201 from android10/rxjava2-migration
Rxjava2 migration
2 parents ca067b1 + 729ec11 commit 4f2515c

File tree

24 files changed

+129
-111
lines changed

24 files changed

+129
-111
lines changed

buildsystem/dependencies.gradle

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ ext {
1515
daggerVersion = '2.8'
1616
butterKnifeVersion = '7.0.1'
1717
recyclerViewVersion = '21.0.3'
18-
rxJavaVersion = '1.0.14'
19-
rxAndroidVersion = '1.0.1'
18+
rxJavaVersion = '2.0.2'
19+
rxAndroidVersion = '2.0.1'
2020
javaxAnnotationVersion = '1.0'
2121
javaxInjectVersion = '1'
2222
gsonVersion = '2.3'
@@ -41,8 +41,8 @@ ext {
4141
dagger: "com.google.dagger:dagger:${daggerVersion}",
4242
butterKnife: "com.jakewharton:butterknife:${butterKnifeVersion}",
4343
recyclerView: "com.android.support:recyclerview-v7:${recyclerViewVersion}",
44-
rxJava: "io.reactivex:rxjava:${rxJavaVersion}",
45-
rxAndroid: "io.reactivex:rxandroid:${rxAndroidVersion}",
44+
rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}",
45+
rxAndroid: "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}",
4646
javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}"
4747
]
4848

@@ -57,7 +57,7 @@ ext {
5757
domainDependencies = [
5858
javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}",
5959
javaxInject: "javax.inject:javax.inject:${javaxInjectVersion}",
60-
rxJava: "io.reactivex:rxjava:${rxJavaVersion}",
60+
rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}",
6161
arrow: "com.fernandocejas:arrow:${arrowVersion}"
6262
]
6363

@@ -72,8 +72,8 @@ ext {
7272
dagger: "com.google.dagger:dagger:${daggerVersion}",
7373
okHttp: "com.squareup.okhttp:okhttp:${okHttpVersion}",
7474
gson: "com.google.code.gson:gson:${gsonVersion}",
75-
rxJava: "io.reactivex:rxjava:${rxJavaVersion}",
76-
rxAndroid: "io.reactivex:rxandroid:${rxAndroidVersion}",
75+
rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}",
76+
rxAndroid: "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}",
7777
javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}",
7878
javaxInject: "javax.inject:javax.inject:${javaxInjectVersion}",
7979
androidAnnotations: "com.android.support:support-annotations:${androidAnnotationsVersion}"

data/src/main/java/com/fernandocejas/android10/sample/data/cache/UserCache.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
package com.fernandocejas.android10.sample.data.cache;
1717

1818
import com.fernandocejas.android10.sample.data.entity.UserEntity;
19-
import rx.Observable;
19+
import io.reactivex.Observable;
2020

2121
/**
2222
* An interface representing a user Cache.
2323
*/
2424
public interface UserCache {
2525
/**
26-
* Gets an {@link rx.Observable} which will emit a {@link UserEntity}.
26+
* Gets an {@link Observable} which will emit a {@link UserEntity}.
2727
*
2828
* @param userId The user id to retrieve data.
2929
*/

data/src/main/java/com/fernandocejas/android10/sample/data/cache/UserCacheImpl.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import com.fernandocejas.android10.sample.data.entity.UserEntity;
2121
import com.fernandocejas.android10.sample.data.exception.UserNotFoundException;
2222
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
23+
import io.reactivex.Observable;
2324
import java.io.File;
2425
import javax.inject.Inject;
2526
import javax.inject.Singleton;
26-
import rx.Observable;
2727

2828
/**
2929
* {@link UserCache} implementation.
@@ -63,17 +63,17 @@ public class UserCacheImpl implements UserCache {
6363
}
6464

6565
@Override public Observable<UserEntity> get(final int userId) {
66-
return Observable.create(subscriber -> {
66+
return Observable.create(emitter -> {
6767
final File userEntityFile = UserCacheImpl.this.buildFile(userId);
6868
final String fileContent = UserCacheImpl.this.fileManager.readFileContent(userEntityFile);
6969
final UserEntity userEntity =
7070
UserCacheImpl.this.serializer.deserialize(fileContent, UserEntity.class);
7171

7272
if (userEntity != null) {
73-
subscriber.onNext(userEntity);
74-
subscriber.onCompleted();
73+
emitter.onNext(userEntity);
74+
emitter.onComplete();
7575
} else {
76-
subscriber.onError(new UserNotFoundException());
76+
emitter.onError(new UserNotFoundException());
7777
}
7878
});
7979
}

data/src/main/java/com/fernandocejas/android10/sample/data/net/RestApi.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package com.fernandocejas.android10.sample.data.net;
1717

1818
import com.fernandocejas.android10.sample.data.entity.UserEntity;
19+
import io.reactivex.Observable;
1920
import java.util.List;
20-
import rx.Observable;
2121

2222
/**
2323
* RestApi for retrieving data from the network.
@@ -32,12 +32,12 @@ public interface RestApi {
3232
String API_URL_GET_USER_DETAILS = API_BASE_URL + "user_";
3333

3434
/**
35-
* Retrieves an {@link rx.Observable} which will emit a List of {@link UserEntity}.
35+
* Retrieves an {@link Observable} which will emit a List of {@link UserEntity}.
3636
*/
3737
Observable<List<UserEntity>> userEntityList();
3838

3939
/**
40-
* Retrieves an {@link rx.Observable} which will emit a {@link UserEntity}.
40+
* Retrieves an {@link Observable} which will emit a {@link UserEntity}.
4141
*
4242
* @param userId The user id used to get user data.
4343
*/

data/src/main/java/com/fernandocejas/android10/sample/data/net/RestApiImpl.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import com.fernandocejas.android10.sample.data.entity.UserEntity;
2222
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityJsonMapper;
2323
import com.fernandocejas.android10.sample.data.exception.NetworkConnectionException;
24+
import io.reactivex.Observable;
2425
import java.net.MalformedURLException;
2526
import java.util.List;
26-
import rx.Observable;
2727

2828
/**
2929
* {@link RestApi} implementation for retrieving data from the network.
@@ -48,42 +48,42 @@ public RestApiImpl(Context context, UserEntityJsonMapper userEntityJsonMapper) {
4848
}
4949

5050
@Override public Observable<List<UserEntity>> userEntityList() {
51-
return Observable.create(subscriber -> {
51+
return Observable.create(emitter -> {
5252
if (isThereInternetConnection()) {
5353
try {
5454
String responseUserEntities = getUserEntitiesFromApi();
5555
if (responseUserEntities != null) {
56-
subscriber.onNext(userEntityJsonMapper.transformUserEntityCollection(
56+
emitter.onNext(userEntityJsonMapper.transformUserEntityCollection(
5757
responseUserEntities));
58-
subscriber.onCompleted();
58+
emitter.onComplete();
5959
} else {
60-
subscriber.onError(new NetworkConnectionException());
60+
emitter.onError(new NetworkConnectionException());
6161
}
6262
} catch (Exception e) {
63-
subscriber.onError(new NetworkConnectionException(e.getCause()));
63+
emitter.onError(new NetworkConnectionException(e.getCause()));
6464
}
6565
} else {
66-
subscriber.onError(new NetworkConnectionException());
66+
emitter.onError(new NetworkConnectionException());
6767
}
6868
});
6969
}
7070

7171
@Override public Observable<UserEntity> userEntityById(final int userId) {
72-
return Observable.create(subscriber -> {
72+
return Observable.create(emitter -> {
7373
if (isThereInternetConnection()) {
7474
try {
7575
String responseUserDetails = getUserDetailsFromApi(userId);
7676
if (responseUserDetails != null) {
77-
subscriber.onNext(userEntityJsonMapper.transformUserEntity(responseUserDetails));
78-
subscriber.onCompleted();
77+
emitter.onNext(userEntityJsonMapper.transformUserEntity(responseUserDetails));
78+
emitter.onComplete();
7979
} else {
80-
subscriber.onError(new NetworkConnectionException());
80+
emitter.onError(new NetworkConnectionException());
8181
}
8282
} catch (Exception e) {
83-
subscriber.onError(new NetworkConnectionException(e.getCause()));
83+
emitter.onError(new NetworkConnectionException(e.getCause()));
8484
}
8585
} else {
86-
subscriber.onError(new NetworkConnectionException());
86+
emitter.onError(new NetworkConnectionException());
8787
}
8888
});
8989
}

data/src/main/java/com/fernandocejas/android10/sample/data/repository/UserDataRepository.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
2121
import com.fernandocejas.android10.sample.domain.User;
2222
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
23+
import io.reactivex.Observable;
2324
import java.util.List;
2425
import javax.inject.Inject;
2526
import javax.inject.Singleton;
26-
import rx.Observable;
2727

2828
/**
2929
* {@link UserRepository} for retrieving user data.

data/src/main/java/com/fernandocejas/android10/sample/data/repository/datasource/CloudUserDataStore.java

+2-9
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
import com.fernandocejas.android10.sample.data.cache.UserCache;
1919
import com.fernandocejas.android10.sample.data.entity.UserEntity;
2020
import com.fernandocejas.android10.sample.data.net.RestApi;
21+
import io.reactivex.Observable;
2122
import java.util.List;
22-
import rx.Observable;
23-
import rx.functions.Action1;
2423

2524
/**
2625
* {@link UserDataStore} implementation based on connections to the api (Cloud).
@@ -30,12 +29,6 @@ class CloudUserDataStore implements UserDataStore {
3029
private final RestApi restApi;
3130
private final UserCache userCache;
3231

33-
private final Action1<UserEntity> saveToCacheAction = userEntity -> {
34-
if (userEntity != null) {
35-
CloudUserDataStore.this.userCache.put(userEntity);
36-
}
37-
};
38-
3932
/**
4033
* Construct a {@link UserDataStore} based on connections to the api (Cloud).
4134
*
@@ -52,6 +45,6 @@ class CloudUserDataStore implements UserDataStore {
5245
}
5346

5447
@Override public Observable<UserEntity> userEntityDetails(final int userId) {
55-
return this.restApi.userEntityById(userId).doOnNext(saveToCacheAction);
48+
return this.restApi.userEntityById(userId).doOnNext(CloudUserDataStore.this.userCache::put);
5649
}
5750
}

data/src/main/java/com/fernandocejas/android10/sample/data/repository/datasource/DiskUserDataStore.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
import com.fernandocejas.android10.sample.data.cache.UserCache;
1919
import com.fernandocejas.android10.sample.data.entity.UserEntity;
20+
import io.reactivex.Observable;
2021
import java.util.List;
21-
import rx.Observable;
2222

2323
/**
2424
* {@link UserDataStore} implementation based on file system data store.

data/src/main/java/com/fernandocejas/android10/sample/data/repository/datasource/UserDataStore.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@
1616
package com.fernandocejas.android10.sample.data.repository.datasource;
1717

1818
import com.fernandocejas.android10.sample.data.entity.UserEntity;
19+
import io.reactivex.Observable;
1920
import java.util.List;
20-
import rx.Observable;
2121

2222
/**
2323
* Interface that represents a data store from where data is retrieved.
2424
*/
2525
public interface UserDataStore {
2626
/**
27-
* Get an {@link rx.Observable} which will emit a List of {@link UserEntity}.
27+
* Get an {@link Observable} which will emit a List of {@link UserEntity}.
2828
*/
2929
Observable<List<UserEntity>> userEntityList();
3030

3131
/**
32-
* Get an {@link rx.Observable} which will emit a {@link UserEntity} by its id.
32+
* Get an {@link Observable} which will emit a {@link UserEntity} by its id.
3333
*
3434
* @param userId The id to retrieve user data.
3535
*/

data/src/test/java/com/fernandocejas/android10/sample/data/repository/UserDataRepositoryTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStore;
2121
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
2222
import com.fernandocejas.android10.sample.domain.User;
23+
import io.reactivex.Observable;
2324
import java.util.ArrayList;
2425
import java.util.List;
2526
import org.junit.Before;
@@ -29,7 +30,6 @@
2930
import org.junit.runner.RunWith;
3031
import org.mockito.Mock;
3132
import org.mockito.runners.MockitoJUnitRunner;
32-
import rx.Observable;
3333

3434
import static org.mockito.BDDMockito.given;
3535
import static org.mockito.Matchers.anyInt;

data/src/test/java/com/fernandocejas/android10/sample/data/repository/datasource/CloudUserDataStoreTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import com.fernandocejas.android10.sample.data.cache.UserCache;
1919
import com.fernandocejas.android10.sample.data.entity.UserEntity;
2020
import com.fernandocejas.android10.sample.data.net.RestApi;
21+
import io.reactivex.Observable;
2122
import org.junit.Before;
2223
import org.junit.Test;
2324
import org.junit.runner.RunWith;
2425
import org.mockito.Mock;
2526
import org.mockito.runners.MockitoJUnitRunner;
26-
import rx.Observable;
2727

2828
import static org.mockito.BDDMockito.given;
2929
import static org.mockito.Mockito.verify;

domain/src/main/java/com/fernandocejas/android10/sample/domain/executor/PostExecutionThread.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package com.fernandocejas.android10.sample.domain.executor;
1717

18-
import rx.Scheduler;
18+
import io.reactivex.Scheduler;
1919

2020
/**
2121
* Thread abstraction created to change the execution context from any thread to any other thread.

domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/DefaultSubscriber.java renamed to domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/DefaultObserver.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@
1515
*/
1616
package com.fernandocejas.android10.sample.domain.interactor;
1717

18+
import io.reactivex.observers.DisposableObserver;
19+
1820
/**
19-
* Default subscriber base class to be used whenever you want default error handling.
21+
* Default {@link DisposableObserver} base class to be used whenever you want default error handling.
2022
*/
21-
public class DefaultSubscriber<T> extends rx.Subscriber<T> {
22-
@Override public void onCompleted() {
23+
public class DefaultObserver<T> extends DisposableObserver<T> {
24+
@Override public void onNext(T t) {
2325
// no-op by default.
2426
}
2527

26-
@Override public void onError(Throwable e) {
28+
@Override public void onComplete() {
2729
// no-op by default.
2830
}
2931

30-
@Override public void onNext(T t) {
32+
@Override public void onError(Throwable exception) {
3133
// no-op by default.
3234
}
3335
}

domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
2222
import com.fernandocejas.arrow.annotations.VisibleForTesting;
2323
import com.fernandocejas.arrow.optional.Optional;
24+
import io.reactivex.Observable;
2425
import javax.inject.Inject;
25-
import rx.Observable;
2626

2727
/**
2828
* This class is an implementation of {@link UseCase} that represents a use case for

domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
2121
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
2222
import com.fernandocejas.arrow.optional.Optional;
23+
import io.reactivex.Observable;
2324
import javax.inject.Inject;
24-
import rx.Observable;
2525

2626
/**
2727
* This class is an implementation of {@link UseCase} that represents a use case for

0 commit comments

Comments
 (0)