Allow future display of pending member count.
parent
1068c3ca7e
commit
033bf77cbb
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue