mirror of
https://github.com/wismna/DoNext.git
synced 2025-10-03 15:40:14 -04:00
New Undo system via a snackbar after swiping task
Correct text on confirmation dialog Code cleanup
This commit is contained in:
@@ -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
|
||||
|
@@ -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,12 +253,61 @@ 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:
|
||||
title = "Done";
|
||||
break;
|
||||
// Increase task cycle count
|
||||
case ItemTouchHelper.RIGHT:
|
||||
title = "Nexted";
|
||||
task.setCycle(task.getCycle() + 1);
|
||||
taskAdapter.add(task, taskAdapter.getItemCount());
|
||||
break;
|
||||
}
|
||||
|
||||
// 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
|
||||
@@ -266,15 +316,13 @@ public class MainActivity extends AppCompatActivity implements
|
||||
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);
|
||||
taskDataAccess.increaseCycle(task.getCycle(), itemId);
|
||||
break;
|
||||
}
|
||||
taskDataAccess.close();
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
/**
|
||||
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
|
||||
* one of the sections/tabs/pages.
|
||||
|
@@ -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,7 +61,8 @@ 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)
|
||||
// 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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -38,6 +38,7 @@
|
||||
<string name="task_swipe_confirmation_never">Never ask again</string>
|
||||
|
||||
<!-- Strings related to Settings -->
|
||||
<string name="settings_confirm_message">Mark task as</string>
|
||||
<string name="settings_confirm_donext">Confirm on DoNext?</string>
|
||||
<string name="settings_confirm_markdone">Confirm on mark Done?</string>
|
||||
<string name="settings_confirm_delete">Confirm on delete?</string>
|
||||
|
Reference in New Issue
Block a user