Hide admin options on bottom sheet for members not currently in group.

This commit is contained in:
Alan Evans 2020-09-28 10:15:29 -03:00
parent 8dcda73072
commit 222ba6ee53
2 changed files with 19 additions and 9 deletions

View File

@ -208,6 +208,10 @@ public final class LiveGroup {
return Transformations.map(getFullMembers(), fullMembers -> getMembershipDescription(resources, 0, fullMembers.size()));
}
public LiveData<GroupDatabase.MemberLevel> getMemberLevel(@NonNull Recipient recipient) {
return Transformations.map(groupRecord, g -> g.memberLevel(recipient));
}
private static String getMembershipDescription(@NonNull Resources resources, int invitedCount, int fullMemberCount) {
return invitedCount > 0 ? resources.getQuantityString(R.plurals.MessageRequestProfileView_members_and_invited, fullMemberCount,
fullMemberCount, invitedCount)

View File

@ -11,12 +11,14 @@ import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Transformations;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import org.thoughtcrime.securesms.BlockUnblockDialog;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.VerifyIdentityActivity;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.IdentityDatabase;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.groups.LiveGroup;
@ -53,23 +55,27 @@ final class RecipientDialogViewModel extends ViewModel {
boolean recipientIsSelf = recipientDialogRepository.getRecipientId().equals(Recipient.self().getId());
recipient = Recipient.live(recipientDialogRepository.getRecipientId()).getLiveData();
if (recipientDialogRepository.getGroupId() != null && recipientDialogRepository.getGroupId().isV2() && !recipientIsSelf) {
LiveGroup source = new LiveGroup(recipientDialogRepository.getGroupId());
LiveData<Boolean> localIsAdmin = source.isSelfAdmin();
LiveData<Boolean> recipientIsAdmin = source.getRecipientIsAdmin(recipientDialogRepository.getRecipientId());
LiveData<Boolean> localIsAdmin = source.isSelfAdmin();
LiveData<GroupDatabase.MemberLevel> recipientMemberLevel = Transformations.switchMap(recipient, source::getMemberLevel);
adminActionStatus = LiveDataUtil.combineLatest(localIsAdmin, recipientIsAdmin,
(localAdmin, recipientAdmin) ->
new AdminActionStatus(localAdmin,
localAdmin && !recipientAdmin,
localAdmin && recipientAdmin));
adminActionStatus = LiveDataUtil.combineLatest(localIsAdmin, recipientMemberLevel,
(localAdmin, memberLevel) -> {
boolean inGroup = memberLevel.isInGroup();
boolean recipientAdmin = memberLevel == GroupDatabase.MemberLevel.ADMINISTRATOR;
return new AdminActionStatus(inGroup && localAdmin,
inGroup && localAdmin && !recipientAdmin,
inGroup && localAdmin && recipientAdmin);
});
} else {
adminActionStatus = new MutableLiveData<>(new AdminActionStatus(false, false, false));
}
recipient = Recipient.live(recipientDialogRepository.getRecipientId()).getLiveData();
boolean isSelf = recipientDialogRepository.getRecipientId().equals(Recipient.self().getId());
if (!isSelf) {
recipientDialogRepository.getIdentity(identity::postValue);