TBR: TODOs: Show better times

"Last Updated" and "Created".

Also update the TodoList whenever a child Task is updated.
Note: Conflicts may potentially undo TodoList renames unless we "split"
the TodoList apart into separate name and lastUpdated fields.

Note that Time Ago will be stale.
https://github.com/vanadium/issues/issues/1296

Change-Id: Ie3c84206570b3535cfb5e618b975661e40089018
diff --git a/projects/todos/app/src/firebase/java/io/v/todos/persistence/firebase/FirebaseTodoList.java b/projects/todos/app/src/firebase/java/io/v/todos/persistence/firebase/FirebaseTodoList.java
index 936b064..ba3b3ca 100644
--- a/projects/todos/app/src/firebase/java/io/v/todos/persistence/firebase/FirebaseTodoList.java
+++ b/projects/todos/app/src/firebase/java/io/v/todos/persistence/firebase/FirebaseTodoList.java
@@ -24,6 +24,8 @@
     private final ValueEventListener mTodoListListener;
     private final ChildEventListener mTasksListener;
 
+    private TodoList mList;
+
     public FirebaseTodoList(Context context, String todoListKey, final TodoListListener listener) {
         super(context);
 
@@ -37,6 +39,7 @@
                 if (todoList == null) {
                     listener.onDelete();
                 } else {
+                    mList = todoList;
                     listener.onUpdate(todoList);
                 }
             }
@@ -64,16 +67,19 @@
     @Override
     public void addTask(Task task) {
         mTasks.push().setValue(task);
+        mTodoList.setValue(new TodoList(mList.getName()));
     }
 
     @Override
     public void updateTask(Task task) {
         mTasks.child(task.getKey()).setValue(task);
+        mTodoList.setValue(new TodoList(mList.getName()));
     }
 
     @Override
     public void deleteTask(String key) {
         mTasks.child(key).removeValue();
+        mTodoList.setValue(new TodoList(mList.getName()));
     }
 
     @Override
diff --git a/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java b/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
index b4f4ace..05d56fc 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
@@ -37,7 +37,7 @@
     }
 
     private String computeCreated(Task task) {
-        return "" + task.getAddedAt();
+        return UIUtil.computeTimeAgo("Created", task.getAddedAt());
     }
 
     public void setShowDone(boolean showDone) {
diff --git a/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java b/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
index 1791c87..0cc91f7 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
@@ -127,25 +127,21 @@
     }
 
     public void addTodoItem(String todo) {
-        // TODO(alexfandrianto): Turns out these are all batch changes that change the parents updatedAt
         mPersistence.addTask(new Task(todo));
     }
 
     public void updateTodoItem(String fbKey, String todo) {
-        // TODO(alexfandrianto): Turns out these are all batch changes that change the parents updatedAt
         Task task = snackoosList.findByKey(fbKey).copy();
         task.setText(todo);
         mPersistence.updateTask(task);
     }
     public void markAsDone(String fbKey) {
-        // TODO(alexfandrianto): Turns out these are all batch changes that change the parents updatedAt
         Task task = snackoosList.findByKey(fbKey).copy();
         task.setDone(!task.getDone());
         mPersistence.updateTask(task);
     }
 
     public void deleteTodoItem(String fbKey) {
-        // TODO(alexfandrianto): Turns out these are all batch changes that change the parents updatedAt
         mPersistence.deleteTask(fbKey);
     }
 
diff --git a/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java b/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
index f99beb2..788fe95 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
@@ -32,7 +32,7 @@
     }
 
     private String computeTimeAgo(TodoList todoList) {
-        return "" + todoList.getUpdatedAt();
+        return UIUtil.computeTimeAgo("Last Updated", todoList.getUpdatedAt());
     }
 
     private String computeCompleted(TodoList todoList) {
diff --git a/projects/todos/app/src/main/java/io/v/todos/UIUtil.java b/projects/todos/app/src/main/java/io/v/todos/UIUtil.java
new file mode 100644
index 0000000..dd302d3
--- /dev/null
+++ b/projects/todos/app/src/main/java/io/v/todos/UIUtil.java
@@ -0,0 +1,16 @@
+// 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;
+
+import android.text.format.DateUtils;
+
+/**
+ * Created by alexfandrianto on 4/18/16.
+ */
+public class UIUtil {
+    public static String computeTimeAgo(String prefix, long startTime) {
+        return prefix + ": " + DateUtils.getRelativeTimeSpanString(startTime);
+    }
+}