diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index da44076b2..0c08a6010 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -560,4 +560,5 @@
Location
Gem reward
Tasks
+ Create challenge
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java
index 0e18992b2..1f5fdd3e9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java
@@ -5,7 +5,6 @@ import android.content.res.Resources;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
-import android.support.v7.view.menu.MenuAdapter;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
@@ -18,8 +17,9 @@ import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
+import com.habitrpg.android.habitica.events.TaskTappedEvent;
+import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter;
-import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeTasksRecyclerViewFragment;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import org.greenrobot.eventbus.EventBus;
@@ -39,7 +39,14 @@ public class CreateChallengeActivity extends BaseActivity {
@BindView(R.id.create_challenge_task_list)
RecyclerView create_challenge_task_list;
- private boolean displayingTaskForm;
+ private ChallengeTasksRecyclerViewAdapter challengeTasks;
+
+
+ Task addHabit;
+ Task addDaily;
+ Task addTodo;
+ Task addReward;
+
@Override
protected int getLayoutResId() {
@@ -65,6 +72,7 @@ public class CreateChallengeActivity extends BaseActivity {
if (supportActionBar != null) {
supportActionBar.setIcon(R.drawable.ic_close_white_24dp);
+ supportActionBar.setTitle(R.string.create_challenge);
supportActionBar.setBackgroundDrawable(new ColorDrawable(resources.getColor(R.color.brand_200)));
supportActionBar.setElevation(0);
}
@@ -74,34 +82,28 @@ public class CreateChallengeActivity extends BaseActivity {
locationAdapter.addAll("Tavern", "My Group", "Some other");
challenge_location_spinner.setAdapter(locationAdapter);
- Task addHabit = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_habit));
- Task addDaily = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_daily));
- Task addTodo = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_todo));
- Task addReward = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_reward));
+ addHabit = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_habit));
+ addDaily = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_daily));
+ addTodo = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_todo));
+ addReward = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_reward));
+
ArrayList taskList = new ArrayList<>();
taskList.add(addHabit);
- taskList.add(createTask(Task.TYPE_HABIT));
taskList.add(addDaily);
- taskList.add(createTask(Task.TYPE_DAILY));
taskList.add(addTodo);
- taskList.add(createTask(Task.TYPE_TODO));
taskList.add(addReward);
- taskList.add(createTask(Task.TYPE_REWARD));
- ChallengeTasksRecyclerViewAdapter challengeTasks = new ChallengeTasksRecyclerViewAdapter(null, 0, this, "", null, false, true);
+ challengeTasks = new ChallengeTasksRecyclerViewAdapter(null, 0, this, "", null, false, true);
challengeTasks.setTasks(taskList);
challengeTasks.enableAddItem(t -> {
if (t.equals(addHabit)) {
openNewTaskActivity(Task.TYPE_HABIT);
} else if (t.equals(addDaily)) {
-
openNewTaskActivity(Task.TYPE_DAILY);
} else if (t.equals(addTodo)) {
-
openNewTaskActivity(Task.TYPE_TODO);
} else if (t.equals(addReward)) {
-
openNewTaskActivity(Task.TYPE_REWARD);
}
});
@@ -119,13 +121,10 @@ public class CreateChallengeActivity extends BaseActivity {
}
private void openNewTaskActivity(String type) {
- if (this.displayingTaskForm) {
- return;
- }
-
Bundle bundle = new Bundle();
bundle.putString(TaskFormActivity.TASK_TYPE_KEY, type);
bundle.putBoolean(TaskFormActivity.SAVE_TO_DB, false);
+ bundle.putBoolean(TaskFormActivity.SHOW_TAG_SELECTION, false);
if (HabiticaApplication.User != null && HabiticaApplication.User.getPreferences() != null) {
String allocationMode = HabiticaApplication.User.getPreferences().getAllocationMode();
@@ -134,26 +133,73 @@ public class CreateChallengeActivity extends BaseActivity {
bundle.putString(TaskFormActivity.ALLOCATION_MODE_KEY, allocationMode);
}
+ Intent intent = new Intent(this, TaskFormActivity.class);
+ intent.putExtras(bundle);
+ intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+
+ startActivityForResult(intent, 1);
+ }
+
+ private void openNewTaskActivity(Task task) {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(TaskFormActivity.PARCELABLE_TASK, task);
+ bundle.putBoolean(TaskFormActivity.SAVE_TO_DB, false);
+ bundle.putBoolean(TaskFormActivity.SHOW_TAG_SELECTION, false);
+
+ if (HabiticaApplication.User != null && HabiticaApplication.User.getPreferences() != null) {
+ String allocationMode = HabiticaApplication.User.getPreferences().getAllocationMode();
+
+ bundle.putString(TaskFormActivity.USER_ID_KEY, HabiticaApplication.User.getId());
+ bundle.putString(TaskFormActivity.ALLOCATION_MODE_KEY, allocationMode);
+ }
Intent intent = new Intent(this, TaskFormActivity.class);
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- this.displayingTaskForm = true;
startActivityForResult(intent, 1);
}
@Subscribe
- public void onEvent(TaskSaveEvent saveEvent)
+ public void onEvent(DeleteTaskCommand deleteTask){
+ challengeTasks.removeTask(deleteTask.TaskIdToDelete);
+ }
+
+ @Subscribe
+ public void onEvent(TaskTappedEvent tappedEvent)
{
-
+ openNewTaskActivity(tappedEvent.Task);
}
- private Task createTask(String taskType) {
- return createTask(taskType, "example " + taskType);
+ @Subscribe
+ public void onEvent(TaskSaveEvent saveEvent) {
+
+ if(saveEvent.task.getId() == null)
+ saveEvent.task.setId(UUID.randomUUID().toString());
+
+ if (!challengeTasks.updateTask(saveEvent.task)) {
+ Task taskAbove;
+
+ switch (saveEvent.task.getType()) {
+ case Task.TYPE_HABIT:
+ taskAbove = addHabit;
+ break;
+ case Task.TYPE_DAILY:
+ taskAbove = addDaily;
+ break;
+ case Task.TYPE_TODO:
+ taskAbove = addTodo;
+ break;
+ default:
+ taskAbove = addReward;
+ break;
+ }
+
+ challengeTasks.addTaskUnder(saveEvent.task, taskAbove);
+ }
}
- private Task createTask(String taskType, String taskName) {
+ private static Task createTask(String taskType, String taskName) {
Task t = new Task();
t.setId(UUID.randomUUID().toString());
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.java
index 7578535a4..e7e9fc044 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.java
@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+import com.github.underscore.$;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
@@ -83,6 +84,15 @@ public class ChallengeTasksRecyclerViewAdapter extends SortableTasksRecyclerView
addItemCallback = cb;
}
+ public int addTaskUnder(Task taskToAdd, Task taskAbove){
+ int position = $.findIndex(this.content, t -> t.getId().equals(taskAbove.getId()));
+
+ content.add(position+1, taskToAdd);
+ filter();
+
+ return position;
+ }
+
@Override
public BaseTaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
BaseTaskViewHolder viewHolder = null;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java
index e7f239bfb..20cab3d2f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java
@@ -90,9 +90,13 @@ public abstract class BaseTasksRecyclerViewAdapter