Skip to content

Commit

Permalink
Multi-select reimplemented
Browse files Browse the repository at this point in the history
  • Loading branch information
spacecowboy committed Oct 15, 2016
1 parent be6a8cb commit 2f0533f
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 165 deletions.
Expand Up @@ -217,6 +217,18 @@ private Uri getMoveItemRightUri() {
.withAppendedPath(URI_WRITE_MOVEITEMRIGHT, Long.toString(_id));
}

public static int delete(final long id, Context context) {
if (id > 0) {
return context.getContentResolver()
.delete(Uri.withAppendedPath(Uri.withAppendedPath(
Uri.parse(MyContentProvider.SCHEME + MyContentProvider.AUTHORITY),
TABLE_NAME), Long.toString(id)),
null,
null);
}
throw new IllegalArgumentException("Can only delete positive ids");
}

public static class Columns implements BaseColumns {

private Columns() {
Expand Down Expand Up @@ -346,13 +358,13 @@ private Columns() {
.append(" AFTER UPDATE OF ")
.append(arrayToCommaString(new String[] { Columns.TITLE,
Columns.NOTE })).append(" ON ").append(TABLE_NAME)

.append(" WHEN old.")
.append(Columns.TITLE).append(" IS NOT new.")
.append(Columns.TITLE).append(" OR old.")
.append(Columns.NOTE).append(" IS NOT new.")
.append(Columns.NOTE)

.append(" BEGIN ").append(HISTORY_TRIGGER_BODY).append(" END;")
.toString();
public static final String CREATE_HISTORY_INSERT_TRIGGER = new StringBuilder(
Expand Down Expand Up @@ -438,7 +450,7 @@ private Columns() {
* This is a view which returns the tasks in the specified list with headers
* suitable for dates, if any tasks would be sorted under them. Provider
* hardcodes the sort order for this.
*
*
* if listId is null, will return for all lists
*/
public static final String CREATE_SECTIONED_DATE_VIEW(final String listId) {
Expand Down Expand Up @@ -742,7 +754,7 @@ public Long setAsCompleted() {

/**
* Set first line as title, rest as note.
*
*
* @param text
*/
public void setText(final String text) {
Expand Down Expand Up @@ -823,7 +835,7 @@ public Task(final ContentValues values) {
}
}
}

public Task(final JSONObject json) throws JSONException {
if (json.has(Columns.TITLE))
this.title = json.getString(Columns.TITLE);
Expand Down Expand Up @@ -885,7 +897,7 @@ public ContentValues getContent() {
* Compares this task to another and returns true if their contents are the
* same. Content is defined as: title, note, duedate, completed != null
* Returns false if title or note are null.
*
*
* The intended usage is the editor where content and not id's or position
* are of importance.
*/
Expand Down Expand Up @@ -1129,7 +1141,7 @@ public String getSQLMoveItemRight(final ContentValues values) {
.format("UPDATE %1$s SET %2$s = 1, %3$s = 2 WHERE %4$s IS new.%4$s;",
TABLE_NAME, Columns.LEFT, Columns.RIGHT,
Columns._ID))

.append(posUniqueConstraint("new", "Moving list, new positions not unique/ordered"))
.append(posUniqueConstraint("old", "Moving list, old positions not unique/ordered"))

Expand All @@ -1138,7 +1150,7 @@ public String getSQLMoveItemRight(final ContentValues values) {
/**
* If moving left, then edgeCol is left and vice-versa. Values should come
* from getMoveValues
*
*
* 1 = table name 2 = left 3 = right 4 = edgecol 5 = old.left 6 = old.right
* 7 = target.pos (actually target.edgecol) 8 = dblist 9 = old.dblist
*/
Expand Down
Expand Up @@ -39,35 +39,24 @@
import com.nononsenseapps.notepad.data.model.sql.Task;
import com.nononsenseapps.notepad.data.model.sql.TaskList;
import com.nononsenseapps.notepad.databinding.FragmentDialogMovetolistBinding;
import com.nononsenseapps.notepad.util.ArrayHelper;
import com.nononsenseapps.notepad.util.AsyncTaskHelper;

public class DialogMoveToList extends DialogFragment {
import java.util.Collection;

// public interface EditListDialogListener {
// void onFinishEditDialog(long id);
// }
public class DialogMoveToList extends DialogFragment {

static final String TASK_IDS = "task_ids";

private TaskList mTaskList;

private long[] taskIds = null;
private FragmentDialogMovetolistBinding binding;

// private EditListDialogListener listener;

public static DialogMoveToList getInstance(final Long... tasks) {
long[] taskIds = new long[tasks.length];
for (int i = 0; i < tasks.length; i++) {
taskIds[i] = tasks[i].longValue();
}

return getInstance(taskIds);
}

public static DialogMoveToList getInstance(final long... taskIds) {
public static DialogMoveToList getInstance(final Collection<Long> taskIds) {
DialogMoveToList dialog = new DialogMoveToList();
Bundle args = new Bundle();
args.putLongArray(TASK_IDS, taskIds);
// To array fixes threading issues
args.putLongArray(TASK_IDS, ArrayHelper.toArray(taskIds));
dialog.setArguments(args);
return dialog;
}
Expand Down Expand Up @@ -165,35 +154,20 @@ public void onLoaderReset(Loader<Cursor> arg0) {
}

void moveItems(final long toListId, final long[] taskIds) {
// TODO do in background
// for (long id: taskIds) {
// final Cursor c =
// getActivity().getContentResolver().query(Task.getUri(id),
// Task.Columns.FIELDS, null, null, null);
//
// if (c.moveToFirst()) {
// Task t = new Task(c);
// // Remove from old location
// t.delete(getActivity());
// // Reset, and set new list
// t.resetForInsertion();
// t.dblist = toListId;
// // And save anew
// t.save(getActivity());
// }
//
// c.close();
// }

final ContentValues val = new ContentValues();
val.put(Task.Columns.DBLIST, toListId);

// where _ID in (1, 2, 3)
final String whereId = new StringBuilder(Task.Columns._ID)
.append(" IN (").append(DAO.arrayToCommaString(taskIds))
.append(")").toString();

getActivity().getContentResolver().update(Task.URI, val, whereId, null);
final ContentValues val = new ContentValues();
val.put(Task.Columns.DBLIST, toListId);

// where _ID in (1, 2, 3)
final String whereId = new StringBuilder(Task.Columns._ID)
.append(" IN (").append(DAO.arrayToCommaString(taskIds))
.append(")").toString();

AsyncTaskHelper.background(new AsyncTaskHelper.Job() {
@Override
public void doInBackground() {
getActivity().getContentResolver().update(Task.URI, val, whereId, null);
}
});
}

void okClicked() {
Expand Down
Expand Up @@ -244,26 +244,6 @@ public void openTask(final Uri taskUri, final long listId, final View origin) {
//}
}

/**
* Show a snackbar indicating that items were deleted, together with an undo button.
*/
@Override
public void deleteTasksWithUndo(Snackbar.Callback dismissCallback,
final View.OnClickListener listener, final Task... tasks) {
CharSequence text;
try {
text = getResources().getQuantityString(R.plurals.notedeleted_msg, tasks.length,
tasks.length);
} catch (Exception e) {
// Protect against faulty translations
text = getResources().getString(R.string.deleted);
}
Snackbar.make(mFab, text, Snackbar.LENGTH_LONG)
.setAction(R.string.undo, listener)
.setCallback(dismissCallback)
.show();
}

public void addTask() {
addTaskInList("", ListHelper.getARealList(this, mCurrentList));
}
Expand Down
Expand Up @@ -103,6 +103,11 @@ public void onBind(final Cursor cursor) {

@Override
public void onClick(final View v) {
if (selectedItemHandler.isActiveSelectionMode()) {
// same as long press
onLongClick(v);
return;
}
if (taskListFragment.getListener() != null && id > 0) {
taskListFragment.getListener().openTask(Task.getUri(id), listId, v);
}
Expand All @@ -113,10 +118,6 @@ public boolean onLongClick(final View v) {
if (id < 1) {
return false;
}
// TODO
//listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
// Also select the item in question
//listView.setItemChecked(pos, true);

selectedItemHandler.toggleSelection(id);
binding.getRoot().setActivated(selectedItemHandler.isItemSelected(id));
Expand Down
@@ -1,24 +1,58 @@
package com.nononsenseapps.notepad.ui.list;

import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;

import java.util.Set;
import java.util.TreeSet;

public class SelectedItemHandler {
private final TreeSet<Long> selected = new TreeSet<>();
private final AppCompatActivity activity;
private final ActionMode.Callback actionModeCallback;
private ActionMode actionMode = null;

public SelectedItemHandler(AppCompatActivity activity, ActionMode.Callback actionModeCallback) {
this.activity = activity;
this.actionModeCallback = actionModeCallback;
}

public boolean isItemSelected(long id) {
return selected.contains(id);
}

public void toggleSelection(long id) {
if (actionMode == null) {
actionMode = activity.startSupportActionMode(actionModeCallback);
}

if (selected.contains(id)) {
selected.remove(id);
} else {
selected.add(id);
}

if (selected.isEmpty()) {
actionMode.finish();
} else {
actionMode.setTitle(String.valueOf(selected.size()));
actionMode.invalidate();
}
}

public Set<Long> getSelected() {
return selected;
}

public void clear() {
selected.clear();
if (actionMode != null) {
actionMode.finish();
actionMode = null;
}
}

public boolean isActiveSelectionMode() {
return actionMode != null;
}
}

0 comments on commit 2f0533f

Please sign in to comment.