mirror of
https://github.com/wismna/DoNext.git
synced 2025-10-03 15:40:14 -04:00
Greatly improved code with interfaces
Task and cycle count are now updating List edition rendering is better List names can be edited inline
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.wismna.geoffroy.donext.ItemTouchHelpers;
|
package com.wismna.geoffroy.donext.ItemTouchHelpers;
|
||||||
|
|
||||||
|
import android.graphics.Color;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||||
|
|
||||||
@@ -34,4 +35,22 @@ public class TaskListTouchHelper extends ItemTouchHelper.SimpleCallback {
|
|||||||
public boolean isLongPressDragEnabled() {
|
public boolean isLongPressDragEnabled() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
|
||||||
|
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE)
|
||||||
|
{
|
||||||
|
viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onSelectedChanged(viewHolder, actionState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||||
|
super.clearView(recyclerView, viewHolder);
|
||||||
|
|
||||||
|
viewHolder.itemView.setAlpha(1.0f);
|
||||||
|
viewHolder.itemView.setBackgroundColor(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,38 +1,27 @@
|
|||||||
package com.wismna.geoffroy.donext.ItemTouchHelpers;
|
package com.wismna.geoffroy.donext.ItemTouchHelpers;
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.app.FragmentManager;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.activities.MainActivity;
|
|
||||||
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
|
||||||
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
|
||||||
import com.wismna.geoffroy.donext.fragments.ConfirmDialogFragment;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by geoffroy on 15-12-04.
|
* Created by geoffroy on 15-12-04.
|
||||||
* Helper class that handles all swipe events on a Task
|
* Helper class that handles all swipe events on a Task
|
||||||
*/
|
*/
|
||||||
public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
|
public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
|
||||||
private TaskRecyclerViewAdapter taskRecyclerViewAdapter;
|
public interface TaskTouchHelperAdapter {
|
||||||
private TaskDataAccess taskDataAccess;
|
void onItemSwiped(int position, int direction);
|
||||||
private FragmentManager fragmentManager;
|
}
|
||||||
private RecyclerView recyclerView;
|
|
||||||
|
|
||||||
public TaskTouchHelper(TaskRecyclerViewAdapter taskRecyclerViewAdapter, TaskDataAccess taskDataAccess,
|
private TaskTouchHelperAdapter mAdapter;
|
||||||
FragmentManager fragmentManager, RecyclerView recyclerView){
|
|
||||||
|
public TaskTouchHelper(TaskTouchHelperAdapter adapter){
|
||||||
// No drag moves, only left swipes (except for 1st element, see getSwipeDirs method)
|
// No drag moves, only left swipes (except for 1st element, see getSwipeDirs method)
|
||||||
super(0, ItemTouchHelper.LEFT);
|
super(0, ItemTouchHelper.LEFT);
|
||||||
this.taskRecyclerViewAdapter = taskRecyclerViewAdapter;
|
this.mAdapter = adapter;
|
||||||
this.taskDataAccess = taskDataAccess;
|
|
||||||
this.fragmentManager = fragmentManager;
|
|
||||||
this.recyclerView = recyclerView;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -50,34 +39,7 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(viewHolder.itemView.getContext());
|
mAdapter.onItemSwiped(viewHolder.getAdapterPosition(), direction);
|
||||||
int itemPosition = viewHolder.getAdapterPosition();
|
|
||||||
String title = "";
|
|
||||||
boolean showDialog = false;
|
|
||||||
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
// Mark item as Done
|
|
||||||
case ItemTouchHelper.LEFT:
|
|
||||||
title = "Mark task as done?";
|
|
||||||
showDialog = sharedPref.getBoolean("pref_conf_done", true);
|
|
||||||
break;
|
|
||||||
// Increase task cycle count
|
|
||||||
case ItemTouchHelper.RIGHT:
|
|
||||||
title = "Go to next task?";
|
|
||||||
showDialog = sharedPref.getBoolean("pref_conf_next", true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (showDialog) {
|
|
||||||
ConfirmDialogFragment confirmDialogFragment =
|
|
||||||
ConfirmDialogFragment.newInstance(/*taskRecyclerViewAdapter, */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, taskRecyclerViewAdapter, itemPosition, direction, recyclerView);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -107,4 +69,22 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
|
|||||||
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
|
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
|
||||||
|
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE)
|
||||||
|
{
|
||||||
|
viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onSelectedChanged(viewHolder, actionState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||||
|
super.clearView(recyclerView, viewHolder);
|
||||||
|
|
||||||
|
viewHolder.itemView.setAlpha(1.0f);
|
||||||
|
viewHolder.itemView.setBackgroundColor(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,14 +1,9 @@
|
|||||||
package com.wismna.geoffroy.donext.activities;
|
package com.wismna.geoffroy.donext.activities;
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.design.widget.Snackbar;
|
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
import android.support.v4.app.DialogFragment;
|
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
@@ -16,34 +11,23 @@ import android.support.v4.view.ViewPager;
|
|||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.RadioButton;
|
|
||||||
import android.widget.RadioGroup;
|
|
||||||
import android.widget.Spinner;
|
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
import com.wismna.geoffroy.donext.adapters.SmartFragmentStatePagerAdapter;
|
import com.wismna.geoffroy.donext.adapters.SmartFragmentStatePagerAdapter;
|
||||||
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
||||||
import com.wismna.geoffroy.donext.dao.Task;
|
import com.wismna.geoffroy.donext.dao.Task;
|
||||||
import com.wismna.geoffroy.donext.dao.TaskList;
|
import com.wismna.geoffroy.donext.dao.TaskList;
|
||||||
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
|
||||||
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
||||||
import com.wismna.geoffroy.donext.fragments.ConfirmDialogFragment;
|
|
||||||
import com.wismna.geoffroy.donext.fragments.TaskDialogFragment;
|
import com.wismna.geoffroy.donext.fragments.TaskDialogFragment;
|
||||||
import com.wismna.geoffroy.donext.fragments.TasksFragment;
|
import com.wismna.geoffroy.donext.fragments.TasksFragment;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements
|
public class MainActivity extends AppCompatActivity implements TasksFragment.TaskChangedAdapter {
|
||||||
TaskDialogFragment.NewTaskListener,
|
|
||||||
ConfirmDialogFragment.ConfirmDialogListener
|
|
||||||
{
|
|
||||||
|
|
||||||
protected TaskDataAccess taskDataAccess;
|
|
||||||
/**
|
/**
|
||||||
* The {@link android.support.v4.view.PagerAdapter} that will provide
|
* The {@link android.support.v4.view.PagerAdapter} that will provide
|
||||||
* fragments for each of the sections. We use a
|
* fragments for each of the sections. We use a
|
||||||
@@ -71,10 +55,6 @@ public class MainActivity extends AppCompatActivity implements
|
|||||||
// primary sections of the activity.
|
// primary sections of the activity.
|
||||||
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
|
|
||||||
// Access database to retrieve tasks
|
|
||||||
taskDataAccess = new TaskDataAccess(this);
|
|
||||||
taskDataAccess.open();
|
|
||||||
|
|
||||||
// Access database to retrieve Tabs
|
// Access database to retrieve Tabs
|
||||||
TaskListDataAccess taskListDataAccess = new TaskListDataAccess(this);
|
TaskListDataAccess taskListDataAccess = new TaskListDataAccess(this);
|
||||||
taskListDataAccess.open();
|
taskListDataAccess.open();
|
||||||
@@ -115,107 +95,22 @@ public class MainActivity extends AppCompatActivity implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
public void onTaskListChanged(Task task, int tabPosition) {
|
||||||
taskDataAccess.open();
|
TaskRecyclerViewAdapter destinationTaskAdapter = getSpecificTabAdapter(tabPosition);
|
||||||
super.onResume();
|
if (destinationTaskAdapter != null) destinationTaskAdapter.add(task, destinationTaskAdapter.getItemCount());
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPause() {
|
|
||||||
taskDataAccess.close();
|
|
||||||
super.onPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
taskDataAccess.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNewTaskDialogPositiveClick(DialogFragment dialog) {
|
|
||||||
// Get the dialog fragment
|
|
||||||
Dialog dialogView = dialog.getDialog();
|
|
||||||
long id = 0;
|
|
||||||
Task task = ((TaskDialogFragment)dialog).getTask();
|
|
||||||
if (task != null) id = task.getId();
|
|
||||||
|
|
||||||
// Get the controls
|
|
||||||
Spinner listSpinner = (Spinner) dialogView.findViewById(R.id.new_task_list);
|
|
||||||
EditText nameText = (EditText) dialogView.findViewById(R.id.new_task_name);
|
|
||||||
EditText descText = (EditText) dialogView.findViewById(R.id.new_task_description);
|
|
||||||
RadioGroup priorityGroup = (RadioGroup) dialogView.findViewById(R.id.new_task_priority);
|
|
||||||
RadioButton priorityRadio = (RadioButton) dialogView.findViewById(priorityGroup.getCheckedRadioButtonId());
|
|
||||||
TaskList taskList = (TaskList) listSpinner.getSelectedItem();
|
|
||||||
|
|
||||||
// Add the task to the database
|
|
||||||
taskDataAccess.open();
|
|
||||||
Task newTask = taskDataAccess.createOrUpdateTask(id,
|
|
||||||
nameText.getText().toString(),
|
|
||||||
descText.getText().toString(),
|
|
||||||
priorityRadio.getText().toString(),
|
|
||||||
taskList.getId());
|
|
||||||
taskDataAccess.close();
|
|
||||||
// Update the corresponding tab adapter
|
|
||||||
|
|
||||||
Bundle args = dialog.getArguments();
|
|
||||||
TaskRecyclerViewAdapter taskRecyclerViewAdapter = getSpecificTabAdapter(args.getInt("list"));
|
|
||||||
// Should never happen because we will have to be on this tab to open the dialog
|
|
||||||
if (taskRecyclerViewAdapter == null) return;
|
|
||||||
|
|
||||||
// Add the task
|
|
||||||
if (task == null)
|
|
||||||
taskRecyclerViewAdapter.add(newTask, taskRecyclerViewAdapter.getItemCount());
|
|
||||||
// Update the task
|
|
||||||
else {
|
|
||||||
int position = args.getInt("position");
|
|
||||||
// Check if task list was changed
|
|
||||||
if (task.getTaskListId() != taskList.getId())
|
|
||||||
{
|
|
||||||
// Remove item from current tab
|
|
||||||
taskRecyclerViewAdapter.remove(position);
|
|
||||||
|
|
||||||
// Add it to the corresponding tab provided it is already instanciated
|
|
||||||
TaskRecyclerViewAdapter destinationTaskAdapter = getSpecificTabAdapter(listSpinner.getSelectedItemPosition());
|
|
||||||
if (destinationTaskAdapter != null) destinationTaskAdapter.add(newTask, destinationTaskAdapter.getItemCount());
|
|
||||||
}
|
|
||||||
else taskRecyclerViewAdapter.update(newTask, position);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNewTaskDialogNeutralClick(DialogFragment dialog) {
|
|
||||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
String title = getResources().getString(R.string.task_confirmation_delete_text);
|
|
||||||
boolean showDialog = sharedPref.getBoolean("pref_conf_del", true);
|
|
||||||
Bundle args = dialog.getArguments();
|
|
||||||
|
|
||||||
// Delete task from Adapter
|
|
||||||
final int itemPosition = args.getInt("position");
|
|
||||||
final RecyclerView view = getSpecificTabRecyclerView(args.getInt("list"));
|
|
||||||
final TaskRecyclerViewAdapter taskRecyclerViewAdapter = (TaskRecyclerViewAdapter) view.getAdapter();
|
|
||||||
|
|
||||||
if (showDialog) {
|
|
||||||
ConfirmDialogFragment confirmDialogFragment =
|
|
||||||
ConfirmDialogFragment.newInstance(title, view);
|
|
||||||
Bundle confirmArgs = new Bundle();
|
|
||||||
confirmArgs.putInt("ItemPosition", itemPosition);
|
|
||||||
confirmArgs.putInt("Direction", -1);
|
|
||||||
confirmDialogFragment.setArguments(confirmArgs);
|
|
||||||
confirmDialogFragment.show(getSupportFragmentManager(), title);
|
|
||||||
}
|
|
||||||
else PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, -1, view);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when user clicks on the New Task floating button */
|
/** Called when user clicks on the New Task floating button */
|
||||||
public void onNewTaskClick(View view) {
|
public void onNewTaskClick(View view) {
|
||||||
|
int currentTabPosition = mViewPager.getCurrentItem();
|
||||||
FragmentManager manager = getSupportFragmentManager();
|
FragmentManager manager = getSupportFragmentManager();
|
||||||
TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(null,
|
TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(null,
|
||||||
mSectionsPagerAdapter.getAllItems());
|
mSectionsPagerAdapter.getAllItems(),
|
||||||
|
(TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(currentTabPosition));
|
||||||
|
|
||||||
// Set current tab value to new task dialog
|
// Set current tab value to new task dialog
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt("list", mViewPager.getCurrentItem());
|
args.putInt("list", currentTabPosition);
|
||||||
taskDialogFragment.setArguments(args);
|
taskDialogFragment.setArguments(args);
|
||||||
|
|
||||||
taskDialogFragment.show(manager, "Create new task");
|
taskDialogFragment.show(manager, "Create new task");
|
||||||
@@ -232,136 +127,14 @@ public class MainActivity extends AppCompatActivity implements
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private TaskRecyclerViewAdapter getSpecificTabAdapter(int position) {
|
||||||
public void onConfirmDialogPositiveClick(DialogFragment dialog) {
|
|
||||||
Bundle args = dialog.getArguments();
|
|
||||||
int itemPosition = args.getInt("ItemPosition");
|
|
||||||
int direction = args.getInt("Direction");
|
|
||||||
|
|
||||||
TaskRecyclerViewAdapter taskRecyclerViewAdapter = ((ConfirmDialogFragment)dialog).getTaskRecyclerViewAdapter();
|
|
||||||
PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onConfirmDialogNeutralClick(DialogFragment dialog) {
|
|
||||||
Bundle args = dialog.getArguments();
|
|
||||||
int itemPosition = args.getInt("ItemPosition");
|
|
||||||
int direction = args.getInt("Direction");
|
|
||||||
|
|
||||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
SharedPreferences.Editor editor = sharedPref.edit();
|
|
||||||
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
// Mark item as Done
|
|
||||||
case ItemTouchHelper.LEFT:
|
|
||||||
editor.putBoolean("pref_conf_done", false);
|
|
||||||
break;
|
|
||||||
// Increase task cycle count
|
|
||||||
case ItemTouchHelper.RIGHT:
|
|
||||||
editor.putBoolean("pref_conf_next", false);
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
editor.putBoolean("pref_conf_del", false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
editor.apply();
|
|
||||||
TaskRecyclerViewAdapter taskRecyclerViewAdapter = ((ConfirmDialogFragment)dialog).getTaskRecyclerViewAdapter();
|
|
||||||
PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void PerformSwipeAction(final TaskDataAccess taskDataAccess,
|
|
||||||
final TaskRecyclerViewAdapter taskRecyclerViewAdapter,
|
|
||||||
final int itemPosition,
|
|
||||||
final int direction,
|
|
||||||
final View view) {
|
|
||||||
final long itemId = taskRecyclerViewAdapter.getItemId(itemPosition);
|
|
||||||
final Task task = taskRecyclerViewAdapter.getItem(itemPosition);
|
|
||||||
String action = "";
|
|
||||||
taskRecyclerViewAdapter.remove(itemPosition);
|
|
||||||
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
// Mark item as Done
|
|
||||||
case ItemTouchHelper.LEFT:
|
|
||||||
action = "done";
|
|
||||||
break;
|
|
||||||
// Increase task cycle count
|
|
||||||
case ItemTouchHelper.RIGHT:
|
|
||||||
action = "nexted";
|
|
||||||
task.setCycle(task.getCycle() + 1);
|
|
||||||
taskRecyclerViewAdapter.add(task, taskRecyclerViewAdapter.getItemCount());
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
action = "deleted";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup the snack bar
|
|
||||||
Snackbar.make(view, "Task " + action, Snackbar.LENGTH_LONG)
|
|
||||||
.setAction("Undo", new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
// Undo adapter changes
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
// Nothing special to do for done
|
|
||||||
case ItemTouchHelper.LEFT:
|
|
||||||
break;
|
|
||||||
// Remove the last item
|
|
||||||
case ItemTouchHelper.RIGHT:
|
|
||||||
taskRecyclerViewAdapter.remove(taskRecyclerViewAdapter.getItemCount() - 1);
|
|
||||||
task.setCycle(task.getCycle() - 1);
|
|
||||||
break;
|
|
||||||
// Nothing special to do for delete
|
|
||||||
case -1:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Reset the first item
|
|
||||||
taskRecyclerViewAdapter.add(task, itemPosition);
|
|
||||||
((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
|
|
||||||
case ItemTouchHelper.LEFT:
|
|
||||||
taskDataAccess.setDone(itemId);
|
|
||||||
break;
|
|
||||||
// Increase task cycle count
|
|
||||||
case ItemTouchHelper.RIGHT:
|
|
||||||
taskDataAccess.increaseCycle(task.getCycle(), itemId);
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
// Commit the changes to DB
|
|
||||||
taskDataAccess.deleteTask(itemId);
|
|
||||||
}
|
|
||||||
taskDataAccess.close();
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private RecyclerView getSpecificTabRecyclerView(int position) {
|
|
||||||
TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(position);
|
TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(position);
|
||||||
if (taskFragment == null) return null;
|
if (taskFragment == null) return null;
|
||||||
View view = taskFragment.getView();
|
View view = taskFragment.getView();
|
||||||
if (view == null) return null;
|
if (view == null) return null;
|
||||||
return ((RecyclerView) view.findViewById(R.id.task_list_view));
|
RecyclerView recyclerView = ((RecyclerView) view.findViewById(R.id.task_list_view));
|
||||||
}
|
if (recyclerView == null) return null;
|
||||||
|
return (TaskRecyclerViewAdapter) recyclerView.getAdapter();
|
||||||
private TaskRecyclerViewAdapter getSpecificTabAdapter(int position) {
|
|
||||||
RecyclerView view = getSpecificTabRecyclerView(position);
|
|
||||||
if (view == null) return null;
|
|
||||||
return (TaskRecyclerViewAdapter) view.getAdapter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -378,7 +151,7 @@ public class MainActivity extends AppCompatActivity implements
|
|||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
// getItem is called to instantiate the fragment for the given page.
|
// getItem is called to instantiate the fragment for the given page.
|
||||||
// Return a PlaceholderFragment (defined as a static inner class below).
|
// Return a PlaceholderFragment (defined as a static inner class below).
|
||||||
return TasksFragment.newInstance(taskLists.get(position).getId());
|
return TasksFragment.newInstance(taskLists.get(position).getId(), MainActivity.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -21,16 +21,21 @@ import java.util.List;
|
|||||||
* {@link RecyclerView.Adapter} that can display a {@link TaskList}.
|
* {@link RecyclerView.Adapter} that can display a {@link TaskList}.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: implement inline edit
|
|
||||||
public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRecyclerViewAdapter.ViewHolder>
|
public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRecyclerViewAdapter.ViewHolder>
|
||||||
implements TaskListTouchHelper.TaskListTouchHelperAdapter {
|
implements TaskListTouchHelper.TaskListTouchHelperAdapter {
|
||||||
|
|
||||||
|
public interface TaskListRecyclerViewAdapterListener {
|
||||||
|
void notifyOnDeleteButtonClicked();
|
||||||
|
}
|
||||||
|
|
||||||
private final List<TaskList> mValues;
|
private final List<TaskList> mValues;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private TaskListRecyclerViewAdapterListener mListener;
|
||||||
|
|
||||||
public TaskListRecyclerViewAdapter(List<TaskList> items, Context context) {
|
public TaskListRecyclerViewAdapter(List<TaskList> items, Context context, TaskListRecyclerViewAdapterListener listener) {
|
||||||
mValues = items;
|
mValues = items;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -48,12 +53,15 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRe
|
|||||||
|
|
||||||
// Handle inline name change
|
// Handle inline name change
|
||||||
holder.mTaskNameView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
holder.mTaskNameView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||||
|
// TODO: handle exception when onFocus is lost after click on Delete
|
||||||
@Override
|
@Override
|
||||||
public void onFocusChange(View v, boolean hasFocus) {
|
public void onFocusChange(View v, boolean hasFocus) {
|
||||||
if (!hasFocus)
|
|
||||||
{
|
EditText editText = (EditText) v;
|
||||||
EditText editText = (EditText) v;
|
String name = editText.getText().toString();
|
||||||
holder.mItem.setName(editText.getText().toString());
|
|
||||||
|
if (!hasFocus && !holder.mItem.getName().matches(name)) {
|
||||||
|
holder.mItem.setName(name);
|
||||||
|
|
||||||
TaskListDataAccess taskListDataAccess = new TaskListDataAccess(mContext);
|
TaskListDataAccess taskListDataAccess = new TaskListDataAccess(mContext);
|
||||||
taskListDataAccess.open();
|
taskListDataAccess.open();
|
||||||
@@ -67,7 +75,6 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRe
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle click on delete button
|
// Handle click on delete button
|
||||||
// TODO: find a way to call TaskListsFragment.toggleVisibleCreateNewTaskListLayout
|
|
||||||
holder.mTaskDeleteButton.setOnClickListener(new View.OnClickListener() {
|
holder.mTaskDeleteButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
@@ -78,6 +85,9 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRe
|
|||||||
remove(position);
|
remove(position);
|
||||||
|
|
||||||
taskListDataAccess.close();
|
taskListDataAccess.close();
|
||||||
|
|
||||||
|
// Notify parent fragment that a task list was deleted
|
||||||
|
mListener.notifyOnDeleteButtonClicked();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -13,7 +13,6 @@ import com.wismna.geoffroy.donext.dao.Task;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
//import com.wismna.geoffroy.donext.fragments.TasksFragment.OnListFragmentInteractionListener;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link RecyclerView.Adapter} that can display a {@link Task}.
|
* {@link RecyclerView.Adapter} that can display a {@link Task}.
|
||||||
@@ -21,11 +20,9 @@ import java.util.List;
|
|||||||
public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerViewAdapter.ViewHolder> {
|
public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerViewAdapter.ViewHolder> {
|
||||||
|
|
||||||
private final List<Task> mValues;
|
private final List<Task> mValues;
|
||||||
//private final OnListFragmentInteractionListener mListener;
|
|
||||||
|
|
||||||
public TaskRecyclerViewAdapter(List<Task> items/*, OnListFragmentInteractionListener listener*/) {
|
public TaskRecyclerViewAdapter(List<Task> items) {
|
||||||
mValues = items;
|
mValues = items;
|
||||||
//mListener = listener;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -58,17 +55,6 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
|
|||||||
holder.mTitleView.setTypeface(holder.mTitleView.getTypeface(), Typeface.BOLD);
|
holder.mTitleView.setTypeface(holder.mTitleView.getTypeface(), Typeface.BOLD);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*holder.mView.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (null != mListener) {
|
|
||||||
// Notify the active callbacks interface (the activity, if the
|
|
||||||
// fragment is attached to one) that an item has been selected.
|
|
||||||
mListener.onListFragmentInteraction(holder.mItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -71,16 +71,6 @@ public class TaskDataAccess {
|
|||||||
DatabaseHelper.COLUMN_ID + " = " + taskId, null);
|
DatabaseHelper.COLUMN_ID + " = " + taskId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task getTask(long id)
|
|
||||||
{
|
|
||||||
Cursor cursor = getTaskCursor(id);
|
|
||||||
|
|
||||||
cursor.moveToFirst();
|
|
||||||
Task task = cursorToTask(cursor);
|
|
||||||
cursor.close();
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Task> getAllTasks(long id) {
|
public List<Task> getAllTasks(long id) {
|
||||||
List<Task> tasks = new ArrayList<>();
|
List<Task> tasks = new ArrayList<>();
|
||||||
|
|
||||||
@@ -98,7 +88,7 @@ public class TaskDataAccess {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getTaskCount(long id) {
|
public int getTaskCount(long id) {
|
||||||
int taskCount = 0;
|
int taskCount;
|
||||||
Cursor cursor = database.rawQuery(
|
Cursor cursor = database.rawQuery(
|
||||||
"SELECT COUNT(*) " +
|
"SELECT COUNT(*) " +
|
||||||
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
|
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
|
||||||
@@ -111,7 +101,7 @@ public class TaskDataAccess {
|
|||||||
return taskCount;
|
return taskCount;
|
||||||
}
|
}
|
||||||
public int getTotalCycles(long id) {
|
public int getTotalCycles(long id) {
|
||||||
int totalCycles = 0;
|
int totalCycles;
|
||||||
Cursor cursor = database.rawQuery(
|
Cursor cursor = database.rawQuery(
|
||||||
"SELECT SUM(" + DatabaseHelper.TASKS_COLUMN_CYCLE + ") " +
|
"SELECT SUM(" + DatabaseHelper.TASKS_COLUMN_CYCLE + ") " +
|
||||||
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
|
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
|
||||||
@@ -124,10 +114,6 @@ public class TaskDataAccess {
|
|||||||
return totalCycles;
|
return totalCycles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cursor getTaskCursor(long id) {
|
|
||||||
return database.query(DatabaseHelper.TASKS_TABLE_NAME,
|
|
||||||
taskColumns, DatabaseHelper.COLUMN_ID + " = " + id, null, null, null, null);
|
|
||||||
}
|
|
||||||
public Cursor getAllTasksCursor(long id) {
|
public Cursor getAllTasksCursor(long id) {
|
||||||
return database.query(DatabaseHelper.TASKS_TABLE_NAME, taskColumns,
|
return database.query(DatabaseHelper.TASKS_TABLE_NAME, taskColumns,
|
||||||
DatabaseHelper.TASKS_COLUMN_LIST + " = " + id +
|
DatabaseHelper.TASKS_COLUMN_LIST + " = " + id +
|
||||||
@@ -143,9 +129,9 @@ public class TaskDataAccess {
|
|||||||
return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
|
return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int increaseCycle(int currentCycle, long id) {
|
public int increaseCycle(int newCycle, long id) {
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(DatabaseHelper.TASKS_COLUMN_CYCLE, currentCycle + 1);
|
contentValues.put(DatabaseHelper.TASKS_COLUMN_CYCLE, newCycle);
|
||||||
return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
|
return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,74 +1,39 @@
|
|||||||
package com.wismna.geoffroy.donext.fragments;
|
package com.wismna.geoffroy.donext.fragments;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
|
||||||
|
|
||||||
public class ConfirmDialogFragment extends DialogFragment {
|
public class ConfirmDialogFragment extends DialogFragment {
|
||||||
public interface ConfirmDialogListener {
|
public interface ConfirmDialogListener {
|
||||||
void onConfirmDialogPositiveClick(DialogFragment dialog);
|
void onConfirmDialogPositiveClick(DialogFragment dialog);
|
||||||
void onConfirmDialogNeutralClick(DialogFragment dialog);
|
void onConfirmDialogNeutralClick(DialogFragment dialog);
|
||||||
|
void onConfirmDialogCancel(int position);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConfirmDialogListener confirmDialogListener;
|
private ConfirmDialogListener confirmDialogListener;
|
||||||
//private TaskRecyclerViewAdapter taskRecyclerViewAdapter;
|
|
||||||
private RecyclerView recyclerView;
|
|
||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
public static ConfirmDialogFragment newInstance(
|
public static ConfirmDialogFragment newInstance(String message, ConfirmDialogListener confirmDialogListener) {
|
||||||
/*TaskRecyclerViewAdapter taskRecyclerViewAdapter, */String message, RecyclerView recyclerView) {
|
|
||||||
|
|
||||||
//Bundle args = new Bundle();
|
|
||||||
|
|
||||||
ConfirmDialogFragment fragment = new ConfirmDialogFragment();
|
ConfirmDialogFragment fragment = new ConfirmDialogFragment();
|
||||||
//fragment.taskRecyclerViewAdapter = taskRecyclerViewAdapter;
|
|
||||||
fragment.message = message;
|
fragment.message = message;
|
||||||
fragment.recyclerView = recyclerView;
|
fragment.confirmDialogListener = confirmDialogListener;
|
||||||
//fragment.setArguments(args);
|
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TaskRecyclerViewAdapter getTaskRecyclerViewAdapter() {
|
|
||||||
//return taskRecyclerViewAdapter;
|
|
||||||
return (TaskRecyclerViewAdapter) recyclerView.getAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
public RecyclerView getRecyclerView() {
|
|
||||||
return recyclerView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCancel(DialogInterface dialog) {
|
public void onCancel(DialogInterface dialog) {
|
||||||
super.onCancel(dialog);
|
super.onCancel(dialog);
|
||||||
|
|
||||||
// Allows refreshing the first item of the adapter
|
// Allows refreshing the first item of the adapter
|
||||||
Bundle args = getArguments();
|
Bundle args = getArguments();
|
||||||
int itemPosition = args.getInt("ItemPosition");
|
confirmDialogListener.onConfirmDialogCancel(args.getInt("ItemPosition"));
|
||||||
|
|
||||||
getTaskRecyclerViewAdapter().notifyItemChanged(itemPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
// Verify that the host activity implements the callback interface
|
|
||||||
try {
|
|
||||||
// Instantiate the NoticeDialogListener so we can send events to the host
|
|
||||||
confirmDialogListener = (ConfirmDialogListener) activity;
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
// The activity doesn't implement the interface, throw exception
|
|
||||||
throw new ClassCastException(activity.toString()
|
|
||||||
+ " must implement NewTaskListener");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
package com.wismna.geoffroy.donext.fragments;
|
package com.wismna.geoffroy.donext.fragments;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -43,31 +42,17 @@ public class TaskDialogFragment extends DialogFragment {
|
|||||||
private Task task;
|
private Task task;
|
||||||
private List<TaskList> taskLists;
|
private List<TaskList> taskLists;
|
||||||
|
|
||||||
public static TaskDialogFragment newInstance(Task task, List<TaskList> taskLists) {
|
public static TaskDialogFragment newInstance(Task task, List<TaskList> taskLists, NewTaskListener newTaskListener) {
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
TaskDialogFragment fragment = new TaskDialogFragment();
|
TaskDialogFragment fragment = new TaskDialogFragment();
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
fragment.task = task;
|
fragment.task = task;
|
||||||
fragment.taskLists = taskLists;
|
fragment.taskLists = taskLists;
|
||||||
|
fragment.mListener = newTaskListener;
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Override the Fragment.onAttach() method to instantiate the NoticeDialogListener */
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
// Verify that the host activity implements the callback interface
|
|
||||||
try {
|
|
||||||
// Instantiate the NoticeDialogListener so we can send events to the host
|
|
||||||
mListener = (NewTaskListener) activity;
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
// The activity doesn't implement the interface, throw exception
|
|
||||||
throw new ClassCastException(activity.toString()
|
|
||||||
+ " must implement NewTaskListener");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
@@ -2,6 +2,7 @@ package com.wismna.geoffroy.donext.fragments;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@@ -13,7 +14,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskListTouchHelper;
|
import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskListTouchHelper;
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
@@ -21,12 +22,15 @@ import com.wismna.geoffroy.donext.adapters.TaskListRecyclerViewAdapter;
|
|||||||
import com.wismna.geoffroy.donext.dao.TaskList;
|
import com.wismna.geoffroy.donext.dao.TaskList;
|
||||||
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A fragment representing a list of Items.
|
* A fragment representing a list of Items.
|
||||||
*/
|
*/
|
||||||
public class TaskListsFragment extends Fragment {
|
public class TaskListsFragment extends Fragment implements TaskListRecyclerViewAdapter.TaskListRecyclerViewAdapterListener {
|
||||||
private TaskListRecyclerViewAdapter taskListRecyclerViewAdapter;
|
private TaskListRecyclerViewAdapter taskListRecyclerViewAdapter;
|
||||||
private TaskListDataAccess taskListDataAccess;
|
private TaskListDataAccess taskListDataAccess;
|
||||||
|
private View mView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mandatory empty constructor for the fragment manager to instantiate the
|
* Mandatory empty constructor for the fragment manager to instantiate the
|
||||||
@@ -39,24 +43,21 @@ public class TaskListsFragment extends Fragment {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
// Get all task lists
|
|
||||||
taskListDataAccess = new TaskListDataAccess(getContext());
|
taskListDataAccess = new TaskListDataAccess(getContext());
|
||||||
taskListDataAccess.open();
|
new GetTaskListsTask().execute(taskListDataAccess);
|
||||||
taskListRecyclerViewAdapter =
|
|
||||||
new TaskListRecyclerViewAdapter(taskListDataAccess.getAllTaskLists(), getContext());
|
|
||||||
taskListDataAccess.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final View view = inflater.inflate(R.layout.fragment_tasklists, container, false);
|
|
||||||
|
|
||||||
Button createTaskListButton = (Button) view.findViewById(R.id.new_task_list_button);
|
mView = inflater.inflate(R.layout.fragment_tasklists, container, false);
|
||||||
|
|
||||||
|
Button createTaskListButton = (Button) mView.findViewById(R.id.new_task_list_button);
|
||||||
createTaskListButton.setOnClickListener(new View.OnClickListener() {
|
createTaskListButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
EditText editText = (EditText) view.findViewById(R.id.new_task_list_name);
|
EditText editText = (EditText) mView.findViewById(R.id.new_task_list_name);
|
||||||
String text = editText.getText().toString();
|
String text = editText.getText().toString();
|
||||||
if (text.matches("")) return;
|
if (text.matches("")) return;
|
||||||
int position = taskListRecyclerViewAdapter.getItemCount();
|
int position = taskListRecyclerViewAdapter.getItemCount();
|
||||||
@@ -67,27 +68,15 @@ public class TaskListsFragment extends Fragment {
|
|||||||
taskListRecyclerViewAdapter.add(taskList, position);
|
taskListRecyclerViewAdapter.add(taskList, position);
|
||||||
|
|
||||||
editText.setText("");
|
editText.setText("");
|
||||||
toggleVisibleCreateNewTaskListLayout(view);
|
toggleVisibleCreateNewTaskListLayout(mView);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Set the adapter
|
return mView;
|
||||||
Context context = view.getContext();
|
|
||||||
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.task_lists_view);
|
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(context));
|
|
||||||
recyclerView.setAdapter(taskListRecyclerViewAdapter);
|
|
||||||
|
|
||||||
// Set the Touch Helper
|
|
||||||
ItemTouchHelper.Callback callback = new TaskListTouchHelper(taskListRecyclerViewAdapter);
|
|
||||||
ItemTouchHelper helper = new ItemTouchHelper(callback);
|
|
||||||
helper.attachToRecyclerView(recyclerView);
|
|
||||||
|
|
||||||
toggleVisibleCreateNewTaskListLayout(view);
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleVisibleCreateNewTaskListLayout(View view) {
|
private void toggleVisibleCreateNewTaskListLayout(View view) {
|
||||||
RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.new_task_list_layout);
|
LinearLayout layout = (LinearLayout) view.findViewById(R.id.new_task_list_layout);
|
||||||
int taskListCount = taskListRecyclerViewAdapter.getItemCount();
|
int taskListCount = taskListRecyclerViewAdapter.getItemCount();
|
||||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
String maxTaskListsString = sharedPref.getString("pref_conf_max_lists", "3");
|
String maxTaskListsString = sharedPref.getString("pref_conf_max_lists", "3");
|
||||||
@@ -96,4 +85,46 @@ public class TaskListsFragment extends Fragment {
|
|||||||
else layout.setVisibility(View.VISIBLE);
|
else layout.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyOnDeleteButtonClicked() {
|
||||||
|
toggleVisibleCreateNewTaskListLayout(mView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
// TODO: persist changes in DB here
|
||||||
|
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetTaskListsTask extends AsyncTask<TaskListDataAccess, Void, List<TaskList>> {
|
||||||
|
@Override
|
||||||
|
protected List<TaskList> doInBackground(TaskListDataAccess... params) {
|
||||||
|
TaskListDataAccess taskListDataAccess = params[0];
|
||||||
|
taskListDataAccess.open();
|
||||||
|
List<TaskList> taskLists = taskListDataAccess.getAllTaskLists();
|
||||||
|
taskListDataAccess.close();
|
||||||
|
return taskLists;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(List<TaskList> taskLists) {
|
||||||
|
super.onPostExecute(taskLists);
|
||||||
|
taskListRecyclerViewAdapter =
|
||||||
|
new TaskListRecyclerViewAdapter(taskLists, getContext(), TaskListsFragment.this);
|
||||||
|
|
||||||
|
// Set the adapter
|
||||||
|
Context context = mView.getContext();
|
||||||
|
RecyclerView recyclerView = (RecyclerView) mView.findViewById(R.id.task_lists_view);
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(context));
|
||||||
|
recyclerView.setAdapter(taskListRecyclerViewAdapter);
|
||||||
|
|
||||||
|
// Set the Touch Helper
|
||||||
|
ItemTouchHelper.Callback callback = new TaskListTouchHelper(taskListRecyclerViewAdapter);
|
||||||
|
ItemTouchHelper helper = new ItemTouchHelper(callback);
|
||||||
|
helper.attachToRecyclerView(recyclerView);
|
||||||
|
|
||||||
|
toggleVisibleCreateNewTaskListLayout(mView);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,12 @@
|
|||||||
package com.wismna.geoffroy.donext.fragments;
|
package com.wismna.geoffroy.donext.fragments;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
@@ -10,12 +15,18 @@ import android.support.v7.widget.helper.ItemTouchHelper;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.RadioButton;
|
||||||
|
import android.widget.RadioGroup;
|
||||||
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskTouchHelper;
|
import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskTouchHelper;
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
import com.wismna.geoffroy.donext.activities.MainActivity;
|
import com.wismna.geoffroy.donext.activities.MainActivity;
|
||||||
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
|
||||||
|
import com.wismna.geoffroy.donext.dao.Task;
|
||||||
|
import com.wismna.geoffroy.donext.dao.TaskList;
|
||||||
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
||||||
import com.wismna.geoffroy.donext.listeners.RecyclerItemClickListener;
|
import com.wismna.geoffroy.donext.listeners.RecyclerItemClickListener;
|
||||||
import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager;
|
import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager;
|
||||||
@@ -23,9 +34,21 @@ import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager;
|
|||||||
/**
|
/**
|
||||||
* A fragment representing a list of Items.
|
* A fragment representing a list of Items.
|
||||||
*/
|
*/
|
||||||
public class TasksFragment extends Fragment {
|
public class TasksFragment extends Fragment implements
|
||||||
|
TaskDialogFragment.NewTaskListener,
|
||||||
|
ConfirmDialogFragment.ConfirmDialogListener,
|
||||||
|
TaskTouchHelper.TaskTouchHelperAdapter {
|
||||||
|
public interface TaskChangedAdapter {
|
||||||
|
void onTaskListChanged(Task task, int tabPosition);
|
||||||
|
}
|
||||||
|
|
||||||
private static final String TASK_LIST_ID = "task_list_id";
|
private static final String TASK_LIST_ID = "task_list_id";
|
||||||
private long taskListId = -1;
|
private long taskListId = -1;
|
||||||
|
private TaskDataAccess taskDataAccess;
|
||||||
|
private TaskRecyclerViewAdapter taskRecyclerViewAdapter;
|
||||||
|
private View view;
|
||||||
|
private RecyclerView recyclerView;
|
||||||
|
private TaskChangedAdapter mAdapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mandatory empty constructor for the fragment manager to instantiate the
|
* Mandatory empty constructor for the fragment manager to instantiate the
|
||||||
@@ -34,11 +57,12 @@ public class TasksFragment extends Fragment {
|
|||||||
public TasksFragment() {
|
public TasksFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TasksFragment newInstance(long taskListId) {
|
public static TasksFragment newInstance(long taskListId, TaskChangedAdapter taskChangedAdapter) {
|
||||||
TasksFragment fragment = new TasksFragment();
|
TasksFragment fragment = new TasksFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putLong(TASK_LIST_ID, taskListId);
|
args.putLong(TASK_LIST_ID, taskListId);
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
|
fragment.mAdapter = taskChangedAdapter;
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,33 +78,30 @@ public class TasksFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.fragment_tasks, container, false);
|
view = inflater.inflate(R.layout.fragment_tasks, container, false);
|
||||||
final Context context = view.getContext();
|
final Context context = view.getContext();
|
||||||
|
|
||||||
// Set the Recycler view
|
// Set the Recycler view
|
||||||
final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.task_list_view);
|
recyclerView = (RecyclerView) view.findViewById(R.id.task_list_view);
|
||||||
recyclerView.setLayoutManager(new NoScrollingLayoutManager(context));
|
recyclerView.setLayoutManager(new NoScrollingLayoutManager(context));
|
||||||
|
|
||||||
TaskDataAccess taskDataAccess = new TaskDataAccess(view.getContext());
|
taskDataAccess = new TaskDataAccess(view.getContext());
|
||||||
taskDataAccess.open();
|
taskDataAccess.open();
|
||||||
|
|
||||||
// Set total cycles
|
// Set total cycles
|
||||||
TextView totalCyclesView = (TextView) view.findViewById(R.id.total_task_cycles);
|
UpdateCycleCount();
|
||||||
totalCyclesView.setText(String.valueOf(taskDataAccess.getTotalCycles(taskListId) + " cycles"));
|
|
||||||
|
|
||||||
// Set total count
|
// Set total count
|
||||||
TextView totalTasksView = (TextView) view.findViewById(R.id.total_task_count);
|
UpdateTaskCount();
|
||||||
totalTasksView.setText(String.valueOf(taskDataAccess.getTaskCount(taskListId) + " tasks"));
|
|
||||||
|
|
||||||
// Set RecyclerView Adapter
|
// Set RecyclerView Adapter
|
||||||
final TaskRecyclerViewAdapter taskRecyclerViewAdapter = new TaskRecyclerViewAdapter(taskDataAccess.getAllTasks(taskListId));
|
taskRecyclerViewAdapter = new TaskRecyclerViewAdapter(taskDataAccess.getAllTasks(taskListId));
|
||||||
recyclerView.setAdapter(taskRecyclerViewAdapter);
|
recyclerView.setAdapter(taskRecyclerViewAdapter);
|
||||||
|
|
||||||
taskDataAccess.close();
|
taskDataAccess.close();
|
||||||
|
|
||||||
// Set ItemTouch helper in RecyclerView to handle swipe move on elements
|
// Set ItemTouch helper in RecyclerView to handle swipe move on elements
|
||||||
ItemTouchHelper.Callback callback = new TaskTouchHelper(
|
ItemTouchHelper.Callback callback = new TaskTouchHelper(this);
|
||||||
taskRecyclerViewAdapter, taskDataAccess, getFragmentManager(), recyclerView);
|
|
||||||
ItemTouchHelper helper = new ItemTouchHelper(callback);
|
ItemTouchHelper helper = new ItemTouchHelper(callback);
|
||||||
helper.attachToRecyclerView(recyclerView);
|
helper.attachToRecyclerView(recyclerView);
|
||||||
|
|
||||||
@@ -97,9 +118,9 @@ public class TasksFragment extends Fragment {
|
|||||||
args.putInt("list", viewPager.getCurrentItem());
|
args.putInt("list", viewPager.getCurrentItem());
|
||||||
|
|
||||||
FragmentManager manager = getFragmentManager();
|
FragmentManager manager = getFragmentManager();
|
||||||
TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(/*taskRecyclerViewAdapter, recyclerView,*/
|
TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(
|
||||||
taskRecyclerViewAdapter.getItem(position),
|
taskRecyclerViewAdapter.getItem(position),
|
||||||
((MainActivity.SectionsPagerAdapter)viewPager.getAdapter()).getAllItems());
|
((MainActivity.SectionsPagerAdapter)viewPager.getAdapter()).getAllItems(), TasksFragment.this);
|
||||||
|
|
||||||
taskDialogFragment.setArguments(args);
|
taskDialogFragment.setArguments(args);
|
||||||
taskDialogFragment.show(manager, "Edit task");
|
taskDialogFragment.show(manager, "Edit task");
|
||||||
@@ -108,4 +129,239 @@ public class TasksFragment extends Fragment {
|
|||||||
);
|
);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateCycleCount() {
|
||||||
|
TextView totalCyclesView = (TextView) view.findViewById(R.id.total_task_cycles);
|
||||||
|
totalCyclesView.setText(String.valueOf(taskDataAccess.getTotalCycles(taskListId) + " cycles"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateTaskCount() {
|
||||||
|
TextView totalTasksView = (TextView) view.findViewById(R.id.total_task_count);
|
||||||
|
totalTasksView.setText(String.valueOf(taskDataAccess.getTaskCount(taskListId) + " tasks"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Performs an action on a task: done, next or delete */
|
||||||
|
public void PerformTaskAction(final int itemPosition, final int direction) {
|
||||||
|
final long itemId = taskRecyclerViewAdapter.getItemId(itemPosition);
|
||||||
|
final Task task = taskRecyclerViewAdapter.getItem(itemPosition);
|
||||||
|
String action = "";
|
||||||
|
taskRecyclerViewAdapter.remove(itemPosition);
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
// Mark item as Done
|
||||||
|
case ItemTouchHelper.LEFT:
|
||||||
|
action = "done";
|
||||||
|
break;
|
||||||
|
// Increase task cycle count
|
||||||
|
case ItemTouchHelper.RIGHT:
|
||||||
|
action = "nexted";
|
||||||
|
task.setCycle(task.getCycle() + 1);
|
||||||
|
taskRecyclerViewAdapter.add(task, taskRecyclerViewAdapter.getItemCount());
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
action = "deleted";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the snack bar
|
||||||
|
Snackbar.make(view, "Task " + action, Snackbar.LENGTH_LONG)
|
||||||
|
.setAction("Undo", new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
// Undo adapter changes
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
// Nothing special to do for done
|
||||||
|
case ItemTouchHelper.LEFT:
|
||||||
|
break;
|
||||||
|
// Remove the last item
|
||||||
|
case ItemTouchHelper.RIGHT:
|
||||||
|
taskRecyclerViewAdapter.remove(taskRecyclerViewAdapter.getItemCount() - 1);
|
||||||
|
task.setCycle(task.getCycle() - 1);
|
||||||
|
break;
|
||||||
|
// Nothing special to do for delete
|
||||||
|
case -1:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Reset the first item
|
||||||
|
taskRecyclerViewAdapter.add(task, itemPosition);
|
||||||
|
recyclerView.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
|
||||||
|
case ItemTouchHelper.LEFT:
|
||||||
|
taskDataAccess.setDone(itemId);
|
||||||
|
break;
|
||||||
|
// Increase task cycle count
|
||||||
|
case ItemTouchHelper.RIGHT:
|
||||||
|
taskDataAccess.increaseCycle(task.getCycle(), itemId);
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
// Commit the changes to DB
|
||||||
|
taskDataAccess.deleteTask(itemId);
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateCycleCount();
|
||||||
|
UpdateTaskCount();
|
||||||
|
|
||||||
|
taskDataAccess.close();
|
||||||
|
}
|
||||||
|
}).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfirmDialogPositiveClick(DialogFragment dialog) {
|
||||||
|
Bundle args = dialog.getArguments();
|
||||||
|
int itemPosition = args.getInt("ItemPosition");
|
||||||
|
int direction = args.getInt("Direction");
|
||||||
|
|
||||||
|
PerformTaskAction(itemPosition, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfirmDialogNeutralClick(DialogFragment dialog) {
|
||||||
|
Bundle args = dialog.getArguments();
|
||||||
|
int itemPosition = args.getInt("ItemPosition");
|
||||||
|
int direction = args.getInt("Direction");
|
||||||
|
|
||||||
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
SharedPreferences.Editor editor = sharedPref.edit();
|
||||||
|
|
||||||
|
// Set system settings
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case ItemTouchHelper.LEFT:
|
||||||
|
editor.putBoolean("pref_conf_done", false);
|
||||||
|
break;
|
||||||
|
case ItemTouchHelper.RIGHT:
|
||||||
|
editor.putBoolean("pref_conf_next", false);
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
editor.putBoolean("pref_conf_del", false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
editor.apply();
|
||||||
|
PerformTaskAction(itemPosition, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfirmDialogCancel(int position) {
|
||||||
|
taskRecyclerViewAdapter.notifyItemChanged(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNewTaskDialogPositiveClick(DialogFragment dialog) {
|
||||||
|
// Get the dialog fragment
|
||||||
|
Dialog dialogView = dialog.getDialog();
|
||||||
|
long id = 0;
|
||||||
|
Task task = ((TaskDialogFragment)dialog).getTask();
|
||||||
|
if (task != null) id = task.getId();
|
||||||
|
|
||||||
|
// Get the controls
|
||||||
|
Spinner listSpinner = (Spinner) dialogView.findViewById(R.id.new_task_list);
|
||||||
|
EditText nameText = (EditText) dialogView.findViewById(R.id.new_task_name);
|
||||||
|
EditText descText = (EditText) dialogView.findViewById(R.id.new_task_description);
|
||||||
|
RadioGroup priorityGroup = (RadioGroup) dialogView.findViewById(R.id.new_task_priority);
|
||||||
|
RadioButton priorityRadio = (RadioButton) dialogView.findViewById(priorityGroup.getCheckedRadioButtonId());
|
||||||
|
TaskList taskList = (TaskList) listSpinner.getSelectedItem();
|
||||||
|
|
||||||
|
// Add the task to the database
|
||||||
|
taskDataAccess.open();
|
||||||
|
Task newTask = taskDataAccess.createOrUpdateTask(id,
|
||||||
|
nameText.getText().toString(),
|
||||||
|
descText.getText().toString(),
|
||||||
|
priorityRadio.getText().toString(),
|
||||||
|
taskList.getId());
|
||||||
|
|
||||||
|
UpdateTaskCount();
|
||||||
|
taskDataAccess.close();
|
||||||
|
// Update the corresponding tab adapter
|
||||||
|
|
||||||
|
Bundle args = dialog.getArguments();
|
||||||
|
// Should never happen because we will have to be on this tab to open the dialog
|
||||||
|
if (taskRecyclerViewAdapter == null) return;
|
||||||
|
|
||||||
|
// Add the task
|
||||||
|
if (task == null)
|
||||||
|
taskRecyclerViewAdapter.add(newTask, taskRecyclerViewAdapter.getItemCount());
|
||||||
|
// Update the task
|
||||||
|
else {
|
||||||
|
int position = args.getInt("position");
|
||||||
|
// Check if task list was changed
|
||||||
|
if (task.getTaskListId() != taskList.getId())
|
||||||
|
{
|
||||||
|
// Remove item from current tab
|
||||||
|
taskRecyclerViewAdapter.remove(position);
|
||||||
|
|
||||||
|
// Add it to the corresponding tab provided it is already instanciated
|
||||||
|
mAdapter.onTaskListChanged(newTask, listSpinner.getSelectedItemPosition());
|
||||||
|
}
|
||||||
|
else taskRecyclerViewAdapter.update(newTask, position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNewTaskDialogNeutralClick(DialogFragment dialog) {
|
||||||
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
String title = getResources().getString(R.string.task_confirmation_delete_text);
|
||||||
|
boolean showDialog = sharedPref.getBoolean("pref_conf_del", true);
|
||||||
|
Bundle args = dialog.getArguments();
|
||||||
|
|
||||||
|
// Delete task from Adapter
|
||||||
|
final int itemPosition = args.getInt("position");
|
||||||
|
|
||||||
|
if (showDialog) {
|
||||||
|
ConfirmDialogFragment confirmDialogFragment =
|
||||||
|
ConfirmDialogFragment.newInstance(title, this);
|
||||||
|
Bundle confirmArgs = new Bundle();
|
||||||
|
confirmArgs.putInt("ItemPosition", itemPosition);
|
||||||
|
confirmArgs.putInt("Direction", -1);
|
||||||
|
confirmDialogFragment.setArguments(confirmArgs);
|
||||||
|
confirmDialogFragment.show(getFragmentManager(), title);
|
||||||
|
}
|
||||||
|
else PerformTaskAction(itemPosition, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemSwiped(int itemPosition, int direction) {
|
||||||
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
String title = "";
|
||||||
|
boolean showDialog = false;
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
// Mark item as Done
|
||||||
|
case ItemTouchHelper.LEFT:
|
||||||
|
title = "Mark task as done?";
|
||||||
|
showDialog = sharedPref.getBoolean("pref_conf_done", true);
|
||||||
|
break;
|
||||||
|
// Increase task cycle count
|
||||||
|
case ItemTouchHelper.RIGHT:
|
||||||
|
title = "Go to next task?";
|
||||||
|
showDialog = sharedPref.getBoolean("pref_conf_next", true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (showDialog) {
|
||||||
|
ConfirmDialogFragment confirmDialogFragment =
|
||||||
|
ConfirmDialogFragment.newInstance(title, this);
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt("ItemPosition", itemPosition);
|
||||||
|
args.putInt("Direction", direction);
|
||||||
|
confirmDialogFragment.setArguments(args);
|
||||||
|
confirmDialogFragment.show(getFragmentManager(), title);
|
||||||
|
}
|
||||||
|
else PerformTaskAction(itemPosition, direction);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="70dp"
|
android:layout_height="70dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal" >
|
||||||
android:foreground="?selectableItemBackground" >
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/task_cycle"
|
android:id="@+id/task_cycle"
|
||||||
android:layout_width="56dp"
|
android:layout_width="56dp"
|
||||||
|
@@ -1,34 +1,23 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal" >
|
||||||
android:foreground="?selectableItemBackground" >
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/task_list_count"
|
android:id="@+id/task_list_count"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="50dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/task_list_name"
|
android:id="@+id/task_list_name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="200dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="?listPreferredItemHeight"
|
||||||
android:layout_marginLeft="10dp"
|
|
||||||
android:layout_marginStart="10dp"
|
|
||||||
android:layout_toRightOf="@id/task_list_count"
|
|
||||||
android:layout_toEndOf="@id/task_list_count"
|
|
||||||
android:inputType="text"
|
android:inputType="text"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/task_list_delete"
|
android:id="@+id/task_list_delete"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="80dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:text="@string/task_list_delete"
|
android:text="@string/task_list_delete" />
|
||||||
android:onClick="onDeleteTaskList" />
|
</LinearLayout>
|
||||||
</RelativeLayout>
|
|
||||||
|
@@ -9,23 +9,23 @@
|
|||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
tools:context=".activities.TaskListActivity">
|
tools:context=".activities.TaskListActivity">
|
||||||
<RelativeLayout
|
<LinearLayout
|
||||||
android:id="@+id/new_task_list_layout"
|
android:id="@+id/new_task_list_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="50dp"
|
||||||
|
android:layout_marginStart="50dp">
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/new_task_list_name"
|
android:id="@+id/new_task_list_name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="200dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/task_list_new_list_hint"/>
|
android:hint="@string/task_list_new_list_hint"/>
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/new_task_list_button"
|
android:id="@+id/new_task_list_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="80dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:text="@string/task_list_new_list_create"/>
|
android:text="@string/task_list_new_list_create"/>
|
||||||
</RelativeLayout>
|
</LinearLayout>
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
@@ -34,8 +34,6 @@
|
|||||||
android:name="com.wismna.geoffroy.donext.fragments.TaskListFragment"
|
android:name="com.wismna.geoffroy.donext.fragments.TaskListFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:layout_marginRight="16dp"
|
|
||||||
app:layoutManager="LinearLayoutManager"
|
app:layoutManager="LinearLayoutManager"
|
||||||
tools:context=".fragments.TaskListsFragment"
|
tools:context=".fragments.TaskListsFragment"
|
||||||
tools:listitem="@layout/fragment_tasklist" />
|
tools:listitem="@layout/fragment_tasklist" />
|
||||||
|
Reference in New Issue
Block a user