From 31d9b26afc4ebcede9135681213c2fe77d8ad40f Mon Sep 17 00:00:00 2001 From: geoffroy Date: Fri, 8 Jan 2016 17:53:53 -0500 Subject: [PATCH] Never ask again is now a checkbox in the confirmation dialog Next task text on confirmation dialog change New text when there are no tasks in a list Automatically open TaskList Activity when no task lists exist Confirmation on task list delete Code cleanup (new interfaces...) --- .../donext/activities/MainActivity.java | 24 +++-- .../adapters/TaskListRecyclerViewAdapter.java | 41 +++------ .../fragments/ConfirmDialogFragment.java | 24 ++--- .../donext/fragments/TaskListsFragment.java | 52 ++++++++++- .../donext/fragments/TasksFragment.java | 88 ++++++++++--------- .../app/src/main/res/drawable/task_select.xml | 5 ++ .../res/layout/fragment_task_confirmation.xml | 14 +++ .../src/main/res/layout/fragment_tasks.xml | 8 +- DoNExt/app/src/main/res/values/strings.xml | 6 +- 9 files changed, 159 insertions(+), 103 deletions(-) create mode 100644 DoNExt/app/src/main/res/drawable/task_select.xml create mode 100644 DoNExt/app/src/main/res/layout/fragment_task_confirmation.xml 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 e9584b7..29e9e45 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 @@ -63,17 +63,23 @@ public class MainActivity extends AppCompatActivity implements TasksFragment.Tas mSectionsPagerAdapter.notifyDataSetChanged(); taskListDataAccess.close(); - // Set up the ViewPager with the sections adapter. - mViewPager = (ViewPager) findViewById(R.id.container); - mViewPager.setAdapter(mSectionsPagerAdapter); + if (taskLists.size() == 0) { + Intent intent = new Intent(this, TaskListActivity.class); + startActivity(intent); + } + else { - TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); - tabLayout.setupWithViewPager(mViewPager); + // Set up the ViewPager with the sections adapter. + mViewPager = (ViewPager) findViewById(R.id.container); + mViewPager.setAdapter(mSectionsPagerAdapter); - // Hide or show new task floating button - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - if (taskLists.size() == 0) fab.hide(); - else fab.show(); + TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); + tabLayout.setupWithViewPager(mViewPager); + + // Hide or show new task floating button + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.show(); + } } @Override diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java index 16888ea..30703fc 100644 --- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java +++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java @@ -1,6 +1,5 @@ package com.wismna.geoffroy.donext.adapters; -import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -11,7 +10,6 @@ import android.widget.TextView; import com.wismna.geoffroy.donext.R; import com.wismna.geoffroy.donext.dao.TaskList; -import com.wismna.geoffroy.donext.database.TaskListDataAccess; import com.wismna.geoffroy.donext.helpers.TaskListTouchHelper; import java.util.Collections; @@ -25,16 +23,16 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter mValues; - private Context mContext; private TaskListRecyclerViewAdapterListener mListener; - public TaskListRecyclerViewAdapter(List items, Context context, TaskListRecyclerViewAdapterListener listener) { + public TaskListRecyclerViewAdapter(List items, TaskListRecyclerViewAdapterListener listener) { mValues = items; - mContext = context; mListener = listener; } @@ -61,17 +59,13 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter taskLists) { super.onPostExecute(taskLists); taskListRecyclerViewAdapter = - new TaskListRecyclerViewAdapter(taskLists, getContext(), TaskListsFragment.this); + new TaskListRecyclerViewAdapter(taskLists, TaskListsFragment.this); // Set the adapter Context context = mView.getContext(); 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 7a4d1be..abea386 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 @@ -16,6 +16,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; @@ -96,8 +97,6 @@ public class TasksFragment extends Fragment implements // Set total cycles UpdateCycleCount(); - taskDataAccess.close(); - // Set ItemTouch helper in RecyclerView to handle swipe move on elements ItemTouchHelper.Callback callback = new TaskTouchHelper(this); ItemTouchHelper helper = new ItemTouchHelper(callback); @@ -141,21 +140,36 @@ public class TasksFragment extends Fragment implements return view; } + @Override + public void onPause() { + super.onPause(); + taskDataAccess.close(); + } + + @Override + public void onResume() { + super.onResume(); + taskDataAccess.open(); + } + private void UpdateCycleCount() { + int totalCycles = taskDataAccess.getTotalCycles(taskListId); + if (totalCycles == 0) return; TextView totalCyclesView = (TextView) view.findViewById(R.id.total_task_cycles); - totalCyclesView.setText(String.valueOf(taskDataAccess.getTotalCycles(taskListId) + " cycles")); + totalCyclesView.setText(String.valueOf(totalCycles + " cycles")); } private void UpdateTaskCount() { int totalTasks = taskRecyclerViewAdapter.getItemCount(); TextView totalTasksView = (TextView) view.findViewById(R.id.total_task_count); - totalTasksView.setText(String.valueOf(totalTasks + " tasks")); + if (totalTasks == 0) totalTasksView.setText(getResources().getText(R.string.task_no_tasks)); + else totalTasksView.setText(String.valueOf(totalTasks + " tasks")); } private void UpdateRemainingTaskCount() { TextView remainingTasksView = (TextView) view.findViewById(R.id.remaining_task_count); NoScrollingLayoutManager layoutManager = (NoScrollingLayoutManager) recyclerView.getLayoutManager(); - int remainingTaskCount = taskRecyclerViewAdapter.getItemCount() - layoutManager.findLastCompletelyVisibleItemPosition() - 1; + int remainingTaskCount = taskRecyclerViewAdapter.getItemCount() - layoutManager.findLastVisibleItemPosition() - 1; if (remainingTaskCount == 0) remainingTasksView.setText(""); else @@ -219,7 +233,6 @@ public class TasksFragment extends Fragment implements // When clicked on undo, do not write to DB if (event == DISMISS_EVENT_ACTION) return; - taskDataAccess.open(); // Commit the changes to DB switch (direction) { @@ -237,7 +250,6 @@ public class TasksFragment extends Fragment implements } UpdateCycleCount(); - taskDataAccess.close(); UpdateTaskCount(); UpdateRemainingTaskCount(); @@ -246,43 +258,38 @@ public class TasksFragment extends Fragment implements } @Override - public void onConfirmDialogPositiveClick(DialogFragment dialog) { + public void onConfirmDialogClick(DialogFragment dialog, ConfirmDialogFragment.ButtonEvent event) { Bundle args = dialog.getArguments(); int itemPosition = args.getInt("ItemPosition"); int direction = args.getInt("Direction"); - PerformTaskAction(itemPosition, direction); - } + // Handle never ask again checkbox + CheckBox neverAskAgainCheckBox = (CheckBox) dialog.getDialog().findViewById(R.id.task_confirmation_never); + if (neverAskAgainCheckBox.isChecked()) { - @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(); - 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; + // 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(); + } + if (event == ConfirmDialogFragment.ButtonEvent.YES) { + PerformTaskAction(itemPosition, direction); + } + else if(event == ConfirmDialogFragment.ButtonEvent.NO) { + taskRecyclerViewAdapter.notifyItemChanged(itemPosition); } - editor.apply(); - PerformTaskAction(itemPosition, direction); - } - - @Override - public void onConfirmDialogCancel(int position) { - taskRecyclerViewAdapter.notifyItemChanged(position); } @Override @@ -302,15 +309,12 @@ public class TasksFragment extends Fragment implements 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(); - Bundle args = dialog.getArguments(); // Should never happen because we will have to be on this tab to open the dialog @@ -373,12 +377,12 @@ public class TasksFragment extends Fragment implements { // Mark item as Done case ItemTouchHelper.LEFT: - title = "Mark task as done?"; + title = getResources().getString(R.string.task_confirmation_done_text); showDialog = sharedPref.getBoolean("pref_conf_done", true); break; // Increase task cycle count case ItemTouchHelper.RIGHT: - title = "Go to next task?"; + title = getResources().getString(R.string.task_confirmation_next_text); showDialog = sharedPref.getBoolean("pref_conf_next", true); break; } diff --git a/DoNExt/app/src/main/res/drawable/task_select.xml b/DoNExt/app/src/main/res/drawable/task_select.xml new file mode 100644 index 0000000..484668f --- /dev/null +++ b/DoNExt/app/src/main/res/drawable/task_select.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/DoNExt/app/src/main/res/layout/fragment_task_confirmation.xml b/DoNExt/app/src/main/res/layout/fragment_task_confirmation.xml new file mode 100644 index 0000000..2523e5b --- /dev/null +++ b/DoNExt/app/src/main/res/layout/fragment_task_confirmation.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/DoNExt/app/src/main/res/layout/fragment_tasks.xml b/DoNExt/app/src/main/res/layout/fragment_tasks.xml index 3de2986..cefebff 100644 --- a/DoNExt/app/src/main/res/layout/fragment_tasks.xml +++ b/DoNExt/app/src/main/res/layout/fragment_tasks.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" > + android:layout_height="match_parent" + android:background="@drawable/task_select" > + android:layout_centerHorizontal="true" /> New list name Create Delete + Delete task list? + List @@ -27,11 +29,11 @@ Details - + Yeah! No more tasks! Mark task as Done? - Go to next task? + NEXT, do this one later? Delete this task? Done Next