From 46d1444a0f0faece04764c12712b66181d6dc830 Mon Sep 17 00:00:00 2001 From: Franze Jr Date: Tue, 17 Nov 2015 20:11:36 -0300 Subject: [PATCH 01/23] Fix conflicts --- .../android/habitica/MainActivity.java | 1 + .../habitica/events/TaskLongPressedEvent.java | 36 ++++++++++++++++++- .../adapter/HabitItemRecyclerViewAdapter.java | 23 ++++++------ 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 15cf81365..2cfc710a3 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -260,6 +260,7 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall } public void onEvent(TaskLongPressedEvent event) { + showSnackbar("LongPress: " + event.task.text); } public void onEvent(TaskCheckedCommand event) { diff --git a/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java b/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java index 9e2dcf1ac..972f1ea92 100644 --- a/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java +++ b/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java @@ -1,8 +1,42 @@ package com.habitrpg.android.habitica.events; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import com.habitrpg.android.habitica.TaskFormActivity; + +import java.util.ArrayList; +import java.util.List; + /** * Created by Negue on 10.07.2015. */ public class TaskLongPressedEvent { - public com.magicmicky.habitrpgwrapper.lib.models.tasks.Task Task; + private final Context context; + private final String taskType; + private final List tags; + public com.magicmicky.habitrpgwrapper.lib.models.tasks.Task task; + + public TaskLongPressedEvent(Context context, String taskType, List tags) { + this.context = context; + this.taskType = taskType; + this.tags = tags; + } + + + public void openNewTaskActivity() { + if (taskType == "daily" || taskType == "todo") { + Bundle bundle = new Bundle(); + bundle.putString("type", taskType); + bundle.putString("taskId", task.getId()); + bundle.putStringArrayList("tagsId", new ArrayList(tags)); + + Intent intent = new Intent(context, TaskFormActivity.class); + intent.putExtras(bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + + context.startActivity(intent); + } + } } diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java index 7fa172736..0f17a17c2 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java @@ -265,25 +265,26 @@ public class HabitItemRecyclerViewAdapter @Override public void onClick(View v) { - if (v != itemView) - return; - - TaskTappedEvent event = new TaskTappedEvent(); - event.Task = Item; - - EventBus.getDefault().post(event); +// if (v != itemView) +// return; +// +// TaskTappedEvent event = new TaskTappedEvent(); +// event.Task = Item; +// +// EventBus.getDefault().post(event); } @Override public boolean onLongClick(View v) { - TaskLongPressedEvent event = new TaskLongPressedEvent(); - event.Task = Item; + //Long press working for editing a task + TaskLongPressedEvent event = + new TaskLongPressedEvent(context, taskType, tagsHelper.getTags()); + event.task = Item; + event.openNewTaskActivity(); EventBus.getDefault().post(event); - return true; } - } public class HabitViewHolder extends ViewHolder { From 5ebc1d779608bfe46215693eff0e99b1d2154d6e Mon Sep 17 00:00:00 2001 From: Franze Jr Date: Sat, 14 Nov 2015 18:08:02 -0300 Subject: [PATCH 02/23] [#40] Remove old code, I was not working with checklist itself --- .../habitica/events/TaskLongPressedEvent.java | 34 ------------------- .../adapter/HabitItemRecyclerViewAdapter.java | 18 +++++----- 2 files changed, 8 insertions(+), 44 deletions(-) diff --git a/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java b/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java index 972f1ea92..17ddd34f3 100644 --- a/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java +++ b/Habitica/src/com/habitrpg/android/habitica/events/TaskLongPressedEvent.java @@ -1,42 +1,8 @@ package com.habitrpg.android.habitica.events; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import com.habitrpg.android.habitica.TaskFormActivity; - -import java.util.ArrayList; -import java.util.List; - /** * Created by Negue on 10.07.2015. */ public class TaskLongPressedEvent { - private final Context context; - private final String taskType; - private final List tags; public com.magicmicky.habitrpgwrapper.lib.models.tasks.Task task; - - public TaskLongPressedEvent(Context context, String taskType, List tags) { - this.context = context; - this.taskType = taskType; - this.tags = tags; - } - - - public void openNewTaskActivity() { - if (taskType == "daily" || taskType == "todo") { - Bundle bundle = new Bundle(); - bundle.putString("type", taskType); - bundle.putString("taskId", task.getId()); - bundle.putStringArrayList("tagsId", new ArrayList(tags)); - - Intent intent = new Intent(context, TaskFormActivity.class); - intent.putExtras(bundle); - intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - - context.startActivity(intent); - } - } } diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java index 0f17a17c2..a95fd12b5 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java @@ -265,22 +265,20 @@ public class HabitItemRecyclerViewAdapter @Override public void onClick(View v) { -// if (v != itemView) -// return; -// -// TaskTappedEvent event = new TaskTappedEvent(); -// event.Task = Item; -// -// EventBus.getDefault().post(event); + if (v != itemView) + return; + + TaskTappedEvent event = new TaskTappedEvent(); + event.Task = Item; + + EventBus.getDefault().post(event); } @Override public boolean onLongClick(View v) { - //Long press working for editing a task TaskLongPressedEvent event = - new TaskLongPressedEvent(context, taskType, tagsHelper.getTags()); + new TaskLongPressedEvent(); event.task = Item; - event.openNewTaskActivity(); EventBus.getDefault().post(event); return true; From 5b30f190e87ee772440e6941f139bc984161ec42 Mon Sep 17 00:00:00 2001 From: Franze Jr Date: Sun, 15 Nov 2015 16:55:33 -0300 Subject: [PATCH 03/23] [#40] Drag and drop working. Auto-height not working. It still need to save the order of checklists --- Habitica/res/layout/activity_task_form.xml | 5 ++ Habitica/res/layout/checklist_item.xml | 20 +++++ .../habitrpg/android/habitica/APIHelper.java | 14 +-- .../android/habitica/TaskFormActivity.java | 30 ++++++- .../ui/adapter/RecyclerListAdapter.java | 86 +++++++++++++++++++ .../ui/helpers/ItemTouchHelperAdapter.java | 33 +++++++ .../ui/helpers/ItemTouchHelperViewHolder.java | 25 ++++++ .../SimpleItemTouchHelperCallback.java | 69 +++++++++++++++ 8 files changed, 268 insertions(+), 14 deletions(-) create mode 100644 Habitica/res/layout/checklist_item.xml create mode 100644 Habitica/src/com/habitrpg/android/habitica/ui/adapter/RecyclerListAdapter.java create mode 100644 Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperAdapter.java create mode 100644 Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperViewHolder.java create mode 100644 Habitica/src/com/habitrpg/android/habitica/ui/helpers/SimpleItemTouchHelperCallback.java diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml index 81463559e..ed217637c 100644 --- a/Habitica/res/layout/activity_task_form.xml +++ b/Habitica/res/layout/activity_task_form.xml @@ -172,6 +172,11 @@ android:text="@string/checklist" android:id="@+id/textView9" /> + + + + + + + + \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java index 786740046..8758a9b60 100644 --- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java @@ -182,17 +182,9 @@ public class APIHelper implements ErrorHandler, Profiler { final Activity activity = (Activity) this.mContext; if (cause.getKind().equals(RetrofitError.Kind.NETWORK)) { - //It also handles timeouts - showConnectionProblemDialog(activity, R.string.network_error_no_network_body); - }else{ - /* - * CONVERSION An exception was thrown while (de)serializing a body. - * HTTP A non-200 HTTP status code was received from the server e.g. 502, 503, etc... - * UNEXPECTED An internal error occurred while attempting to execute a request. - */ - showConnectionProblemDialog(activity,R.string.internal_error_api); - } - + //It also handles timeouts + showConnectionProblemDialog(activity, R.string.network_error_no_network_body); + } return cause; } diff --git a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java index 08c085c19..97648d3b8 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java @@ -1,12 +1,15 @@ package com.habitrpg.android.habitica; import android.content.Intent; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.util.Log; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; @@ -17,6 +20,8 @@ import android.widget.Spinner; import android.widget.TextView; import com.habitrpg.android.habitica.events.TaskSaveEvent; +import com.habitrpg.android.habitica.ui.adapter.RecyclerListAdapter; +import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback; import com.magicmicky.habitrpgwrapper.lib.models.Tag; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; @@ -95,6 +100,7 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O this.dailyFrequencySpinner.setAdapter(frequencyAdapter); this.dailyFrequencySpinner.setOnItemSelectedListener(this); + this.frequencyContainer = (LinearLayout) weekdayWrapper.findViewById(R.id.task_frequency_container); } else { mainWrapper.removeView(weekdayWrapper); @@ -107,8 +113,26 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O this.populate(task); setTitle(task); } else{ - setTitle((Task)null); + setTitle((Task) null); } + + if(taskType.equals("todo") || taskType.equals("daily")){ + createCheckListRecyclerView(); + } + } + + private void createCheckListRecyclerView() { + RecyclerListAdapter checklistAdapter = new RecyclerListAdapter(task.getChecklist()); + RecyclerView recyclerView = (RecyclerView) findViewById(R.id.checklist_recycler_view); + + LinearLayoutManager llm = new LinearLayoutManager(this); + llm.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(llm); + recyclerView.setAdapter(checklistAdapter); + + ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(checklistAdapter); + ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(callback); + mItemTouchHelper.attachToRecyclerView(recyclerView); } private void setTitle(Task task) { diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/RecyclerListAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/RecyclerListAdapter.java new file mode 100644 index 000000000..643dddc96 --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/RecyclerListAdapter.java @@ -0,0 +1,86 @@ +package com.habitrpg.android.habitica.ui.adapter; + +import android.graphics.Color; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperAdapter; +import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperViewHolder; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +/** + * Created by franzejr on 15/11/15. + */ +public class RecyclerListAdapter extends RecyclerView.Adapter + implements ItemTouchHelperAdapter{ + + private final List mItems = new ArrayList<>(); + + public RecyclerListAdapter(List checklistItems) { + mItems.addAll(checklistItems); + } + + @Override + public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.checklist_item, parent, false); + ItemViewHolder itemViewHolder = new ItemViewHolder(view); + return itemViewHolder; + } + + @Override + public void onBindViewHolder(final ItemViewHolder holder, int position) { + holder.checkListTextView.setText(mItems.get(position).getText()); + } + + + @Override + public int getItemCount() { + return mItems.size(); + } + + + @Override + public void onItemDismiss(int position) { + mItems.remove(position); + notifyItemRemoved(position); + } + + @Override + public void onItemMove(int fromPosition, int toPosition) { + Collections.swap(mItems, fromPosition, toPosition); + notifyItemMoved(fromPosition, toPosition); + } + + public static class ItemViewHolder extends RecyclerView.ViewHolder implements + ItemTouchHelperViewHolder { + + @InjectView(R.id.checkListTextView) + TextView checkListTextView; + + public ItemViewHolder(View itemView) { + super(itemView); + ButterKnife.inject(this, itemView); + } + + @Override + public void onItemSelected() { + itemView.setBackgroundColor(Color.LTGRAY); + } + + @Override + public void onItemClear() { + itemView.setBackgroundColor(0); + } + } +} \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperAdapter.java new file mode 100644 index 000000000..a2f73eb50 --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperAdapter.java @@ -0,0 +1,33 @@ +package com.habitrpg.android.habitica.ui.helpers; + +import android.support.v7.widget.RecyclerView; + +/** + * Interface to notify a {@link RecyclerView.Adapter} of moving and dismissal event from a {@link + * android.support.v7.widget.helper.ItemTouchHelper.Callback}. + * + * @author Paul Burke (ipaulpro) + */ +public interface ItemTouchHelperAdapter { + + /** + * Called when an item has been dragged far enough to trigger a move. This is called every time + * an item is shifted, and not at the end of a "drop" event. + * + * @param fromPosition The start position of the moved item. + * @param toPosition Then end position of the moved item. + * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder) + * @see RecyclerView.ViewHolder#getAdapterPosition() + */ + void onItemMove(int fromPosition, int toPosition); + + + /** + * Called when an item has been dismissed by a swipe. + * + * @param position The position of the item dismissed. + * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder) + * @see RecyclerView.ViewHolder#getAdapterPosition() + */ + void onItemDismiss(int position); +} diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperViewHolder.java b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperViewHolder.java new file mode 100644 index 000000000..4b91a123d --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/ItemTouchHelperViewHolder.java @@ -0,0 +1,25 @@ +package com.habitrpg.android.habitica.ui.helpers; + +import android.support.v7.widget.helper.ItemTouchHelper; + +/** + * Interface to notify an item ViewHolder of relevant callbacks from {@link + * android.support.v7.widget.helper.ItemTouchHelper.Callback}. + * + * @author Paul Burke (ipaulpro) + */ +public interface ItemTouchHelperViewHolder { + + /** + * Called when the {@link ItemTouchHelper} first registers an item as being moved or swiped. + * Implementations should update the item view to indicate it's active state. + */ + void onItemSelected(); + + + /** + * Called when the {@link ItemTouchHelper} has completed the move or swipe, and the active item + * state should be cleared. + */ + void onItemClear(); +} diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/helpers/SimpleItemTouchHelperCallback.java b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/SimpleItemTouchHelperCallback.java new file mode 100644 index 000000000..bcc8d44da --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/ui/helpers/SimpleItemTouchHelperCallback.java @@ -0,0 +1,69 @@ +package com.habitrpg.android.habitica.ui.helpers; + +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; + +/** + * An implementation of {@link ItemTouchHelper.Callback} that enables basic drag & drop and + * swipe-to-dismiss. Drag events are automatically started by an item long-press.
+ *
+ * Expects the RecyclerView.Adapter to react to {@link + * ItemTouchHelperAdapter} callbacks and the RecyclerView.ViewHolder to implement + * {@link ItemTouchHelperViewHolder}. + * + * @author Paul Burke (ipaulpro) + */ +public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback { + + private final ItemTouchHelperAdapter mAdapter; + + public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { + mAdapter = adapter; + } + + @Override + public boolean isLongPressDragEnabled() { + return true; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return true; + } + + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) { + mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) { + mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); + } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { + if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { + ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemSelected(); + } + + super.onSelectedChanged(viewHolder, actionState); + } + + @Override + public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + + ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemClear(); + } +} From 482dc055c029ae56c2c6b6e6da6aa3de1e66405e Mon Sep 17 00:00:00 2001 From: Franze Jr Date: Sun, 15 Nov 2015 23:00:37 -0300 Subject: [PATCH 04/23] [#40] Drag and drop working. Auto-height working with scrollbar for a huge number of elements. --- Habitica/res/layout/activity_task_form.xml | 3 +-- Habitica/res/layout/checklist_item.xml | 10 +++++----- .../habitrpg/android/habitica/TaskFormActivity.java | 4 ++++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml index ed217637c..ebb2f877d 100644 --- a/Habitica/res/layout/activity_task_form.xml +++ b/Habitica/res/layout/activity_task_form.xml @@ -175,7 +175,7 @@ + android:layout_height="wrap_content" />
@@ -208,6 +208,5 @@ - \ No newline at end of file diff --git a/Habitica/res/layout/checklist_item.xml b/Habitica/res/layout/checklist_item.xml index 50415ca0f..0223135e3 100644 --- a/Habitica/res/layout/checklist_item.xml +++ b/Habitica/res/layout/checklist_item.xml @@ -1,9 +1,9 @@ - @@ -13,8 +13,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:minHeight="24dp" + android:minHeight="38dp" + android:textSize="18dp" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:textAppearance="?android:attr/textAppearanceMedium" /> - - \ No newline at end of file + \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java index 97648d3b8..818064c89 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java @@ -127,8 +127,12 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O LinearLayoutManager llm = new LinearLayoutManager(this); llm.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(llm); recyclerView.setAdapter(checklistAdapter); + int i = checklistAdapter.getItemCount(); + + recyclerView.setMinimumHeight(i * 75); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(checklistAdapter); ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(callback); From 813674a328d6740b2373573a9fe0c6d8e91bf9dc Mon Sep 17 00:00:00 2001 From: Franze Jr Date: Sun, 15 Nov 2015 23:43:38 -0300 Subject: [PATCH 05/23] [#40] Add button for adding new checklist. --- Habitica/res/layout/activity_task_form.xml | 20 +++++++++++++++++++ .../android/habitica/TaskFormActivity.java | 19 ++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml index ebb2f877d..50395c85c 100644 --- a/Habitica/res/layout/activity_task_form.xml +++ b/Habitica/res/layout/activity_task_form.xml @@ -172,6 +172,26 @@ android:text="@string/checklist" android:id="@+id/textView9" /> + + + + +