TODOs: joinWithBackoff -> joinWithRetry

Instead of backing off exponentially, we will consistently check
every 2s, 15 times in a row.

Change-Id: I9f2fbdae39fd4e8150a20ba5e010bca17f17fb1a
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
index b957fe8..34771e1 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
@@ -44,7 +44,8 @@
     private static final String
             TAG = SyncbaseMain.class.getSimpleName();
 
-    private static int DEFAULT_MAX_JOIN_ATTEMPTS = 10;
+    private static final int DEFAULT_MAX_JOIN_ATTEMPTS = 15;
+    private static final long RETRY_DELAY = 2000;
 
     private final IdGenerator mIdGenerator = new IdGenerator(IdAlphabets.COLLECTION_ID, true);
     private final Map<String, MainListTracker> mTaskTrackers = new HashMap<>();
@@ -82,7 +83,7 @@
 
                         Log.d(TAG, "Found a list id from userdata watch: " + listId.getName() +
                                 " with owner: " + listId.getBlessing());
-                        trap(joinWithBackoff(listId));
+                        trap(joinWithRetry(listId));
 
                         MainListTracker listTracker = new MainListTracker(getVContext(),
                                 getDatabase(), listId, listener);
@@ -138,18 +139,20 @@
                 CLOUD_NAME, Arrays.asList(CLOUD_BLESSING), memberInfo);
     }
 
-    private ListenableFuture<SyncgroupSpec> joinWithBackoff(Id listId) {
-        return joinWithBackoff(listId, 0, DEFAULT_MAX_JOIN_ATTEMPTS);
+    // Join the syncgroup. Retry if there are failures.
+    private ListenableFuture<SyncgroupSpec> joinWithRetry(Id listId) {
+        return joinWithRetry(listId, 0, DEFAULT_MAX_JOIN_ATTEMPTS);
     }
 
-    private ListenableFuture<SyncgroupSpec> joinWithBackoff(final Id listId, final int numTimes,
-                                                            final int limit) {
+    private ListenableFuture<SyncgroupSpec> joinWithRetry(final Id listId, final int numTimes,
+                                                          final int limit) {
         final String debugString = (numTimes + 1) + "/" + limit + " for: " + listId;
         Log.d(TAG, "Join attempt " + debugString);
         if (numTimes + 1 == limit) { // final attempt!
             return joinListSyncgroup(listId);
         }
-        final long delay = RETRY_DELAY * (1 << numTimes);
+        // Note: This can be easily converted to exponential backoff.
+        final long delay = RETRY_DELAY;
         return Futures.catchingAsync(
                 joinListSyncgroup(listId),
                 SyncgroupJoinFailedException.class,
@@ -168,7 +171,7 @@
                                 // If this errors, then we will not get another chance to
                                 // see this syncgroup until the app is restarted.
                                 try {
-                                    return joinWithBackoff(listId, numTimes + 1, limit).get();
+                                    return joinWithRetry(listId, numTimes + 1, limit).get();
                                 } catch (InterruptedException | ExecutionException e) {
                                     return null;
                                 }
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
index e99d341..dd01b54 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
@@ -41,7 +41,6 @@
 import java.util.TimerTask;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 
 import io.v.android.inspectors.RemoteInspectors;
 import io.v.android.ManagedVAndroidContext;
@@ -103,7 +102,6 @@
     protected static final String LISTS_PREFIX = "lists_";
     protected static final long
             SHORT_TIMEOUT = 2500,
-            RETRY_DELAY = 300,
             MEMBER_TIMER_DELAY = 100,
             MEMBER_TIMER_PERIOD = 5000;
     public static final String