blob: ba6aa17e78934152fec476d255d561cf267dfd70 [file] [log] [blame]
// 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.Map;
import java.util.UUID;
import io.v.syncbase.BatchDatabase;
import io.v.syncbase.Collection;
import io.v.syncbase.Database;
import io.v.syncbase.Id;
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 {
private Collection mCollection;
public SyncbaseTodoList(Activity activity, Bundle savedInstanceState, String key,
TodoListListener listener) {
super(activity, savedInstanceState);
Id listId = Id.decode(key);
mCollection = mDb.getCollection(listId);
// Fire the listener for existing data (list, tasks, show done status).
ListSpec currentList = sListSpecMap.get(listId);
if (currentList != null) {
listener.onUpdate(currentList);
}
Map<String, TaskSpec> currentTasks = sTasksByListMap.get(listId);
if (currentTasks != null) {
for (String taskKey : currentTasks.keySet()) {
listener.onItemAdd(new Task(taskKey, currentTasks.get(taskKey)));
}
}
listener.onUpdateShowDone(sShowDone);
// Register the listener for future updates.
setTodoListListener(listener);
}
@Override
public void updateTodoList(ListSpec listSpec) {
mCollection.put(TODO_LIST_KEY, listSpec);
}
@Override
public void deleteTodoList() {
mCollection.delete(TODO_LIST_KEY);
}
@Override
public void completeTodoList() {
mDb.runInBatch(new Database.BatchOperation() {
@Override
public void run(BatchDatabase bDb) {
Collection bCollection = bDb.getCollection(mCollection.getId());
Map<String, TaskSpec> curTasks = sTasksByListMap.get(mCollection.getId());
for (Map.Entry<String, TaskSpec> entry : curTasks.entrySet()) {
String rowKey = entry.getKey();
TaskSpec curSpec= entry.getValue();
TaskSpec newSpec = new TaskSpec(curSpec.getText(), curSpec.getAddedAt(), true);
bCollection.put(rowKey, newSpec);
}
}
}, new Database.BatchOptions());
}
@Override
public void addTask(TaskSpec task) {
mCollection.put(UUID.randomUUID().toString(), task);
}
@Override
public void updateTask(Task task) {
mCollection.put(task.key, task.toSpec());
}
@Override
public void deleteTask(String key) {
mCollection.delete(key);
}
@Override
public void setShowDone(boolean showDone) {
mSettings.put(SHOW_DONE_KEY, showDone);
}
@Override
public void close() {
removeTodoListListener();
super.close();
}
}