diff --git a/.idea/misc.xml b/.idea/misc.xml index 51d0c7d..6438839 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -68,9 +68,6 @@ - - $USER_HOME$/.subversion - diff --git a/README.md b/README.md index 83dece2..58ccd17 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ allprojects { And add next dependencies in the build.gradle of the module: ```gradle dependencies { - compile "com.github.VictorAlbertos:RxActivityResult:0.2.1" + compile "com.github.VictorAlbertos:RxActivityResult:0.2.2" compile "io.reactivex:rxjava:1.1.0" } ``` diff --git a/rx_activity_result/src/main/java/rx_activity_result/ActivitiesLifecycleCallbacks.java b/rx_activity_result/src/main/java/rx_activity_result/ActivitiesLifecycleCallbacks.java index 147c582..8c690c7 100644 --- a/rx_activity_result/src/main/java/rx_activity_result/ActivitiesLifecycleCallbacks.java +++ b/rx_activity_result/src/main/java/rx_activity_result/ActivitiesLifecycleCallbacks.java @@ -4,6 +4,11 @@ import android.app.Application; import android.os.Bundle; +import java.util.concurrent.TimeUnit; + +import rx.Observable; +import rx.functions.Func1; + class ActivitiesLifecycleCallbacks { private final Application application; private Activity liveActivityOrNull; @@ -45,4 +50,33 @@ private void registerActivityLifeCycle() { Activity getLiveActivity() { return liveActivityOrNull; } + + /** + * Emits just one time a valid reference to the current activity + * @return the current activity + */ + private boolean emitted = false; + Observable getOLiveActivity() { + emitted = false; + return Observable.interval(50, 50, TimeUnit.MILLISECONDS) + .map(new Func1() { + @Override public Activity call(Long aLong) { + return liveActivityOrNull; + } + }) + .takeWhile(new Func1() { + @Override public Boolean call(Activity activity) { + boolean continueEmitting = true; + if (emitted) continueEmitting = false; + if (activity != null) emitted = true; + return continueEmitting; + } + }) + .filter(new Func1() { + @Override public Boolean call(Activity activity) { + return activity != null; + } + }); + } + } diff --git a/rx_activity_result/src/main/java/rx_activity_result/RxActivityResult.java b/rx_activity_result/src/main/java/rx_activity_result/RxActivityResult.java index e40903d..cdd643f 100644 --- a/rx_activity_result/src/main/java/rx_activity_result/RxActivityResult.java +++ b/rx_activity_result/src/main/java/rx_activity_result/RxActivityResult.java @@ -27,6 +27,7 @@ import rx.Observable; import rx.Subscriber; +import rx.functions.Action1; public class RxActivityResult { private static ActivitiesLifecycleCallbacks activitiesLifecycle; @@ -67,8 +68,11 @@ public Observable> startIntent(final Intent intent) { OnResult onResult = uiTargetActivity ? onResultActivity() : onResultFragment(); HolderActivity.setRequest(new Request(intent, onResult)); - Activity activity = activitiesLifecycle.getLiveActivity(); - activity.startActivity(new Intent(activity, HolderActivity.class)); + activitiesLifecycle.getOLiveActivity().subscribe(new Action1() { + @Override public void call(Activity activity) { + activity.startActivity(new Intent(activity, HolderActivity.class)); + } + }); return observable; }