fix crashes

This commit is contained in:
Phillip Thelen 2017-04-28 19:29:52 +02:00
parent 6b7383da12
commit 5033d708f0
12 changed files with 37 additions and 19 deletions

View file

@ -19,7 +19,7 @@ import rx.Observable;
public interface TaskRepository extends BaseRepository {
Observable<RealmResults<Task>> getTasks(String taskType, String userID);
Observable<RealmResults<Task>> getTasks(String userId);
void saveTasks(TasksOrder order, TaskList tasks);
void saveTasks(String userId, TasksOrder order, TaskList tasks);
Observable<TaskList> refreshTasks(TasksOrder tasksOrder);

View file

@ -47,14 +47,14 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
}
@Override
public void saveTasks(TasksOrder order, TaskList tasks) {
localRepository.saveTasks(order, tasks);
public void saveTasks(String userId, TasksOrder order, TaskList tasks) {
localRepository.saveTasks(userId, order, tasks);
}
@Override
public Observable<TaskList> refreshTasks(TasksOrder tasksOrder) {
return this.apiClient.getTasks()
.doOnNext(res -> this.localRepository.saveTasks(tasksOrder, res));
.doOnNext(res -> this.localRepository.saveTasks(null, tasksOrder, res));
}
@Override

View file

@ -65,7 +65,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
lastSync = new Date();
return apiClient.retrieveUser(withTasks)
.doOnNext(localRepository::saveUser)
.doOnNext(user -> taskRepository.saveTasks(user.getTasksOrder(), user.tasks))
.doOnNext(user -> taskRepository.saveTasks(user.getId(), user.getTasksOrder(), user.tasks))
.flatMap(user -> {
Calendar calendar = new GregorianCalendar();
TimeZone timeZone = calendar.getTimeZone();

View file

@ -1,5 +1,7 @@
package com.habitrpg.android.habitica.data.local.implementation;
import android.support.annotation.Nullable;
import com.habitrpg.android.habitica.data.local.TaskLocalRepository;
import com.habitrpg.android.habitica.models.tasks.ChecklistItem;
import com.habitrpg.android.habitica.models.tasks.RemindersItem;
@ -35,7 +37,7 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
}
@Override
public void saveTasks(String userId, TasksOrder tasksOrder, TaskList tasks) {
public void saveTasks(@Nullable String userId, TasksOrder tasksOrder, TaskList tasks) {
realm.executeTransactionAsync(realm1 -> {
List<Task> sortedTasks = new ArrayList<>();
@ -44,7 +46,9 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
sortedTasks.addAll(sortTasks(tasks.tasks, tasksOrder.getTodos()));
sortedTasks.addAll(sortTasks(tasks.tasks, tasksOrder.getRewards()));
removeOldTasks(userId, sortedTasks);
if (userId != null) {
removeOldTasks(realm1, userId, sortedTasks);
}
realm1.insertOrUpdate(sortedTasks);
});
@ -70,8 +74,8 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
realm.executeTransaction(realm1 -> realm1.insertOrUpdate(task));
}
private void removeOldTasks(String userID, List<Task> onlineTaskList) {
RealmResults<Task> localTasks = realm.where(Task.class).equalTo("userId", userID).findAll();
private void removeOldTasks(Realm realm1, String userID, List<Task> onlineTaskList) {
RealmResults<Task> localTasks = realm1.where(Task.class).equalTo("userId", userID).findAll();
for (Task localTask : localTasks) {
if (!onlineTaskList.contains(localTask)) {
for (ChecklistItem item : localTask.checklist) {

View file

@ -70,6 +70,9 @@ public class RealmUserLocalRepository extends RealmBaseLocalRepository implement
ownedItems.add("spookySparkles");
}
}
if (ownedItems.size() == 0) {
return Observable.empty();
}
return realm.where(Skill.class)
.in("key", ownedItems.toArray(new String[0]))
.findAll()

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.models.social;
import com.google.gson.annotations.SerializedName;
import com.habitrpg.android.habitica.models.user.User;
import java.util.HashMap;
@ -26,7 +27,8 @@ public class Challenge extends RealmObject {
public int prize;
public boolean official;
public int memberCount;
public String user_id;
@SerializedName("user_id")
public String userId;
public String todoList;
public String habitList;
public String dailyList;

View file

@ -541,4 +541,13 @@ public class Task extends RealmObject {
this.parsedNotes = this.getNotes();
}
}
@Override
public boolean equals(Object obj) {
if (Task.class.isAssignableFrom(obj.getClass())) {
Task otherTask = (Task) obj;
return this.id.equals(otherTask.getId());
}
return super.equals(obj);
}
}

View file

@ -85,8 +85,8 @@ public class RepositoryModule {
}
@Provides
UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient) {
return new UserRepositoryImpl(localRepository, apiClient);
UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient, TaskRepository taskRepository) {
return new UserRepositoryImpl(localRepository, apiClient, taskRepository);
}
@Provides

View file

@ -279,7 +279,7 @@ public class ChallengeDetailActivity extends BaseActivity {
showRemoveTasksDialog(keepTasks -> this.apiClient.leaveChallenge(challenge.id, new LeaveChallengeBody(keepTasks))
.subscribe(aVoid -> {
challenge.user_id = null;
challenge.userId = null;
user.resetChallengeList();
finish();

View file

@ -177,7 +177,7 @@ public class ChallengesListViewAdapter extends RecyclerView.Adapter<ChallengesLi
challengeDescription.setText(challenge.groupName);
officialChallengeLayout.setVisibility(challenge.official ? View.VISIBLE : View.GONE);
boolean userIdExists = challenge.user_id != null && !challenge.user_id.isEmpty();
boolean userIdExists = challenge.userId != null && !challenge.userId.isEmpty();
if (viewUserChallengesOnly) {
leaderParticipantLayout.setVisibility(View.GONE);

View file

@ -107,7 +107,7 @@ public class ChallengeDetailDialogHolder {
}
private void changeViewsByChallenge(Challenge challenge) {
setJoined(challenge.user_id != null && !challenge.user_id.isEmpty());
setJoined(challenge.userId != null && !challenge.userId.isEmpty());
challengeName.setText(EmojiParser.parseEmojis(challenge.name));
challengeDescription.setText(MarkdownParser.parseMarkdown(challenge.description));
@ -290,7 +290,7 @@ public class ChallengeDetailDialogHolder {
this.apiClient.joinChallenge(challenge.id)
.subscribe(challenge -> {
if (this.user != null) {
challenge.user_id = this.user.getId();
challenge.userId = this.user.getId();
}
if (challengeJoinedAction != null) {
@ -311,7 +311,7 @@ public class ChallengeDetailDialogHolder {
showRemoveTasksDialog(keepTasks -> this.apiClient.leaveChallenge(challenge.id, new LeaveChallengeBody(keepTasks))
.subscribe(aVoid -> {
challenge.user_id = null;
challenge.userId = null;
if (this.user != null) {
this.user.resetChallengeList();

View file

@ -87,10 +87,10 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr
for (Challenge challenge : challenges) {
if (userChallengesHash.contains(challenge.id) && challenge.name != null && !challenge.name.isEmpty()) {
challenge.user_id = this.user.getId();
challenge.userId = this.user.getId();
userChallenges.add(challenge);
} else {
challenge.user_id = null;
challenge.userId = null;
}
}