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 -> { }); }