Allow future display of pending member count.

This commit is contained in:
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

@ -339,6 +339,7 @@ public class ConversationFragment extends Fragment
Recipient recipient = recipientInfo.getRecipient(); Recipient recipient = recipientInfo.getRecipient();
boolean isSelf = Recipient.self().equals(recipient); boolean isSelf = Recipient.self().equals(recipient);
int memberCount = recipientInfo.getGroupMemberCount(); int memberCount = recipientInfo.getGroupMemberCount();
int pendingMemberCount = recipientInfo.getGroupPendingMemberCount();
List<String> groups = recipientInfo.getSharedGroups(); List<String> groups = recipientInfo.getSharedGroups();
if (recipient != null) { if (recipient != null) {
@ -348,7 +349,14 @@ public class ConversationFragment extends Fragment
conversationBanner.setTitle(title); conversationBanner.setTitle(title);
if (recipient.isGroup()) { 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) { } else if (isSelf) {
conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation)); conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation));
} else { } 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.List;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
public class MessageRequestRepository { final class MessageRequestRepository {
private final Context context; private final Context context;
private final Executor executor; 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(() -> { executor.execute(() -> {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
Optional<GroupDatabase.GroupRecord> groupRecord = groupDatabase.getGroup(recipientId); 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

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

View File

@ -656,6 +656,10 @@
<item quantity="one">%1$d member</item> <item quantity="one">%1$d member</item>
<item quantity="other">%1$d members</item> <item quantity="other">%1$d members</item>
</plurals> </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"> <plurals name="MessageRequestProfileView_member_of_others">
<item quantity="one">%d other</item> <item quantity="one">%d other</item>
<item quantity="other">%d others</item> <item quantity="other">%d others</item>