Baku - Docs improvements

Grouped packages in overview in response to afergan@'s API usability
feedback.

Added usage examples for Coordinators in response to youngseokyoon@'s CR
feedback.

Change-Id: I3ecf6a9064c5544427063e0bbec0f95c1dfc49cd
diff --git a/baku-toolkit/lib/build.gradle b/baku-toolkit/lib/build.gradle
index 24f751f..ee8337b 100644
--- a/baku-toolkit/lib/build.gradle
+++ b/baku-toolkit/lib/build.gradle
@@ -156,6 +156,8 @@
         doclet 'ch.raffael.doclets.pegdown.PegdownDoclet'
         stylesheetFile = new File('lib/src/main/java/custom-styles.css')
         bottom new File('lib/src/main/java/bottom.html').text
+        group 'API Surface', 'io.v.baku.toolkit'
+        group 'Component Packages', 'io.v.baku.toolkit.*:io.v.rx:io.v.rx.*'
     }
 
     if (JavaVersion.current().isJava8Compatible()) {
diff --git a/baku-toolkit/lib/src/main/java/custom-styles.css b/baku-toolkit/lib/src/main/java/custom-styles.css
index 7ea28ef..345a428 100644
--- a/baku-toolkit/lib/src/main/java/custom-styles.css
+++ b/baku-toolkit/lib/src/main/java/custom-styles.css
@@ -6,12 +6,17 @@
 
 /* Links in code blocks don't display well by default. */
 
-a code {
+pre code code {
     display: inline;
     padding: 0;
-    color: #4A6782;
+    color: inherit;
 }
 
-a:hover code {
-    color: #bb7a2a;
-}
+/*
+Although headings should be fine in class docs, the default stylesheet includes a
+ul.blockList li.blockList h2 style with padding-bottom: 20px for some reason.
+*/
+
+ul.blockList li.blockList .block h2 {
+    padding: initial;
+}
\ No newline at end of file
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/DebouncingCoordinator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/DebouncingCoordinator.java
index 6e67a41..2382b7d 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/DebouncingCoordinator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/DebouncingCoordinator.java
@@ -4,12 +4,14 @@
 
 package io.v.baku.toolkit.bind;
 
+import android.view.View;
 import android.widget.TextView;
 
 import org.joda.time.Duration;
 
 import java.util.concurrent.TimeUnit;
 
+import io.v.baku.toolkit.BakuActivityTrait;
 import io.v.rx.syncbase.SingleWatchEvent;
 import lombok.RequiredArgsConstructor;
 import rx.Observable;
@@ -18,10 +20,12 @@
 import rx.subjects.ReplaySubject;
 
 /**
- * This coordinator defers the read binding until a specified timeout (default
- * {@value #DEFAULT_IO_DEBOUNCE_MILLIS} ms) after the latest write, then taking the latest read.
- * Write/watch latency can cause reflexive watch changes from Syncbase to arrive after subsequent
- * changes to the UI state have already been made, causing a stuttering revert.
+ * This coordinator defers the read binding until a specified delay after the latest write, then
+ * taking the latest read. Write/watch latency can cause reflexive watch changes from Syncbase to
+ * arrive after subsequent changes to the UI state have already been made, causing a stuttering
+ * revert.
+ *
+ * The default delay is 500 ms.
  *
  * A simple debounce on the uplink or downlink doesn't solve the problem because it effectively just
  * adds a delay to the boundary condition. To prevent this, any update from the model must be
@@ -33,11 +37,23 @@
  * This coordinator is included in the default coordinator chain for
  * {@linkplain io.v.baku.toolkit.bind.SyncbaseBinding.Builder#bindTo(TextView) two-way
  * <code>TextView</code> bindings}.
+ *
+ * ## Usage
+ *The following example shows how you would use this coordinator explicitly while creating a custom
+ * binding within a {@link io.v.baku.toolkit.BakuActivityTrait}:
+ *
+ * ```java
+ * {@link BakuActivityTrait#binder() binder()}.{@link
+ *         io.v.baku.toolkit.bind.SyncbaseBinding.Builder#key(java.lang.String) key}("foo")
+ *         .{@link io.v.baku.toolkit.bind.SyncbaseBinding.Builder#coordinators(CoordinatorChain[])
+ *         coordinators}({@link DebouncingCoordinator#DebouncingCoordinator(TwoWayBinding)
+ *         DebouncingCoordinator::new})
+ *         .{@link io.v.baku.toolkit.bind.SyncbaseBinding.Builder#bindTo(View) bindTo}(myView);
+ * ```
  */
 @RequiredArgsConstructor
 public class DebouncingCoordinator<T> implements TwoWayBinding<T> {
-    private static final long DEFAULT_IO_DEBOUNCE_MILLIS = 500;
-    public static final Duration DEFAULT_IO_DEBOUNCE = Duration.millis(DEFAULT_IO_DEBOUNCE_MILLIS);
+    public static final Duration DEFAULT_IO_DEBOUNCE = Duration.millis(500);
 
     private final TwoWayBinding<T> mChild;
     private final Duration mIoDebounce;
@@ -49,6 +65,9 @@
         //We expect these timeouts to be on the main thread; see putDebounceWindow
     }
 
+    /**
+     * A reference to this constructor can be used as a {@link CoordinatorChain}.
+     */
     public DebouncingCoordinator(final TwoWayBinding<T> child) {
         this(child, DEFAULT_IO_DEBOUNCE);
     }
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SuppressWriteOnReadCoordinator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SuppressWriteOnReadCoordinator.java
index d93d352..c8bb28e 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SuppressWriteOnReadCoordinator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SuppressWriteOnReadCoordinator.java
@@ -4,8 +4,10 @@
 
 package io.v.baku.toolkit.bind;
 
+import android.view.View;
 import android.widget.TextView;
 
+import io.v.baku.toolkit.BakuActivityTrait;
 import io.v.rx.syncbase.SingleWatchEvent;
 import lombok.RequiredArgsConstructor;
 import rx.Observable;
@@ -22,6 +24,20 @@
  * This coordinator is required (and injected if missing) in the coordinator chain for
  * {@linkplain io.v.baku.toolkit.bind.SyncbaseBinding.Builder#bindTo(TextView) two-way
  * <code>TextView</code> bindings}.
+ *
+ * ## Usage
+ *The following example shows how you would use this coordinator explicitly while creating a custom
+ * binding within a {@link io.v.baku.toolkit.BakuActivityTrait}:
+ *
+ * ```java
+ * {@link BakuActivityTrait#binder() binder()}.{@link
+ *         io.v.baku.toolkit.bind.SyncbaseBinding.Builder#key(java.lang.String) key}("foo")
+ *         .{@link io.v.baku.toolkit.bind.SyncbaseBinding.Builder#coordinators(CoordinatorChain[])
+ *         coordinators}({@link
+ *         SuppressWriteOnReadCoordinator#SuppressWriteOnReadCoordinator(TwoWayBinding)
+ *         SuppressWriteOnReadCoordinator::new})
+ *         .{@link io.v.baku.toolkit.bind.SyncbaseBinding.Builder#bindTo(View) bindTo}(myView);
+ * ```
  */
 @RequiredArgsConstructor
 public class SuppressWriteOnReadCoordinator<T> implements TwoWayBinding<T> {
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/package-info.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/package-info.java
index 1d86382..9f1ecf4 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/package-info.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/package-info.java
@@ -19,7 +19,7 @@
  *     super.onCreate(savedInstanceState);
  *     setContentView(R.layout.my_activity_layout);
  *
- *     {@link io.v.baku.toolkit.BakuActivityMixin#binder() binder}().{@link
+ *     {@link io.v.baku.toolkit.BakuActivityTrait#binder() binder}().{@link
  *         io.v.baku.toolkit.bind.SyncbaseBinding.Builder#key(java.lang.String) key}("myDataRow")
  *             .{@link io.v.baku.toolkit.bind.SyncbaseBinding.Builder#bindTo(int)
  *             bindTo}(R.id.myTextView);