kopia lustrzana https://github.com/ryukoposting/Signal-Android
Show block request if request follows a collapsed event.
rodzic
77caedb3bb
commit
77ef877c59
|
@ -77,6 +77,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||||
private View background;
|
private View background;
|
||||||
private ConversationMessage conversationMessage;
|
private ConversationMessage conversationMessage;
|
||||||
private Recipient conversationRecipient;
|
private Recipient conversationRecipient;
|
||||||
|
private Optional<MessageRecord> previousMessageRecord;
|
||||||
private Optional<MessageRecord> nextMessageRecord;
|
private Optional<MessageRecord> nextMessageRecord;
|
||||||
private MessageRecord messageRecord;
|
private MessageRecord messageRecord;
|
||||||
private boolean isMessageRequestAccepted;
|
private boolean isMessageRequestAccepted;
|
||||||
|
@ -150,13 +151,15 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||||
{
|
{
|
||||||
this.conversationMessage = conversationMessage;
|
this.conversationMessage = conversationMessage;
|
||||||
this.messageRecord = conversationMessage.getMessageRecord();
|
this.messageRecord = conversationMessage.getMessageRecord();
|
||||||
|
this.previousMessageRecord = previousMessageRecord;
|
||||||
this.nextMessageRecord = nextMessageRecord;
|
this.nextMessageRecord = nextMessageRecord;
|
||||||
this.conversationRecipient = conversationRecipient;
|
this.conversationRecipient = conversationRecipient;
|
||||||
this.isMessageRequestAccepted = isMessageRequestAccepted;
|
this.isMessageRequestAccepted = isMessageRequestAccepted;
|
||||||
|
|
||||||
senderObserver.observe(lifecycleOwner, messageRecord.getIndividualRecipient());
|
senderObserver.observe(lifecycleOwner, messageRecord.getIndividualRecipient());
|
||||||
|
|
||||||
if (conversationRecipient.isActiveGroup() && (conversationMessage.getMessageRecord().isGroupCall() || conversationMessage.getMessageRecord().isCollapsedGroupV2JoinUpdate())) {
|
if (conversationRecipient.isActiveGroup() &&
|
||||||
|
(messageRecord.isGroupCall() || messageRecord.isCollapsedGroupV2JoinUpdate() || messageRecord.isGroupV2JoinRequest(messageRecord.getIndividualRecipient().getServiceId().orElse(null)))) {
|
||||||
groupObserver.observe(lifecycleOwner, conversationRecipient);
|
groupObserver.observe(lifecycleOwner, conversationRecipient);
|
||||||
groupData.observe(lifecycleOwner, conversationRecipient);
|
groupData.observe(lifecycleOwner, conversationRecipient);
|
||||||
} else {
|
} else {
|
||||||
|
@ -509,10 +512,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||||
eventListener.onChangeNumberUpdateContact(conversationMessage.getMessageRecord().getIndividualRecipient());
|
eventListener.onChangeNumberUpdateContact(conversationMessage.getMessageRecord().getIndividualRecipient());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (conversationMessage.getMessageRecord().isCollapsedGroupV2JoinUpdate() &&
|
} else if (shouldShowBlockRequestAction(conversationMessage.getMessageRecord())) {
|
||||||
groupData.isSelfAdmin() &&
|
|
||||||
!groupData.isBanned(conversationMessage.getMessageRecord().getIndividualRecipient()) &&
|
|
||||||
!groupData.isFullMember(conversationMessage.getMessageRecord().getIndividualRecipient())) {
|
|
||||||
actionButton.setText(R.string.ConversationUpdateItem_block_request);
|
actionButton.setText(R.string.ConversationUpdateItem_block_request);
|
||||||
actionButton.setVisibility(VISIBLE);
|
actionButton.setVisibility(VISIBLE);
|
||||||
actionButton.setOnClickListener(v -> {
|
actionButton.setOnClickListener(v -> {
|
||||||
|
@ -554,6 +554,17 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean shouldShowBlockRequestAction(MessageRecord messageRecord) {
|
||||||
|
Recipient toBlock = messageRecord.getIndividualRecipient();
|
||||||
|
|
||||||
|
if (!toBlock.hasServiceId() || !groupData.isSelfAdmin() || groupData.isBanned(toBlock) || groupData.isFullMember(toBlock)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (messageRecord.isCollapsedGroupV2JoinUpdate() && !nextMessageRecord.map(m -> m.isGroupV2JoinRequest(toBlock.requireServiceId())).orElse(false)) ||
|
||||||
|
(messageRecord.isGroupV2JoinRequest(toBlock.requireServiceId()) && previousMessageRecord.map(m -> m.isCollapsedGroupV2JoinUpdate(toBlock.requireServiceId())).orElse(false));
|
||||||
|
}
|
||||||
|
|
||||||
private void presentBackground(boolean collapseAbove, boolean collapseBelow, boolean hasWallpaper) {
|
private void presentBackground(boolean collapseAbove, boolean collapseBelow, boolean hasWallpaper) {
|
||||||
int marginDefault = getContext().getResources().getDimensionPixelOffset(R.dimen.conversation_update_vertical_margin);
|
int marginDefault = getContext().getResources().getDimensionPixelOffset(R.dimen.conversation_update_vertical_margin);
|
||||||
int marginCollapsed = 0;
|
int marginCollapsed = 0;
|
||||||
|
|
|
@ -412,7 +412,15 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isGroupV2JoinRequest(ByteString uuid) {
|
public boolean isGroupV2JoinRequest(@Nullable ServiceId serviceId) {
|
||||||
|
if (serviceId == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isGroupV2JoinRequest(UuidUtil.toByteString(serviceId.uuid()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isGroupV2JoinRequest(@NonNull ByteString uuid) {
|
||||||
DecryptedGroupV2Context decryptedGroupV2Context = getDecryptedGroupV2Context();
|
DecryptedGroupV2Context decryptedGroupV2Context = getDecryptedGroupV2Context();
|
||||||
if (decryptedGroupV2Context != null && decryptedGroupV2Context.hasChange()) {
|
if (decryptedGroupV2Context != null && decryptedGroupV2Context.hasChange()) {
|
||||||
DecryptedGroupChange change = decryptedGroupV2Context.getChange();
|
DecryptedGroupChange change = decryptedGroupV2Context.getChange();
|
||||||
|
@ -422,10 +430,16 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCollapsedGroupV2JoinUpdate() {
|
public boolean isCollapsedGroupV2JoinUpdate() {
|
||||||
|
return isCollapsedGroupV2JoinUpdate(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCollapsedGroupV2JoinUpdate(@Nullable ServiceId serviceId) {
|
||||||
DecryptedGroupV2Context decryptedGroupV2Context = getDecryptedGroupV2Context();
|
DecryptedGroupV2Context decryptedGroupV2Context = getDecryptedGroupV2Context();
|
||||||
if (decryptedGroupV2Context != null && decryptedGroupV2Context.hasChange()) {
|
if (decryptedGroupV2Context != null && decryptedGroupV2Context.hasChange()) {
|
||||||
DecryptedGroupChange change = decryptedGroupV2Context.getChange();
|
DecryptedGroupChange change = decryptedGroupV2Context.getChange();
|
||||||
return change.getNewRequestingMembersCount() > 0 && change.getDeleteRequestingMembersCount() > 0;
|
return change.getNewRequestingMembersCount() > 0 &&
|
||||||
|
change.getDeleteRequestingMembersCount() > 0 &&
|
||||||
|
(serviceId == null || change.getEditor().equals(UuidUtil.toByteString(serviceId.uuid())));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue