mirror of
https://github.com/wismna/DoNext.git
synced 2025-10-03 07:30:13 -04:00
Correct order handling
Today view has separate order Some layout changes Some code refactoring
This commit is contained in:
5
.idea/assetWizardSettings.xml
generated
5
.idea/assetWizardSettings.xml
generated
@@ -18,7 +18,7 @@
|
||||
<PersistentState>
|
||||
<option name="values">
|
||||
<map>
|
||||
<entry key="url" value="jar:file:/C:/Program%20Files/Android/Android%20Studio/plugins/android/lib/android.jar!/images/material_design_icons/notification/ic_priority_high_black_24dp.xml" />
|
||||
<entry key="url" value="jar:file:/C:/Program%20Files/Android/Android%20Studio/plugins/android/lib/android.jar!/images/material_design_icons/navigation/ic_refresh_black_24dp.xml" />
|
||||
</map>
|
||||
</option>
|
||||
</PersistentState>
|
||||
@@ -28,8 +28,7 @@
|
||||
</option>
|
||||
<option name="values">
|
||||
<map>
|
||||
<entry key="color" value="b5151a" />
|
||||
<entry key="outputName" value="ic_priority_high_red_24dp" />
|
||||
<entry key="outputName" value="ic_refresh_black_24dp" />
|
||||
<entry key="sourceFile" value="C:\Users\GBE" />
|
||||
</map>
|
||||
</option>
|
||||
|
@@ -30,7 +30,7 @@ public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerA
|
||||
// Register the fragment when the item is instantiated
|
||||
@NonNull
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position) {
|
||||
public Object instantiateItem(@NonNull ViewGroup container, int position) {
|
||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||
registeredFragments.put(position, fragment);
|
||||
return fragment;
|
||||
@@ -38,7 +38,7 @@ public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerA
|
||||
|
||||
// Unregister when the item is inactive
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
|
||||
registeredFragments.remove(position);
|
||||
super.destroyItem(container, position, object);
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package com.wismna.geoffroy.donext.adapters;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
@@ -40,15 +41,16 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRe
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.fragment_tasklist, parent, false);
|
||||
return new TaskViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final TaskViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull final TaskViewHolder holder, int position) {
|
||||
holder.mItem = mValues.get(position);
|
||||
holder.mTaskCountView.setText(String.valueOf(mValues.get(position).getTaskCount()));
|
||||
holder.mTaskNameView.setText(mValues.get(position).getName());
|
||||
@@ -151,6 +153,7 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter<TaskListRe
|
||||
mTaskDeleteButton = view.findViewById(R.id.task_list_delete);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " '" + mTaskNameView.getText() + "'";
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package com.wismna.geoffroy.donext.dao;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
|
||||
/**
|
||||
@@ -14,6 +16,8 @@ public class Task {
|
||||
private int cycle;
|
||||
private int done;
|
||||
private int deleted;
|
||||
private int order;
|
||||
private int todayOrder;
|
||||
private long taskList;
|
||||
private String taskListName;
|
||||
private LocalDate dueDate;
|
||||
@@ -113,11 +117,26 @@ public class Task {
|
||||
}
|
||||
}
|
||||
|
||||
public int getOrder() {
|
||||
return order;
|
||||
}
|
||||
public void setOrder(int order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public int getTodayOrder() {
|
||||
return todayOrder;
|
||||
}
|
||||
public void setTodayOrder(int todayOrder) {
|
||||
this.todayOrder = todayOrder;
|
||||
}
|
||||
|
||||
public boolean isToday() {
|
||||
return todayDate != null && todayDate.isEqual(LocalDate.now());
|
||||
}
|
||||
|
||||
// Will be used by the ArrayAdapter in the ListView
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package com.wismna.geoffroy.donext.dao;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
/**
|
||||
* Created by geoffroy on 15-11-25.
|
||||
* Data access object class that represents a Task List
|
||||
@@ -33,6 +35,7 @@ public class TaskList {
|
||||
this.taskCount = taskCount;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
|
@@ -9,7 +9,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
||||
* Database helper class that contains table and column names as well as handles database creation
|
||||
*/
|
||||
class DatabaseHelper extends SQLiteOpenHelper {
|
||||
private static final int DATABASE_VERSION = 5;
|
||||
private static final int DATABASE_VERSION = 6;
|
||||
private static final String DATABASE_NAME = "donext.db";
|
||||
static final String COLUMN_ID = "_id";
|
||||
static final String COLUMN_ORDER = "displayorder";
|
||||
@@ -36,6 +36,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
|
||||
static final String TASKS_COLUMN_LIST = "list";
|
||||
static final String TASKS_COLUMN_DUEDATE = "duedate";
|
||||
static final String TASKS_COLUMN_TODAYDATE = "todaydate";
|
||||
static final String TASKS_COLUMN_TODAYORDER = "todayorder";
|
||||
private static final String TASKS_TABLE_CREATE =
|
||||
"CREATE TABLE " + TASKS_TABLE_NAME + " (" +
|
||||
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||
@@ -46,6 +47,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
|
||||
TASKS_COLUMN_DONE + " INTEGER DEFAULT 0, " +
|
||||
TASKS_COLUMN_DELETED + " INTEGER DEFAULT 0, " +
|
||||
COLUMN_ORDER + " INTEGER, " +
|
||||
TASKS_COLUMN_TODAYORDER + " INTEGER, " +
|
||||
TASKS_COLUMN_LIST + " INTEGER NOT NULL " +
|
||||
"REFERENCES " + TASKLIST_TABLE_NAME + "(" + COLUMN_ID + "), " +
|
||||
TASKS_COLUMN_DUEDATE + " DATE, " +
|
||||
@@ -73,7 +75,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
|
||||
// Fall-through is intended
|
||||
switch (oldVersion) {
|
||||
case 1:
|
||||
// Add new Order column
|
||||
// Add new Task List Order column
|
||||
db.execSQL("ALTER TABLE " + TASKLIST_TABLE_NAME + " ADD COLUMN " + COLUMN_ORDER + " INTEGER");
|
||||
case 2:
|
||||
// Add new Visible column
|
||||
@@ -88,6 +90,10 @@ class DatabaseHelper extends SQLiteOpenHelper {
|
||||
case 4:
|
||||
db.execSQL("DROP VIEW " + TASKS_VIEW_TODAY_NAME);
|
||||
db.execSQL(TASKS_VIEW_TODAY_CREATE);
|
||||
case 5:
|
||||
// Add new Task Order column
|
||||
//db.execSQL("ALTER TABLE " + TASKS_TABLE_NAME + " ADD COLUMN " + COLUMN_ORDER + " INTEGER");
|
||||
db.execSQL("ALTER TABLE " + TASKS_TABLE_NAME + " ADD COLUMN " + TASKS_COLUMN_TODAYORDER + " INTEGER");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ package com.wismna.geoffroy.donext.database;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.SQLException;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import com.wismna.geoffroy.donext.dao.Task;
|
||||
@@ -30,7 +29,8 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
DatabaseHelper.TASKS_COLUMN_DESC, DatabaseHelper.TASKS_COLUMN_PRIORITY,
|
||||
DatabaseHelper.TASKS_COLUMN_CYCLE, DatabaseHelper.TASKS_COLUMN_DONE,
|
||||
DatabaseHelper.TASKS_COLUMN_DELETED, DatabaseHelper.TASKS_COLUMN_LIST,
|
||||
DatabaseHelper.TASKS_COLUMN_DUEDATE, DatabaseHelper.TASKS_COLUMN_TODAYDATE};
|
||||
DatabaseHelper.TASKS_COLUMN_DUEDATE, DatabaseHelper.TASKS_COLUMN_TODAYDATE,
|
||||
DatabaseHelper.COLUMN_ORDER, DatabaseHelper.TASKS_COLUMN_TODAYORDER};
|
||||
|
||||
public TaskDataAccess(Context context) {
|
||||
this(context, MODE.READ);
|
||||
@@ -59,6 +59,7 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
values.put(DatabaseHelper.TASKS_COLUMN_LIST, taskList);
|
||||
values.put(DatabaseHelper.TASKS_COLUMN_DUEDATE, dueDate);
|
||||
values.put(DatabaseHelper.TASKS_COLUMN_TODAYDATE, isTodayList? LocalDate.now().toString() : "");
|
||||
values.put(DatabaseHelper.COLUMN_ORDER, getMaxOrder(taskList) + 1);
|
||||
long insertId;
|
||||
if (id == 0)
|
||||
insertId = database.insert(DatabaseHelper.TASKS_TABLE_NAME, null, values);
|
||||
@@ -66,18 +67,20 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
database.update(DatabaseHelper.TASKS_TABLE_NAME, values, DatabaseHelper.COLUMN_ID + " == " + id, null);
|
||||
insertId = id;
|
||||
}
|
||||
Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME,
|
||||
Task newTask;
|
||||
try (Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME,
|
||||
taskColumns, DatabaseHelper.COLUMN_ID + " = " + insertId, null,
|
||||
null, null, null);
|
||||
cursor.moveToFirst();
|
||||
Task newTask = cursorToTask(cursor);
|
||||
cursor.close();
|
||||
null, null, null)) {
|
||||
cursor.moveToFirst();
|
||||
newTask = cursorToTask(cursor);
|
||||
}
|
||||
return newTask;
|
||||
}
|
||||
|
||||
public void updateTodayTasks(long id, boolean isTodayList){
|
||||
public void updateTodayTasks(long id, boolean isTodayList, int position){
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(DatabaseHelper.TASKS_COLUMN_TODAYDATE, isTodayList? LocalDate.now().toString() : "");
|
||||
contentValues.put(DatabaseHelper.TASKS_COLUMN_TODAYORDER, isTodayList? position : 0);
|
||||
database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues,
|
||||
DatabaseHelper.COLUMN_ID + " == " + id, null);
|
||||
}
|
||||
@@ -114,14 +117,32 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
}
|
||||
|
||||
public List<Task> getAllTasksFromList(long id, boolean isHistory) {
|
||||
|
||||
// REMOVE THIS
|
||||
/*ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(DatabaseHelper.COLUMN_ORDER, 0);
|
||||
database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues,
|
||||
null, null);*/
|
||||
// --
|
||||
|
||||
int history = isHistory ? 1 : 0;
|
||||
Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME, taskColumns,
|
||||
DatabaseHelper.TASKS_COLUMN_LIST + " = " + id +
|
||||
" AND (" + DatabaseHelper.TASKS_COLUMN_DONE + " = " + history +
|
||||
(isHistory ? " OR " : " AND ") + DatabaseHelper.TASKS_COLUMN_DELETED + " = " + history + ")",
|
||||
null, null, null,
|
||||
DatabaseHelper.TASKS_COLUMN_PRIORITY + " DESC");
|
||||
return getTasksFromCursor(cursor);
|
||||
DatabaseHelper.COLUMN_ORDER);
|
||||
List<Task> tasks = getTasksFromCursor(cursor);
|
||||
|
||||
// Update orders for database migration
|
||||
int count = tasks.size();
|
||||
if (getMaxOrder(id) == 0 && count > 1) {
|
||||
for (int i = 1; i < count; i++) {
|
||||
update(tasks.get(i).getId(), DatabaseHelper.COLUMN_ORDER, i);
|
||||
tasks.get(i).setOrder(i);
|
||||
}
|
||||
}
|
||||
return tasks;
|
||||
}
|
||||
|
||||
public List<Task> getTodayTasks() {
|
||||
@@ -129,20 +150,28 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
DatabaseHelper.TASKS_COLUMN_DONE + " = 0" +
|
||||
" AND " + DatabaseHelper.TASKS_COLUMN_DELETED + " = 0",
|
||||
null, null, null,
|
||||
DatabaseHelper.TASKS_COLUMN_CYCLE + ", " + DatabaseHelper.COLUMN_ID + " DESC");
|
||||
DatabaseHelper.TASKS_COLUMN_TODAYORDER);
|
||||
return getTasksFromCursor(cursor);
|
||||
}
|
||||
|
||||
public void setDone(long id) {
|
||||
public void increaseCycle(Task task, boolean isToday) {
|
||||
String orderColumn = isToday ? DatabaseHelper.TASKS_COLUMN_TODAYORDER : DatabaseHelper.COLUMN_ORDER;
|
||||
updateRemainingRowsOrder(task.getId(), orderColumn);
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(DatabaseHelper.TASKS_COLUMN_CYCLE, task.getCycle());
|
||||
contentValues.put(orderColumn, getMaxOrder(task.getTaskListId()) + 1);
|
||||
database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues,
|
||||
DatabaseHelper.COLUMN_ID + " == " + task.getId(), null);
|
||||
}
|
||||
|
||||
public void setDone(long id, boolean isToday) {
|
||||
update(id, DatabaseHelper.TASKS_COLUMN_DONE, 1);
|
||||
updateRemainingRowsOrder(id, isToday ? DatabaseHelper.TASKS_COLUMN_TODAYORDER : DatabaseHelper.COLUMN_ORDER);
|
||||
}
|
||||
|
||||
public void increaseCycle(int newCycle, long id) {
|
||||
update(id, DatabaseHelper.TASKS_COLUMN_CYCLE, newCycle);
|
||||
}
|
||||
|
||||
public void deleteTask(long id) {
|
||||
public void deleteTask(long id, boolean isToday) {
|
||||
update(id, DatabaseHelper.TASKS_COLUMN_DELETED, 1);
|
||||
updateRemainingRowsOrder(id, isToday ? DatabaseHelper.TASKS_COLUMN_TODAYORDER : DatabaseHelper.COLUMN_ORDER);
|
||||
}
|
||||
|
||||
private void update(long id, String column, Object value) {
|
||||
@@ -164,6 +193,8 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
task.setTaskList(cursor.getLong(7));
|
||||
task.setDueDate(cursor.getString(8));
|
||||
task.setTodayDate(cursor.getString(9));
|
||||
task.setOrder(cursor.getInt(10));
|
||||
task.setTodayOrder(cursor.getInt(11));
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -180,4 +211,25 @@ public class TaskDataAccess implements AutoCloseable {
|
||||
cursor.close();
|
||||
return tasks;
|
||||
}
|
||||
|
||||
private int getMaxOrder(long listId) {
|
||||
try (Cursor maxOrderCursor = database.query(DatabaseHelper.TASKS_TABLE_NAME, new String[]{"MAX(" + DatabaseHelper.COLUMN_ORDER + ")"},
|
||||
DatabaseHelper.TASKS_COLUMN_LIST + " = " + listId, null, null, null, null)) {
|
||||
maxOrderCursor.moveToFirst();
|
||||
|
||||
return maxOrderCursor.getInt(0);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRemainingRowsOrder(long id, String orderColumn) {
|
||||
try (Cursor cursor = database.rawQuery("UPDATE " + DatabaseHelper.TASKS_TABLE_NAME +
|
||||
" SET " + orderColumn + " = " + orderColumn + " - 1" +
|
||||
" WHERE " + orderColumn + " > " +
|
||||
"(SELECT " + orderColumn +
|
||||
" FROM " + DatabaseHelper.TASKS_TABLE_NAME +
|
||||
" WHERE " + DatabaseHelper.COLUMN_ID + " = " + id + ")",
|
||||
null)) {
|
||||
cursor.moveToFirst();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ package com.wismna.geoffroy.donext.database;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.SQLException;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import com.wismna.geoffroy.donext.dao.TaskList;
|
||||
|
@@ -12,6 +12,8 @@ import android.view.View;
|
||||
|
||||
import com.wismna.geoffroy.donext.R;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class ConfirmDialogFragment extends DialogFragment {
|
||||
interface ConfirmDialogListener {
|
||||
void onConfirmDialogClick(DialogFragment dialog, ButtonEvent event);
|
||||
@@ -41,7 +43,7 @@ public class ConfirmDialogFragment extends DialogFragment {
|
||||
@Override
|
||||
@NonNull
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getActivity()));
|
||||
|
||||
Bundle args = getArguments();
|
||||
LayoutInflater inflater = getActivity().getLayoutInflater();
|
||||
|
@@ -25,6 +25,8 @@ import android.widget.FrameLayout;
|
||||
|
||||
import com.wismna.geoffroy.donext.R;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Created by wismna on 2017-03-21.
|
||||
* Sub-class this class to create a dynamic fragment that will act as a Dialog in large layouts and
|
||||
@@ -104,7 +106,7 @@ public abstract class DynamicDialogFragment extends DialogFragment {
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
menu.clear();
|
||||
getActivity().getMenuInflater().inflate(R.menu.menu_dynamic_fragment, menu);
|
||||
Objects.requireNonNull(getActivity()).getMenuInflater().inflate(R.menu.menu_dynamic_fragment, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -146,7 +148,7 @@ public abstract class DynamicDialogFragment extends DialogFragment {
|
||||
|
||||
// Hide the keyboard if present
|
||||
if (view != null) {
|
||||
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
InputMethodManager imm = (InputMethodManager) Objects.requireNonNull(getActivity()).getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
assert imm != null;
|
||||
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
|
||||
}
|
||||
@@ -199,7 +201,7 @@ public abstract class DynamicDialogFragment extends DialogFragment {
|
||||
/** Helper function to get a View, without having to worry about the fact that is a Dialog or not*/
|
||||
protected <T extends View> T findViewById(int id) {
|
||||
if (getShowsDialog()) return getDialog().findViewById(id);
|
||||
return getView().findViewById(id);
|
||||
return Objects.requireNonNull(getView()).findViewById(id);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,8 +212,8 @@ public abstract class DynamicDialogFragment extends DialogFragment {
|
||||
view.requestFocus();
|
||||
|
||||
// Hide keyboard
|
||||
InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
InputMethodManager inputMethodManager = (InputMethodManager) Objects.requireNonNull(getContext()).getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
Objects.requireNonNull(inputMethodManager).hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@ import com.wismna.geoffroy.donext.helpers.TaskListTouchHelper;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* A fragment representing a list of Items.
|
||||
@@ -151,7 +152,7 @@ public class TaskListsDialogFragment extends DynamicDialogFragment implements
|
||||
args.putInt("ItemPosition", position);
|
||||
args.putLong("ItemId", id);
|
||||
confirmDialogFragment.setArguments(args);
|
||||
confirmDialogFragment.show(getFragmentManager(), title);
|
||||
confirmDialogFragment.show(Objects.requireNonNull(getFragmentManager()), title);
|
||||
}
|
||||
else deleteTaskList(position, id);
|
||||
}
|
||||
|
@@ -416,8 +416,7 @@ public class TasksFragment extends Fragment implements
|
||||
break;
|
||||
case -1:
|
||||
FragmentManager manager = getFragmentManager();
|
||||
assert manager != null;
|
||||
DialogFragment dialog = (DialogFragment) manager.findFragmentByTag(getString(R.string.action_edit_task));
|
||||
DialogFragment dialog = (DialogFragment) Objects.requireNonNull(manager).findFragmentByTag(getString(R.string.action_edit_task));
|
||||
if (dialog != null) dialog.dismiss();
|
||||
action = resources.getString(R.string.snackabar_action_deleted);
|
||||
break;
|
||||
@@ -460,15 +459,16 @@ public class TasksFragment extends Fragment implements
|
||||
switch (direction) {
|
||||
// Mark item as Done
|
||||
case ItemTouchHelper.LEFT:
|
||||
taskDataAccess.setDone(itemId);
|
||||
taskDataAccess.setDone(itemId, isTodayView);
|
||||
break;
|
||||
// Increase task cycle count
|
||||
case ItemTouchHelper.RIGHT:
|
||||
taskDataAccess.increaseCycle(task.getCycle(), itemId);
|
||||
taskDataAccess.increaseCycle(task, isTodayView);
|
||||
taskRecyclerViewAdapter.notifyItemChanged(taskRecyclerViewAdapter.getItemCount() - 1);
|
||||
break;
|
||||
case -1:
|
||||
// Delete the task
|
||||
taskDataAccess.deleteTask(itemId);
|
||||
taskDataAccess.deleteTask(itemId, isTodayView);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -21,6 +21,7 @@ import org.joda.time.LocalDate;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Created by bg45 on 2017-03-21.
|
||||
@@ -60,7 +61,7 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
|
||||
private void setLayoutValues(List<Task> tasks) {
|
||||
EditText editText = findViewById(R.id.today_search);
|
||||
final ListView listView = findViewById(R.id.today_tasks);
|
||||
final TodayArrayAdapter adapter = new TodayArrayAdapter(getActivity(), tasks);
|
||||
final TodayArrayAdapter adapter = new TodayArrayAdapter(Objects.requireNonNull(getActivity()), tasks);
|
||||
listView.setAdapter(adapter);
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
@@ -98,7 +99,7 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
|
||||
protected void onPositiveButtonClick(View view) {
|
||||
mListener.onTodayTaskDialogPositiveClick(view);
|
||||
// Only commit the updated tasks to DB
|
||||
new UpdateTasks(this).execute(mUpdatedTasks.toArray(new Task[mUpdatedTasks.size()]));
|
||||
new UpdateTasks(this).execute(mUpdatedTasks.toArray(new Task[0]));
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@@ -142,15 +143,14 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
|
||||
|
||||
@Override
|
||||
protected Integer doInBackground(Task... params) {
|
||||
int elementsUpdated = 0;
|
||||
int position;
|
||||
try (TaskDataAccess taskDataAccess = new TaskDataAccess(fragmentReference.get().getActivity(), TaskDataAccess.MODE.WRITE)) {
|
||||
for (Task task :
|
||||
params) {
|
||||
taskDataAccess.updateTodayTasks(task.getId(), task.isToday());
|
||||
elementsUpdated++;
|
||||
for (position = 0; position < params.length; position ++) {
|
||||
Task task = params[position];
|
||||
taskDataAccess.updateTodayTasks(task.getId(), task.isToday(), position);
|
||||
}
|
||||
}
|
||||
return elementsUpdated;
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.wismna.geoffroy.donext.helpers;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||
|
||||
@@ -22,12 +23,12 @@ public class TaskListTouchHelper extends ItemTouchHelper.SimpleCallback {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
|
||||
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
|
||||
return mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
// No swipe moves
|
||||
}
|
||||
|
||||
@@ -47,7 +48,7 @@ public class TaskListTouchHelper extends ItemTouchHelper.SimpleCallback {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||
super.clearView(recyclerView, viewHolder);
|
||||
|
||||
viewHolder.itemView.setAlpha(1.0f);
|
||||
|
9
app/src/main/res/drawable/ic_refresh_black_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_refresh_black_24dp.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#a6a5a5"
|
||||
android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
|
||||
</vector>
|
@@ -1,18 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="75dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp"
|
||||
android:paddingTop="5dp"
|
||||
android:orientation="horizontal"
|
||||
android:paddingBottom="5dp"
|
||||
android:focusable="true"
|
||||
android:background="?android:attr/selectableItemBackground" >
|
||||
<TextView
|
||||
android:id="@+id/task_cycle"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_gravity="center"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<TextView
|
||||
android:id="@+id/task_id"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -22,26 +15,40 @@
|
||||
android:id="@+id/task_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/task_alarm"/>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:contentDescription="@string/task_alarm" />
|
||||
<TextView
|
||||
android:id="@+id/task_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="?listPreferredItemHeight"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/task_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<TextView
|
||||
android:id="@+id/task_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="2"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textSize="14sp"
|
||||
android:textAppearance="?attr/textAppearanceListItemSmall" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/task_icon"
|
||||
android:textSize="18sp"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<ImageView
|
||||
android:id="@+id/task_cycle_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:src="@drawable/ic_refresh_black_24dp"
|
||||
android:contentDescription="@string/task_alarm" />
|
||||
<TextView
|
||||
android:id="@+id/task_cycle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_toStartOf="@id/task_cycle_icon"
|
||||
android:textColor="#FFA6A5A5"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<TextView
|
||||
android:id="@+id/task_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:maxLines="2"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textSize="14sp"
|
||||
android:layout_below="@id/task_name"
|
||||
android:textAppearance="?attr/textAppearanceListItemSmall" />
|
||||
</RelativeLayout>
|
||||
|
@@ -1,18 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="130dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
android:paddingTop="5dp"
|
||||
android:orientation="horizontal"
|
||||
android:paddingBottom="5dp"
|
||||
android:focusable="true"
|
||||
android:background="@color/colorPrimaryLight" >
|
||||
<TextView
|
||||
android:id="@+id/task_cycle"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_gravity="center"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
android:background="@color/colorPrimaryLight">
|
||||
<TextView
|
||||
android:id="@+id/task_id"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -22,29 +15,43 @@
|
||||
android:id="@+id/task_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/task_alarm"/>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:contentDescription="@string/task_alarm" />
|
||||
<TextView
|
||||
android:id="@+id/task_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="120dp"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/task_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/colorAccent"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<TextView
|
||||
android:id="@+id/task_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:maxLines="4"
|
||||
android:textSize="16sp"
|
||||
android:textAppearance="?attr/textAppearanceListItemSmall" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/task_icon"
|
||||
android:textSize="20sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/colorAccent"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<ImageView
|
||||
android:id="@+id/task_cycle_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:src="@drawable/ic_refresh_black_24dp"
|
||||
android:contentDescription="@string/task_alarm" />
|
||||
<TextView
|
||||
android:id="@+id/task_cycle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_toStartOf="@id/task_cycle_icon"
|
||||
android:textColor="#FFA6A5A5"
|
||||
android:textAppearance="?attr/textAppearanceListItem" />
|
||||
<TextView
|
||||
android:id="@+id/task_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_below="@id/task_name"
|
||||
android:maxLines="4"
|
||||
android:textSize="16sp"
|
||||
android:textAppearance="?attr/textAppearanceListItemSmall" />
|
||||
</RelativeLayout>
|
||||
|
||||
|
@@ -82,15 +82,17 @@
|
||||
android:orientation="horizontal"
|
||||
android:focusable="true"
|
||||
android:background="?android:attr/selectableItemBackground" >
|
||||
<TextView
|
||||
android:id="@+id/total_task_cycles"
|
||||
android:layout_width="100dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:id="@+id/total_task_count"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp" />
|
||||
<TextView
|
||||
android:id="@+id/total_task_cycles"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
@@ -1,3 +1,5 @@
|
||||
Emphasis is made on the first task
|
||||
Correct task order handling
|
||||
Order in Today view is different from order in Main view
|
||||
Bug corrections
|
||||
Design improvements
|
||||
|
Reference in New Issue
Block a user