[go: nahoru, domu]

Deprecate Rx adapters without explicit initial value

Similarly how we did with Flow adapter already.

Relnote: Rx adapters without explicit initial value are deprecated. Using null is not always the best default, for example when you have a List it is better to start with emptyList() or any other reasonable default
Fixes: 161348384
Test: existing tests are passing
Change-Id: I00025b20be5441dc64edf3077c2e63800e1abf77
diff --git a/ui/ui-rxjava2/api/0.1.0-dev15.txt b/ui/ui-rxjava2/api/0.1.0-dev15.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/0.1.0-dev15.txt
+++ b/ui/ui-rxjava2/api/0.1.0-dev15.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/api/current.txt b/ui/ui-rxjava2/api/current.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/current.txt
+++ b/ui/ui-rxjava2/api/current.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev15.txt b/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev15.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev15.txt
+++ b/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev15.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/api/public_plus_experimental_current.txt b/ui/ui-rxjava2/api/public_plus_experimental_current.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/public_plus_experimental_current.txt
+++ b/ui/ui-rxjava2/api/public_plus_experimental_current.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/api/restricted_0.1.0-dev15.txt b/ui/ui-rxjava2/api/restricted_0.1.0-dev15.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/restricted_0.1.0-dev15.txt
+++ b/ui/ui-rxjava2/api/restricted_0.1.0-dev15.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/api/restricted_current.txt b/ui/ui-rxjava2/api/restricted_current.txt
index a24f6bb..412263d 100644
--- a/ui/ui-rxjava2/api/restricted_current.txt
+++ b/ui/ui-rxjava2/api/restricted_current.txt
@@ -2,13 +2,13 @@
 package androidx.ui.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
     method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
     method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
diff --git a/ui/ui-rxjava2/samples/src/main/java/androidx/ui/rxjava2/samples/Samples.kt b/ui/ui-rxjava2/samples/src/main/java/androidx/ui/rxjava2/samples/Samples.kt
index c95ce4b..3cca6366 100644
--- a/ui/ui-rxjava2/samples/src/main/java/androidx/ui/rxjava2/samples/Samples.kt
+++ b/ui/ui-rxjava2/samples/src/main/java/androidx/ui/rxjava2/samples/Samples.kt
@@ -30,13 +30,6 @@
 @Sampled
 @Composable
 fun ObservableSample(observable: Observable<String>) {
-    val value: String? by observable.subscribeAsState()
-    Text("Value is $value")
-}
-
-@Sampled
-@Composable
-fun ObservableWithInitialSample(observable: Observable<String>) {
     val value: String by observable.subscribeAsState("initial")
     Text("Value is $value")
 }
@@ -44,13 +37,6 @@
 @Sampled
 @Composable
 fun FlowableSample(flowable: Flowable<String>) {
-    val value: String? by flowable.subscribeAsState()
-    Text("Value is $value")
-}
-
-@Sampled
-@Composable
-fun FlowableWithInitialSample(flowable: Flowable<String>) {
     val value: String by flowable.subscribeAsState("initial")
     Text("Value is $value")
 }
@@ -58,13 +44,6 @@
 @Sampled
 @Composable
 fun SingleSample(single: Single<String>) {
-    val value: String? by single.subscribeAsState()
-    Text("Value is $value")
-}
-
-@Sampled
-@Composable
-fun SingleWithInitialSample(single: Single<String>) {
     val value: String by single.subscribeAsState("initial")
     Text("Value is $value")
 }
@@ -72,13 +51,6 @@
 @Sampled
 @Composable
 fun MaybeSample(maybe: Maybe<String>) {
-    val value: String? by maybe.subscribeAsState()
-    Text("Value is $value")
-}
-
-@Sampled
-@Composable
-fun MaybeWithInitialSample(maybe: Maybe<String>) {
     val value: String by maybe.subscribeAsState("initial")
     Text("Value is $value")
 }
diff --git a/ui/ui-rxjava2/src/androidTest/java/androidx/ui/rxjava2/RxJava2AdapterTest.kt b/ui/ui-rxjava2/src/androidTest/java/androidx/ui/rxjava2/RxJava2AdapterTest.kt
index 22c608b1..ea1cfbe5 100644
--- a/ui/ui-rxjava2/src/androidTest/java/androidx/ui/rxjava2/RxJava2AdapterTest.kt
+++ b/ui/ui-rxjava2/src/androidTest/java/androidx/ui/rxjava2/RxJava2AdapterTest.kt
@@ -64,7 +64,7 @@
         val stream = factory()
         var realValue: String? = "to-be-updated"
         rule.setContent {
-            realValue = stream.subscribeAsState().value
+            realValue = stream.subscribeAsState(null).value
         }
 
         assertThat(realValue).isNull()
