Allow future display of pending member count.

master
Alan Evans 2020-03-06 17:54:14 -04:00 committed by Greyson Parrelli
parent 1068c3ca7e
commit 033bf77cbb
5 changed files with 61 additions and 24 deletions

View File

@ -336,10 +336,11 @@ public class ConversationFragment extends Fragment
return;
}
Recipient recipient = recipientInfo.getRecipient();
boolean isSelf = Recipient.self().equals(recipient);
int memberCount = recipientInfo.getGroupMemberCount();
List<String> groups = recipientInfo.getSharedGroups();
Recipient recipient = recipientInfo.getRecipient();
boolean isSelf = Recipient.self().equals(recipient);
int memberCount = recipientInfo.getGroupMemberCount();
int pendingMemberCount = recipientInfo.getGroupPendingMemberCount();
List<String> groups = recipientInfo.getSharedGroups();
if (recipient != null) {
conversationBanner.setAvatar(GlideApp.with(context), recipient);
@ -348,7 +349,14 @@ public class ConversationFragment extends Fragment
conversationBanner.setTitle(title);
if (recipient.isGroup()) {
conversationBanner.setSubtitle(context.getResources().getQuantityString(R.plurals.MessageRequestProfileView_members, memberCount, memberCount));
if (pendingMemberCount > 0) {
conversationBanner.setSubtitle(context.getResources()
.getQuantityString(R.plurals.MessageRequestProfileView_members_and_invited, memberCount,
memberCount, pendingMemberCount));
} else {
conversationBanner.setSubtitle(context.getResources().getQuantityString(R.plurals.MessageRequestProfileView_members, memberCount,
memberCount));
}
} else if (isSelf) {
conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation));
} else {

View File

@ -0,0 +1,21 @@
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;
}
}

View File

@ -25,7 +25,7 @@ import org.whispersystems.libsignal.util.guava.Optional;
import java.util.List;
import java.util.concurrent.Executor;
public class MessageRequestRepository {
final class MessageRequestRepository {
private final Context context;
private final Executor executor;
@ -42,11 +42,13 @@ public class MessageRequestRepository {
});
}
void getMemberCount(@NonNull RecipientId recipientId, @NonNull Consumer<Integer> onMemberCountLoaded) {
void getMemberCount(@NonNull RecipientId recipientId, @NonNull Consumer<GroupMemberCount> onMemberCountLoaded) {
executor.execute(() -> {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
Optional<GroupDatabase.GroupRecord> groupRecord = groupDatabase.getGroup(recipientId);
onMemberCountLoaded.accept(groupRecord.transform(record -> record.getMembers().size()).or(0));
onMemberCountLoaded.accept(groupRecord.transform(record -> {
return new GroupMemberCount(record.getMembers().size(), 0);
}).or(GroupMemberCount.ZERO));
});
}

View File

@ -25,13 +25,13 @@ import java.util.List;
public class MessageRequestViewModel extends ViewModel {
private final SingleLiveEvent<Status> status = new SingleLiveEvent<>();
private final MutableLiveData<Recipient> recipient = new MutableLiveData<>();
private final MutableLiveData<List<String>> groups = new MutableLiveData<>(Collections.emptyList());
private final MutableLiveData<Integer> memberCount = new MutableLiveData<>(0);
private final MutableLiveData<DisplayState> displayState = new MutableLiveData<>();
private final LiveData<RecipientInfo> recipientInfo = Transformations.map(new LiveDataTriple<>(recipient, memberCount, groups),
triple -> new RecipientInfo(triple.first(), triple.second(), triple.third()));
private final SingleLiveEvent<Status> status = new SingleLiveEvent<>();
private final MutableLiveData<Recipient> recipient = new MutableLiveData<>();
private final MutableLiveData<List<String>> groups = new MutableLiveData<>(Collections.emptyList());
private final MutableLiveData<GroupMemberCount> memberCount = new MutableLiveData<>(GroupMemberCount.ZERO);
private final MutableLiveData<DisplayState> displayState = new MutableLiveData<>();
private final LiveData<RecipientInfo> recipientInfo = Transformations.map(new LiveDataTriple<>(recipient, memberCount, groups),
triple -> new RecipientInfo(triple.first(), triple.second(), triple.third()));
private final MessageRequestRepository repository;
@ -133,9 +133,7 @@ public class MessageRequestViewModel extends ViewModel {
}
private void loadMemberCount() {
repository.getMemberCount(liveRecipient.getId(), memberCount -> {
this.memberCount.postValue(memberCount == null ? 0 : memberCount);
});
repository.getMemberCount(liveRecipient.getId(), memberCount::postValue);
}
@SuppressWarnings("ConstantConditions")
@ -161,13 +159,13 @@ public class MessageRequestViewModel extends ViewModel {
}
public static class RecipientInfo {
private final @Nullable Recipient recipient;
private final int groupMemberCount;
private final @NonNull List<String> sharedGroups;
@Nullable private final Recipient recipient;
@NonNull private final GroupMemberCount groupMemberCount;
@NonNull private final List<String> sharedGroups;
private RecipientInfo(@Nullable Recipient recipient, @Nullable Integer groupMemberCount, @Nullable List<String> sharedGroups) {
private RecipientInfo(@Nullable Recipient recipient, @Nullable GroupMemberCount groupMemberCount, @Nullable List<String> sharedGroups) {
this.recipient = recipient;
this.groupMemberCount = groupMemberCount == null ? 0 : groupMemberCount;
this.groupMemberCount = groupMemberCount == null ? GroupMemberCount.ZERO : groupMemberCount;
this.sharedGroups = sharedGroups == null ? Collections.emptyList() : sharedGroups;
}
@ -177,7 +175,11 @@ public class MessageRequestViewModel extends ViewModel {
}
public int getGroupMemberCount() {
return groupMemberCount;
return groupMemberCount.getFullMemberCount();
}
public int getGroupPendingMemberCount() {
return groupMemberCount.getPendingMemberCount();
}
@NonNull

View File

@ -656,6 +656,10 @@
<item quantity="one">%1$d member</item>
<item quantity="other">%1$d members</item>
</plurals>
<plurals name="MessageRequestProfileView_members_and_invited">
<item quantity="one">%1$d member (+%2$d invited)</item>
<item quantity="other">%1$d members (+%2$d invited)</item>
</plurals>
<plurals name="MessageRequestProfileView_member_of_others">
<item quantity="one">%d other</item>
<item quantity="other">%d others</item>