diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
index f9c534d..bda024d 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
@@ -22,13 +22,16 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
private TaskAdapter taskAdapter;
private TaskDataAccess taskDataAccess;
private FragmentManager fragmentManager;
+ private RecyclerView recyclerView;
- public TaskTouchHelper(TaskAdapter taskAdapter, TaskDataAccess taskDataAccess, FragmentManager fragmentManager){
+ public TaskTouchHelper(TaskAdapter taskAdapter, TaskDataAccess taskDataAccess,
+ FragmentManager fragmentManager, RecyclerView recyclerView){
// No drag moves, only swipes
super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
this.taskAdapter = taskAdapter;
this.taskDataAccess = taskDataAccess;
this.fragmentManager = fragmentManager;
+ this.recyclerView = recyclerView;
}
@Override
@@ -40,33 +43,33 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(viewHolder.itemView.getContext());
-
int itemPosition = viewHolder.getAdapterPosition();
-
- ConfirmDialogFragment confirmDialogFragment = ConfirmDialogFragment.newInstance(taskAdapter);
- Bundle args = new Bundle();
- args.putInt("ItemPosition", itemPosition);
- args.putInt("Direction", direction);
- confirmDialogFragment.setArguments(args);
-
String title = "Confirm";
+ boolean showDialog = false;
+
switch (direction)
{
// Mark item as Done
case ItemTouchHelper.LEFT:
- boolean prefConfDone = sharedPref.getBoolean("pref_conf_done", true);
title = "Done";
- if (prefConfDone) confirmDialogFragment.show(fragmentManager, title);
- else MainActivity.PerformSwipe(taskDataAccess, taskAdapter, itemPosition, direction);
+ showDialog = sharedPref.getBoolean("pref_conf_done", true);
break;
// Increase task cycle count
case ItemTouchHelper.RIGHT:
title = "Next";
- boolean prefConfNext = sharedPref.getBoolean("pref_conf_next", true);
- if (prefConfNext) confirmDialogFragment.show(fragmentManager, title);
- else MainActivity.PerformSwipe(taskDataAccess, taskAdapter, itemPosition, direction);
+ showDialog = sharedPref.getBoolean("pref_conf_next", true);
break;
}
+ if (showDialog) {
+ ConfirmDialogFragment confirmDialogFragment =
+ ConfirmDialogFragment.newInstance(taskAdapter, title, recyclerView);
+ Bundle args = new Bundle();
+ args.putInt("ItemPosition", itemPosition);
+ args.putInt("Direction", direction);
+ confirmDialogFragment.setArguments(args);
+ confirmDialogFragment.show(fragmentManager, title);
+ }
+ else MainActivity.PerformSwipeAction(taskDataAccess, taskAdapter, itemPosition, direction, recyclerView);
}
@Override
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java
index e891d20..14e3d43 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
@@ -201,7 +202,7 @@ public class MainActivity extends AppCompatActivity implements
int direction = args.getInt("Direction");
TaskAdapter taskAdapter = ((ConfirmDialogFragment)dialog).getTaskAdapter();
- PerformSwipe(taskDataAccess, taskAdapter, itemPosition, direction);
+ PerformSwipeAction(taskDataAccess, taskAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
}
@@ -226,9 +227,9 @@ public class MainActivity extends AppCompatActivity implements
editor.putBoolean("pref_conf_next", false);
break;
}
- editor.commit();
+ editor.apply();
TaskAdapter taskAdapter = ((ConfirmDialogFragment)dialog).getTaskAdapter();
- PerformSwipe(taskDataAccess, taskAdapter, itemPosition, direction);
+ PerformSwipeAction(taskDataAccess, taskAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
}
@Override
@@ -252,28 +253,75 @@ public class MainActivity extends AppCompatActivity implements
newTaskFragment.show(manager, "Create new task");
}
- public static void PerformSwipe(TaskDataAccess taskDataAccess, TaskAdapter taskAdapter, int itemPosition, int direction) {
- long itemId = taskAdapter.getItemId(itemPosition);
- taskDataAccess.open();
- Task task = taskAdapter.getItem(itemPosition);
+ public static void PerformSwipeAction(final TaskDataAccess taskDataAccess,
+ final TaskAdapter taskAdapter,
+ final int itemPosition,
+ final int direction,
+ final View view) {
+ final long itemId = taskAdapter.getItemId(itemPosition);
+ final Task task = taskAdapter.getItem(itemPosition);
+ String title = "";
taskAdapter.remove(itemPosition);
switch (direction)
{
// Mark item as Done
case ItemTouchHelper.LEFT:
- taskDataAccess.setDone(itemId);
+ title = "Done";
break;
// Increase task cycle count
case ItemTouchHelper.RIGHT:
- int cycle = task.getCycle();
- taskDataAccess.increaseCycle(cycle, itemId);
- task.setCycle(cycle + 1);
- int lastPosition = taskAdapter.getItemCount();
- taskAdapter.add(task, lastPosition);
+ title = "Nexted";
+ task.setCycle(task.getCycle() + 1);
+ taskAdapter.add(task, taskAdapter.getItemCount());
break;
}
- taskDataAccess.close();
+
+ // Setup the snack bar
+ Snackbar.make(view, "Task marked as " + title, Snackbar.LENGTH_LONG)
+ .setAction("Undo", new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // Undo adapter changes
+ switch (direction)
+ {
+ // Nothing special to do yet
+ case ItemTouchHelper.LEFT:
+ break;
+ // Remove the last item
+ case ItemTouchHelper.RIGHT:
+ taskAdapter.remove(taskAdapter.getItemCount() - 1);
+ task.setCycle(task.getCycle() - 1);
+ break;
+ }
+ // Reset the first item
+ taskAdapter.add(task, 0);
+ ((RecyclerView)view).scrollToPosition(0);
+ }
+ }).setCallback(new Snackbar.Callback() {
+ @Override
+ public void onDismissed(Snackbar snackbar, int event) {
+ super.onDismissed(snackbar, event);
+
+ // When clicked on undo, do not write to DB
+ if (event == DISMISS_EVENT_ACTION) return;
+
+ taskDataAccess.open();
+ // Commit the changes to DB
+ switch (direction)
+ {
+ // Mark item as Done
+ case ItemTouchHelper.LEFT:
+ taskDataAccess.setDone(itemId);
+ break;
+ // Increase task cycle count
+ case ItemTouchHelper.RIGHT:
+ taskDataAccess.increaseCycle(task.getCycle(), itemId);
+ break;
+ }
+ taskDataAccess.close();
+ }
+ }).show();
}
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java
index 907a02e..bfea945 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java
@@ -6,6 +6,7 @@ import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.RecyclerView;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.adapters.TaskAdapter;
@@ -18,15 +19,19 @@ public class ConfirmDialogFragment extends DialogFragment {
}
private ConfirmDialogListener confirmDialogListener;
-
private TaskAdapter taskAdapter;
+ private RecyclerView recyclerView;
+ private String message;
- public static ConfirmDialogFragment newInstance(TaskAdapter taskAdapter) {
+ public static ConfirmDialogFragment newInstance(
+ TaskAdapter taskAdapter, String message, RecyclerView recyclerView) {
Bundle args = new Bundle();
ConfirmDialogFragment fragment = new ConfirmDialogFragment();
fragment.taskAdapter = taskAdapter;
+ fragment.message = message;
+ fragment.recyclerView = recyclerView;
fragment.setArguments(args);
return fragment;
}
@@ -34,8 +39,9 @@ public class ConfirmDialogFragment extends DialogFragment {
public TaskAdapter getTaskAdapter() {
return taskAdapter;
}
- public void setTaskAdapter(TaskAdapter taskAdapter) {
- this.taskAdapter = taskAdapter;
+
+ public RecyclerView getRecyclerView() {
+ return recyclerView;
}
@Override
@@ -55,11 +61,12 @@ public class ConfirmDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.task_swipe_confirmation_done)
- .setPositiveButton(R.string.task_swipe_confirmation_yes, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- confirmDialogListener.onDialogPositiveClick(ConfirmDialogFragment.this);
- }
+ // TODO: Handle on dismiss or similar
+ builder.setMessage(getResources().getString(R.string.settings_confirm_message) + " " + message + "?")
+ .setPositiveButton(R.string.task_swipe_confirmation_yes, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ confirmDialogListener.onDialogPositiveClick(ConfirmDialogFragment.this);
+ }
})
.setNegativeButton(R.string.task_swipe_confirmation_no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java
index 631950d..a61304e 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java
@@ -85,7 +85,8 @@ public class TasksFragment extends Fragment {
// Set ItemTouch helper in RecyclerView to handle swipe move on elements
// TODO: conflicts with ItemTouchListener, see why
- ItemTouchHelper.Callback callback = new TaskTouchHelper(taskAdapter, taskDataAccess, getFragmentManager());
+ ItemTouchHelper.Callback callback = new TaskTouchHelper(
+ taskAdapter, taskDataAccess, getFragmentManager(), recyclerView);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
diff --git a/DoNExt/app/src/main/res/values/strings.xml b/DoNExt/app/src/main/res/values/strings.xml
index 12ae1ba..8e7edce 100644
--- a/DoNExt/app/src/main/res/values/strings.xml
+++ b/DoNExt/app/src/main/res/values/strings.xml
@@ -38,6 +38,7 @@
Never ask again
+ Mark task as
Confirm on DoNext?
Confirm on mark Done?
Confirm on delete?