diff --git a/DoNExt/app/src/main/AndroidManifest.xml b/DoNExt/app/src/main/AndroidManifest.xml
index c602e48..2f858af 100644
--- a/DoNExt/app/src/main/AndroidManifest.xml
+++ b/DoNExt/app/src/main/AndroidManifest.xml
@@ -14,7 +14,6 @@
android:theme="@style/AppTheme.NoActionBar">
-
@@ -28,20 +27,12 @@
-
-
-
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskListTouchHelper.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskListTouchHelper.java
new file mode 100644
index 0000000..9fe04dc
--- /dev/null
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskListTouchHelper.java
@@ -0,0 +1,37 @@
+package com.wismna.geoffroy.donext.ItemTouchHelpers;
+
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
+
+/**
+ * Created by geoffroy on 15-12-30.
+ * Helper class that handles all drags events on a TaskList
+ */
+public class TaskListTouchHelper extends ItemTouchHelper.SimpleCallback {
+
+ public interface TaskListTouchHelperAdapter {
+ boolean onItemMove (int fromPosition, int toPosition);
+ }
+
+ private final TaskListTouchHelperAdapter mAdapter;
+
+ public TaskListTouchHelper(TaskListTouchHelperAdapter adapter) {
+ super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0);
+ mAdapter = adapter;
+ }
+
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ return mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
+ }
+
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+ // No swipe moves
+ }
+
+ @Override
+ public boolean isLongPressDragEnabled() {
+ return true;
+ }
+}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
index 2db199b..f8c9b86 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/ItemTouchHelpers/TaskTouchHelper.java
@@ -11,7 +11,7 @@ import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import com.wismna.geoffroy.donext.activities.MainActivity;
-import com.wismna.geoffroy.donext.adapters.TaskAdapter;
+import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
import com.wismna.geoffroy.donext.database.TaskDataAccess;
import com.wismna.geoffroy.donext.fragments.ConfirmDialogFragment;
@@ -20,16 +20,16 @@ import com.wismna.geoffroy.donext.fragments.ConfirmDialogFragment;
* Helper class that handles all swipe events on a Task
*/
public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
- private TaskAdapter taskAdapter;
+ private TaskRecyclerViewAdapter taskRecyclerViewAdapter;
private TaskDataAccess taskDataAccess;
private FragmentManager fragmentManager;
private RecyclerView recyclerView;
- public TaskTouchHelper(TaskAdapter taskAdapter, TaskDataAccess taskDataAccess,
+ public TaskTouchHelper(TaskRecyclerViewAdapter taskRecyclerViewAdapter, TaskDataAccess taskDataAccess,
FragmentManager fragmentManager, RecyclerView recyclerView){
// No drag moves, only left swipes (except for 1st element, see getSwipeDirs method)
super(0, ItemTouchHelper.LEFT);
- this.taskAdapter = taskAdapter;
+ this.taskRecyclerViewAdapter = taskRecyclerViewAdapter;
this.taskDataAccess = taskDataAccess;
this.fragmentManager = fragmentManager;
this.recyclerView = recyclerView;
@@ -70,14 +70,14 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
}
if (showDialog) {
ConfirmDialogFragment confirmDialogFragment =
- ConfirmDialogFragment.newInstance(taskAdapter, title, recyclerView);
+ 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, taskAdapter, itemPosition, direction, recyclerView);
+ else MainActivity.PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, direction, recyclerView);
}
@Override
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 013e1d7..a3313ca 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
@@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.DialogFragment;
@@ -26,7 +27,7 @@ import android.widget.Spinner;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.adapters.SmartFragmentStatePagerAdapter;
-import com.wismna.geoffroy.donext.adapters.TaskAdapter;
+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;
@@ -39,7 +40,6 @@ import java.util.List;
public class MainActivity extends AppCompatActivity implements
TaskDialogFragment.NewTaskListener,
- TasksFragment.OnListFragmentInteractionListener,
ConfirmDialogFragment.ConfirmDialogListener
{
@@ -52,7 +52,7 @@ public class MainActivity extends AppCompatActivity implements
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/
-
+ private SectionsPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
@@ -69,7 +69,7 @@ public class MainActivity extends AppCompatActivity implements
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
- SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
+ mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Access database to retrieve tasks
taskDataAccess = new TaskDataAccess(this);
@@ -81,6 +81,7 @@ public class MainActivity extends AppCompatActivity implements
taskLists = taskListDataAccess.getAllTaskLists();
mSectionsPagerAdapter.notifyDataSetChanged();
+ taskListDataAccess.close();
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
@@ -89,16 +90,10 @@ public class MainActivity extends AppCompatActivity implements
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
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
- public void onClick(View view) {
- Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
- .setAction("Action", null).show();
- }
- });*/
+ // Hide or show new task floating button
+ FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
+ if (taskLists.size() == 0) fab.hide();
+ else fab.show();
}
@Override
@@ -115,12 +110,8 @@ public class MainActivity extends AppCompatActivity implements
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
+ return id == R.id.action_settings || super.onOptionsItemSelected(item);
- return super.onOptionsItemSelected(item);
}
@Override
@@ -145,8 +136,10 @@ public class MainActivity extends AppCompatActivity implements
public void onNewTaskDialogPositiveClick(DialogFragment dialog) {
// Get the dialog fragment
Dialog dialogView = dialog.getDialog();
- Bundle args = dialog.getArguments();
- long id = args.getLong("id");
+ 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);
@@ -154,22 +147,40 @@ public class MainActivity extends AppCompatActivity implements
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 task = taskDataAccess.createOrUpdateTask(id,
+ Task newTask = taskDataAccess.createOrUpdateTask(id,
nameText.getText().toString(),
descText.getText().toString(),
priorityRadio.getText().toString(),
taskList.getId());
taskDataAccess.close();
// Update the corresponding tab adapter
- TaskAdapter taskAdapter = ((TaskDialogFragment)dialog).getTaskAdapter();
+
+ 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 (id == 0)
- taskAdapter.add(task, taskAdapter.getItemCount());
+ if (task == null)
+ taskRecyclerViewAdapter.add(newTask, taskRecyclerViewAdapter.getItemCount());
// Update the task
- else
- taskAdapter.update(task, args.getInt("position"));
+ 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
@@ -177,30 +188,39 @@ public class MainActivity extends AppCompatActivity implements
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String title = getResources().getString(R.string.task_confirmation_delete_text);
boolean showDialog = sharedPref.getBoolean("pref_conf_del", true);
- TaskDialogFragment taskDialogFragment = (TaskDialogFragment) dialog;
Bundle args = dialog.getArguments();
// Delete task from Adapter
final int itemPosition = args.getInt("position");
- final TaskAdapter taskAdapter = taskDialogFragment.getTaskAdapter();
- final RecyclerView view = taskDialogFragment.getRecyclerView();
+ final RecyclerView view = getSpecificTabRecyclerView(args.getInt("list"));
+ final TaskRecyclerViewAdapter taskRecyclerViewAdapter = (TaskRecyclerViewAdapter) view.getAdapter();
if (showDialog) {
ConfirmDialogFragment confirmDialogFragment =
- ConfirmDialogFragment.newInstance(taskAdapter, title, view);
+ 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, taskAdapter, itemPosition, -1, view);
+ else PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, -1, view);
}
/** Called when user clicks on the New Task floating button */
public void onNewTaskClick(View view) {
- OpenNewTaskDialog();
+ FragmentManager manager = getSupportFragmentManager();
+ TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(null,
+ mSectionsPagerAdapter.getAllItems());
+
+ // Set current tab value to new task dialog
+ Bundle args = new Bundle();
+ args.putInt("list", mViewPager.getCurrentItem());
+ taskDialogFragment.setArguments(args);
+
+ taskDialogFragment.show(manager, "Create new task");
}
+
/** Called when the user clicks the Settings button */
public void openSettings(MenuItem menuItem) {
Intent intent = new Intent(this, SettingsActivity.class);
@@ -212,19 +232,14 @@ public class MainActivity extends AppCompatActivity implements
startActivity(intent);
}
- @Override
- public void onListFragmentInteraction(Task item) {
-
- }
-
@Override
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());
+ TaskRecyclerViewAdapter taskRecyclerViewAdapter = ((ConfirmDialogFragment)dialog).getTaskRecyclerViewAdapter();
+ PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
}
@Override
@@ -235,7 +250,6 @@ public class MainActivity extends AppCompatActivity implements
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
- //editor.putBoolean("pref_conf_next", false);
switch (direction)
{
@@ -252,31 +266,19 @@ public class MainActivity extends AppCompatActivity implements
break;
}
editor.apply();
- TaskAdapter taskAdapter = ((ConfirmDialogFragment)dialog).getTaskAdapter();
- PerformSwipeAction(taskDataAccess, taskAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
- }
-
- private void OpenNewTaskDialog() {
- FragmentManager manager = getSupportFragmentManager();
- TaskDialogFragment taskDialogFragment = new TaskDialogFragment();
-
- // Set current tab value to new task dialog
- Bundle args = new Bundle();
- args.putInt("list", mViewPager.getCurrentItem());
- taskDialogFragment.setArguments(args);
-
- taskDialogFragment.show(manager, "Create new task");
+ TaskRecyclerViewAdapter taskRecyclerViewAdapter = ((ConfirmDialogFragment)dialog).getTaskRecyclerViewAdapter();
+ PerformSwipeAction(taskDataAccess, taskRecyclerViewAdapter, itemPosition, direction, ((ConfirmDialogFragment) dialog).getRecyclerView());
}
public static void PerformSwipeAction(final TaskDataAccess taskDataAccess,
- final TaskAdapter taskAdapter,
+ final TaskRecyclerViewAdapter taskRecyclerViewAdapter,
final int itemPosition,
final int direction,
final View view) {
- final long itemId = taskAdapter.getItemId(itemPosition);
- final Task task = taskAdapter.getItem(itemPosition);
+ final long itemId = taskRecyclerViewAdapter.getItemId(itemPosition);
+ final Task task = taskRecyclerViewAdapter.getItem(itemPosition);
String action = "";
- taskAdapter.remove(itemPosition);
+ taskRecyclerViewAdapter.remove(itemPosition);
switch (direction)
{
@@ -288,11 +290,10 @@ public class MainActivity extends AppCompatActivity implements
case ItemTouchHelper.RIGHT:
action = "nexted";
task.setCycle(task.getCycle() + 1);
- taskAdapter.add(task, taskAdapter.getItemCount());
+ taskRecyclerViewAdapter.add(task, taskRecyclerViewAdapter.getItemCount());
break;
case -1:
action = "deleted";
- taskAdapter.remove(itemPosition);
break;
}
@@ -309,7 +310,7 @@ public class MainActivity extends AppCompatActivity implements
break;
// Remove the last item
case ItemTouchHelper.RIGHT:
- taskAdapter.remove(taskAdapter.getItemCount() - 1);
+ taskRecyclerViewAdapter.remove(taskRecyclerViewAdapter.getItemCount() - 1);
task.setCycle(task.getCycle() - 1);
break;
// Nothing special to do for delete
@@ -317,7 +318,7 @@ public class MainActivity extends AppCompatActivity implements
break;
}
// Reset the first item
- taskAdapter.add(task, itemPosition);
+ taskRecyclerViewAdapter.add(task, itemPosition);
((RecyclerView)view).scrollToPosition(0);
}
}).setCallback(new Snackbar.Callback() {
@@ -348,6 +349,21 @@ public class MainActivity extends AppCompatActivity implements
}
}).show();
}
+
+ private RecyclerView getSpecificTabRecyclerView(int position) {
+ TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(position);
+ if (taskFragment == null) return null;
+ View view = taskFragment.getView();
+ if (view == null) return null;
+ return ((RecyclerView) view.findViewById(R.id.task_list_view));
+ }
+
+ private TaskRecyclerViewAdapter getSpecificTabAdapter(int position) {
+ RecyclerView view = getSpecificTabRecyclerView(position);
+ if (view == null) return null;
+ return (TaskRecyclerViewAdapter) view.getAdapter();
+ }
+
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
@@ -379,5 +395,9 @@ public class MainActivity extends AppCompatActivity implements
if (taskLists == null) return "N/A";
return taskLists.get(position).getName();
}
+
+ public List getAllItems(){
+ return taskLists;
+ }
}
}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskActivity.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskActivity.java
deleted file mode 100644
index be6cd18..0000000
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskActivity.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.wismna.geoffroy.donext.activities;
-
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-
-import com.wismna.geoffroy.donext.R;
-
-public class TaskActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_task);
- }
-}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskListActivity.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskListActivity.java
index 1df4b42..ef80965 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskListActivity.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskListActivity.java
@@ -1,91 +1,15 @@
package com.wismna.geoffroy.donext.activities;
-import android.content.SharedPreferences;
-import android.database.Cursor;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.RelativeLayout;
import com.wismna.geoffroy.donext.R;
-import com.wismna.geoffroy.donext.adapters.TaskListCursorAdapter;
-import com.wismna.geoffroy.donext.database.TaskListDataAccess;
-
-// TODO: create a fragment
-// TODO: replace ListView with RecycleView
-public class TaskListActivity extends AppCompatActivity {
- private TaskListDataAccess dataAccess;
- private TaskListCursorAdapter adapter;
- private ListView listView;
+public class TaskListActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_task_list);
-
- listView = (ListView) findViewById(android.R.id.list);
- dataAccess = new TaskListDataAccess(this);
- dataAccess.open();
-
- adapter = new TaskListCursorAdapter(
- this, R.layout.item_task_list, dataAccess.getAllTaskListsCursor(), 0);
- listView.setAdapter(adapter);
-
- updateCreateButtonEnabled();
- }
-
- /** Will be called when the create Task List button is clicked */
- public void onCreateTaskList(View view) {
- @SuppressWarnings("unchecked")
- EditText editText = (EditText) findViewById(R.id.new_task_list_name);
-
- Cursor cursor = dataAccess.createTaskList(editText.getText().toString());
- adapter.changeCursor(cursor);
- editText.setText("");
- updateCreateButtonEnabled();
- }
-
- /** Will be called when the delete Task List button is clicked */
- public void onDeleteTaskList(View view) {
- @SuppressWarnings("unchecked")
- final int position = listView.getPositionForView((View) view.getParent());
- Cursor cursor = dataAccess.deleteTaskList((Cursor) adapter.getItem(position));
- adapter.changeCursor(cursor);
- updateCreateButtonEnabled();
- }
-
- @Override
- protected void onResume() {
- dataAccess.open();
- super.onResume();
- }
-
- @Override
- protected void onPause() {
- dataAccess.close();
- super.onPause();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- dataAccess.close();
- }
- private void updateCreateButtonEnabled() {
- //Button createButton = (Button) findViewById(R.id.new_task_list_button);
- //EditText editText = (EditText) findViewById(R.id.new_task_list_name);
- RelativeLayout layout = (RelativeLayout) findViewById(R.id.new_task_list_layout);
- int taskListCount = adapter.getCount();
- SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
- String maxTaskListsString = sharedPref.getString("pref_conf_max_lists", "3");
- int maxTaskLists = Integer.valueOf(maxTaskListsString);
- //createButton.setEnabled(taskListCount < maxTaskLists);
- //editText.setEnabled(taskListCount < maxTaskLists);
- if (taskListCount >= maxTaskLists) layout.setVisibility(View.GONE);
- else layout.setVisibility(View.VISIBLE);
+ setContentView(R.layout.activity_tasklists);
}
}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListCursorAdapter.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListCursorAdapter.java
deleted file mode 100644
index f4d76cc..0000000
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListCursorAdapter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.wismna.geoffroy.donext.adapters;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ResourceCursorAdapter;
-import android.widget.TextView;
-
-import com.wismna.geoffroy.donext.R;
-import com.wismna.geoffroy.donext.database.DatabaseHelper;
-
-/**
- * Created by geoffroy on 15-11-25.
- * DEPRECATED
- */
-public class TaskListCursorAdapter extends ResourceCursorAdapter {
- public TaskListCursorAdapter(Context context, int layout, Cursor cursor, int flags) {
- super(context, layout, cursor, flags);
- }
-
- // The newView method is used to inflate a new view and return it,
- // you don't bind any data to the view at this point.
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- return LayoutInflater.from(context).inflate(R.layout.item_task_list, parent, false);
- }
-
- // The bindView method is used to bind all data to a given view
- // such as setting the text on a TextView.
- @Override
- public void bindView(View view, Context context, Cursor cursor) {
- // Find fields to populate in inflated template
- TextView taskListCount = (TextView) view.findViewById(R.id.task_list_count);
- TextView taskListName = (TextView) view.findViewById(R.id.task_list_name);
- // Extract properties from cursor
- String name = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.TASKLIST_COLUMN_NAME));
- long count = cursor.getLong(cursor.getColumnIndexOrThrow(DatabaseHelper.TASKLIST_COLUMN_TASK_COUNT));
- // Populate fields with extracted properties
- taskListCount.setText(String.valueOf(count));
- taskListName.setText(name);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- return super.getView(position, convertView, parent);
- }
-}
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
new file mode 100644
index 0000000..db653a8
--- /dev/null
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java
@@ -0,0 +1,153 @@
+package com.wismna.geoffroy.donext.adapters;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskListTouchHelper;
+import com.wismna.geoffroy.donext.R;
+import com.wismna.geoffroy.donext.dao.TaskList;
+import com.wismna.geoffroy.donext.database.TaskListDataAccess;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * {@link RecyclerView.Adapter} that can display a {@link TaskList}.
+ */
+
+// TODO: implement inline edit
+public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter
+ implements TaskListTouchHelper.TaskListTouchHelperAdapter {
+
+ private final List mValues;
+ private Context mContext;
+
+ public TaskListRecyclerViewAdapter(List items, Context context) {
+ mValues = items;
+ mContext = context;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.fragment_tasklist, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(final ViewHolder holder, final int position) {
+ holder.mItem = mValues.get(position);
+ holder.mTaskCountView.setText(String.valueOf(mValues.get(position).getTaskCount()));
+ holder.mTaskNameView.setText(mValues.get(position).getName());
+
+ // Handle inline name change
+ holder.mTaskNameView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if (!hasFocus)
+ {
+ EditText editText = (EditText) v;
+ holder.mItem.setName(editText.getText().toString());
+
+ TaskListDataAccess taskListDataAccess = new TaskListDataAccess(mContext);
+ taskListDataAccess.open();
+
+ update(holder.mItem, position);
+ taskListDataAccess.updateName(holder.mItem.getId(), holder.mItem.getName());
+
+ taskListDataAccess.close();
+ }
+ }
+ });
+
+ // Handle click on delete button
+ // TODO: find a way to call TaskListsFragment.toggleVisibleCreateNewTaskListLayout
+ holder.mTaskDeleteButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ TaskListDataAccess taskListDataAccess = new TaskListDataAccess(mContext);
+ taskListDataAccess.open();
+
+ taskListDataAccess.deleteTaskList(holder.mItem.getId());
+ remove(position);
+
+ taskListDataAccess.close();
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mValues.size();
+ }
+
+ public void add(TaskList item, int position) {
+ mValues.add(position, item);
+ notifyItemInserted(position);
+ }
+
+ public void remove(int position) {
+ mValues.remove(position);
+ notifyItemRemoved(position);
+ }
+
+ public void update(TaskList item, int position) {
+ mValues.set(position, item);
+ notifyItemChanged(position);
+ }
+
+ @Override
+ public boolean onItemMove(int fromPosition, int toPosition) {
+ TaskListDataAccess taskListDataAccess = new TaskListDataAccess(mContext);
+ taskListDataAccess.open();
+ long fromTaskId = mValues.get(fromPosition).getId();
+ long toTaskId = mValues.get(toPosition).getId();
+
+ if (fromPosition < toPosition) {
+ for (int i = fromPosition; i < toPosition; i++) {
+
+ Collections.swap(mValues, i, i + 1);
+ }
+ }
+ else {
+ for (int i = fromPosition; i > toPosition; i--) {
+ Collections.swap(mValues, i, i - 1);
+ }
+ }
+
+ taskListDataAccess.updateOrder(fromTaskId, toPosition);
+ taskListDataAccess.updateOrder(toTaskId, fromPosition);
+ // Update the adapter on the fly
+ notifyItemMoved(fromPosition, toPosition);
+
+ taskListDataAccess.close();
+ return true;
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ public final View mView;
+ public final TextView mTaskCountView;
+ public final TextView mTaskNameView;
+ public final Button mTaskDeleteButton;
+ public TaskList mItem;
+
+ public ViewHolder(View view) {
+ super(view);
+ mView = view;
+ mTaskCountView = (TextView) view.findViewById(R.id.task_list_count);
+ mTaskNameView = (TextView) view.findViewById(R.id.task_list_name);
+ mTaskDeleteButton = (Button) view.findViewById(R.id.task_list_delete);
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " '" + mTaskNameView.getText() + "'";
+ }
+ }
+}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskAdapter.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java
similarity index 85%
rename from DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskAdapter.java
rename to DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java
index 7b589fa..94dcff4 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskAdapter.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java
@@ -10,22 +10,22 @@ import android.widget.TextView;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.dao.Task;
-import com.wismna.geoffroy.donext.fragments.TasksFragment.OnListFragmentInteractionListener;
import java.util.List;
+//import com.wismna.geoffroy.donext.fragments.TasksFragment.OnListFragmentInteractionListener;
+
/**
- * {@link RecyclerView.Adapter} that can display a {@link Task} and makes a call to the
- * specified {@link OnListFragmentInteractionListener}.
+ * {@link RecyclerView.Adapter} that can display a {@link Task}.
*/
-public class TaskAdapter extends RecyclerView.Adapter {
+public class TaskRecyclerViewAdapter extends RecyclerView.Adapter {
private final List mValues;
- private final OnListFragmentInteractionListener mListener;
+ //private final OnListFragmentInteractionListener mListener;
- public TaskAdapter(List items, OnListFragmentInteractionListener listener) {
+ public TaskRecyclerViewAdapter(List items/*, OnListFragmentInteractionListener listener*/) {
mValues = items;
- mListener = listener;
+ //mListener = listener;
}
@Override
@@ -59,7 +59,7 @@ public class TaskAdapter extends RecyclerView.Adapter {
break;
}
- holder.mView.setOnClickListener(new View.OnClickListener() {
+ /*holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
@@ -68,7 +68,7 @@ public class TaskAdapter extends RecyclerView.Adapter {
mListener.onListFragmentInteraction(holder.mItem);
}
}
- });
+ });*/
}
@Override
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java
index 677e81c..a35ee6d 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java
@@ -71,7 +71,7 @@ public class Task {
this.deleted = deleted;
}
- public long getTaskList() {
+ public long getTaskListId() {
return taskList;
}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java
index b8933d7..cd0ffa1 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java
@@ -8,6 +8,7 @@ public class TaskList {
private long id;
private String name;
private long taskCount;
+ private int order;
public long getId() {
return id;
@@ -25,10 +26,24 @@ public class TaskList {
this.name = comment;
}
- // Will be used by the ArrayAdapter in the ListView
+ public long getTaskCount() {
+ return taskCount;
+ }
+
+ public void setTaskCount(long taskCount) {
+ this.taskCount = taskCount;
+ }
+
+ public int getOrder() {
+ return order;
+ }
+
+ public void setOrder(int order) {
+ this.order = order;
+ }
+
@Override
public String toString() {
return name;
}
-
}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java
index f37ab66..5ab235f 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java
@@ -9,9 +9,10 @@ import android.database.sqlite.SQLiteOpenHelper;
* Database helper class that contains table and column names as well as handles database creation
*/
public class DatabaseHelper extends SQLiteOpenHelper {
- private static final int DATABASE_VERSION = 1;
+ private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "donext.db";
public static final String COLUMN_ID = "_id";
+ public static final String COLUMN_ORDER = "displayorder";
public static final String TASKLIST_TABLE_NAME = "tasklist";
public static final String TASKLIST_COLUMN_NAME = "name";
@@ -19,7 +20,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TASKLIST_TABLE_CREATE =
"CREATE TABLE " + TASKLIST_TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
- TASKLIST_COLUMN_NAME + " TEXT NOT NULL);";
+ TASKLIST_COLUMN_NAME + " TEXT NOT NULL, " +
+ COLUMN_ORDER + " INTEGER);";
public static final String TASKS_TABLE_NAME = "tasks";
public static final String TASKS_COLUMN_NAME = "name";
@@ -38,6 +40,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
TASKS_COLUMN_CYCLE + " INTEGER DEFAULT 0, " +
TASKS_COLUMN_DONE + " INTEGER DEFAULT 0, " +
TASKS_COLUMN_DELETED + " INTEGER DEFAULT 0, " +
+ COLUMN_ORDER + " INTEGER, " +
TASKS_COLUMN_LIST + " INTEGER NOT NULL, " +
"FOREIGN KEY(" + TASKS_COLUMN_LIST + ") REFERENCES " +
TASKLIST_TABLE_NAME + "(" + COLUMN_ID + ")" +
@@ -55,6 +58,10 @@ public class DatabaseHelper extends SQLiteOpenHelper {
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-
+ if (oldVersion == 1)
+ {
+ // Add new Order column
+ db.execSQL("ALTER TABLE " + TASKLIST_TABLE_NAME + " ADD COLUMN " + COLUMN_ORDER + " INTEGER");
+ }
}
}
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 5ffe93a..87d3439 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
@@ -71,15 +71,6 @@ public class TaskDataAccess {
DatabaseHelper.COLUMN_ID + " = " + taskId, null);
}
- /*public Cursor deleteTask(Cursor taskCursor) {
- Task task = cursorToTask(taskCursor);
- long id = task.getId();
- //System.out.println("Task deleted with id: " + id);
- database.delete(DatabaseHelper.TASKS_TABLE_NAME, DatabaseHelper.COLUMN_ID
- + " = " + id, null);
- return getAllTasksCursor();
- }*/
-
public Task getTask(long id)
{
Cursor cursor = getTaskCursor(id);
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java
index 57b9d2c..f4709cc 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java
@@ -19,7 +19,8 @@ public class TaskListDataAccess {
// Database fields
private SQLiteDatabase database;
private DatabaseHelper dbHelper;
- //private String[] taskListColumns = {DatabaseHelper.COLUMN_ID, DatabaseHelper.TASKLIST_COLUMN_NAME};
+ private String[] taskListColumns =
+ {DatabaseHelper.COLUMN_ID, DatabaseHelper.TASKLIST_COLUMN_NAME, DatabaseHelper.COLUMN_ORDER};
public TaskListDataAccess(Context context) {
dbHelper = new DatabaseHelper(context);
@@ -33,9 +34,10 @@ public class TaskListDataAccess {
dbHelper.close();
}
- /*public TaskList createTaskList(String name) {
+ public TaskList createTaskList(String name, int order) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.TASKLIST_COLUMN_NAME, name);
+ values.put(DatabaseHelper.COLUMN_ORDER, order);
long insertId = database.insert(DatabaseHelper.TASKLIST_TABLE_NAME, null,
values);
Cursor cursor = database.query(DatabaseHelper.TASKLIST_TABLE_NAME,
@@ -45,31 +47,27 @@ public class TaskListDataAccess {
TaskList newTaskList = cursorToTaskList(cursor);
cursor.close();
return newTaskList;
- }*/
-
- public Cursor createTaskList(String name) {
- ContentValues values = new ContentValues();
- values.put(DatabaseHelper.TASKLIST_COLUMN_NAME, name);
- database.insert(DatabaseHelper.TASKLIST_TABLE_NAME, null, values);
- return getAllTaskListsCursor();
}
- /*public void deleteTaskList(TaskList comment) {
- long id = comment.getId();
- System.out.println("Comment deleted with id: " + id);
- database.delete(DatabaseHelper.TASKLIST_TABLE_NAME, DatabaseHelper.COLUMN_ID
- + " = " + id, null);
- }*/
-
- public Cursor deleteTaskList(Cursor taskListCursor) {
- TaskList taskList = cursorToTaskList(taskListCursor);
- long id = taskList.getId();
- System.out.println("Task list deleted with id: " + id);
+ public void deleteTaskList(long id) {
+ // Delete all related tasks
database.delete(DatabaseHelper.TASKS_TABLE_NAME, DatabaseHelper.TASKS_COLUMN_LIST
+ " = " + id, null);
+ // Delete list
database.delete(DatabaseHelper.TASKLIST_TABLE_NAME, DatabaseHelper.COLUMN_ID
+ " = " + id, null);
- return getAllTaskListsCursor();
+ }
+
+ public void updateOrder(long id, int order) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(DatabaseHelper.COLUMN_ORDER, order);
+ database.update(DatabaseHelper.TASKLIST_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
+ }
+
+ public void updateName(long id, String name) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(DatabaseHelper.TASKLIST_COLUMN_NAME, name);
+ database.update(DatabaseHelper.TASKLIST_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null);
}
public List getAllTaskLists() {
@@ -96,7 +94,8 @@ public class TaskListDataAccess {
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
" WHERE " + DatabaseHelper.TASKS_TABLE_NAME + "." + DatabaseHelper.TASKS_COLUMN_LIST + " = " +
DatabaseHelper.TASKLIST_TABLE_NAME + "." + DatabaseHelper.COLUMN_ID + ") AS " + DatabaseHelper.TASKLIST_COLUMN_TASK_COUNT +
- " FROM " + DatabaseHelper.TASKLIST_TABLE_NAME,
+ " FROM " + DatabaseHelper.TASKLIST_TABLE_NAME +
+ " ORDER BY " + DatabaseHelper.COLUMN_ORDER + " ASC ",
null);
}
@@ -104,6 +103,9 @@ public class TaskListDataAccess {
TaskList taskList = new TaskList();
taskList.setId(cursor.getLong(0));
taskList.setName(cursor.getString(1));
+ taskList.setOrder(cursor.getInt(2));
+ if (cursor.getColumnCount() == 4)
+ taskList.setTaskCount(cursor.getLong(3));
return taskList;
}
}
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 86291dc..79bcc4e 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
@@ -11,7 +11,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import com.wismna.geoffroy.donext.R;
-import com.wismna.geoffroy.donext.adapters.TaskAdapter;
+import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
public class ConfirmDialogFragment extends DialogFragment {
public interface ConfirmDialogListener {
@@ -20,25 +20,26 @@ public class ConfirmDialogFragment extends DialogFragment {
}
private ConfirmDialogListener confirmDialogListener;
- private TaskAdapter taskAdapter;
+ //private TaskRecyclerViewAdapter taskRecyclerViewAdapter;
private RecyclerView recyclerView;
private String message;
public static ConfirmDialogFragment newInstance(
- TaskAdapter taskAdapter, String message, RecyclerView recyclerView) {
+ /*TaskRecyclerViewAdapter taskRecyclerViewAdapter, */String message, RecyclerView recyclerView) {
- Bundle args = new Bundle();
+ //Bundle args = new Bundle();
ConfirmDialogFragment fragment = new ConfirmDialogFragment();
- fragment.taskAdapter = taskAdapter;
+ //fragment.taskRecyclerViewAdapter = taskRecyclerViewAdapter;
fragment.message = message;
fragment.recyclerView = recyclerView;
- fragment.setArguments(args);
+ //fragment.setArguments(args);
return fragment;
}
- public TaskAdapter getTaskAdapter() {
- return taskAdapter;
+ public TaskRecyclerViewAdapter getTaskRecyclerViewAdapter() {
+ //return taskRecyclerViewAdapter;
+ return (TaskRecyclerViewAdapter) recyclerView.getAdapter();
}
public RecyclerView getRecyclerView() {
@@ -53,7 +54,7 @@ public class ConfirmDialogFragment extends DialogFragment {
Bundle args = getArguments();
int itemPosition = args.getInt("ItemPosition");
- getTaskAdapter().notifyItemChanged(itemPosition);
+ getTaskRecyclerViewAdapter().notifyItemChanged(itemPosition);
}
@Override
@@ -93,7 +94,6 @@ public class ConfirmDialogFragment extends DialogFragment {
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- //return false;
return keyCode != KeyEvent.KEYCODE_BACK;
}
});
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskDialogFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskDialogFragment.java
index d363bf1..e222a7c 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskDialogFragment.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskDialogFragment.java
@@ -7,7 +7,6 @@ import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
@@ -16,9 +15,8 @@ import android.widget.RadioGroup;
import android.widget.Spinner;
import com.wismna.geoffroy.donext.R;
-import com.wismna.geoffroy.donext.adapters.TaskAdapter;
+import com.wismna.geoffroy.donext.dao.Task;
import com.wismna.geoffroy.donext.dao.TaskList;
-import com.wismna.geoffroy.donext.database.TaskListDataAccess;
import java.util.List;
@@ -28,20 +26,8 @@ import java.util.List;
*/
public class TaskDialogFragment extends DialogFragment {
- public TaskAdapter getTaskAdapter() {
- return taskAdapter;
- }
-
- public void setTaskAdapter(TaskAdapter taskAdapter) {
- this.taskAdapter = taskAdapter;
- }
-
- public RecyclerView getRecyclerView() {
- return recyclerView;
- }
-
- public void setRecyclerView(RecyclerView recyclerView) {
- this.recyclerView = recyclerView;
+ public Task getTask() {
+ return task;
}
/** The activity that creates an instance of this dialog fragment must
@@ -50,22 +36,20 @@ public class TaskDialogFragment extends DialogFragment {
public interface NewTaskListener {
void onNewTaskDialogPositiveClick(DialogFragment dialog);
void onNewTaskDialogNeutralClick(DialogFragment dialog);
- //void onDialogNegativeClick(DialogFragment dialog);
}
- private TaskAdapter taskAdapter;
- private RecyclerView recyclerView;
// Use this instance of the interface to deliver action events
private NewTaskListener mListener;
+ private Task task;
+ private List taskLists;
- public static TaskDialogFragment newInstance(TaskAdapter taskAdapter, RecyclerView recyclerView) {
+ public static TaskDialogFragment newInstance(Task task, List taskLists) {
Bundle args = new Bundle();
-
TaskDialogFragment fragment = new TaskDialogFragment();
- fragment.setTaskAdapter(taskAdapter);
- fragment.setRecyclerView(recyclerView);
fragment.setArguments(args);
+ fragment.task = task;
+ fragment.taskLists = taskLists;
return fragment;
}
@@ -90,7 +74,7 @@ public class TaskDialogFragment extends DialogFragment {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.new_task, null);
+ View view = inflater.inflate(R.layout.fragment_task_details, null);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
@@ -106,26 +90,19 @@ public class TaskDialogFragment extends DialogFragment {
.setNegativeButton(R.string.new_task_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the negative button event back to the host activity
- //mListener.onDialogNegativeClick(NoticeDialogFragment.this);
// Canceled creation, nothing to do
TaskDialogFragment.this.getDialog().cancel();
}
});
- // Access database to retrieve task lists
- TaskListDataAccess dataAccess = new TaskListDataAccess(getActivity());
- dataAccess.open();
-
// Populate spinner with task lists
Spinner spinner = (Spinner) view.findViewById(R.id.new_task_list);
// Create an ArrayAdapter using the string array and a default spinner layout
- List taskLists = dataAccess.getAllTaskLists();
ArrayAdapter adapter = new ArrayAdapter<>(
getActivity(), android.R.layout.simple_spinner_item, taskLists);
// 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();
@@ -133,33 +110,32 @@ public class TaskDialogFragment extends DialogFragment {
spinner.setSelection(id);
// Set other properties if they exist
- 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;
- }
- // Add a Delete button in Edit mode
- if (args.getLong("id") != 0)
+ if (task != null) {
+ EditText titleText = (EditText) view.findViewById(R.id.new_task_name);
+ titleText.setText(task.getName());
+ EditText descText = (EditText) view.findViewById(R.id.new_task_description);
+ descText.setText(task.getDescription());
+ RadioGroup priorityGroup = (RadioGroup) view.findViewById(R.id.new_task_priority);
+ switch (task.getPriority()) {
+ 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;
+ }
+
builder.setNeutralButton(R.string.new_task_delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mListener.onNewTaskDialogNeutralClick(TaskDialogFragment.this);
}
});
- setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light);
+ setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light);
+ }
return builder.create();
}
}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsFragment.java
new file mode 100644
index 0000000..ba9804f
--- /dev/null
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsFragment.java
@@ -0,0 +1,99 @@
+package com.wismna.geoffroy.donext.fragments;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+
+import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskListTouchHelper;
+import com.wismna.geoffroy.donext.R;
+import com.wismna.geoffroy.donext.adapters.TaskListRecyclerViewAdapter;
+import com.wismna.geoffroy.donext.dao.TaskList;
+import com.wismna.geoffroy.donext.database.TaskListDataAccess;
+
+/**
+ * A fragment representing a list of Items.
+ */
+public class TaskListsFragment extends Fragment {
+ private TaskListRecyclerViewAdapter taskListRecyclerViewAdapter;
+ private TaskListDataAccess taskListDataAccess;
+
+ /**
+ * Mandatory empty constructor for the fragment manager to instantiate the
+ * fragment (e.g. upon screen orientation changes).
+ */
+ public TaskListsFragment() {
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Get all task lists
+ taskListDataAccess = new TaskListDataAccess(getContext());
+ taskListDataAccess.open();
+ taskListRecyclerViewAdapter =
+ new TaskListRecyclerViewAdapter(taskListDataAccess.getAllTaskLists(), getContext());
+ taskListDataAccess.close();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = inflater.inflate(R.layout.fragment_tasklists, container, false);
+
+ Button createTaskListButton = (Button) view.findViewById(R.id.new_task_list_button);
+ createTaskListButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ EditText editText = (EditText) view.findViewById(R.id.new_task_list_name);
+ String text = editText.getText().toString();
+ if (text.matches("")) return;
+ int position = taskListRecyclerViewAdapter.getItemCount();
+
+ taskListDataAccess.open();
+ TaskList taskList = taskListDataAccess.createTaskList(text, position);
+ taskListDataAccess.close();
+ taskListRecyclerViewAdapter.add(taskList, position);
+
+ editText.setText("");
+ toggleVisibleCreateNewTaskListLayout(view);
+ }
+ });
+
+ // Set the adapter
+ 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) {
+ RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.new_task_list_layout);
+ int taskListCount = taskListRecyclerViewAdapter.getItemCount();
+ SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
+ String maxTaskListsString = sharedPref.getString("pref_conf_max_lists", "3");
+ int maxTaskLists = Integer.valueOf(maxTaskListsString);
+ if (taskListCount >= maxTaskLists) layout.setVisibility(View.GONE);
+ else layout.setVisibility(View.VISIBLE);
+ }
+
+}
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 f887d2d..48d6407 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,7 +1,6 @@
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;
@@ -15,28 +14,18 @@ import android.widget.TextView;
import com.wismna.geoffroy.donext.ItemTouchHelpers.TaskTouchHelper;
import com.wismna.geoffroy.donext.R;
-import com.wismna.geoffroy.donext.adapters.TaskAdapter;
-import com.wismna.geoffroy.donext.dao.Task;
+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.listeners.RecyclerItemClickListener;
import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager;
/**
* A fragment representing a list of Items.
- *
- * Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener}
- * interface.
*/
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;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
@@ -65,12 +54,11 @@ public class TasksFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_task_list, container, false);
+ View view = inflater.inflate(R.layout.fragment_tasks, container, false);
final Context context = view.getContext();
// Set the Recycler view
final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.task_list_view);
- //recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setLayoutManager(new NoScrollingLayoutManager(context));
TaskDataAccess taskDataAccess = new TaskDataAccess(view.getContext());
@@ -85,89 +73,39 @@ public class TasksFragment extends Fragment {
totalTasksView.setText(String.valueOf(taskDataAccess.getTaskCount(taskListId) + " tasks"));
// Set RecyclerView Adapter
- final TaskAdapter taskAdapter = new TaskAdapter(taskDataAccess.getAllTasks(taskListId), mListener);
- recyclerView.setAdapter(taskAdapter);
+ final TaskRecyclerViewAdapter taskRecyclerViewAdapter = new TaskRecyclerViewAdapter(taskDataAccess.getAllTasks(taskListId));
+ recyclerView.setAdapter(taskRecyclerViewAdapter);
taskDataAccess.close();
// Set ItemTouch helper in RecyclerView to handle swipe move on elements
ItemTouchHelper.Callback callback = new TaskTouchHelper(
- taskAdapter, taskDataAccess, getFragmentManager(), recyclerView);
+ taskRecyclerViewAdapter, taskDataAccess, getFragmentManager(), recyclerView);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
// Implements touch listener to add click detection
- //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) {
- //tasksFragmentListener.onItemClick(view, position);
+ new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
+ @Override
+ public void onItemClick(View view, int position) {
+ Bundle args = new Bundle();
+ args.putInt("position", position);
- TextView idTextView = (TextView) view.findViewById(R.id.task_id);
- //mToast.setText("Item " + idTextView.getText() + " clicked!");
- //mToast.show();
+ // Set current tab value to new task dialog
+ ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.container);
+ args.putInt("list", viewPager.getCurrentItem());
- FragmentManager manager = getFragmentManager();
- TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(taskAdapter, recyclerView);
+ FragmentManager manager = getFragmentManager();
+ TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(/*taskRecyclerViewAdapter, recyclerView,*/
+ taskRecyclerViewAdapter.getItem(position),
+ ((MainActivity.SectionsPagerAdapter)viewPager.getAdapter()).getAllItems());
- Bundle args = new Bundle();
- args.putLong("id", Long.valueOf(idTextView.getText().toString()));
- args.putInt("position", position);
-
- // 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;
- else if (titleTextView.getTypeface().isBold()) priority = 2;
- args.putInt("priority", priority);
-
- taskDialogFragment.setArguments(args);
- taskDialogFragment.show(manager, "Edit task");
- }
- })
+ taskDialogFragment.setArguments(args);
+ taskDialogFragment.show(manager, "Edit task");
+ }
+ })
);
return view;
}
-
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- if (context instanceof OnListFragmentInteractionListener) {
- mListener = (OnListFragmentInteractionListener) context;
- } else {
- throw new RuntimeException(context.toString()
- + " must implement OnListFragmentInteractionListener");
- }
- }
-
- @Override
- public void onDetach() {
- super.onDetach();
- mListener = null;
- }
-
- /**
- * This interface must be implemented by activities that contain this
- * fragment to allow an interaction in this fragment to be communicated
- * to the activity and potentially other fragments contained in that
- * activity.
- *
- * See the Android Training lesson Communicating with Other Fragments for more information.
- */
- public interface OnListFragmentInteractionListener {
- void onListFragmentInteraction(Task item);
- }
}
diff --git a/DoNExt/app/src/main/res/layout/activity_task.xml b/DoNExt/app/src/main/res/layout/activity_task.xml
deleted file mode 100644
index 87f2538..0000000
--- a/DoNExt/app/src/main/res/layout/activity_task.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DoNExt/app/src/main/res/layout/activity_tasklists.xml b/DoNExt/app/src/main/res/layout/activity_tasklists.xml
new file mode 100644
index 0000000..3275229
--- /dev/null
+++ b/DoNExt/app/src/main/res/layout/activity_tasklists.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/DoNExt/app/src/main/res/layout/new_task.xml b/DoNExt/app/src/main/res/layout/fragment_task_details.xml
similarity index 100%
rename from DoNExt/app/src/main/res/layout/new_task.xml
rename to DoNExt/app/src/main/res/layout/fragment_task_details.xml
diff --git a/DoNExt/app/src/main/res/layout/item_task_list.xml b/DoNExt/app/src/main/res/layout/fragment_tasklist.xml
similarity index 63%
rename from DoNExt/app/src/main/res/layout/item_task_list.xml
rename to DoNExt/app/src/main/res/layout/fragment_tasklist.xml
index 24cf4dd..ba99165 100644
--- a/DoNExt/app/src/main/res/layout/item_task_list.xml
+++ b/DoNExt/app/src/main/res/layout/fragment_tasklist.xml
@@ -1,29 +1,34 @@
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:foreground="?selectableItemBackground" >
-
-
\ No newline at end of file
+
diff --git a/DoNExt/app/src/main/res/layout/activity_task_list.xml b/DoNExt/app/src/main/res/layout/fragment_tasklists.xml
similarity index 65%
rename from DoNExt/app/src/main/res/layout/activity_task_list.xml
rename to DoNExt/app/src/main/res/layout/fragment_tasklists.xml
index 1ea53f7..e3d289a 100644
--- a/DoNExt/app/src/main/res/layout/activity_task_list.xml
+++ b/DoNExt/app/src/main/res/layout/fragment_tasklists.xml
@@ -23,12 +23,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
- android:onClick="onCreateTaskList"
+ android:layout_alignParentEnd="true"
android:text="@string/task_list_new_list_create"/>
-
-
+ android:layout_height="match_parent"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ app:layoutManager="LinearLayoutManager"
+ tools:context=".fragments.TaskListsFragment"
+ tools:listitem="@layout/fragment_tasklist" />
+
+
diff --git a/DoNExt/app/src/main/res/layout/fragment_task_list.xml b/DoNExt/app/src/main/res/layout/fragment_tasks.xml
similarity index 100%
rename from DoNExt/app/src/main/res/layout/fragment_task_list.xml
rename to DoNExt/app/src/main/res/layout/fragment_tasks.xml
diff --git a/DoNExt/app/src/main/res/layout/item_task.xml b/DoNExt/app/src/main/res/layout/item_task.xml
deleted file mode 100644
index 6fefbeb..0000000
--- a/DoNExt/app/src/main/res/layout/item_task.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/DoNExt/app/src/main/res/values/strings.xml b/DoNExt/app/src/main/res/values/strings.xml
index 7006736..0b18837 100644
--- a/DoNExt/app/src/main/res/values/strings.xml
+++ b/DoNExt/app/src/main/res/values/strings.xml
@@ -6,9 +6,7 @@
Edit lists
About
New task
- Hello World from section: %1$d
Settings
- List edition
New list name