diff --git a/DoNExt/app/src/main/AndroidManifest.xml b/DoNExt/app/src/main/AndroidManifest.xml
index 025c8f8..c602e48 100644
--- a/DoNExt/app/src/main/AndroidManifest.xml
+++ b/DoNExt/app/src/main/AndroidManifest.xml
@@ -34,6 +34,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".activities.MainActivity" />
+
+
+
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 95e05b1..2db199b 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
@@ -27,17 +27,24 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
public TaskTouchHelper(TaskAdapter taskAdapter, TaskDataAccess taskDataAccess,
FragmentManager fragmentManager, RecyclerView recyclerView){
- // No drag moves, only swipes
- super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
+ // No drag moves, only left swipes (except for 1st element, see getSwipeDirs method)
+ super(0, ItemTouchHelper.LEFT);
this.taskAdapter = taskAdapter;
this.taskDataAccess = taskDataAccess;
this.fragmentManager = fragmentManager;
this.recyclerView = recyclerView;
}
+ @Override
+ public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ // Allow both directions swiping on first item, only left on the others
+ if (viewHolder.getAdapterPosition() == 0)
+ return ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
+ else return super.getSwipeDirs(recyclerView, viewHolder);
+ }
+
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
- //TODO: Not implemented here
return false;
}
@@ -45,19 +52,19 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(viewHolder.itemView.getContext());
int itemPosition = viewHolder.getAdapterPosition();
- String title = "Confirm";
+ String title = "";
boolean showDialog = false;
switch (direction)
{
// Mark item as Done
case ItemTouchHelper.LEFT:
- title = "Done";
+ title = "Mark task as done?";
showDialog = sharedPref.getBoolean("pref_conf_done", true);
break;
// Increase task cycle count
case ItemTouchHelper.RIGHT:
- title = "Next";
+ title = "Go to next task?";
showDialog = sharedPref.getBoolean("pref_conf_next", true);
break;
}
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 5e601e0..fe475d9 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
@@ -140,7 +140,7 @@ public class MainActivity extends AppCompatActivity implements
super.onDestroy();
taskDataAccess.close();
}
- // TODO: change add methods to add or update
+
@Override
public void onNewTaskDialogPositiveClick(DialogFragment dialog) {
// Get the dialog fragment
@@ -163,8 +163,6 @@ public class MainActivity extends AppCompatActivity implements
taskList.getId());
taskDataAccess.close();
// Update the corresponding tab adapter
- //TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(listSpinner.getSelectedItemPosition());
- //TaskAdapter taskAdapter = ((TaskAdapter)((RecyclerView)taskFragment.getView().findViewById(R.id.task_list_view)).getAdapter());
TaskAdapter taskAdapter = ((TaskDialogFragment)dialog).getTaskAdapter();
// Add the task
if (id == 0)
@@ -177,40 +175,27 @@ public class MainActivity extends AppCompatActivity implements
@Override
public void onNewTaskDialogNeutralClick(DialogFragment dialog) {
// TODO: add confirm dialog
+ 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();
- final long id = args.getLong("id");
// Delete task from Adapter
- final int position = args.getInt("position");
+ final int itemPosition = args.getInt("position");
final TaskAdapter taskAdapter = taskDialogFragment.getTaskAdapter();
- final Task task = taskAdapter.getItem(position);
- taskAdapter.remove(position);
+ final RecyclerView view = taskDialogFragment.getRecyclerView();
- // Setup the snack bar
- final View view = taskDialogFragment.getRecyclerView();
- Snackbar.make(view, "Task deleted", Snackbar.LENGTH_LONG)
- .setAction("Undo", new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // Undo adapter changes
- taskAdapter.add(task, position);
- ((RecyclerView)view).scrollToPosition(position);
- }
- }).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;
-
- // Commit the changes to DB
- taskDataAccess.open();
- taskDataAccess.deleteTask(id);
- taskDataAccess.close();
- }
- }).show();
+ if (showDialog) {
+ ConfirmDialogFragment confirmDialogFragment =
+ ConfirmDialogFragment.newInstance(taskAdapter, 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);
}
/** Called when user clicks on the New Task floating button */
@@ -251,7 +236,7 @@ public class MainActivity extends AppCompatActivity implements
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
- editor.putBoolean("pref_conf_next", false);
+ //editor.putBoolean("pref_conf_next", false);
switch (direction)
{
@@ -263,6 +248,10 @@ public class MainActivity extends AppCompatActivity implements
case ItemTouchHelper.RIGHT:
editor.putBoolean("pref_conf_next", false);
break;
+ // TODO: add delete action
+ case -1:
+ editor.putBoolean("pref_conf_del", false);
+ break;
}
editor.apply();
TaskAdapter taskAdapter = ((ConfirmDialogFragment)dialog).getTaskAdapter();
@@ -288,32 +277,37 @@ public class MainActivity extends AppCompatActivity implements
final View view) {
final long itemId = taskAdapter.getItemId(itemPosition);
final Task task = taskAdapter.getItem(itemPosition);
- String title = "";
+ String action = "";
taskAdapter.remove(itemPosition);
switch (direction)
{
// Mark item as Done
case ItemTouchHelper.LEFT:
- title = "Done";
+ action = "done";
break;
// Increase task cycle count
case ItemTouchHelper.RIGHT:
- title = "Nexted";
+ action = "nexted";
task.setCycle(task.getCycle() + 1);
taskAdapter.add(task, taskAdapter.getItemCount());
break;
+ // TODO: add delete action
+ case -1:
+ action = "deleted";
+ taskAdapter.remove(itemPosition);
+ break;
}
// Setup the snack bar
- Snackbar.make(view, "Task marked as " + title, Snackbar.LENGTH_LONG)
+ 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 yet
+ // Nothing special to do for done
case ItemTouchHelper.LEFT:
break;
// Remove the last item
@@ -321,6 +315,10 @@ public class MainActivity extends AppCompatActivity implements
taskAdapter.remove(taskAdapter.getItemCount() - 1);
task.setCycle(task.getCycle() - 1);
break;
+ // TODO: add delete action
+ // Nothing special to do for delete
+ case -1:
+ break;
}
// Reset the first item
taskAdapter.add(task, itemPosition);
@@ -346,6 +344,10 @@ public class MainActivity extends AppCompatActivity implements
case ItemTouchHelper.RIGHT:
taskDataAccess.increaseCycle(task.getCycle(), itemId);
break;
+ // TODO: add delete action
+ case -1:
+ // Commit the changes to DB
+ taskDataAccess.deleteTask(itemId);
}
taskDataAccess.close();
}
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
new file mode 100644
index 0000000..be6cd18
--- /dev/null
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/activities/TaskActivity.java
@@ -0,0 +1,15 @@
+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/database/TaskDataAccess.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java
index f156b9c..5ffe93a 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
@@ -48,6 +48,7 @@ public class TaskDataAccess {
values.put(DatabaseHelper.TASKS_COLUMN_NAME, name);
values.put(DatabaseHelper.TASKS_COLUMN_DESC, description);
values.put(DatabaseHelper.TASKS_COLUMN_PRIORITY, priorities.indexOf(priority));
+ //values.put(DatabaseHelper.TASKS_COLUMN_PRIORITY, priority);
values.put(DatabaseHelper.TASKS_COLUMN_LIST, taskList);
long insertId;
if (id == 0)
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 055fa4f..86291dc 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
@@ -74,18 +74,18 @@ public class ConfirmDialogFragment extends DialogFragment {
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(getResources().getString(R.string.settings_confirm_message) + " " + message + "?")
- .setPositiveButton(R.string.task_swipe_confirmation_yes, new DialogInterface.OnClickListener() {
+ builder.setMessage(message)
+ .setPositiveButton(R.string.task_confirmation_yes_button, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
confirmDialogListener.onConfirmDialogPositiveClick(ConfirmDialogFragment.this);
}
})
- .setNegativeButton(R.string.task_swipe_confirmation_no, new DialogInterface.OnClickListener() {
+ .setNegativeButton(R.string.task_confirmation_no_button, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
ConfirmDialogFragment.this.getDialog().cancel();
}
- }).setNeutralButton(R.string.task_swipe_confirmation_never, new DialogInterface.OnClickListener() {
+ }).setNeutralButton(R.string.task_confirmation_never_button, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
confirmDialogListener.onConfirmDialogNeutralClick(ConfirmDialogFragment.this);
}
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 4a9dc4c..d363bf1 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
@@ -159,7 +159,7 @@ public class TaskDialogFragment extends DialogFragment {
mListener.onNewTaskDialogNeutralClick(TaskDialogFragment.this);
}
});
-
+ 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/TasksFragment.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java
index 870ea4a..f784b6c 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
@@ -6,7 +6,6 @@ import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
-import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
@@ -20,6 +19,7 @@ import com.wismna.geoffroy.donext.adapters.TaskAdapter;
import com.wismna.geoffroy.donext.dao.Task;
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.
@@ -70,7 +70,8 @@ public class TasksFragment extends Fragment {
// Set the Recycler view
final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.task_list_view);
- recyclerView.setLayoutManager(new LinearLayoutManager(context));
+ //recyclerView.setLayoutManager(new LinearLayoutManager(context));
+ recyclerView.setLayoutManager(new NoScrollingLayoutManager(context));
TaskDataAccess taskDataAccess = new TaskDataAccess(view.getContext());
taskDataAccess.open();
@@ -90,14 +91,12 @@ public class TasksFragment extends Fragment {
taskDataAccess.close();
// Set ItemTouch helper in RecyclerView to handle swipe move on elements
- // TODO: conflicts with ItemTouchListener, see why
ItemTouchHelper.Callback callback = new TaskTouchHelper(
taskAdapter, taskDataAccess, getFragmentManager(), recyclerView);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
// Implements touch listener to add click detection
- // TODO: conflicts with ItemTouchHelper (maybe add swipe detection there with onFling?)
//final Toast mToast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
@@ -106,8 +105,8 @@ public class TasksFragment extends Fragment {
//tasksFragmentListener.onItemClick(view, position);
TextView idTextView = (TextView) view.findViewById(R.id.task_id);
- /*mToast.setText("Item " + idTextView.getText() + " clicked!");
- mToast.show();*/
+ //mToast.setText("Item " + idTextView.getText() + " clicked!");
+ //mToast.show();
FragmentManager manager = getFragmentManager();
TaskDialogFragment taskDialogFragment = TaskDialogFragment.newInstance(taskAdapter, recyclerView);
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java
index 4e1a758..00b8007 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java
@@ -9,7 +9,6 @@ import android.view.View;
/**
* Created by geoffroy on 15-12-02.
* Listener class on RecyclerView to intercept touch events
- * This allows disabling swipe on any other element than the first one
*/
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
@@ -33,15 +32,12 @@ public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListen
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
- int childId = view.getChildAdapterPosition(childView);
+ //int childId = view.getChildAdapterPosition(childView);
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
+ return true;
}
-
- // Allows right swipe moves only on first element of the list, left everywhere
- return e.getAction() != MotionEvent.ACTION_MOVE ||
- ((e.getY() - e.getHistoricalY(0) > 0 || (e.getY() - e.getHistoricalY(0)) < 0) ||
- childId != 0 && e.getX() - e.getHistoricalX(0) > 0);
+ return false;
}
@Override
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java
new file mode 100644
index 0000000..58af071
--- /dev/null
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java
@@ -0,0 +1,20 @@
+package com.wismna.geoffroy.donext.widgets;
+
+import android.content.Context;
+import android.support.v7.widget.LinearLayoutManager;
+
+/**
+ * Created by geoffroy on 15-12-21.
+ * Custom Layout Manager that disables vertical scrolling for the RecyclerView
+ */
+public class NoScrollingLayoutManager extends LinearLayoutManager {
+
+ public NoScrollingLayoutManager(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean canScrollVertically() {
+ return false;
+ }
+}
diff --git a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java
index 71e3a4e..a5884a9 100644
--- a/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java
+++ b/DoNExt/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java
@@ -7,6 +7,7 @@ import android.view.MotionEvent;
/**
* Created by geoffroy on 15-12-04.
+ * Custom ViewPager to forbid vertical swiping between tabs
*/
public class NonSwipeableViewPager extends ViewPager {
diff --git a/DoNExt/app/src/main/res/layout/activity_task.xml b/DoNExt/app/src/main/res/layout/activity_task.xml
new file mode 100644
index 0000000..87f2538
--- /dev/null
+++ b/DoNExt/app/src/main/res/layout/activity_task.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DoNExt/app/src/main/res/layout/new_task.xml b/DoNExt/app/src/main/res/layout/new_task.xml
index bac295b..17fadc7 100644
--- a/DoNExt/app/src/main/res/layout/new_task.xml
+++ b/DoNExt/app/src/main/res/layout/new_task.xml
@@ -1,9 +1,9 @@
Cancel
Delete
-
+
Details
-
- Confirm
- Mark task as Done?
- Mark task as Nexted?
- Yes
- No
- Never ask again
+
+
+ Mark task as Done?
+ Go to next task?
+ Delete this task?
+ Done
+ Next
+ Delete
+ Yes
+ No
+ Never ask again
Mark task as