diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml
index a3b029395..2a92fe20b 100644
--- a/Habitica/res/layout/activity_task_form.xml
+++ b/Habitica/res/layout/activity_task_form.xml
@@ -1,235 +1,255 @@
-
-
+ android:layout_height="match_parent">
+ android:orientation="vertical"
+ android:padding="@dimen/abc_action_bar_content_inset_material">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ 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 7f94c7adf..809d3e536 100644
--- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
+++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
@@ -201,8 +201,8 @@ public class APIHelper implements ErrorHandler, Profiler {
this.apiService.connectSocial(auth, callback);
}
- public void deleteTask(Task item, TaskDeletionCallback cb) {
- this.apiService.deleteTask(item.getId(), cb);
+ public void deleteTask(String taskId, TaskDeletionCallback cb) {
+ this.apiService.deleteTask(taskId, cb);
}
public void updateTask(Task item, Callback cb) {
diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
index e03234f67..1956d2409 100644
--- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
@@ -19,7 +19,8 @@ import android.widget.TextView;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
-import com.habitrpg.android.habitica.events.OldTaskRemovedEvent;
+import com.habitrpg.android.habitica.events.TaskRemovedEvent;
+import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
@@ -40,7 +41,9 @@ import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction;
import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener;
import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Delete;
+import com.raizlabs.android.dbflow.sql.language.From;
import com.raizlabs.android.dbflow.sql.language.Select;
+import com.raizlabs.android.dbflow.sql.language.Where;
import org.solovyev.android.checkout.ActivityCheckout;
import org.solovyev.android.checkout.Checkout;
@@ -58,6 +61,9 @@ import butterknife.ButterKnife;
import butterknife.InjectView;
import de.greenrobot.event.EventBus;
import io.fabric.sdk.android.Fabric;
+import retrofit.Callback;
+import retrofit.RetrofitError;
+import retrofit.client.Response;
public class MainActivity extends InstabugAppCompatActivity implements HabitRPGUserCallback.OnUserReceived {
@@ -142,6 +148,8 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
checkout.start();
EventBus.getDefault().register(this);
+
+ mAPIHelper.retrieveUser(new HabitRPGUserCallback(this));
}
@@ -162,14 +170,22 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
}
- public void onEvent(OpenGemPurchaseFragmentCommand cmd) {
- drawer.setSelection(MainDrawerBuilder.SIDEBAR_PURCHASE);
+ public void onEvent(final DeleteTaskCommand cmd){
+ mAPIHelper.apiService.deleteTask(cmd.TaskIdToDelete, new Callback() {
+ @Override
+ public void success(Void aVoid, Response response) {
+ EventBus.getDefault().post(new TaskRemovedEvent(cmd.TaskIdToDelete));
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+
+ }
+ });
}
- @Override
- public void onStart() {
- super.onStart();
- mAPIHelper.retrieveUser(new HabitRPGUserCallback(this));
+ public void onEvent(OpenGemPurchaseFragmentCommand cmd) {
+ drawer.setSelection(MainDrawerBuilder.SIDEBAR_PURCHASE);
}
@Override
@@ -247,8 +263,8 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
ArrayList allChecklistItems = new ArrayList<>();
- for(Task t : allTasks){
- if(t.checklist != null) {
+ for (Task t : allTasks) {
+ if (t.checklist != null) {
allChecklistItems.addAll(t.checklist);
}
}
@@ -267,83 +283,93 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
onlineTaskIdList.add(oTask.getId());
}
- // Load Database Tasks
- new Select().from(Task.class).where(Condition.column("user_id").eq(userId)).async().queryList(new TransactionListener>() {
- @Override
- public void onResultReceived(List tasks) {
+ Where query = new Select().from(Task.class).where(Condition.column("user_id").eq(userId));
- ArrayList tasksToDelete = new ArrayList();
+ if (query.count() != onlineEntries.size()) {
- for (Task dbTask : tasks) {
- if (!onlineTaskIdList.contains(dbTask.getId())) {
- tasksToDelete.add(dbTask);
+ // Load Database Tasks
+ query.async().queryList(new TransactionListener>() {
+ @Override
+ public void onResultReceived(List tasks) {
+
+ ArrayList tasksToDelete = new ArrayList();
+
+ for (Task dbTask : tasks) {
+ if (!onlineTaskIdList.contains(dbTask.getId())) {
+ tasksToDelete.add(dbTask);
+ }
+ }
+
+ for (Task delTask : tasksToDelete) {
+ // TaskTag
+ new Delete().from(TaskTag.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
+
+ // ChecklistItem
+ new Delete().from(ChecklistItem.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
+
+ // Days
+ new Delete().from(Days.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
+
+ // TASK
+ delTask.async().delete();
+
+ EventBus.getDefault().post(new TaskRemovedEvent(delTask.getId()));
}
}
- for (Task delTask : tasksToDelete) {
- // TaskTag
- new Delete().from(TaskTag.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
-
- // ChecklistItem
- new Delete().from(ChecklistItem.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
-
- // Days
- new Delete().from(Days.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute();
-
- // TASK
- delTask.async().delete();
-
- EventBus.getDefault().post(new OldTaskRemovedEvent(delTask.getId()));
+ @Override
+ public boolean onReady(BaseTransaction> baseTransaction) {
+ return false;
}
- }
- @Override
- public boolean onReady(BaseTransaction> baseTransaction) {
- return false;
- }
-
- @Override
- public boolean hasResult(BaseTransaction> baseTransaction, List tasks) {
- return tasks != null && tasks.size() > 0;
- }
- });
+ @Override
+ public boolean hasResult(BaseTransaction> baseTransaction, List tasks) {
+ return tasks != null && tasks.size() > 0;
+ }
+ });
+ }
}
- private void loadAndRemoveOldChecklists(final List onlineEntries){
+ private void loadAndRemoveOldChecklists(final List onlineEntries) {
final ArrayList onlineChecklistItemIdList = new ArrayList<>();
for (ChecklistItem item : onlineEntries) {
onlineChecklistItemIdList.add(item.getId());
}
- // Load Database Tasks
- new Select().from(ChecklistItem.class).async().queryList(new TransactionListener>() {
- @Override
- public void onResultReceived(List items) {
+ From query = new Select().from(ChecklistItem.class);
- ArrayList checkListItemsToDelete = new ArrayList<>();
+ if (query.count() != onlineEntries.size()) {
- for (ChecklistItem chItem : items) {
- if (!onlineChecklistItemIdList.contains(chItem.getId())) {
- checkListItemsToDelete.add(chItem);
+ // Load Database Checklist items
+ query.async().queryList(new TransactionListener>() {
+ @Override
+ public void onResultReceived(List items) {
+
+ ArrayList checkListItemsToDelete = new ArrayList<>();
+
+ for (ChecklistItem chItem : items) {
+ if (!onlineChecklistItemIdList.contains(chItem.getId())) {
+ checkListItemsToDelete.add(chItem);
+ }
+ }
+
+ for (ChecklistItem chItem : checkListItemsToDelete) {
+ chItem.async().delete();
}
}
- for (ChecklistItem chItem : checkListItemsToDelete) {
- chItem.async().delete();
+ @Override
+ public boolean onReady(BaseTransaction> baseTransaction) {
+ return false;
}
- }
- @Override
- public boolean onReady(BaseTransaction> baseTransaction) {
- return false;
- }
-
- @Override
- public boolean hasResult(BaseTransaction> baseTransaction, List items) {
- return items != null && items.size() > 0;
- }
- });
+ @Override
+ public boolean hasResult(BaseTransaction> baseTransaction, List items) {
+ return items != null && items.size() > 0;
+ }
+ });
+ }
}
private void updateUserAvatars() {
diff --git a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java
index b9b2e752c..a716d49b0 100644
--- a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java
@@ -10,7 +10,6 @@ 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.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -23,9 +22,11 @@ import android.widget.Spinner;
import android.widget.TextView;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
+import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager;
import com.habitrpg.android.habitica.ui.adapter.CheckListAdapter;
import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback;
+import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
@@ -56,6 +57,7 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O
private LinearLayout frequencyContainer;
private List tags;
private CheckListAdapter checklistAdapter;
+ private Button btnDelete;
@Override
@@ -76,6 +78,20 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O
taskText = (EditText) findViewById(R.id.task_text_edittext);
taskNotes = (EditText) findViewById(R.id.task_notes_edittext);
taskDifficultySpinner = (Spinner) findViewById(R.id.task_difficulty_spinner);
+ btnDelete = (Button)findViewById(R.id.btn_delete_task);
+ btnDelete.setEnabled(false);
+ ViewHelper.SetBackgroundTint(btnDelete, getResources().getColor(R.color.worse_10));
+ btnDelete.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ task.delete();
+
+ finish();
+ dismissKeyboard();
+
+ EventBus.getDefault().post(new DeleteTaskCommand(taskId));
+ }
+ });
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.task_difficulties, android.R.layout.simple_spinner_item);
@@ -120,6 +136,8 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O
this.task = task;
this.populate(task);
setTitle(task);
+
+ btnDelete.setEnabled(true);
} else {
setTitle((Task) null);
}
@@ -372,7 +390,6 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O
}
if (this.saveTask(this.task)) {
this.task.save();
- List taskTags = new ArrayList();
new Select()
.from(Tag.class)
.where(Condition.column("id").in("", tags.toArray())).async().queryList(tagsSearchingListener);
@@ -408,7 +425,7 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O
@Override
public void onResultReceived(List tags) {
//UI thread.
- List taskTags = new ArrayList();
+ List taskTags = new ArrayList<>();
for (Tag tag : tags) {
TaskTag tt = new TaskTag();
tt.setTag(tag);
diff --git a/Habitica/src/com/habitrpg/android/habitica/events/OldTaskRemovedEvent.java b/Habitica/src/com/habitrpg/android/habitica/events/TaskRemovedEvent.java
similarity index 66%
rename from Habitica/src/com/habitrpg/android/habitica/events/OldTaskRemovedEvent.java
rename to Habitica/src/com/habitrpg/android/habitica/events/TaskRemovedEvent.java
index de6d6a50d..35da112f7 100644
--- a/Habitica/src/com/habitrpg/android/habitica/events/OldTaskRemovedEvent.java
+++ b/Habitica/src/com/habitrpg/android/habitica/events/TaskRemovedEvent.java
@@ -3,10 +3,10 @@ package com.habitrpg.android.habitica.events;
/**
* Created by Negue on 01.12.2015.
*/
-public class OldTaskRemovedEvent {
+public class TaskRemovedEvent {
public String deletedTaskId;
- public OldTaskRemovedEvent(String id) {
+ public TaskRemovedEvent(String id) {
deletedTaskId = id;
}
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/events/commands/DeleteTaskCommand.java b/Habitica/src/com/habitrpg/android/habitica/events/commands/DeleteTaskCommand.java
new file mode 100644
index 000000000..451abb810
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/events/commands/DeleteTaskCommand.java
@@ -0,0 +1,12 @@
+package com.habitrpg.android.habitica.events.commands;
+
+/**
+ * Created by Negue on 02.12.2015.
+ */
+public class DeleteTaskCommand {
+ public String TaskIdToDelete;
+
+ public DeleteTaskCommand(String id) {
+ TaskIdToDelete = id;
+ }
+}
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 1e4ed2dca..ca9a0f836 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
@@ -6,7 +6,6 @@ import android.databinding.DataBindingUtil;
import android.databinding.ObservableArrayList;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
-import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -27,7 +26,7 @@ import com.habitrpg.android.habitica.databinding.HabitItemCardBinding;
import com.habitrpg.android.habitica.databinding.RewardItemCardBinding;
import com.habitrpg.android.habitica.databinding.TodoItemCardBinding;
import com.habitrpg.android.habitica.events.HabitScoreEvent;
-import com.habitrpg.android.habitica.events.OldTaskRemovedEvent;
+import com.habitrpg.android.habitica.events.TaskRemovedEvent;
import com.habitrpg.android.habitica.events.TaskCreatedEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
@@ -130,7 +129,7 @@ public class HabitItemRecyclerViewAdapter
filter();
}
- public void onEvent(OldTaskRemovedEvent evnt) {
+ public void onEvent(TaskRemovedEvent evnt) {
Task taskToDelete = null;
for(Task t : observableContent) {