@@ -76,7 +76,7 @@
         stream.onNext("value")
         var realValue: String? = null
         rule.setContent {
-            realValue = stream.subscribeAsState().value
+            realValue = stream.subscribeAsState(null).value
         }
 
         assertThat(realValue).isEqualTo("value")
@@ -88,7 +88,7 @@
 
         var realValue: String? = null
         rule.setContent {
-            realValue = stream.subscribeAsState().value
+            realValue = stream.subscribeAsState(null).value
         }
 
         runOnIdle {
@@ -108,7 +108,7 @@
         stream.onNext("value")
         var realValue: String? = null
         rule.setContent {
-            realValue = stream.subscribeAsState().value
+            realValue = stream.subscribeAsState(null).value
         }
 
         runOnIdle {
@@ -127,7 +127,7 @@
         var realValue: String? = "to-be-updated"
         rule.setContent {
             if (emit) {
-                realValue = stream.subscribeAsState().value
+                realValue = stream.subscribeAsState(null).value
             }
         }
 
@@ -145,7 +145,7 @@
     @Test
     fun testObservableWithInitialValue() {
         val stream = factory()
-        var realValue = "to-be-updated"
+        var realValue: String? = "to-be-updated"
         rule.setContent {
             realValue = stream.subscribeAsState("value").value
         }
@@ -160,7 +160,7 @@
 
         var realValue: String? = null
         rule.setContent {
-            realValue = stream.subscribeAsState().value
+            realValue = stream.subscribeAsState(null).value
             if (realValue != null) {
                 latch.countDown()
             }
@@ -182,10 +182,7 @@
     fun onNext(value: String)
 
     @Composable
-    fun subscribeAsState(): State<String?>
-
-    @Composable
-    fun subscribeAsState(initial: String): State<String>
+    fun subscribeAsState(initial: String?): State<String?>
 
     fun supportMultipleValues(): Boolean
 }
@@ -199,10 +196,7 @@
             override fun onNext(value: String) = subject.onNext(value)
 
             @Composable
-            override fun subscribeAsState(): State<String?> = subject.subscribeAsState()
-
-            @Composable
-            override fun subscribeAsState(initial: String) = subject.subscribeAsState(initial)
+            override fun subscribeAsState(initial: String?) = subject.subscribeAsState(initial)
 
             override fun supportMultipleValues(): Boolean = true
         }
@@ -220,10 +214,7 @@
             override fun onNext(value: String) = subject.onNext(value)
 
             @Composable
-            override fun subscribeAsState(): State<String?> = flowable.subscribeAsState()
-
-            @Composable
-            override fun subscribeAsState(initial: String) = flowable.subscribeAsState(initial)
+            override fun subscribeAsState(initial: String?) = flowable.subscribeAsState(initial)
 
             override fun supportMultipleValues(): Boolean = true
         }
@@ -261,10 +252,7 @@
             }
 
             @Composable
-            override fun subscribeAsState(): State<String?> = single.subscribeAsState()
-
-            @Composable
-            override fun subscribeAsState(initial: String) = single.subscribeAsState(initial)
+            override fun subscribeAsState(initial: String?) = single.subscribeAsState(initial)
 
             override fun supportMultipleValues(): Boolean = false
         }
@@ -302,10 +290,7 @@
             }
 
             @Composable
-            override fun subscribeAsState(): State<String?> = maybe.subscribeAsState()
-
-            @Composable
-            override fun subscribeAsState(initial: String) = maybe.subscribeAsState(initial)
+            override fun subscribeAsState(initial: String?) = maybe.subscribeAsState(initial)
 
             override fun supportMultipleValues(): Boolean = false
         }
diff --git a/ui/ui-rxjava2/src/main/java/androidx/ui/rxjava2/RxJava2Adapter.kt b/ui/ui-rxjava2/src/main/java/androidx/ui/rxjava2/RxJava2Adapter.kt
index d5443f5..6005c01 100644
--- a/ui/ui-rxjava2/src/main/java/androidx/ui/rxjava2/RxJava2Adapter.kt
+++ b/ui/ui-rxjava2/src/main/java/androidx/ui/rxjava2/RxJava2Adapter.kt
@@ -38,9 +38,12 @@
  * Note that errors are not handled and the default [RxJavaPlugins.onError] logic will be
  * used. To handle the error in a more meaningful way you can use operators like
  * [Observable.onErrorReturn] or [Observable.onErrorResumeNext].
- *
- * @sample androidx.ui.rxjava2.samples.ObservableSample
  */
+@Deprecated(
+    "Use subscribeAsState with an explicit initial value instead. Using null is not always the " +
+            "best default, for example when you have a List it is better to start with emptyList()",
+    ReplaceWith("subscribeAsState(null)")
+)
 @Suppress("NOTHING_TO_INLINE")
 @Composable
 inline fun <T : Any> Observable<T>.subscribeAsState(): State<T?> = subscribeAsState(null)
