mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-19 16:19:33 +01:00
Add support for Group V2 description field.
This commit is contained in:
committed by
Greyson Parrelli
parent
b3aec58e69
commit
8c9df8d3be
@@ -0,0 +1,29 @@
|
||||
package org.thoughtcrime.securesms.messagerequests;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
final class GroupInfo {
|
||||
static final GroupInfo ZERO = new GroupInfo(0, 0, "");
|
||||
|
||||
private final int fullMemberCount;
|
||||
private final int pendingMemberCount;
|
||||
private final String description;
|
||||
|
||||
GroupInfo(int fullMemberCount, int pendingMemberCount, @NonNull String description) {
|
||||
this.fullMemberCount = fullMemberCount;
|
||||
this.pendingMemberCount = pendingMemberCount;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
int getFullMemberCount() {
|
||||
return fullMemberCount;
|
||||
}
|
||||
|
||||
int getPendingMemberCount() {
|
||||
return pendingMemberCount;
|
||||
}
|
||||
|
||||
public @NonNull String getDescription() {
|
||||
return description;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package org.thoughtcrime.securesms.messagerequests;
|
||||
|
||||
final class GroupMemberCount {
|
||||
static final GroupMemberCount ZERO = new GroupMemberCount(0, 0);
|
||||
|
||||
private final int fullMemberCount;
|
||||
private final int pendingMemberCount;
|
||||
|
||||
GroupMemberCount(int fullMemberCount, int pendingMemberCount) {
|
||||
this.fullMemberCount = fullMemberCount;
|
||||
this.pendingMemberCount = pendingMemberCount;
|
||||
}
|
||||
|
||||
int getFullMemberCount() {
|
||||
return fullMemberCount;
|
||||
}
|
||||
|
||||
int getPendingMemberCount() {
|
||||
return pendingMemberCount;
|
||||
}
|
||||
}
|
||||
@@ -56,18 +56,18 @@ final class MessageRequestRepository {
|
||||
});
|
||||
}
|
||||
|
||||
void getMemberCount(@NonNull RecipientId recipientId, @NonNull Consumer<GroupMemberCount> onMemberCountLoaded) {
|
||||
void getGroupInfo(@NonNull RecipientId recipientId, @NonNull Consumer<GroupInfo> onGroupInfoLoaded) {
|
||||
executor.execute(() -> {
|
||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
Optional<GroupDatabase.GroupRecord> groupRecord = groupDatabase.getGroup(recipientId);
|
||||
onMemberCountLoaded.accept(groupRecord.transform(record -> {
|
||||
onGroupInfoLoaded.accept(groupRecord.transform(record -> {
|
||||
if (record.isV2Group()) {
|
||||
DecryptedGroup decryptedGroup = record.requireV2GroupProperties().getDecryptedGroup();
|
||||
return new GroupMemberCount(decryptedGroup.getMembersCount(), decryptedGroup.getPendingMembersCount());
|
||||
return new GroupInfo(decryptedGroup.getMembersCount(), decryptedGroup.getPendingMembersCount(), decryptedGroup.getDescription());
|
||||
} else {
|
||||
return new GroupMemberCount(record.getMembers().size(), 0);
|
||||
return new GroupInfo(record.getMembers().size(), 0, "");
|
||||
}
|
||||
}).or(GroupMemberCount.ZERO));
|
||||
}).or(GroupInfo.ZERO));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataTriple;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
|
||||
import org.thoughtcrime.securesms.util.livedata.Store;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -33,10 +34,9 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
private final MutableLiveData<Recipient> recipient = new MutableLiveData<>();
|
||||
private final LiveData<MessageData> messageData;
|
||||
private final MutableLiveData<List<String>> groups = new MutableLiveData<>(Collections.emptyList());
|
||||
private final MutableLiveData<GroupMemberCount> memberCount = new MutableLiveData<>(GroupMemberCount.ZERO);
|
||||
private final MutableLiveData<GroupInfo> groupInfo = new MutableLiveData<>(GroupInfo.ZERO);
|
||||
private final LiveData<RequestReviewDisplayState> requestReviewDisplayState;
|
||||
private final LiveData<RecipientInfo> recipientInfo = Transformations.map(new LiveDataTriple<>(recipient, memberCount, groups),
|
||||
triple -> new RecipientInfo(triple.first(), triple.second(), triple.third()));
|
||||
private final Store<RecipientInfo> recipientInfoStore = new Store<>(new RecipientInfo(null, null, null, null));
|
||||
|
||||
private final MessageRequestRepository repository;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
private long threadId;
|
||||
|
||||
private final RecipientForeverObserver recipientObserver = recipient -> {
|
||||
loadMemberCount();
|
||||
loadGroupInfo();
|
||||
this.recipient.setValue(recipient);
|
||||
};
|
||||
|
||||
@@ -52,6 +52,11 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
this.repository = repository;
|
||||
this.messageData = LiveDataUtil.mapAsync(recipient, this::createMessageDataForRecipient);
|
||||
this.requestReviewDisplayState = LiveDataUtil.mapAsync(messageData, MessageRequestViewModel::transformHolderToReviewDisplayState);
|
||||
|
||||
recipientInfoStore.update(this.recipient, (recipient, state) -> new RecipientInfo(recipient, state.groupInfo, state.sharedGroups, state.messageRequestState));
|
||||
recipientInfoStore.update(this.groupInfo, (groupInfo, state) -> new RecipientInfo(state.recipient, groupInfo, state.sharedGroups, state.messageRequestState));
|
||||
recipientInfoStore.update(this.groups, (sharedGroups, state) -> new RecipientInfo(state.recipient, state.groupInfo, sharedGroups, state.messageRequestState));
|
||||
recipientInfoStore.update(this.messageData, (messageData, state) -> new RecipientInfo(state.recipient, state.groupInfo, state.sharedGroups, messageData.messageState));
|
||||
}
|
||||
|
||||
public void setConversationInfo(@NonNull RecipientId recipientId, long threadId) {
|
||||
@@ -64,7 +69,7 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
|
||||
loadRecipient();
|
||||
loadGroups();
|
||||
loadMemberCount();
|
||||
loadGroupInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,7 +92,7 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public LiveData<RecipientInfo> getRecipientInfo() {
|
||||
return recipientInfo;
|
||||
return recipientInfoStore.getStateLiveData();
|
||||
}
|
||||
|
||||
public LiveData<Status> getMessageRequestStatus() {
|
||||
@@ -161,8 +166,8 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
repository.getGroups(liveRecipient.getId(), this.groups::postValue);
|
||||
}
|
||||
|
||||
private void loadMemberCount() {
|
||||
repository.getMemberCount(liveRecipient.getId(), memberCount::postValue);
|
||||
private void loadGroupInfo() {
|
||||
repository.getGroupInfo(liveRecipient.getId(), groupInfo::postValue);
|
||||
}
|
||||
|
||||
private static RequestReviewDisplayState transformHolderToReviewDisplayState(@NonNull MessageData holder) {
|
||||
@@ -181,14 +186,16 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public static class RecipientInfo {
|
||||
@Nullable private final Recipient recipient;
|
||||
@NonNull private final GroupMemberCount groupMemberCount;
|
||||
@NonNull private final List<String> sharedGroups;
|
||||
@Nullable private final Recipient recipient;
|
||||
@NonNull private final GroupInfo groupInfo;
|
||||
@NonNull private final List<String> sharedGroups;
|
||||
@Nullable private final MessageRequestState messageRequestState;
|
||||
|
||||
private RecipientInfo(@Nullable Recipient recipient, @Nullable GroupMemberCount groupMemberCount, @Nullable List<String> sharedGroups) {
|
||||
this.recipient = recipient;
|
||||
this.groupMemberCount = groupMemberCount == null ? GroupMemberCount.ZERO : groupMemberCount;
|
||||
this.sharedGroups = sharedGroups == null ? Collections.emptyList() : sharedGroups;
|
||||
private RecipientInfo(@Nullable Recipient recipient, @Nullable GroupInfo groupInfo, @Nullable List<String> sharedGroups, @Nullable MessageRequestState messageRequestState) {
|
||||
this.recipient = recipient;
|
||||
this.groupInfo = groupInfo == null ? GroupInfo.ZERO : groupInfo;
|
||||
this.sharedGroups = sharedGroups == null ? Collections.emptyList() : sharedGroups;
|
||||
this.messageRequestState = messageRequestState;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -197,17 +204,26 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public int getGroupMemberCount() {
|
||||
return groupMemberCount.getFullMemberCount();
|
||||
return groupInfo.getFullMemberCount();
|
||||
}
|
||||
|
||||
public int getGroupPendingMemberCount() {
|
||||
return groupMemberCount.getPendingMemberCount();
|
||||
return groupInfo.getPendingMemberCount();
|
||||
}
|
||||
|
||||
public @NonNull String getGroupDescription() {
|
||||
return groupInfo.getDescription();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public List<String> getSharedGroups() {
|
||||
return sharedGroups;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public MessageRequestState getMessageRequestState() {
|
||||
return messageRequestState;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Status {
|
||||
|
||||
Reference in New Issue
Block a user