TODOs: Consolidate AlertDialogs in UIUtil
This shoves more of the code into the UIUtil class to clean up the
Activity code a bit more.
Change-Id: I8964377646bec6650fe9fa3ad2f3fc468b8170e6
diff --git a/app/src/main/java/io/v/todos/MainActivity.java b/app/src/main/java/io/v/todos/MainActivity.java
index 0b8e1c0..ec9fcee 100644
--- a/app/src/main/java/io/v/todos/MainActivity.java
+++ b/app/src/main/java/io/v/todos/MainActivity.java
@@ -5,17 +5,13 @@
package io.v.todos;
import android.app.Activity;
-import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.WindowManager;
-import android.widget.EditText;
import android.widget.Toolbar;
import io.v.todos.model.DataList;
@@ -102,7 +98,8 @@
}
}).attachToRecyclerView(recyclerView);
- mPersistence = PersistenceFactory.getMainPersistence(this, new ListEventListener<ListMetadata>() {
+ mPersistence = PersistenceFactory.getMainPersistence(this,
+ new ListEventListener<ListMetadata>() {
@Override
public void onItemAdd(ListMetadata item) {
int position = snackoosList.insertInOrder(item);
@@ -136,23 +133,13 @@
v.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
}
- public void addCallback(View view) {
- final EditText todoItem = new EditText(this);
-
- AlertDialog dialog = new AlertDialog.Builder(this)
- .setTitle("New Todo")
- .setView(todoItem)
- .setPositiveButton("Add", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- mPersistence.addTodoList(new ListSpec(todoItem.getText().toString()));
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- }
- }).show();
- dialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ public void initiateItemAdd(View view) {
+ UIUtil.showAddDialog(this, "New Todo List", new UIUtil.DialogResponseListener() {
+ @Override
+ public void handleResponse(String response) {
+ mPersistence.addTodoList(new ListSpec(response));
+ }
+ });
}
// The following methods are boilerplate for handling the Menu in the top right corner.
diff --git a/app/src/main/java/io/v/todos/TodoListActivity.java b/app/src/main/java/io/v/todos/TodoListActivity.java
index d198a4e..7d22c42 100644
--- a/app/src/main/java/io/v/todos/TodoListActivity.java
+++ b/app/src/main/java/io/v/todos/TodoListActivity.java
@@ -5,17 +5,13 @@
package io.v.todos;
import android.app.Activity;
-import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.WindowManager;
-import android.widget.EditText;
import android.widget.Toolbar;
import io.v.todos.model.DataList;
@@ -84,10 +80,11 @@
new ItemTouchHelper(new SwipeableTouchHelperCallback() {
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, final int direction) {
+ String fbKey = (String)viewHolder.itemView.getTag();
if (direction == ItemTouchHelper.RIGHT) {
- markAsDone((String)viewHolder.itemView.getTag());
+ mPersistence.updateTask(snackoosList.findByKey(fbKey).withToggleDone());
} else if (direction == ItemTouchHelper.LEFT) {
- deleteTodoItem((String)viewHolder.itemView.getTag());
+ mPersistence.deleteTask(fbKey);
}
}
}).attachToRecyclerView(recyclerView);
@@ -155,100 +152,45 @@
v.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
}
- public void addTodoItem(String todo) {
- mPersistence.addTask(new TaskSpec(todo));
- }
-
- public void updateTodoItem(String fbKey, String todo) {
- mPersistence.updateTask(snackoosList.findByKey(fbKey).withText(todo));
- }
- public void markAsDone(String fbKey) {
- mPersistence.updateTask(snackoosList.findByKey(fbKey).withToggleDone());
- }
-
- public void deleteTodoItem(String fbKey) {
- mPersistence.deleteTask(fbKey);
- }
-
- public void addCallback(View view) {
- final EditText todoItem = new EditText(this);
-
- AlertDialog dialog = new AlertDialog.Builder(this)
- .setTitle("New Todo")
- .setView(todoItem)
- .setPositiveButton("Add", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- addTodoItem(todoItem.getText().toString());
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- }
- }).show();
- dialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ public void initiateItemAdd(View view) {
+ UIUtil.showAddDialog(this, "New Task", new UIUtil.DialogResponseListener() {
+ @Override
+ public void handleResponse(String response) {
+ mPersistence.addTask(new TaskSpec(response));
+ }
+ });
}
private void initiateTaskEdit(final String fbKey) {
- final EditText todoItem = new EditText(this);
- todoItem.setText(snackoosList.findByKey(fbKey).text);
+ UIUtil.showEditDialog(this, "Editing Task", snackoosList.findByKey(fbKey).text,
+ new UIUtil.DialogResponseListener() {
+ @Override
+ public void handleResponse(String response) {
+ mPersistence.updateTask(snackoosList.findByKey(fbKey).withText(response));
+ }
- AlertDialog dialog = new AlertDialog.Builder(this)
- .setTitle("Editing Task")
- .setView(todoItem)
- .setPositiveButton("Save", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- updateTodoItem(fbKey, todoItem.getText().toString());
- }
- })
- .setNeutralButton("Delete", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- deleteTodoItem(fbKey);
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- }
- }).show();
- dialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ @Override
+ public void handleDelete() {
+ mPersistence.deleteTask(fbKey);
+ }
+ });
}
private void initiateTodoListEdit() {
- final EditText todoItem = new EditText(this);
- todoItem.setText(snackoo.getName());
+ UIUtil.showEditDialog(this, "Editing Todo List", snackoo.getName(),
+ new UIUtil.DialogResponseListener() {
+ @Override
+ public void handleResponse(String response) {
+ mPersistence.updateTodoList(new ListSpec(response));
+ }
- AlertDialog dialog = new AlertDialog.Builder(this)
- .setTitle("Editing Todo List")
- .setView(todoItem)
- .setPositiveButton("Save", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- updateTodoList(todoItem.getText().toString());
- }
- })
- .setNeutralButton("Delete", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- deleteTodoList();
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- }
- }).show();
- dialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ @Override
+ public void handleDelete() {
+ mPersistence.deleteTodoList();
+ }
+ });
}
-
- public void updateTodoList(String name) {
- mPersistence.updateTodoList(new ListSpec(name));
- }
-
- public void deleteTodoList() {
- mPersistence.deleteTodoList();
- }
-
-
// The following methods are boilerplate for handling the Menu in the top right corner.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
diff --git a/app/src/main/java/io/v/todos/UIUtil.java b/app/src/main/java/io/v/todos/UIUtil.java
index dd302d3..d17b822 100644
--- a/app/src/main/java/io/v/todos/UIUtil.java
+++ b/app/src/main/java/io/v/todos/UIUtil.java
@@ -4,7 +4,12 @@
package io.v.todos;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.support.v7.app.AlertDialog;
import android.text.format.DateUtils;
+import android.view.WindowManager;
+import android.widget.EditText;
/**
* Created by alexfandrianto on 4/18/16.
@@ -13,4 +18,55 @@
public static String computeTimeAgo(String prefix, long startTime) {
return prefix + ": " + DateUtils.getRelativeTimeSpanString(startTime);
}
+
+ public static void showAddDialog(Context context, String title,
+ final DialogResponseListener addListener) {
+ final EditText todoItem = new EditText(context);
+
+ AlertDialog dialog = new AlertDialog.Builder(context)
+ .setTitle(title)
+ .setView(todoItem)
+ .setPositiveButton("Add", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ addListener.handleResponse(todoItem.getText().toString());
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ }
+ }).show();
+ dialog.getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ }
+
+ public static void showEditDialog(Context context, String title, String defaultValue,
+ final DialogResponseListener editListener) {
+ final EditText todoItem = new EditText(context);
+ todoItem.setText(defaultValue);
+
+ AlertDialog dialog = new AlertDialog.Builder(context)
+ .setTitle(title)
+ .setView(todoItem)
+ .setPositiveButton("Save", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ editListener.handleResponse(todoItem.getText().toString());
+ }
+ })
+ .setNeutralButton("Delete", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ editListener.handleDelete();
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ }
+ }).show();
+ dialog.getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ }
+
+ public static abstract class DialogResponseListener {
+ public abstract void handleResponse(String response);
+ public void handleDelete() {}
+ }
}
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index 4e1d05e..db458e2 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -36,5 +36,5 @@
android:src="@android:drawable/ic_input_add"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"
- android:onClick="addCallback"/>
+ android:onClick="initiateItemAdd"/>
</RelativeLayout>