/* * Copyright (c) 2015 Jonas Kalderstam. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.nononsenseapps.notepad.ui.common; import android.content.ContentValues; import android.database.Cursor; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.SimpleCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Toast; import com.nononsenseapps.notepad.R; import com.nononsenseapps.notepad.data.model.sql.DAO; 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; import java.util.Collection; public class DialogMoveToList extends DialogFragment { static final String TASK_IDS = "task_ids"; private long[] taskIds = null; private FragmentDialogMovetolistBinding binding; public static DialogMoveToList getInstance(final Collection<Long> taskIds) { DialogMoveToList dialog = new DialogMoveToList(); Bundle args = new Bundle(); // To array fixes threading issues args.putLongArray(TASK_IDS, ArrayHelper.toArray(taskIds)); dialog.setArguments(args); return dialog; } public DialogMoveToList() { } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_dialog_movetolist, container, true); return binding.getRoot(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setup(); } // public void setListener(final EditListDialogListener listener) { // this.listener = listener; // } void setup() { if (!getArguments().containsKey(TASK_IDS)) { dismiss(); } this.taskIds = getArguments().getLongArray(TASK_IDS); if (taskIds.length < 1) { dismiss(); } getDialog().setTitle(R.string.move_to); // Must select item first binding.buttons.dialogYes.setEnabled(false); // Adapter for list titles and ids final SimpleCursorAdapter adapter = new SimpleCursorAdapter( getActivity(), R.layout.simple_light_list_item_activated_1, null, new String[] { TaskList.Columns.TITLE }, new int[] { android.R.id.text1 }, 0); // Set it to the view binding.listView.setAdapter(adapter); binding.listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long id) { binding.buttons.dialogYes.setEnabled(true); } }); binding.buttons.dialogNo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); binding.buttons.dialogYes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { okClicked(); } }); // Load content getLoaderManager().restartLoader(0, null, new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { return new CursorLoader(getActivity(), TaskList.URI, TaskList.Columns.FIELDS, null, null, getResources().getString( R.string.const_as_alphabetic, TaskList.Columns.TITLE)); } @Override public void onLoadFinished(Loader<Cursor> arg0, Cursor c) { adapter.swapCursor(c); } @Override public void onLoaderReset(Loader<Cursor> arg0) { adapter.swapCursor(null); } }); } void moveItems(final long toListId, final long[] taskIds) { 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() { // move items if (binding.listView.getCheckedItemPosition() == AdapterView.INVALID_POSITION) { return; } final Cursor c = (Cursor) binding.listView.getItemAtPosition(binding.listView .getCheckedItemPosition()); if (c != null) { final long targetListId = c.getLong(0); final String targetListTitle = c.getString(1); if (taskIds.length > 0 && targetListId > 0) { moveItems(targetListId, taskIds); } try { Toast.makeText( getActivity(), getString(R.string.moved_x_to_list, taskIds.length, targetListTitle), Toast.LENGTH_SHORT).show(); } catch (Exception e) { // Guard against translations } } this.dismiss(); } }