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 14e3d43..9a32248 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 @@ -1,13 +1,13 @@ package com.wismna.geoffroy.donext.activities; import android.app.Dialog; -import android.app.DialogFragment; 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.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; @@ -16,6 +16,7 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.support.v7.widget.helper.ItemTouchHelper; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -92,6 +93,7 @@ public class MainActivity extends AppCompatActivity implements tabLayout.setupWithViewPager(mViewPager); // Add Task floating button + // TODO: disable or hide button when no lists exist /*FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override @@ -141,8 +143,9 @@ public class MainActivity extends AppCompatActivity implements super.onDestroy(); taskDataAccess.close(); } + // TODO: change add methods to add or update @Override - public void onDialogPositiveClick(DialogFragment dialog) { + public void onNewTaskDialogPositiveClick(DialogFragment dialog) { // Get the dialog fragment Dialog dialogView = dialog.getDialog(); // Get the controls @@ -153,11 +156,11 @@ public class MainActivity extends AppCompatActivity implements RadioButton priorityRadio = (RadioButton) dialogView.findViewById(priorityGroup.getCheckedRadioButtonId()); TaskList taskList = (TaskList) listSpinner.getSelectedItem(); // Add the task to the database - Task task = taskDataAccess.createTask( - nameText.getText().toString(), - descText.getText().toString(), - priorityRadio.getText().toString(), - taskList.getId()); + Task task = taskDataAccess.createOrUpdateTask( + nameText.getText().toString(), + descText.getText().toString(), + priorityRadio.getText().toString(), + taskList.getId()); // Update the corresponding tab adapter TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(listSpinner.getSelectedItemPosition()); @@ -196,18 +199,17 @@ public class MainActivity extends AppCompatActivity implements } @Override - public void onDialogPositiveClick(android.support.v4.app.DialogFragment dialog) { + public void onConfirmDialogPositiveClick(DialogFragment dialog) { Bundle args = dialog.getArguments(); int itemPosition = args.getInt("ItemPosition"); int direction = args.getInt("Direction"); TaskAdapter taskAdapter = ((ConfirmDialogFragment)dialog).getTaskAdapter(); PerformSwipeAction(taskDataAccess, taskAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView()); - } @Override - public void onDialogNeutralClick(android.support.v4.app.DialogFragment dialog) { + public void onConfirmDialogNeutralClick(android.support.v4.app.DialogFragment dialog) { Bundle args = dialog.getArguments(); int itemPosition = args.getInt("ItemPosition"); int direction = args.getInt("Direction"); @@ -233,7 +235,7 @@ public class MainActivity extends AppCompatActivity implements } @Override - public void onDialogNegativeClick(android.support.v4.app.DialogFragment dialog) { + public void onConfirmDialogNegativeClick(android.support.v4.app.DialogFragment dialog) { Bundle args = dialog.getArguments(); int itemPosition = args.getInt("ItemPosition"); @@ -241,8 +243,14 @@ public class MainActivity extends AppCompatActivity implements taskAdapter.notifyItemChanged(itemPosition); } + @Override + public boolean onConfirmDialogKeyListener(android.support.v4.app.DialogFragment dialog, int keyCode, KeyEvent event) { + onConfirmDialogNegativeClick(dialog); + return keyCode != KeyEvent.KEYCODE_BACK; + } + private void OpenNewTaskDialog() { - android.app.FragmentManager manager = getFragmentManager(); + FragmentManager manager = getSupportFragmentManager(); NewTaskFragment newTaskFragment = new NewTaskFragment(); // Set current tab value to new task dialog diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java index 62c5e7e..dc164d9 100644 --- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java +++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java @@ -41,7 +41,8 @@ public class TaskDataAccess { dbHelper.close(); } - public Task createTask(String name, String description, String priority, long taskList) { + // TODO: add taskID + public Task createOrUpdateTask(String name, String description, String priority, long taskList) { ContentValues values = new ContentValues(); values.put(DatabaseHelper.TASKS_COLUMN_NAME, name); values.put(DatabaseHelper.TASKS_COLUMN_DESC, description); 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 bfea945..23a288f 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 @@ -7,15 +7,17 @@ import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; +import android.view.KeyEvent; import com.wismna.geoffroy.donext.R; import com.wismna.geoffroy.donext.adapters.TaskAdapter; public class ConfirmDialogFragment extends DialogFragment { public interface ConfirmDialogListener { - void onDialogPositiveClick(DialogFragment dialog); - void onDialogNeutralClick(DialogFragment dialog); - void onDialogNegativeClick(DialogFragment dialog); + void onConfirmDialogPositiveClick(DialogFragment dialog); + void onConfirmDialogNeutralClick(DialogFragment dialog); + void onConfirmDialogNegativeClick(DialogFragment dialog); + boolean onConfirmDialogKeyListener(DialogFragment dialog, int keyCode, KeyEvent event); } private ConfirmDialogListener confirmDialogListener; @@ -44,6 +46,11 @@ public class ConfirmDialogFragment extends DialogFragment { return recyclerView; } + @Override + public void onCancel(DialogInterface dialog) { + super.onCancel(dialog); + } + @Override public void onAttach(Activity activity) { super.onAttach(activity); @@ -63,23 +70,31 @@ public class ConfirmDialogFragment extends DialogFragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // 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); - } + .setPositiveButton(R.string.task_swipe_confirmation_yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + confirmDialogListener.onConfirmDialogPositiveClick(ConfirmDialogFragment.this); + } }) .setNegativeButton(R.string.task_swipe_confirmation_no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog - confirmDialogListener.onDialogNegativeClick(ConfirmDialogFragment.this); + confirmDialogListener.onConfirmDialogNegativeClick(ConfirmDialogFragment.this); } }).setNeutralButton(R.string.task_swipe_confirmation_never, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - confirmDialogListener.onDialogNeutralClick(ConfirmDialogFragment.this); + confirmDialogListener.onConfirmDialogNeutralClick(ConfirmDialogFragment.this); } - } - ); + }) + .setOnKeyListener(new DialogInterface.OnKeyListener() { + @Override + public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { + //return false; + return confirmDialogListener.onConfirmDialogKeyListener(ConfirmDialogFragment.this, keyCode, event); + } + }); // Create the AlertDialog object and return it - return builder.create(); + Dialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(true); + return dialog; } } diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/NewTaskFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/NewTaskFragment.java index b263a34..2d6fd34 100644 --- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/NewTaskFragment.java +++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/NewTaskFragment.java @@ -3,12 +3,14 @@ package com.wismna.geoffroy.donext.fragments; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; +import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.RadioGroup; import android.widget.Spinner; import com.wismna.geoffroy.donext.R; @@ -26,7 +28,7 @@ public class NewTaskFragment extends DialogFragment { * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ public interface NewTaskListener { - void onDialogPositiveClick(DialogFragment dialog); + void onNewTaskDialogPositiveClick(DialogFragment dialog); //void onDialogNegativeClick(DialogFragment dialog); } @@ -64,7 +66,7 @@ public class NewTaskFragment extends DialogFragment { @Override public void onClick(DialogInterface dialog, int id) { // Send the positive button event back to the host activity - mListener.onDialogPositiveClick(NewTaskFragment.this); + mListener.onNewTaskDialogPositiveClick(NewTaskFragment.this); } }) .setNegativeButton(R.string.new_task_cancel, new DialogInterface.OnClickListener() { @@ -89,12 +91,34 @@ public class NewTaskFragment extends DialogFragment { // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); + dataAccess.close(); // Auto set list value to current tab Bundle args = getArguments(); int id = args.getInt("list"); spinner.setSelection(id); + // Set other properties + EditText titleText = (EditText) view.findViewById(R.id.new_task_name); + titleText.setText(args.getString("title")); + EditText descText = (EditText) view.findViewById(R.id.new_task_description); + descText.setText(args.getString("description")); + RadioGroup priorityGroup = (RadioGroup) view.findViewById(R.id.new_task_priority); + int priority = args.getInt("priority"); + switch (priority) + { + case 0: + priorityGroup.check(R.id.new_task_priority_low); + break; + case 1: + priorityGroup.check(R.id.new_task_priority_normal); + break; + case 2: + priorityGroup.check(R.id.new_task_priority_high); + break; + } + + return builder.create(); } } 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 a61304e..99107c1 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 @@ -1,8 +1,11 @@ package com.wismna.geoffroy.donext.fragments; import android.content.Context; +import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.view.ViewPager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; @@ -10,7 +13,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import android.widget.Toast; import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskTouchHelper; import com.wismna.geoffroy.donext.R; @@ -27,8 +29,13 @@ import com.wismna.geoffroy.donext.listeners.RecyclerItemClickListener; */ public class TasksFragment extends Fragment { + /*public interface TasksFragmentListener { + void onItemClick(View view, int position); + }*/ + private static final String TASK_LIST_ID = "task_list_id"; private long taskListId = -1; + //private TasksFragmentListener tasksFragmentListener; private OnListFragmentInteractionListener mListener; /** @@ -92,16 +99,40 @@ public class TasksFragment extends Fragment { // Implements touch listener to add click detection // TODO: conflicts with ItemTouchHelper (maybe add swipe detection there with onFling?) - final Toast mToast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT); + //final Toast mToast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT); recyclerView.addOnItemTouchListener( new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { - // TODO: implement on item click event - TextView editText = (TextView) view.findViewById(R.id.task_id); - //Toast mToast = Toast.makeText(context, "Item " + editText.getText() + " clicked!", Toast.LENGTH_SHORT); - mToast.setText("Item " + editText.getText() + " clicked!"); - mToast.show(); + //tasksFragmentListener.onItemClick(view, position); + + /*TextView idTextView = (TextView) view.findViewById(R.id.task_id); + mToast.setText("Item " + idTextView.getText() + " clicked!"); + mToast.show();*/ + + FragmentManager manager = getFragmentManager(); + NewTaskFragment newTaskFragment = new NewTaskFragment(); + + Bundle args = new Bundle(); + + // Set current tab value to new task dialog + ViewPager viewPager =(ViewPager) getActivity().findViewById(R.id.container); + args.putInt("list", viewPager.getCurrentItem()); + + // Set title + TextView titleTextView = (TextView) view.findViewById(R.id.task_name); + args.putString("title", titleTextView.getText().toString()); + // Set description + TextView descTextView = (TextView) view.findViewById(R.id.task_description); + args.putString("description", descTextView.getText().toString()); + // Set priority + int priority = 1; + if (titleTextView.getCurrentTextColor() == Color.LTGRAY) priority = 0; + if (titleTextView.getTypeface().isBold()) priority = 2; + args.putInt("priority", priority); + + newTaskFragment.setArguments(args); + newTaskFragment.show(manager, "Edit task"); } }) );