mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Improve inbox loading
This commit is contained in:
parent
c9e376466d
commit
2dd1550518
15 changed files with 65 additions and 25 deletions
|
|
@ -2,7 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.habitrpg.android.habitica"
|
||||
android:versionCode="1929"
|
||||
android:versionCode="1930"
|
||||
android:versionName="1.2"
|
||||
android:screenOrientation="portrait"
|
||||
android:installLocation="auto" >
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ public interface ApiService {
|
|||
Observable<HabitResponse<User>> disableClasses();
|
||||
|
||||
@POST("user/mark-pms-read")
|
||||
Observable<HabitResponse<List<Void>>> markPrivateMessagesRead();
|
||||
Observable<Void> markPrivateMessagesRead();
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ public interface ApiClient {
|
|||
|
||||
Observable<User> disableClasses();
|
||||
|
||||
Observable<List<Void>> markPrivateMessagesRead();
|
||||
Observable<Void> markPrivateMessagesRead();
|
||||
|
||||
/* Group API */
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public interface SocialRepository extends BaseRepository {
|
|||
|
||||
Observable<Member> getMember(String userId);
|
||||
|
||||
Observable<List<Void>> markPrivateMessagesRead(User user);
|
||||
Observable<Void> markPrivateMessagesRead(User user);
|
||||
|
||||
Observable<RealmResults<Group>> getUserGroups();
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.habitrpg.android.habitica.models.inventory.Customization;
|
|||
import com.habitrpg.android.habitica.models.inventory.CustomizationSet;
|
||||
import com.habitrpg.android.habitica.models.responses.SkillResponse;
|
||||
import com.habitrpg.android.habitica.models.responses.UnlockResponse;
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage;
|
||||
import com.habitrpg.android.habitica.models.tasks.Task;
|
||||
import com.habitrpg.android.habitica.models.user.User;
|
||||
|
||||
|
|
@ -26,6 +27,9 @@ public interface UserRepository extends BaseRepository {
|
|||
Observable<User> retrieveUser(Boolean withTasks);
|
||||
Observable<User> retrieveUser(Boolean withTasks, Boolean forced);
|
||||
|
||||
Observable<RealmResults<ChatMessage>> getInboxMessages(String replyToUserID);
|
||||
Observable<RealmResults<ChatMessage>> getInboxOverviewList();
|
||||
|
||||
Observable<User> revive(User user);
|
||||
|
||||
void resetTutorial(@Nullable User user);
|
||||
|
|
|
|||
|
|
@ -636,8 +636,12 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<List<Void>> markPrivateMessagesRead() {
|
||||
return apiService.markPrivateMessagesRead().compose(configureApiCallObserver());
|
||||
public Observable<Void> markPrivateMessagesRead() {
|
||||
//This is necessary, because the API call returns weird data.
|
||||
return apiService.markPrivateMessagesRead()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnError(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<List<Void>> markPrivateMessagesRead(User user) {
|
||||
public Observable<Void> markPrivateMessagesRead(User user) {
|
||||
return apiClient.markPrivateMessagesRead()
|
||||
.doOnNext(aVoid -> localRepository.executeTransaction(realm -> user.getInbox().setNewMessages(0)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package com.habitrpg.android.habitica.data.implementation;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.habitrpg.android.habitica.data.ApiClient;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
|
|
@ -14,6 +12,7 @@ import com.habitrpg.android.habitica.models.inventory.CustomizationSet;
|
|||
import com.habitrpg.android.habitica.models.responses.SkillResponse;
|
||||
import com.habitrpg.android.habitica.models.responses.TaskScoringResult;
|
||||
import com.habitrpg.android.habitica.models.responses.UnlockResponse;
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage;
|
||||
import com.habitrpg.android.habitica.models.tasks.Task;
|
||||
import com.habitrpg.android.habitica.models.user.User;
|
||||
|
||||
|
|
@ -38,7 +37,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
|
|||
|
||||
private TaskRepository taskRepository;
|
||||
|
||||
public UserRepositoryImpl(UserLocalRepository localRepository, ApiClient apiClient, Context context, String userId, TaskRepository taskRepository) {
|
||||
public UserRepositoryImpl(UserLocalRepository localRepository, ApiClient apiClient, String userId, TaskRepository taskRepository) {
|
||||
super(localRepository, apiClient);
|
||||
this.taskRepository = taskRepository;
|
||||
this.userId = userId;
|
||||
|
|
@ -98,6 +97,16 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<RealmResults<ChatMessage>> getInboxMessages(String replyToUserID) {
|
||||
return localRepository.getInboxMessages(userId, replyToUserID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<RealmResults<ChatMessage>> getInboxOverviewList() {
|
||||
return localRepository.getInboxOverviewList(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<User> revive(User user) {
|
||||
return apiClient.revive().map(newUser -> mergeUser(user, newUser));
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.data.local;
|
|||
|
||||
import com.habitrpg.android.habitica.models.Skill;
|
||||
import com.habitrpg.android.habitica.models.TutorialStep;
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage;
|
||||
import com.habitrpg.android.habitica.models.user.User;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -20,4 +21,8 @@ public interface UserLocalRepository extends BaseLocalRepository {
|
|||
Observable<RealmResults<Skill>> getSkills(User user);
|
||||
|
||||
Observable<RealmResults<Skill>> getSpecialItems(User user);
|
||||
|
||||
Observable<RealmResults<ChatMessage>> getInboxMessages(String userId, String replyToUserID);
|
||||
|
||||
Observable<RealmResults<ChatMessage>> getInboxOverviewList(String userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.habitrpg.android.habitica.data.local.UserLocalRepository;
|
|||
import com.habitrpg.android.habitica.models.Skill;
|
||||
import com.habitrpg.android.habitica.models.Tag;
|
||||
import com.habitrpg.android.habitica.models.TutorialStep;
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage;
|
||||
import com.habitrpg.android.habitica.models.user.SpecialItems;
|
||||
import com.habitrpg.android.habitica.models.user.User;
|
||||
|
||||
|
|
@ -12,8 +13,8 @@ import java.util.List;
|
|||
|
||||
import io.realm.OrderedRealmCollectionSnapshot;
|
||||
import io.realm.Realm;
|
||||
import io.realm.RealmList;
|
||||
import io.realm.RealmResults;
|
||||
import io.realm.Sort;
|
||||
import rx.Observable;
|
||||
|
||||
|
||||
|
|
@ -103,4 +104,24 @@ public class RealmUserLocalRepository extends RealmBaseLocalRepository implement
|
|||
.asObservable()
|
||||
.filter(RealmResults::isLoaded);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<RealmResults<ChatMessage>> getInboxMessages(String userId, String replyToUserID) {
|
||||
return realm.where(ChatMessage.class)
|
||||
.equalTo("isInboxMessage", true)
|
||||
.equalTo("uuid", replyToUserID)
|
||||
.findAllSorted("timestamp", Sort.DESCENDING)
|
||||
.asObservable()
|
||||
.filter(RealmResults::isLoaded);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<RealmResults<ChatMessage>> getInboxOverviewList(String userId) {
|
||||
return realm.where(ChatMessage.class)
|
||||
.equalTo("isInboxMessage", true)
|
||||
.distinct("uuid")
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.asObservable()
|
||||
.filter(RealmResults::isLoaded);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ public class ChatMessage extends RealmObject {
|
|||
|
||||
public String groupId;
|
||||
|
||||
public boolean isInboxMessage;
|
||||
|
||||
public int getContributorColor() {
|
||||
int rColor = android.R.color.black;
|
||||
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ public class RepositoryModule {
|
|||
}
|
||||
|
||||
@Provides
|
||||
UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient, Context context, @Named(AppModule.NAMED_USER_ID) String userId, TaskRepository taskRepository) {
|
||||
return new UserRepositoryImpl(localRepository, apiClient, context, userId, taskRepository);
|
||||
UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient, @Named(AppModule.NAMED_USER_ID) String userId, TaskRepository taskRepository) {
|
||||
return new UserRepositoryImpl(localRepository, apiClient, userId, taskRepository);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -74,14 +74,9 @@ public class InboxFragment extends BaseMainFragment
|
|||
}
|
||||
|
||||
private void loadMessages() {
|
||||
if (user != null && user.isManaged()) {
|
||||
user.getInbox().getMessages().where()
|
||||
.distinct("uuid")
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.asObservable()
|
||||
userRepository.getInboxOverviewList()
|
||||
.first()
|
||||
.subscribe(this::setInboxMessages, RxErrorHandler.handleEmptyError());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -100,13 +100,9 @@ public class InboxMessageListFragment extends BaseMainFragment
|
|||
|
||||
private void loadMessages() {
|
||||
if (user != null && user.isManaged()) {
|
||||
compositeSubscription.add(user.getInbox().getMessages().where()
|
||||
.equalTo("uuid", replyToUserUUID)
|
||||
.findAllSortedAsync("timestamp", Sort.DESCENDING)
|
||||
.asObservable()
|
||||
.filter(RealmResults::isLoaded)
|
||||
userRepository.getInboxMessages(replyToUserUUID)
|
||||
.first()
|
||||
.subscribe(chatMessages -> this.chatAdapter.updateData(chatMessages), RxErrorHandler.handleEmptyError()));
|
||||
.subscribe(chatMessages -> this.chatAdapter.updateData(chatMessages), RxErrorHandler.handleEmptyError());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.habitrpg.android.habitica.models.Tag;
|
|||
import com.habitrpg.android.habitica.models.inventory.Quest;
|
||||
import com.habitrpg.android.habitica.models.invitations.Invitations;
|
||||
import com.habitrpg.android.habitica.models.social.Challenge;
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage;
|
||||
import com.habitrpg.android.habitica.models.social.UserParty;
|
||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder;
|
||||
import com.habitrpg.android.habitica.models.user.Authentication;
|
||||
|
|
@ -50,6 +51,9 @@ public class UserDeserializer implements JsonDeserializer<User> {
|
|||
}
|
||||
if (obj.has("inbox")) {
|
||||
user.setInbox(context.deserialize(obj.get("inbox"), Inbox.class));
|
||||
for (ChatMessage message : user.getInbox().getMessages()) {
|
||||
message.isInboxMessage = true;
|
||||
}
|
||||
}
|
||||
if (obj.has("preferences")) {
|
||||
user.setPreferences(context.deserialize(obj.get("preferences"), Preferences.class));
|
||||
|
|
|
|||
Loading…
Reference in a new issue