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;
}