@@ -56,7 +59,10 @@
  * used. To handle the error in a more meaningful way you can use operators like
  * [Observable.onErrorReturn] or [Observable.onErrorResumeNext].
  *
- * @sample androidx.ui.rxjava2.samples.ObservableWithInitialSample
+ * @sample androidx.ui.rxjava2.samples.ObservableSample
+ *
+ * @param initial The initial value for the returned [State] which will be asynchronously updated
+ * with the real one once we receive it from the stream
  */
 @Composable
 fun <R, T : R> Observable<T>.subscribeAsState(initial: R): State<R> =
@@ -72,9 +78,12 @@
  * Note that errors are not handled and the default [RxJavaPlugins.onError] logic will be
  * used. To handle the error in a more meaningful way you can use operators like
  * [Flowable.onErrorReturn] or [Flowable.onErrorResumeNext].
- *
- * @sample androidx.ui.rxjava2.samples.FlowableSample
  */
+@Deprecated(
+    "Use subscribeAsState with an explicit initial value instead. Using null is not always the " +
+            "best default, for example when you have a List it is better to start with emptyList()",
+    ReplaceWith("subscribeAsState(null)")
+)
 @Suppress("NOTHING_TO_INLINE")
 @Composable
 inline fun <T : Any> Flowable<T>.subscribeAsState(): State<T?> = subscribeAsState(null)
@@ -90,7 +99,10 @@
  * used. To handle the error in a more meaningful way you can use operators like
  * [Flowable.onErrorReturn] or [Flowable.onErrorResumeNext].
  *
- * @sample androidx.ui.rxjava2.samples.FlowableWithInitialSample
+ * @sample androidx.ui.rxjava2.samples.FlowableSample
+ *
+ * @param initial The initial value for the returned [State] which will be asynchronously updated
+ * with the real one once we receive it from the stream
  */
 @Composable
 fun <R, T : R> Flowable<T>.subscribeAsState(initial: R): State<R> =
@@ -106,9 +118,12 @@
  * Note that errors are not handled and the default [RxJavaPlugins.onError] logic will be
  * used. To handle the error in a more meaningful way you can use operators like
  * [Single.onErrorReturn] or [Single.onErrorResumeNext].
- *
- * @sample androidx.ui.rxjava2.samples.SingleSample
  */
+@Deprecated(
+    "Use subscribeAsState with an explicit initial value instead. Using null is not always the " +
+            "best default, for example when you have a List it is better to start with emptyList()",
+    ReplaceWith("subscribeAsState(null)")
+)
 @Suppress("NOTHING_TO_INLINE")
 @Composable
 inline fun <T : Any> Single<T>.subscribeAsState(): State<T?> = subscribeAsState(null)
@@ -124,7 +139,10 @@
  * used. To handle the error in a more meaningful way you can use operators like
  * [Single.onErrorReturn] or [Single.onErrorResumeNext].
  *
- * @sample androidx.ui.rxjava2.samples.SingleWithInitialSample
+ * @sample androidx.ui.rxjava2.samples.SingleSample
+ *
+ * @param initial The initial value for the returned [State] which will be asynchronously updated
+ * with the real one once we receive it from the stream
  */
 @Composable
 fun <R, T : R> Single<T>.subscribeAsState(initial: R): State<R> =
@@ -140,9 +158,12 @@
  * Note that errors are not handled and the default [RxJavaPlugins.onError] logic will be
  * used. To handle the error in a more meaningful way you can use operators like
  * [Maybe.onErrorComplete], [Maybe.onErrorReturn] or [Maybe.onErrorResumeNext].
- *
- * @sample androidx.ui.rxjava2.samples.MaybeSample
  */
+@Deprecated(
+    "Use subscribeAsState with an explicit initial value instead. Using null is not always the " +
+            "best default, for example when you have a List it is better to start with emptyList()",
+    ReplaceWith("subscribeAsState(null)")
+)
 @Suppress("NOTHING_TO_INLINE")
 @Composable
 inline fun <T : Any> Maybe<T>.subscribeAsState(): State<T?> = subscribeAsState(null)
@@ -158,7 +179,10 @@
  * used. To handle the error in a more meaningful way you can use operators like
  * [Maybe.onErrorComplete], [Maybe.onErrorReturn] or [Maybe.onErrorResumeNext].
  *
- * @sample androidx.ui.rxjava2.samples.MaybeWithInitialSample
+ * @sample androidx.ui.rxjava2.samples.MaybeSample
+ *
+ * @param initial The initial value for the returned [State] which will be asynchronously updated
+ * with the real one once we receive it from the stream
  */
 @Composable
 fun <R, T : R> Maybe<T>.subscribeAsState(initial: R): State<R> =