diff --git a/Habitica/res/menu/menu_main_activity.xml b/Habitica/res/menu/menu_main_activity.xml
index 1e13f0d6f..5cdacd0e0 100644
--- a/Habitica/res/menu/menu_main_activity.xml
+++ b/Habitica/res/menu/menu_main_activity.xml
@@ -14,6 +14,6 @@
+ app:showAsAction="ifRoom" />
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java
index 909dd535d..0d5dbeec1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java
@@ -17,4 +17,8 @@ public interface TaskRepository extends BaseRepository {
Observable taskChecked(Task task, boolean up);
Observable scoreChecklistItem(String taskId, String itemId);
+
+ Observable createTask(Task task);
+
+ Observable updateTask(String id, Task task);
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java
index 00c07381d..2b80d2209 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java
@@ -10,12 +10,15 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
import java.util.ArrayList;
+import java.util.Date;
import rx.Observable;
public class TaskRepositoryImpl extends BaseRepositoryImpl implements TaskRepository {
+ private long lastTaskAction = 0;
+
public TaskRepositoryImpl(TaskLocalRepository localRepository, ApiClient apiClient) {
super(localRepository, apiClient);
}
@@ -33,10 +36,15 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl
@Override
public Observable taskChecked(Task task, boolean up) {
+ long now = new Date().getTime();
+ if (lastTaskAction > now-500) {
+ return Observable.empty();
+ }
+ lastTaskAction = now;
return this.apiClient.postTaskDirection(task.getId(), (up ? TaskDirection.up : TaskDirection.down).toString())
.doOnNext(res -> {
// save local task changes
- if (task != null && task.type != null && !task.type.equals("reward")) {
+ if (task.type != null && !task.type.equals("reward")) {
task.value = task.value + res.getDelta();
this.localRepository.saveTask(task);
@@ -47,4 +55,22 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl
public Observable scoreChecklistItem(String taskId, String itemId){
return apiClient.scoreChecklistItem(taskId, itemId).doOnNext(this.localRepository::saveTask);
}
+
+ @Override
+ public Observable createTask(Task task) {
+ long now = new Date().getTime();
+ if (lastTaskAction > now-500) {
+ return Observable.empty();
+ }
+ return apiClient.createItem(task);
+ }
+
+ @Override
+ public Observable updateTask(String id, Task task) {
+ long now = new Date().getTime();
+ if (lastTaskAction > now-500) {
+ return Observable.empty();
+ }
+ return apiClient.updateTask(id, task);
+ }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java
index 860ee885d..0a3c4cef2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java
@@ -11,6 +11,8 @@ import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
import android.content.Context;
+import javax.inject.Singleton;
+
import dagger.Module;
import dagger.Provides;
@@ -29,6 +31,7 @@ public class RepositoryModule {
}
@Provides
+ @Singleton
TaskRepository providesTaskRepository(TaskLocalRepository localRepository, ApiClient apiClient) {
return new TaskRepositoryImpl(localRepository, apiClient);
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
index 5626a8294..75693f2b1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java
@@ -43,6 +43,7 @@ import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback;
import com.habitrpg.android.habitica.callbacks.UnlockCallback;
import com.habitrpg.android.habitica.components.AppComponent;
+import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.databinding.ValueBarBinding;
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
import com.habitrpg.android.habitica.events.DisplayFragmentEvent;
@@ -228,6 +229,9 @@ public class MainActivity extends BaseActivity implements Action1, Ha
@Inject
NotifyUserUseCase notifyUserUseCase;
+ @Inject
+ TaskRepository taskRepository;
+
// endregion
private Drawer drawer;
@@ -1451,11 +1455,10 @@ public class MainActivity extends BaseActivity implements Action1, Ha
public void onEvent(final TaskSaveEvent event) {
Task task = event.task;
if (event.created) {
- this.apiClient.createItem(task)
- .subscribe(new TaskCreationCallback(), throwable -> {
+ this.taskRepository.createTask(task).subscribe(new TaskCreationCallback(), throwable -> {
});
} else {
- this.apiClient.updateTask(task.getId(), task)
+ this.taskRepository.updateTask(task.getId(), task)
.subscribe(new TaskUpdateCallback(), throwable -> {
});
}