mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-18 11:49:01 +00:00
Refactor main activity
This commit is contained in:
parent
5456599430
commit
e561e2db30
15 changed files with 360 additions and 340 deletions
|
|
@ -1,20 +0,0 @@
|
|||
package com.habitrpg.android.habitica.callbacks;
|
||||
|
||||
import com.habitrpg.android.habitica.events.TaskCreatedEvent;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import rx.functions.Action1;
|
||||
|
||||
/**
|
||||
* Created by magicmicky on 02/04/15.
|
||||
*/
|
||||
public class TaskCreationCallback implements Action1<Task> {
|
||||
|
||||
@Override
|
||||
public void call(Task task) {
|
||||
task.save();
|
||||
EventBus.getDefault().post(new TaskCreatedEvent(task));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
package com.habitrpg.android.habitica.callbacks;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
|
||||
import rx.functions.Action1;
|
||||
|
||||
|
||||
/**
|
||||
* Created by magicmicky on 02/04/15.
|
||||
*/
|
||||
public class TaskDeletionCallback implements Action1<Void> {
|
||||
private final OnTaskDeleted callback;
|
||||
private final Task taskToDelete;
|
||||
|
||||
public TaskDeletionCallback(OnTaskDeleted cb, Task taskToDelete) {
|
||||
this.callback = cb;
|
||||
this.taskToDelete = taskToDelete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void call(Void aVoid) {
|
||||
callback.onTaskDeleted(taskToDelete);
|
||||
}
|
||||
|
||||
|
||||
public interface OnTaskDeleted {
|
||||
public void onTaskDeleted(Task deleted);
|
||||
}
|
||||
}
|
||||
|
|
@ -19,4 +19,6 @@ public interface TagRepository extends BaseRepository {
|
|||
Observable<Tag> createTags(Collection<Tag> tags);
|
||||
Observable<Tag> updateTags(Collection<Tag> tags);
|
||||
Observable<List<Void>> deleteTags(Collection<String> tagIds);
|
||||
|
||||
void removeOldTags(List<Tag> onlineTags);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,11 @@ package com.habitrpg.android.habitica.data;
|
|||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -24,4 +27,9 @@ public interface TaskRepository extends BaseRepository {
|
|||
Observable<Task> updateTask(Task task);
|
||||
|
||||
Observable<Void> deleteTask(String taskID);
|
||||
|
||||
void removeOldTasks(String userID, List<Task> onlineTaskList);
|
||||
void removeOldChecklists(List<ChecklistItem> onlineChecklistItems);
|
||||
void removeOldTaskTags(List<TaskTag> onlineTaskTags);
|
||||
void removeOldReminders(List<RemindersItem> onlineReminders);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,4 +56,9 @@ public class TagRepositoryImpl extends BaseRepositoryImpl<TagLocalRepository> im
|
|||
.flatMap(this::deleteTag)
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTags(List<Tag> onlineTags) {
|
||||
localRepository.removeOldTags(onlineTags);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,19 @@ package com.habitrpg.android.habitica.data.implementation;
|
|||
import com.habitrpg.android.habitica.data.ApiClient;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository;
|
||||
import com.habitrpg.android.habitica.events.TaskCreatedEvent;
|
||||
import com.habitrpg.android.habitica.events.TaskUpdatedEvent;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -62,7 +69,11 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
|
|||
if (lastTaskAction > now-500) {
|
||||
return Observable.empty();
|
||||
}
|
||||
return apiClient.createItem(task);
|
||||
return apiClient.createItem(task)
|
||||
.doOnNext(task1 -> {
|
||||
localRepository.saveTask(task1);
|
||||
EventBus.getDefault().post(new TaskCreatedEvent(task1));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -71,11 +82,36 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
|
|||
if (lastTaskAction > now-500) {
|
||||
return Observable.empty();
|
||||
}
|
||||
return apiClient.updateTask(task.getId(), task);
|
||||
return apiClient.updateTask(task.getId(), task)
|
||||
.doOnNext(task1 -> {
|
||||
localRepository.saveTask(task1);
|
||||
EventBus.getDefault().post(new TaskUpdatedEvent(task1));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Void> deleteTask(String taskID) {
|
||||
return apiClient.deleteTask(taskID);
|
||||
return apiClient.deleteTask(taskID)
|
||||
.doOnNext(aVoid -> localRepository.deleteTask(taskID));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTasks(String userID, List<Task> onlineTaskList) {
|
||||
localRepository.removeOldTasks(userID, onlineTaskList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldChecklists(List<ChecklistItem> onlineChecklistItems) {
|
||||
localRepository.removeOldChecklists(onlineChecklistItems);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTaskTags(List<TaskTag> onlineTaskTags) {
|
||||
localRepository.removeOldTaskTags(onlineTaskTags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldReminders(List<RemindersItem> onlineReminders) {
|
||||
localRepository.removeOldReminders(onlineReminders);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
|||
import java.util.Map;
|
||||
|
||||
import rx.Observable;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
|
||||
|
||||
public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository> implements UserRepository {
|
||||
|
|
@ -30,7 +29,8 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
|
|||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> retrieveUser(Boolean withTasks) {
|
||||
return apiClient.retrieveUser(withTasks);
|
||||
return apiClient.retrieveUser(withTasks)
|
||||
.doOnNext(localRepository::saveUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -52,7 +52,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
|
|||
oldUser.getStats().merge(newUser.getStats());
|
||||
}
|
||||
|
||||
oldUser.async().save();
|
||||
localRepository.saveUser(oldUser);
|
||||
return oldUser;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,4 +8,6 @@ import rx.Observable;
|
|||
|
||||
public interface TagLocalRepository extends BaseLocalRepository {
|
||||
Observable<List<Tag>> getTags();
|
||||
|
||||
void removeOldTags(List<Tag> onlineTags);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.habitrpg.android.habitica.data.local;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -16,4 +19,11 @@ public interface TaskLocalRepository extends BaseLocalRepository {
|
|||
void saveTasks(TasksOrder tasksOrder, TaskList tasks);
|
||||
|
||||
void saveTask(Task task);
|
||||
|
||||
void removeOldTasks(String userID, List<Task> onlineTaskList);
|
||||
void removeOldChecklists(List<ChecklistItem> onlineChecklistItems);
|
||||
void removeOldTaskTags(List<TaskTag> onlineTaskTags);
|
||||
void removeOldReminders(List<RemindersItem> onlineReminders);
|
||||
|
||||
void deleteTask(String taskID);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,4 +8,5 @@ public interface UserLocalRepository extends BaseLocalRepository {
|
|||
|
||||
Observable<HabitRPGUser> getUser(String userID);
|
||||
|
||||
void saveUser(HabitRPGUser user);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
package com.habitrpg.android.habitica.data.local.implementation;
|
||||
|
||||
|
||||
import android.database.sqlite.SQLiteDoneException;
|
||||
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener;
|
||||
import com.raizlabs.android.dbflow.sql.language.From;
|
||||
import com.raizlabs.android.dbflow.sql.language.OrderBy;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
|
@ -22,4 +28,50 @@ public class DbFlowTagLocalRepository implements TagLocalRepository {
|
|||
.orderBy(OrderBy.columns("position", "dateCreated").descending())
|
||||
.queryList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTags(List<Tag> onlineTags) {
|
||||
final ArrayList<String> onlineTaskTagItemIdList = new ArrayList<>();
|
||||
|
||||
for (Tag item : onlineTags) {
|
||||
onlineTaskTagItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<Tag> query = new Select().from(Tag.class);
|
||||
try {
|
||||
if (query.count() != onlineTags.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<Tag>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<Tag> items) {
|
||||
|
||||
ArrayList<Tag> tagsToDelete = new ArrayList<>();
|
||||
|
||||
for (Tag tag : items) {
|
||||
if (!onlineTaskTagItemIdList.contains(tag.getId())) {
|
||||
tagsToDelete.add(tag);
|
||||
}
|
||||
}
|
||||
|
||||
for (Tag tag : tagsToDelete) {
|
||||
tag.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<Tag>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<Tag>> transaction, List<Tag> result) {
|
||||
return result != null && result.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,28 @@
|
|||
package com.habitrpg.android.habitica.data.local.implementation;
|
||||
|
||||
import android.database.sqlite.SQLiteDoneException;
|
||||
|
||||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository;
|
||||
import com.habitrpg.android.habitica.events.TaskRemovedEvent;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
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.OrderBy;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
import com.raizlabs.android.dbflow.sql.language.Where;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
|
@ -29,6 +42,12 @@ public class DbFlowTaskLocalRepository implements TaskLocalRepository {
|
|||
.queryList()));
|
||||
}
|
||||
|
||||
public Observable<Task> getTask(String taskID) {
|
||||
return Observable.defer(() -> Observable.just(new Select().from(Task.class)
|
||||
.where(Condition.column("id").eq(taskID))
|
||||
.querySingle()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveTasks(TasksOrder tasksOrder, TaskList tasks) {
|
||||
sortTasks(tasks, tasksOrder.getHabits());
|
||||
|
|
@ -51,11 +70,211 @@ public class DbFlowTaskLocalRepository implements TaskLocalRepository {
|
|||
task.async().save();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTasks(String userID, List<Task> onlineTaskList) {
|
||||
final ArrayList<String> onlineTaskIdList = new ArrayList<>();
|
||||
|
||||
for (Task oTask : onlineTaskList) {
|
||||
onlineTaskIdList.add(oTask.getId());
|
||||
}
|
||||
|
||||
Where<Task> query = new Select().from(Task.class).where(Condition.column("user_id").eq(userID));
|
||||
try {
|
||||
if (query.count() != onlineTaskList.size()) {
|
||||
|
||||
// Load Database Tasks
|
||||
query.async().queryList(new TransactionListener<List<Task>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<Task> tasks) {
|
||||
|
||||
ArrayList<Task> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<Task>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<Task>> baseTransaction, List<Task> tasks) {
|
||||
return tasks != null && tasks.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldChecklists(List<ChecklistItem> onlineChecklistItems) {
|
||||
final ArrayList<String> onlineChecklistItemIdList = new ArrayList<>();
|
||||
|
||||
for (ChecklistItem item : onlineChecklistItems) {
|
||||
onlineChecklistItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<ChecklistItem> query = new Select().from(ChecklistItem.class);
|
||||
try {
|
||||
if (query.count() != onlineChecklistItems.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<ChecklistItem>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<ChecklistItem> items) {
|
||||
|
||||
ArrayList<ChecklistItem> checkListItemsToDelete = new ArrayList<>();
|
||||
|
||||
for (ChecklistItem chItem : items) {
|
||||
if (!onlineChecklistItemIdList.contains(chItem.getId())) {
|
||||
checkListItemsToDelete.add(chItem);
|
||||
}
|
||||
}
|
||||
|
||||
for (ChecklistItem chItem : checkListItemsToDelete) {
|
||||
chItem.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<ChecklistItem>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<ChecklistItem>> baseTransaction, List<ChecklistItem> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldTaskTags(List<TaskTag> onlineTaskTags) {
|
||||
final ArrayList<String> onlineTaskTagItemIdList = new ArrayList<>();
|
||||
|
||||
for (TaskTag item : onlineTaskTags) {
|
||||
onlineTaskTagItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<TaskTag> query = new Select().from(TaskTag.class);
|
||||
try {
|
||||
if (query.count() != onlineTaskTags.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<TaskTag>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<TaskTag> items) {
|
||||
|
||||
ArrayList<TaskTag> checkListItemsToDelete = new ArrayList<>();
|
||||
|
||||
for (TaskTag ttag : items) {
|
||||
if (!onlineTaskTagItemIdList.contains(ttag.getId())) {
|
||||
checkListItemsToDelete.add(ttag);
|
||||
}
|
||||
}
|
||||
|
||||
for (TaskTag ttag : checkListItemsToDelete) {
|
||||
ttag.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<TaskTag>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<TaskTag>> baseTransaction, List<TaskTag> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeOldReminders(List<RemindersItem> onlineReminders) {
|
||||
final ArrayList<String> onlineReminderIds = new ArrayList<>();
|
||||
|
||||
for (RemindersItem item : onlineReminders) {
|
||||
onlineReminderIds.add(item.getId());
|
||||
}
|
||||
|
||||
From<RemindersItem> query = new Select().from(RemindersItem.class);
|
||||
try {
|
||||
if (query.count() != onlineReminders.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<RemindersItem>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<RemindersItem> items) {
|
||||
|
||||
ArrayList<RemindersItem> remindersToDelete = new ArrayList<>();
|
||||
|
||||
for (RemindersItem reminder : items) {
|
||||
if (!onlineReminderIds.contains(reminder.getId())) {
|
||||
remindersToDelete.add(reminder);
|
||||
}
|
||||
}
|
||||
|
||||
for (RemindersItem reminder : remindersToDelete) {
|
||||
reminder.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<RemindersItem>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<RemindersItem>> baseTransaction, List<RemindersItem> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteTask(String taskID) {
|
||||
getTask(taskID).subscribe(Task::delete, throwable -> {});
|
||||
}
|
||||
|
||||
private List<Task> sortTasks(TaskList taskList, List<String> taskOrder) {
|
||||
List<Task> taskResult = new ArrayList<>();
|
||||
int position = 0;
|
||||
|
||||
|
||||
for (String taskId : taskOrder) {
|
||||
Task task = taskList.tasks.get(taskId);
|
||||
if (task != null) {
|
||||
|
|
|
|||
|
|
@ -18,4 +18,9 @@ public class DbFlowUserLocalRepository implements UserLocalRepository {
|
|||
return Observable.defer(() -> Observable.just(new Select()
|
||||
.from(HabitRPGUser.class).where(Condition.column("id").eq(userID)).querySingle()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUser(HabitRPGUser user) {
|
||||
user.async().save();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import android.content.pm.PackageInfo;
|
|||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.database.sqlite.SQLiteDoneException;
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
|
|
@ -23,7 +22,6 @@ import android.support.v4.app.FragmentTransaction;
|
|||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
|
|
@ -41,12 +39,12 @@ import com.habitrpg.android.habitica.HostConfig;
|
|||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.ItemsCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.MergeUserCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.TaskCreationCallback;
|
||||
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.ApiClient;
|
||||
import com.habitrpg.android.habitica.data.TagRepository;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.databinding.ValueBarBinding;
|
||||
|
|
@ -103,14 +101,12 @@ import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider;
|
|||
import com.habitrpg.android.habitica.widget.DailiesWidgetProvider;
|
||||
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider;
|
||||
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider;
|
||||
import com.habitrpg.android.habitica.data.ApiClient;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.MaintenanceApiService;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Preferences;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Shop;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SpecialItems;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Stats;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg;
|
||||
|
|
@ -121,7 +117,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.MaintenanceResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
|
|
@ -133,15 +128,9 @@ import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
|||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
|
||||
import com.raizlabs.android.dbflow.runtime.TransactionManager;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo;
|
||||
import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction;
|
||||
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 com.raizlabs.android.dbflow.structure.BaseModel;
|
||||
import com.roughike.bottombar.BottomBar;
|
||||
|
||||
|
|
@ -235,6 +224,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
TaskRepository taskRepository;
|
||||
@Inject
|
||||
UserRepository userRepository;
|
||||
@Inject
|
||||
TagRepository tagRepository;
|
||||
|
||||
// endregion
|
||||
|
||||
|
|
@ -471,7 +462,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
allTasks.addAll(user.getHabits());
|
||||
allTasks.addAll(user.getRewards());
|
||||
|
||||
loadAndRemoveOldTasks(user.getId(), allTasks);
|
||||
taskRepository.removeOldTasks(user.getId(), allTasks);
|
||||
|
||||
ArrayList<ChecklistItem> allChecklistItems = new ArrayList<>();
|
||||
for (Task t : allTasks) {
|
||||
|
|
@ -479,7 +470,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
allChecklistItems.addAll(t.checklist);
|
||||
}
|
||||
}
|
||||
loadAndRemoveOldChecklists(allChecklistItems);
|
||||
taskRepository.removeOldChecklists(allChecklistItems);
|
||||
|
||||
ArrayList<TaskTag> allTaskTags = new ArrayList<>();
|
||||
for (Task t : allTasks) {
|
||||
|
|
@ -487,7 +478,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
allTaskTags.addAll(t.getTags());
|
||||
}
|
||||
}
|
||||
loadAndRemoveOldTaskTags(allTaskTags);
|
||||
taskRepository.removeOldTaskTags(allTaskTags);
|
||||
|
||||
ArrayList<RemindersItem> allReminders = new ArrayList<>();
|
||||
for (Task t : allTasks) {
|
||||
|
|
@ -495,9 +486,9 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
allReminders.addAll(t.getReminders());
|
||||
}
|
||||
}
|
||||
loadAndRemoveOldReminders(allReminders);
|
||||
taskRepository.removeOldReminders(allReminders);
|
||||
|
||||
loadAndRemoveOldTags(user.getTags());
|
||||
tagRepository.removeOldTags(user.getTags());
|
||||
|
||||
updateOwnedDataForUser(user);
|
||||
}
|
||||
|
|
@ -506,63 +497,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
}
|
||||
|
||||
private void loadAndRemoveOldTasks(String userId, final List<Task> onlineEntries) {
|
||||
final ArrayList<String> onlineTaskIdList = new ArrayList<>();
|
||||
|
||||
for (Task oTask : onlineEntries) {
|
||||
onlineTaskIdList.add(oTask.getId());
|
||||
}
|
||||
|
||||
Where<Task> query = new Select().from(Task.class).where(Condition.column("user_id").eq(userId));
|
||||
try {
|
||||
if (query.count() != onlineEntries.size()) {
|
||||
|
||||
// Load Database Tasks
|
||||
query.async().queryList(new TransactionListener<List<Task>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<Task> tasks) {
|
||||
|
||||
ArrayList<Task> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<Task>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<Task>> baseTransaction, List<Task> tasks) {
|
||||
return tasks != null && tasks.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
}
|
||||
|
||||
private void displayNewInboxMessagesBadge() {
|
||||
Integer numberOfUnreadPms = this.user.getInbox().getNewMessages();
|
||||
IDrawerItem newInboxItem;
|
||||
|
|
@ -587,191 +521,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
this.drawer.updateItemAtPosition(newInboxItem, this.drawer.getPosition(MainDrawerBuilder.SIDEBAR_INBOX));
|
||||
}
|
||||
|
||||
|
||||
private void loadAndRemoveOldChecklists(final List<ChecklistItem> onlineEntries) {
|
||||
final ArrayList<String> onlineChecklistItemIdList = new ArrayList<>();
|
||||
|
||||
for (ChecklistItem item : onlineEntries) {
|
||||
onlineChecklistItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<ChecklistItem> query = new Select().from(ChecklistItem.class);
|
||||
try {
|
||||
if (query.count() != onlineEntries.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<ChecklistItem>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<ChecklistItem> items) {
|
||||
|
||||
ArrayList<ChecklistItem> checkListItemsToDelete = new ArrayList<>();
|
||||
|
||||
for (ChecklistItem chItem : items) {
|
||||
if (!onlineChecklistItemIdList.contains(chItem.getId())) {
|
||||
checkListItemsToDelete.add(chItem);
|
||||
}
|
||||
}
|
||||
|
||||
for (ChecklistItem chItem : checkListItemsToDelete) {
|
||||
chItem.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<ChecklistItem>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<ChecklistItem>> baseTransaction, List<ChecklistItem> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadAndRemoveOldTaskTags(final List<TaskTag> onlineEntries) {
|
||||
final ArrayList<String> onlineTaskTagItemIdList = new ArrayList<>();
|
||||
|
||||
for (TaskTag item : onlineEntries) {
|
||||
onlineTaskTagItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<TaskTag> query = new Select().from(TaskTag.class);
|
||||
try {
|
||||
if (query.count() != onlineEntries.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<TaskTag>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<TaskTag> items) {
|
||||
|
||||
ArrayList<TaskTag> checkListItemsToDelete = new ArrayList<>();
|
||||
|
||||
for (TaskTag ttag : items) {
|
||||
if (!onlineTaskTagItemIdList.contains(ttag.getId())) {
|
||||
checkListItemsToDelete.add(ttag);
|
||||
}
|
||||
}
|
||||
|
||||
for (TaskTag ttag : checkListItemsToDelete) {
|
||||
ttag.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<TaskTag>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<TaskTag>> baseTransaction, List<TaskTag> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadAndRemoveOldReminders(final List<RemindersItem> onlineEntries) {
|
||||
final ArrayList<String> onlineTaskTagItemIdList = new ArrayList<>();
|
||||
|
||||
for (RemindersItem item : onlineEntries) {
|
||||
onlineTaskTagItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<RemindersItem> query = new Select().from(RemindersItem.class);
|
||||
try {
|
||||
if (query.count() != onlineEntries.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<RemindersItem>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<RemindersItem> items) {
|
||||
|
||||
ArrayList<RemindersItem> remindersToDelete = new ArrayList<>();
|
||||
|
||||
for (RemindersItem reminder : items) {
|
||||
if (!onlineTaskTagItemIdList.contains(reminder.getId())) {
|
||||
remindersToDelete.add(reminder);
|
||||
}
|
||||
}
|
||||
|
||||
for (RemindersItem reminder : remindersToDelete) {
|
||||
reminder.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<RemindersItem>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<RemindersItem>> baseTransaction, List<RemindersItem> items) {
|
||||
return items != null && items.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadAndRemoveOldTags(final List<Tag> onlineEntries) {
|
||||
final ArrayList<String> onlineTaskTagItemIdList = new ArrayList<>();
|
||||
|
||||
for (Tag item : onlineEntries) {
|
||||
onlineTaskTagItemIdList.add(item.getId());
|
||||
}
|
||||
|
||||
From<Tag> query = new Select().from(Tag.class);
|
||||
try {
|
||||
if (query.count() != onlineEntries.size()) {
|
||||
|
||||
// Load Database Checklist items
|
||||
query.async().queryList(new TransactionListener<List<Tag>>() {
|
||||
@Override
|
||||
public void onResultReceived(List<Tag> items) {
|
||||
|
||||
ArrayList<Tag> tagsToDelete = new ArrayList<>();
|
||||
|
||||
for (Tag tag : items) {
|
||||
if (!onlineTaskTagItemIdList.contains(tag.getId())) {
|
||||
tagsToDelete.add(tag);
|
||||
}
|
||||
}
|
||||
|
||||
for (Tag tag : tagsToDelete) {
|
||||
tag.async().delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<List<Tag>> baseTransaction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<List<Tag>> transaction, List<Tag> result) {
|
||||
return result != null && result.size() > 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (SQLiteDoneException ignored) {
|
||||
//Ignored
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void updateOwnedDataForUser(HabitRPGUser user) {
|
||||
if (user == null || user.getItems() == null) {
|
||||
return;
|
||||
|
|
@ -1001,7 +750,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
observable = apiClient.purchaseItem(event.item.purchaseType, event.item.key);
|
||||
}
|
||||
observable
|
||||
|
||||
.doOnNext(aVoid -> showSnackbar(this, floatingMenuWrapper, getString(R.string.successful_purchase, event.item.text), SnackbarDisplayType.NORMAL))
|
||||
.subscribe(buyResponse -> userRepository.retrieveUser(false)
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
|
|
@ -1316,7 +1064,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
protected void retrieveUser() {
|
||||
if (this.userRepository != null) {
|
||||
this.userRepository.retrieveUser(true)
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
.subscribe(this::onUserReceived, throwable -> {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1436,12 +1184,9 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
public void onEvent(final TaskSaveEvent event) {
|
||||
Task task = event.task;
|
||||
if (event.created) {
|
||||
this.taskRepository.createTask(task).subscribe(new TaskCreationCallback(), throwable -> {
|
||||
});
|
||||
this.taskRepository.createTask(task).subscribe(task1 -> {}, throwable -> {});
|
||||
} else {
|
||||
this.taskRepository.updateTask(task)
|
||||
.subscribe(new TaskUpdateCallback(), throwable -> {
|
||||
});
|
||||
this.taskRepository.updateTask(task).subscribe(task1 -> {}, throwable -> {});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1486,18 +1231,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
}
|
||||
|
||||
public void unlockDrawer(int gravity) {
|
||||
if (this.drawer != null) {
|
||||
this.drawer.getDrawerLayout().setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, gravity);
|
||||
}
|
||||
}
|
||||
|
||||
public void lockDrawer(int gravity) {
|
||||
if (this.drawer != null) {
|
||||
this.drawer.getDrawerLayout().setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, gravity);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onEvent(OpenFullProfileCommand cmd) {
|
||||
if (cmd.MemberId.equals("system"))
|
||||
|
|
|
|||
|
|
@ -100,10 +100,6 @@ public class TasksFragment extends BaseMainFragment {
|
|||
reward_fab.setOnClickListener(v1 -> openNewTaskActivity(Task.TYPE_REWARD));
|
||||
floatingMenu.setOnMenuButtonLongClickListener(this::onFloatingMenuLongClicked);
|
||||
|
||||
if (this.activity != null) {
|
||||
this.activity.unlockDrawer(GravityCompat.END);
|
||||
}
|
||||
|
||||
loadTaskLists();
|
||||
|
||||
if (bottomNavigation != null) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue