Skip to content

Commit

Permalink
Migrate to RxJava2 (#42)
Browse files Browse the repository at this point in the history
* Migrate to RxJava2 for Observables

cleanup

* update tests and sample for rxjava2

* update travis

* Fix test checkstyle

* fix line alignment

* Fix some documentation
  • Loading branch information
Ben Schwab authored Jul 6, 2017
1 parent 00fc00b commit 58dd332
Show file tree
Hide file tree
Showing 29 changed files with 656 additions and 792 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ android:
components:
- tools
- platform-tools
- build-tools-25.0.2
- build-tools-25.0.3
- android-25
- extra-android-m2repository
- extra-android-support
Expand Down
6 changes: 3 additions & 3 deletions gradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ext.snapshotRepositoryUrl = 'https://oss.sonatype.org/content/repositories/snaps

ext.androidConfig = [
compileSdkVersion: 25,
buildToolsVersion: '25.0.2',
buildToolsVersion: '25.0.3',
minSdkVersion : 16,
targetSdkVersion : 25
]
Expand All @@ -26,8 +26,8 @@ ext.dep = [
findBugs : 'com.google.code.findbugs:jsr305:3.0.0',
gradleNexus : 'com.bmuschko:gradle-nexus-plugin:2.3.1',
javaPoet : 'com.squareup:javapoet:1.8.0',
rxAndroid : 'io.reactivex:rxandroid:1.2.1',
rxJava : 'io.reactivex:rxjava:1.2.9',
rxAndroid : 'io.reactivex.rxjava2:rxandroid:2.0.1',
rxJava : 'io.reactivex.rxjava2:rxjava:2.1.0',

//Tests
junit : 'junit:junit:4.12',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,20 @@

import javax.annotation.Nullable;

import rx.Observable;
import rx.Observer;
import io.reactivex.ObservableTransformer;
import io.reactivex.Observer;

/**
* TODO
* Manges unlocking, locking, and destroying observables based on the lifecycle of an activity or
* fragment. An Activity or fragment must call:
* <ul>
* <li>{@link #onCreate(ObservableManager, Bundle, Object)}</li>
* <li>{@link #onResume()}</li>
* <li>{@link #onPause()}</li>
* <li>{@link #onDestroy(Activity)}</li>
* <li>{@link #onSaveInstanceState(Bundle)}</li>
* </ul>
* in corresponding methods.
*/
@SuppressWarnings("WeakerAccess")
public class GroupLifecycleManager {
Expand Down Expand Up @@ -87,15 +96,15 @@ public ObservableGroup group() {
* Calls {@link ObservableGroup#transform(Observer)} for the group managed by
* this instance.
*/
public <T> Observable.Transformer<? super T, T> transform(Observer<? super T> observer) {
public <T> ObservableTransformer<? super T, T> transform(Observer<? super T> observer) {
return group.transform(observer);
}

/**
* Calls {@link ObservableGroup#transform(Observer, String)} for the group managed by
* this instance.
*/
public <T> Observable.Transformer<? super T, T> transform(Observer<? super T> observer,
public <T> ObservableTransformer<? super T, T> transform(Observer<? super T> observer,
String observableTag) {
return group.transform(observer, observableTag);
}
Expand Down Expand Up @@ -157,7 +166,7 @@ private void onDestroy(boolean isFinishing) {
observableManager.destroy(group);
} else {
group().removeNonResubscribableObservers();
group.unsubscribe();
group.dispose();
}
}

Expand Down
15 changes: 0 additions & 15 deletions rxgroups-android/src/test/java/com/airbnb/rxgroups/BaseTest.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;

import rx.Observer;
import rx.schedulers.Schedulers;
import rx.schedulers.TestScheduler;
import rx.subjects.PublishSubject;
import rx.subjects.TestSubject;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.observers.TestObserver;
import io.reactivex.subjects.PublishSubject;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
Expand All @@ -28,9 +27,8 @@

@Config(sdk = Build.VERSION_CODES.LOLLIPOP, constants = BuildConfig.class)
@RunWith(RobolectricGradleTestRunner.class)
public class GroupLifecycleManagerTest extends BaseTest {
private final TestScheduler scheduler = Schedulers.test();
private final TestSubject<String> testSubject = TestSubject.create(scheduler);
public class GroupLifecycleManagerTest {
private final PublishSubject<String> testSubject = PublishSubject.create();
private final ObservableManager observableManager = mock(ObservableManager.class);
private final ObservableGroup group = mock(ObservableGroup.class);
private final TestTarget target = new TestTarget();
Expand All @@ -45,14 +43,18 @@ static class TestTarget {
return "bar";
}

@Override public void onCompleted() {
@Override public void onComplete() {

}

@Override public void onError(Throwable e) {

}

@Override public void onSubscribe(@NonNull Disposable d) {

}

@Override public void onNext(Object o) {

}
Expand Down Expand Up @@ -92,7 +94,7 @@ public void testSubscribeInvalidTargetNoException() {
public void testSubscribeNullTargetFails() {
when(observableManager.newGroup()).thenReturn(group);
GroupLifecycleManager groupLifecycleManager = GroupLifecycleManager.onCreate
(observableManager, null, null);
(observableManager, null, null);

groupLifecycleManager.initializeAutoTaggingAndResubscription(null);
}
Expand All @@ -105,8 +107,8 @@ public void testDestroyFinishingActivity() {
when(group.hasObservables(target.taggedObserver)).thenReturn(true);
when(group.observable(target.taggedObserver)).thenReturn(testSubject);

GroupLifecycleManager lifecycleManager = GroupLifecycleManager.onCreate
(observableManager, null, target);
GroupLifecycleManager lifecycleManager
= GroupLifecycleManager.onCreate(observableManager, null, target);

Activity activity = mock(Activity.class);
when(activity.isFinishing()).thenReturn(true);
Expand All @@ -121,21 +123,10 @@ public void testDestroyFinishingActivity() {
GroupLifecycleManager lifecycleManager = GroupLifecycleManager.onCreate
(observableManager, null, target);

Observer nonResubscribableObserver = new Observer<Object>() {
@Override public void onCompleted() {

}

@Override public void onError(Throwable e) {

}

@Override public void onNext(Object o) {

}
};
lifecycleManager.group().add(Utils.getObserverTag(nonResubscribableObserver),
"observableTag", PublishSubject.create(), nonResubscribableObserver);
TestObserver<String> nonResubscribableObserver = new TestObserver<>();
PublishSubject.<String>create()
.compose(lifecycleManager.group().transform(nonResubscribableObserver))
.subscribe(nonResubscribableObserver);

assertThat(lifecycleManager.group().hasObservables(nonResubscribableObserver)).isTrue();

Expand All @@ -148,31 +139,36 @@ public void testDestroyFinishingActivity() {
assertThat(lifecycleManager.group().hasObservables(nonResubscribableObserver)).isFalse();
}

@Test public void testResubscribableNotRemovedAfterNonFinishingDestroy() {
@Test public void testTaggedObserverNotRemovedAfterNonFinishingDestroy() {
when(observableManager.newGroup()).thenReturn(new ObservableGroup(1));

GroupLifecycleManager lifecycleManager = GroupLifecycleManager.onCreate
(observableManager, null, target);

Observer stableObserver = new TaggedObserver() {
TaggedObserver<String> stableObserver = new TaggedObserver<String>() {
@Override public String getTag() {
return "stableTag";
}

@Override public void onCompleted() {
@Override public void onComplete() {

}

@Override public void onError(Throwable e) {

}

@Override public void onNext(Object o) {
@Override public void onSubscribe(@NonNull Disposable d) {

}

@Override public void onNext(String s) {

}
};
lifecycleManager.group().add(Utils.getObserverTag(stableObserver),
"observableTag", PublishSubject.create(), stableObserver);
PublishSubject.<String>create()
.compose(lifecycleManager.group().transform(stableObserver))
.subscribe(stableObserver);

assertThat(lifecycleManager.group().hasObservables(stableObserver)).isTrue();

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.airbnb.rxgroups;

import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;

public class AutoTaggableObserverImpl<T> implements AutoTaggableObserver<T> {
@Override public void setTag(String tag) {

Expand All @@ -9,14 +12,18 @@ public class AutoTaggableObserverImpl<T> implements AutoTaggableObserver<T> {
return null;
}

@Override public void onCompleted() {
@Override public void onComplete() {

}

@Override public void onError(Throwable e) {

}

@Override public void onSubscribe(@NonNull Disposable d) {

}

@Override public void onNext(T t) {

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package test;

import com.airbnb.rxgroups.AutoResubscribe;
import rx.Observer;

import io.reactivex.Observer;

public class PlainObserver_Fail_AutoResubscribe {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package test;

import com.airbnb.rxgroups.AutoTag;
import rx.Observer;

import io.reactivex.Observer;

public class PlainObserver_Fail_AutoTag {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
import com.airbnb.rxgroups.AutoResubscribe;
import com.airbnb.rxgroups.TaggedObserver;

import io.reactivex.disposables.Disposable;

public class TaggedObserver_Pass_AutoResubscribe {
@AutoResubscribe
public TaggedObserver<Object> taggedObserver = new TaggedObserver<Object>() {
@Override public String getTag() {
return "stableTag";
}

@Override public void onCompleted() {
@Override public void onComplete() {

}

Expand All @@ -21,5 +23,9 @@ public class TaggedObserver_Pass_AutoResubscribe {
@Override public void onNext(Object o) {

}

@Override public void onSubscribe(Disposable d) {

}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import java.lang.annotation.Target;

/**
* Used on {@link rx.Observer} fields to indicate that they should be automatically subscribed to a
* certain Observable, or multiple Observables if they still haven't completed yet.
* Used on {@link io.reactivex.Observer} fields to indicate that they should be automatically
* subscribed to a certain Observable, or multiple Observables if they still haven't completed yet.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.airbnb.rxgroups;

import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;

/**
* A {@link rx.Observer} which has a stable tag. Must be used with {@link AutoResubscribe}
* A {@link io.reactivex.Observer} which has a stable tag. Must be used with {@link AutoResubscribe}
* annotation to set the tag before observer is used.
*/
public abstract class AutoResubscribingObserver<T> implements TaggedObserver<T> {
Expand All @@ -17,7 +20,7 @@ void setTag(String tag) {
}

@Override
public void onCompleted() {
public void onComplete() {

}

Expand All @@ -31,4 +34,7 @@ public void onNext(T t) {

}

@Override public void onSubscribe(@NonNull Disposable d) {

}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.airbnb.rxgroups;

import rx.Observer;

import io.reactivex.Observer;

/**
* {@link Observer} with a unique tag which can be automatically set during
Expand Down
Loading

0 comments on commit 58dd332

Please sign in to comment.