Confirm before deleting or copying tasks

pull/493/head
Alex Baker 9 years ago
parent d654b23962
commit 6814576667

@ -457,7 +457,7 @@ public class TaskListFragment extends InjectingFragment implements
// set up list adapters // set up list adapters
taskAdapter = createTaskAdapter(currentCursor); taskAdapter = createTaskAdapter(currentCursor);
recyclerAdapter = new TaskListRecyclerAdapter(getActivity(), taskAdapter, viewHolderFactory, recyclerAdapter = new TaskListRecyclerAdapter(getActivity(), taskAdapter, viewHolderFactory,
this, taskDeleter, taskDuplicator, tracker); this, taskDeleter, taskDuplicator, tracker, dialogBuilder);
} }
public Property<?>[] taskProperties() { public Property<?>[] taskProperties() {

@ -29,6 +29,7 @@ import com.todoroo.astrid.utility.Flags;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.ui.MenuColorizer; import org.tasks.ui.MenuColorizer;
import java.util.List; import java.util.List;
@ -49,6 +50,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
private final TaskDeleter taskDeleter; private final TaskDeleter taskDeleter;
private final TaskDuplicator taskDuplicator; private final TaskDuplicator taskDuplicator;
private final Tracker tracker; private final Tracker tracker;
private final DialogBuilder dialogBuilder;
private final ItemTouchHelper itemTouchHelper; private final ItemTouchHelper itemTouchHelper;
private ActionMode mode = null; private ActionMode mode = null;
@ -56,7 +58,8 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
public TaskListRecyclerAdapter(Activity activity, TaskAdapter adapter, public TaskListRecyclerAdapter(Activity activity, TaskAdapter adapter,
ViewHolderFactory viewHolderFactory, ViewHolderFactory viewHolderFactory,
TaskListFragment taskList, TaskDeleter taskDeleter, TaskListFragment taskList, TaskDeleter taskDeleter,
TaskDuplicator taskDuplicator, Tracker tracker) { TaskDuplicator taskDuplicator, Tracker tracker,
DialogBuilder dialogBuilder) {
this.activity = activity; this.activity = activity;
this.adapter = adapter; this.adapter = adapter;
this.viewHolderFactory = viewHolderFactory; this.viewHolderFactory = viewHolderFactory;
@ -64,6 +67,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
this.taskDeleter = taskDeleter; this.taskDeleter = taskDeleter;
this.taskDuplicator = taskDuplicator; this.taskDuplicator = taskDuplicator;
this.tracker = tracker; this.tracker = tracker;
this.dialogBuilder = dialogBuilder;
itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback()); itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback());
} }
@ -172,24 +176,14 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
for (int position : Ordering.natural().reverse().sortedCopy(multiSelector.getSelectedPositions())) { for (int position : Ordering.natural().reverse().sortedCopy(multiSelector.getSelectedPositions())) {
notifyItemRemoved(position); notifyItemRemoved(position);
} }
taskList.makeSnackbar(activity.getString(R.string.delete_multiple_tasks_confirmation, Integer.toString(result))) taskList.makeSnackbar(activity.getString(R.string.delete_multiple_tasks_confirmation, Integer.toString(result))).show();
.setAction(R.string.DLG_undo, v -> {
taskDeleter.undelete(tasks);
taskList.loadTaskListContent();
})
.show();
} }
private void copySelectedItems() { private void copySelectedItems() {
tracker.reportEvent(Tracking.Events.MULTISELECT_CLONE); tracker.reportEvent(Tracking.Events.MULTISELECT_CLONE);
List<Task> duplicates = taskDuplicator.duplicate(getTasks()); List<Task> duplicates = taskDuplicator.duplicate(getTasks());
taskList.onTaskCreated(duplicates); taskList.onTaskCreated(duplicates);
taskList.makeSnackbar(activity.getString(R.string.copy_multiple_tasks_confirmation, Integer.toString(duplicates.size()))) taskList.makeSnackbar(activity.getString(R.string.copy_multiple_tasks_confirmation, Integer.toString(duplicates.size()))).show();
.setAction(R.string.DLG_undo, v -> {
taskDeleter.delete(duplicates);
taskList.onTaskDelete(duplicates);
})
.show();
} }
private void updateModeTitle() { private void updateModeTitle() {
@ -211,12 +205,22 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder> im
public boolean onActionItemClicked(ActionMode mode, MenuItem item) { public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.delete: case R.id.delete:
dialogBuilder.newMessageDialog(R.string.delete_selected_tasks)
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
deleteSelectedItems(); deleteSelectedItems();
mode.finish(); mode.finish();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
return true; return true;
case R.id.copy_tasks: case R.id.copy_tasks:
dialogBuilder.newMessageDialog(R.string.copy_selected_tasks)
.setPositiveButton(android.R.string.ok, ((dialogInterface, i) -> {
copySelectedItems(); copySelectedItems();
mode.finish(); mode.finish();
}))
.setNegativeButton(android.R.string.cancel, null)
.show();
return true; return true;
default: default:
return false; return false;

@ -4,7 +4,7 @@
<item <item
android:id="@+id/copy_tasks" android:id="@+id/copy_tasks"
android:title="@string/TAd_contextCopyTask" android:title="@string/copy"
android:icon="@drawable/ic_content_copy_black_24dp" android:icon="@drawable/ic_content_copy_black_24dp"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />

@ -820,5 +820,7 @@ File %1$s contained %2$s.\n\n
<string name="clear_completed_tasks_confirmation">Clear completed tasks?</string> <string name="clear_completed_tasks_confirmation">Clear completed tasks?</string>
<string name="copy_multiple_tasks_confirmation">%s copied</string> <string name="copy_multiple_tasks_confirmation">%s copied</string>
<string name="delete_multiple_tasks_confirmation">%s deleted</string> <string name="delete_multiple_tasks_confirmation">%s deleted</string>
<string name="delete_selected_tasks">Delete selected tasks?</string>
<string name="copy_selected_tasks">Copy selected tasks?</string>
</resources> </resources>

Loading…
Cancel
Save