TODOs: Use Higher-Level API Skeleton

This commit shows that we can actually import the higher-level syncbase
API. The commit also includes the intended usage of the API.

Starts from 0.1.1 (0.1.0 didn't quite have the right level of method
exposure)

Change-Id: Ied34fcd964585eb03407896baf9fa4f86ed912ab
diff --git a/app/build.gradle b/app/build.gradle
index 119d275..7cc822e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,6 +22,9 @@
         syncbase {
             applicationId "io.v.todos.syncbase"
         }
+        syncbase2 {
+            applicationId "io.v.todos.syncbase2"
+        }
         mock {
             applicationId "io.v.todos.mock"
         }
@@ -80,4 +83,5 @@
     )
     firebaseCompile 'com.firebase:firebase-client-android:2.5.2'
     syncbaseCompile 'io.v:vanadium-android:2.1.+'
+    syncbase2Compile 'io.v:syncbase:0.1.1'
 }
diff --git a/app/src/syncbase2/java/io/v/todos/persistence/PersistenceFactory.java b/app/src/syncbase2/java/io/v/todos/persistence/PersistenceFactory.java
new file mode 100644
index 0000000..4fa6849
--- /dev/null
+++ b/app/src/syncbase2/java/io/v/todos/persistence/PersistenceFactory.java
@@ -0,0 +1,53 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos.persistence;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import io.v.impl.google.services.syncbase.SyncbaseServer;
+import io.v.todos.model.ListMetadata;
+import io.v.todos.persistence.syncbase.SyncbaseMain;
+import io.v.todos.persistence.syncbase.SyncbaseTodoList;
+import io.v.v23.verror.VException;
+
+public final class PersistenceFactory {
+    private PersistenceFactory(){}
+
+    /**
+     * Indicates whether {@link #getMainPersistence(Activity, Bundle, ListEventListener)} may block.
+     * This can affect whether a progress indicator is shown and whether a worker thread is used.
+     */
+    public static boolean mightGetMainPersistenceBlock() {
+        return !SyncbaseMain.isInitialized();
+    }
+
+    /**
+     * Instantiates a persistence object that can be used to manipulate todo lists.
+     */
+    public static MainPersistence getMainPersistence(
+            Activity activity, Bundle savedInstanceState, ListEventListener<ListMetadata> listener)
+            throws VException, SyncbaseServer.StartException {
+        return new SyncbaseMain(activity, savedInstanceState, listener);
+    }
+
+    /**
+     * Indicates whether {@link #getTodoListPersistence(Activity, Bundle, String, TodoListListener)}
+     * may block. This can affect whether a progress indicator is shown and whether a worker thread
+     * is used.
+     */
+    public static boolean mightGetTodoListPersistenceBlock() {
+        return !SyncbaseTodoList.isInitialized();
+    }
+
+    /**
+     * Instantiates a persistence object that can be used to manipulate a todo list.
+     */
+    public static TodoListPersistence getTodoListPersistence(
+            Activity activity, Bundle savedInstanceState, String key, TodoListListener listener)
+            throws VException, SyncbaseServer.StartException {
+        return new SyncbaseTodoList(activity, savedInstanceState, key, listener);
+    }
+}
diff --git a/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseMain.java b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
new file mode 100644
index 0000000..69956e3
--- /dev/null
+++ b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
@@ -0,0 +1,30 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos.persistence.syncbase;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import io.v.todos.model.ListMetadata;
+import io.v.todos.model.ListSpec;
+import io.v.todos.persistence.ListEventListener;
+import io.v.todos.persistence.MainPersistence;
+
+public class SyncbaseMain extends SyncbasePersistence implements MainPersistence {
+    public SyncbaseMain(Activity activity, Bundle savedInstanceState,
+                        ListEventListener<ListMetadata> listener) {
+        super(activity, savedInstanceState);
+    }
+
+    @Override
+    public String addTodoList(ListSpec listSpec) {
+        return null;
+    }
+
+    @Override
+    public void deleteTodoList(String key) {
+
+    }
+}
diff --git a/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
new file mode 100644
index 0000000..d22f28a
--- /dev/null
+++ b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
@@ -0,0 +1,80 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos.persistence.syncbase;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import java.util.Iterator;
+
+import io.v.syncbase.Database;
+import io.v.syncbase.Syncbase;
+
+import io.v.syncbase.SyncgroupInvite;
+import io.v.syncbase.WatchChange;
+import io.v.todos.persistence.Persistence;
+
+public class SyncbasePersistence implements Persistence {
+    protected static boolean sInitialized = false;
+    protected static Database sDb;
+
+    public SyncbasePersistence(Activity activity, Bundle savedInstanceState) {
+        /**
+         * Initializes Syncbase Server
+         * Starts up a watch stream to watch all the data with methods to access/modify the data.
+         * This watch stream will also allow us to "watch" who has been shared to, if we desire.
+         * Starts up an invite handler to automatically accept invitations.
+         */
+        Syncbase.DatabaseOptions dbOpts = new Syncbase.DatabaseOptions();
+        dbOpts.rootDir = activity.getFilesDir().getAbsolutePath();
+
+        // Start Syncbase Server
+        // sDb = Syncbase.database(dbOpts); // TODO(alexfandrianto): This will crash though.
+
+        // Watch everything.
+        sDb.addWatchChangeHandler(new Database.WatchChangeHandler() {
+            @Override
+            public void onInitialState(Iterator<WatchChange> values) {
+
+            }
+
+            @Override
+            public void onChangeBatch(Iterator<WatchChange> changes) {
+            }
+
+            @Override
+            public void onError(Throwable e) {
+            }
+        }, new Database.AddWatchChangeHandlerOptions());
+
+
+        // Automatically accept invitations.
+        sDb.addSyncgroupInviteHandler(new Database.SyncgroupInviteHandler() {
+            @Override
+            public void onInvite(SyncgroupInvite invite) {
+            }
+
+            @Override
+            public void onError(Throwable e) {
+            }
+        }, new Database.AddSyncgroupInviteHandlerOptions());
+
+        sInitialized = true;
+    }
+
+    public static boolean isInitialized() {
+        return sInitialized;
+    }
+
+    @Override
+    public void close() {
+
+    }
+
+    @Override
+    public String debugDetails() {
+        return null;
+    }
+}
diff --git a/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java
new file mode 100644
index 0000000..b29b794
--- /dev/null
+++ b/app/src/syncbase2/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java
@@ -0,0 +1,56 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos.persistence.syncbase;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import io.v.todos.model.ListSpec;
+import io.v.todos.model.Task;
+import io.v.todos.model.TaskSpec;
+import io.v.todos.persistence.TodoListListener;
+import io.v.todos.persistence.TodoListPersistence;
+
+public class SyncbaseTodoList extends SyncbasePersistence implements TodoListPersistence {
+    public SyncbaseTodoList(Activity activity, Bundle savedInstanceState, String key,
+                            TodoListListener listener) {
+        super(activity, savedInstanceState);
+    }
+
+    @Override
+    public void updateTodoList(ListSpec listSpec) {
+
+    }
+
+    @Override
+    public void deleteTodoList() {
+
+    }
+
+    @Override
+    public void completeTodoList() {
+
+    }
+
+    @Override
+    public void addTask(TaskSpec task) {
+
+    }
+
+    @Override
+    public void updateTask(Task task) {
+
+    }
+
+    @Override
+    public void deleteTask(String key) {
+
+    }
+
+    @Override
+    public void setShowDone(boolean showDone) {
+
+    }
+}
diff --git a/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png
new file mode 100644
index 0000000..6e61f95
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png
new file mode 100644
index 0000000..6c0314a
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-hdpi/ic_expand_less_black_24dp.png b/app/src/syncbase2/res/drawable-hdpi/ic_expand_less_black_24dp.png
new file mode 100644
index 0000000..57139a7
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-hdpi/ic_expand_less_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-hdpi/ic_expand_more_black_24dp.png b/app/src/syncbase2/res/drawable-hdpi/ic_expand_more_black_24dp.png
new file mode 100644
index 0000000..9625f14
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-hdpi/ic_expand_more_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-hdpi/ic_gps_fixed_white_24dp.png b/app/src/syncbase2/res/drawable-hdpi/ic_gps_fixed_white_24dp.png
new file mode 100644
index 0000000..745db48
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-hdpi/ic_gps_fixed_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png
new file mode 100644
index 0000000..ab03ab5
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png
new file mode 100644
index 0000000..8dec6e0
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-mdpi/ic_expand_less_black_24dp.png b/app/src/syncbase2/res/drawable-mdpi/ic_expand_less_black_24dp.png
new file mode 100644
index 0000000..08c16a3
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-mdpi/ic_expand_less_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-mdpi/ic_expand_more_black_24dp.png b/app/src/syncbase2/res/drawable-mdpi/ic_expand_more_black_24dp.png
new file mode 100644
index 0000000..feb85a7
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-mdpi/ic_expand_more_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-mdpi/ic_gps_fixed_white_24dp.png b/app/src/syncbase2/res/drawable-mdpi/ic_gps_fixed_white_24dp.png
new file mode 100644
index 0000000..d1c563c
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-mdpi/ic_gps_fixed_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png
new file mode 100644
index 0000000..e21ea70
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png
new file mode 100644
index 0000000..cb07640
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xhdpi/ic_expand_less_black_24dp.png b/app/src/syncbase2/res/drawable-xhdpi/ic_expand_less_black_24dp.png
new file mode 100644
index 0000000..323360e
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xhdpi/ic_expand_less_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xhdpi/ic_expand_more_black_24dp.png b/app/src/syncbase2/res/drawable-xhdpi/ic_expand_more_black_24dp.png
new file mode 100644
index 0000000..d3ee65e
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xhdpi/ic_expand_more_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xhdpi/ic_gps_fixed_white_24dp.png b/app/src/syncbase2/res/drawable-xhdpi/ic_gps_fixed_white_24dp.png
new file mode 100644
index 0000000..ffab865
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xhdpi/ic_gps_fixed_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png
new file mode 100644
index 0000000..8735faa
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png
new file mode 100644
index 0000000..9e9560c
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_less_black_24dp.png b/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_less_black_24dp.png
new file mode 100644
index 0000000..ee92f4e
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_less_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_more_black_24dp.png b/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_more_black_24dp.png
new file mode 100644
index 0000000..5cd142c
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxhdpi/ic_expand_more_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxhdpi/ic_gps_fixed_white_24dp.png b/app/src/syncbase2/res/drawable-xxhdpi/ic_gps_fixed_white_24dp.png
new file mode 100644
index 0000000..387ecdf
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxhdpi/ic_gps_fixed_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png
new file mode 100644
index 0000000..e28418e
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png
new file mode 100644
index 0000000..f992b16
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png b/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png
new file mode 100644
index 0000000..99c6e3e
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png b/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png
new file mode 100644
index 0000000..ad852e3
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/drawable-xxxhdpi/ic_gps_fixed_white_24dp.png b/app/src/syncbase2/res/drawable-xxxhdpi/ic_gps_fixed_white_24dp.png
new file mode 100644
index 0000000..c55220a
--- /dev/null
+++ b/app/src/syncbase2/res/drawable-xxxhdpi/ic_gps_fixed_white_24dp.png
Binary files differ
diff --git a/app/src/syncbase2/res/layout/sharing.xml b/app/src/syncbase2/res/layout/sharing.xml
new file mode 100644
index 0000000..af1fffe
--- /dev/null
+++ b/app/src/syncbase2/res/layout/sharing.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              xmlns:app="http://schemas.android.com/apk/res-auto"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:orientation="vertical">
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/recycler"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="8dp"
+        app:layoutManager="LinearLayoutManager"/>
+
+    <android.support.design.widget.TextInputLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingEnd="20dp"
+        android:paddingStart="20dp"
+        android:paddingTop="8dp">
+
+        <EditText
+            android:id="@+id/custom_email"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom"
+            android:hint="@string/sharing_custom_hint"
+            android:imeOptions="actionSend"
+            android:inputType="textEmailAddress"
+            android:textColor="#000000"
+            android:textSize="22sp"
+            android:textStyle="bold"/>
+    </android.support.design.widget.TextInputLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/syncbase2/res/layout/sharing_entry.xml b/app/src/syncbase2/res/layout/sharing_entry.xml
new file mode 100644
index 0000000..a2eb525
--- /dev/null
+++ b/app/src/syncbase2/res/layout/sharing_entry.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             android:layout_width="match_parent"
+             android:layout_height="48dp"
+             android:paddingEnd="24dp"
+             android:paddingStart="24dp">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:id="@+id/name"
+        android:layout_gravity="center_vertical"
+        android:textSize="16sp"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/syncbase2/res/layout/sharing_subheader.xml b/app/src/syncbase2/res/layout/sharing_subheader.xml
new file mode 100644
index 0000000..50c81c0
--- /dev/null
+++ b/app/src/syncbase2/res/layout/sharing_subheader.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="48dp"
+              android:orientation="horizontal"
+              android:paddingEnd="24dp"
+              android:paddingStart="24dp">
+
+    <TextView
+        android:id="@+id/category"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_weight="1"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textSize="14sp"
+        android:textStyle="bold"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/syncbase2/res/menu/menu_share.xml b/app/src/syncbase2/res/menu/menu_share.xml
new file mode 100644
index 0000000..90f5725
--- /dev/null
+++ b/app/src/syncbase2/res/menu/menu_share.xml
@@ -0,0 +1,11 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context="io.v.todos.TodoListActivity">
+    <item
+        android:id="@+id/action_share"
+        android:orderInCategory="101"
+        android:title="@string/action_share"
+        android:icon="@drawable/ic_person_add_white_24dp"
+        android:showAsAction="always" />
+</menu>
diff --git a/app/src/syncbase2/res/menu/neighborhood.xml b/app/src/syncbase2/res/menu/neighborhood.xml
new file mode 100644
index 0000000..b7d77d8
--- /dev/null
+++ b/app/src/syncbase2/res/menu/neighborhood.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:id="@+id/advertise_neighborhood"
+          android:orderInCategory="103"
+          android:checkable="true"
+          android:icon="@drawable/ic_advertise_neighborhood_off_white_24dp"
+          android:title="@string/share_location"
+          android:showAsAction="always"/>
+</menu>
\ No newline at end of file
diff --git a/app/src/syncbase2/res/mipmap-hdpi/launcher.png b/app/src/syncbase2/res/mipmap-hdpi/launcher.png
new file mode 100644
index 0000000..9d5e0d6
--- /dev/null
+++ b/app/src/syncbase2/res/mipmap-hdpi/launcher.png
Binary files differ
diff --git a/app/src/syncbase2/res/mipmap-mdpi/launcher.png b/app/src/syncbase2/res/mipmap-mdpi/launcher.png
new file mode 100644
index 0000000..66f1514
--- /dev/null
+++ b/app/src/syncbase2/res/mipmap-mdpi/launcher.png
Binary files differ
diff --git a/app/src/syncbase2/res/mipmap-xhdpi/launcher.png b/app/src/syncbase2/res/mipmap-xhdpi/launcher.png
new file mode 100644
index 0000000..9dfa8d7
--- /dev/null
+++ b/app/src/syncbase2/res/mipmap-xhdpi/launcher.png
Binary files differ
diff --git a/app/src/syncbase2/res/mipmap-xxhdpi/launcher.png b/app/src/syncbase2/res/mipmap-xxhdpi/launcher.png
new file mode 100644
index 0000000..3c7d066
--- /dev/null
+++ b/app/src/syncbase2/res/mipmap-xxhdpi/launcher.png
Binary files differ
diff --git a/app/src/syncbase2/res/values/strings.xml b/app/src/syncbase2/res/values/strings.xml
new file mode 100644
index 0000000..b0e644b
--- /dev/null
+++ b/app/src/syncbase2/res/values/strings.xml
@@ -0,0 +1,13 @@
+<resources>
+    <string name="app_name">Syncbase Todos</string>
+    <string name="share_location">Share Presence</string>
+    <!-- For Sharing Menu -->
+    <string name="sharing_already">Shared With</string>
+    <string name="sharing_possible">Available</string>
+    <string name="sharing_custom_hint">Add an email address&#8230;</string>
+    <!-- Errors -->
+    <string name="err_share_location">Could not share location</string>
+    <string name="err_scan_nearby">Unable to scan for nearby users</string>
+    <string name="err_scan_lists">Unable to scan for todo lists shared with you</string>
+    <string name="err_advertise_list">Unable to send todo list invitation(s)</string>
+</resources>