Disable the reply action in announcement groups.

fork-5.53.8
Greyson Parrelli 2021-08-25 13:19:52 -04:00 zatwierdzone przez GitHub
rodzic adbda02aa4
commit eb5418787a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 28 dodań i 15 usunięć

Wyświetl plik

@ -3677,7 +3677,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
{ {
reactionDelegate.setOnToolbarItemClickedListener(toolbarListener); reactionDelegate.setOnToolbarItemClickedListener(toolbarListener);
reactionDelegate.setOnHideListener(onHideListener); reactionDelegate.setOnHideListener(onHideListener);
reactionDelegate.show(this, maskTarget, recipient.get(), conversationMessage, inputAreaHeight()); reactionDelegate.show(this, maskTarget, recipient.get(), conversationMessage, inputAreaHeight(), groupViewModel.isNonAdminInAnnouncementGroup());
} }
@Override @Override

Wyświetl plik

@ -208,6 +208,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
private MessageRequestViewModel messageRequestViewModel; private MessageRequestViewModel messageRequestViewModel;
private MessageCountsViewModel messageCountsViewModel; private MessageCountsViewModel messageCountsViewModel;
private ConversationViewModel conversationViewModel; private ConversationViewModel conversationViewModel;
private ConversationGroupViewModel groupViewModel;
private SnapToTopDataObserver snapToTopDataObserver; private SnapToTopDataObserver snapToTopDataObserver;
private MarkReadHelper markReadHelper; private MarkReadHelper markReadHelper;
private Animation scrollButtonInAnimation; private Animation scrollButtonInAnimation;
@ -309,13 +310,15 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
MenuState.canReplyToMessage(recipient.get(), MenuState.canReplyToMessage(recipient.get(),
MenuState.isActionMessage(conversationMessage.getMessageRecord()), MenuState.isActionMessage(conversationMessage.getMessageRecord()),
conversationMessage.getMessageRecord(), conversationMessage.getMessageRecord(),
messageRequestViewModel.shouldShowMessageRequest()), messageRequestViewModel.shouldShowMessageRequest(),
groupViewModel.isNonAdminInAnnouncementGroup()),
this::handleReplyMessage, this::handleReplyMessage,
this::onViewHolderPositionTranslated this::onViewHolderPositionTranslated
).attachToRecyclerView(list); ).attachToRecyclerView(list);
setupListLayoutListeners(); setupListLayoutListeners();
this.groupViewModel = ViewModelProviders.of(requireActivity(), new ConversationGroupViewModel.Factory()).get(ConversationGroupViewModel.class);
this.messageCountsViewModel = ViewModelProviders.of(requireActivity()).get(MessageCountsViewModel.class); this.messageCountsViewModel = ViewModelProviders.of(requireActivity()).get(MessageCountsViewModel.class);
this.conversationViewModel = ViewModelProviders.of(requireActivity(), new ConversationViewModel.Factory()).get(ConversationViewModel.class); this.conversationViewModel = ViewModelProviders.of(requireActivity(), new ConversationViewModel.Factory()).get(ConversationViewModel.class);
@ -801,7 +804,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
return; return;
} }
MenuState menuState = MenuState.getMenuState(recipient.get(), selectedParts, messageRequestViewModel.shouldShowMessageRequest()); MenuState menuState = MenuState.getMenuState(recipient.get(), selectedParts, messageRequestViewModel.shouldShowMessageRequest(), groupViewModel.isNonAdminInAnnouncementGroup());
menu.findItem(R.id.menu_context_forward).setVisible(menuState.shouldShowForwardAction()); menu.findItem(R.id.menu_context_forward).setVisible(menuState.shouldShowForwardAction());
menu.findItem(R.id.menu_context_reply).setVisible(menuState.shouldShowReplyAction()); menu.findItem(R.id.menu_context_reply).setVisible(menuState.shouldShowReplyAction());

Wyświetl plik

@ -41,9 +41,10 @@ final class ConversationReactionDelegate {
@NonNull MaskView.MaskTarget maskTarget, @NonNull MaskView.MaskTarget maskTarget,
@NonNull Recipient conversationRecipient, @NonNull Recipient conversationRecipient,
@NonNull ConversationMessage conversationMessage, @NonNull ConversationMessage conversationMessage,
int maskPaddingBottom) int maskPaddingBottom,
boolean isNonAdminInAnnouncementGroup)
{ {
resolveOverlay().show(activity, maskTarget, conversationRecipient, conversationMessage, maskPaddingBottom, lastSeenDownPoint); resolveOverlay().show(activity, maskTarget, conversationRecipient, conversationMessage, maskPaddingBottom, lastSeenDownPoint, isNonAdminInAnnouncementGroup);
} }
void showMask(@NonNull MaskView.MaskTarget maskTarget, int maskPaddingTop, int maskPaddingBottom) { void showMask(@NonNull MaskView.MaskTarget maskTarget, int maskPaddingTop, int maskPaddingBottom) {

Wyświetl plik

@ -60,6 +60,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
private Recipient conversationRecipient; private Recipient conversationRecipient;
private MessageRecord messageRecord; private MessageRecord messageRecord;
private OverlayState overlayState = OverlayState.HIDDEN; private OverlayState overlayState = OverlayState.HIDDEN;
private boolean isNonAdminInAnnouncementGroup;
private boolean downIsOurs; private boolean downIsOurs;
private boolean isToolbarTouch; private boolean isToolbarTouch;
@ -152,17 +153,18 @@ public final class ConversationReactionOverlay extends RelativeLayout {
@NonNull Recipient conversationRecipient, @NonNull Recipient conversationRecipient,
@NonNull ConversationMessage conversationMessage, @NonNull ConversationMessage conversationMessage,
int maskPaddingBottom, int maskPaddingBottom,
@NonNull PointF lastSeenDownPoint) @NonNull PointF lastSeenDownPoint,
boolean isNonAdminInAnnouncementGroup)
{ {
if (overlayState != OverlayState.HIDDEN) { if (overlayState != OverlayState.HIDDEN) {
return; return;
} }
this.messageRecord = conversationMessage.getMessageRecord(); this.messageRecord = conversationMessage.getMessageRecord();
this.conversationRecipient = conversationRecipient; this.conversationRecipient = conversationRecipient;
overlayState = OverlayState.UNINITAILIZED; this.isNonAdminInAnnouncementGroup = isNonAdminInAnnouncementGroup;
selected = -1; overlayState = OverlayState.UNINITAILIZED;
selected = -1;
setupToolbarMenuItems(conversationMessage); setupToolbarMenuItems(conversationMessage);
setupSelectedEmoji(); setupSelectedEmoji();
@ -505,7 +507,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
} }
private void setupToolbarMenuItems(@NonNull ConversationMessage conversationMessage) { private void setupToolbarMenuItems(@NonNull ConversationMessage conversationMessage) {
MenuState menuState = MenuState.getMenuState(conversationRecipient, conversationMessage.getMultiselectCollection().toSet(), false); MenuState menuState = MenuState.getMenuState(conversationRecipient, conversationMessage.getMultiselectCollection().toSet(), false, isNonAdminInAnnouncementGroup);
toolbar.getMenu().findItem(R.id.action_copy).setVisible(menuState.shouldShowCopyAction()); toolbar.getMenu().findItem(R.id.action_copy).setVisible(menuState.shouldShowCopyAction());
toolbar.getMenu().findItem(R.id.action_download).setVisible(menuState.shouldShowSaveAttachmentAction()); toolbar.getMenu().findItem(R.id.action_download).setVisible(menuState.shouldShowSaveAttachmentAction());

Wyświetl plik

@ -64,7 +64,8 @@ final class MenuState {
static MenuState getMenuState(@NonNull Recipient conversationRecipient, static MenuState getMenuState(@NonNull Recipient conversationRecipient,
@NonNull Set<MultiselectPart> selectedParts, @NonNull Set<MultiselectPart> selectedParts,
boolean shouldShowMessageRequest) boolean shouldShowMessageRequest,
boolean isNonAdminInAnnouncementGroup)
{ {
Builder builder = new Builder(); Builder builder = new Builder();
@ -143,7 +144,7 @@ final class MenuState {
((MediaMmsMessageRecord)messageRecord).getSlideDeck().getStickerSlide() == null) ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getStickerSlide() == null)
.shouldShowForwardAction(shouldShowForwardAction) .shouldShowForwardAction(shouldShowForwardAction)
.shouldShowDetailsAction(!actionMessage) .shouldShowDetailsAction(!actionMessage)
.shouldShowReplyAction(canReplyToMessage(conversationRecipient, actionMessage, messageRecord, shouldShowMessageRequest)); .shouldShowReplyAction(canReplyToMessage(conversationRecipient, actionMessage, messageRecord, shouldShowMessageRequest, isNonAdminInAnnouncementGroup));
} }
return builder.shouldShowCopyAction(!actionMessage && !remoteDelete && hasText) return builder.shouldShowCopyAction(!actionMessage && !remoteDelete && hasText)
@ -158,8 +159,14 @@ final class MenuState {
.allMatch(collection -> multiselectParts.containsAll(collection.toSet())); .allMatch(collection -> multiselectParts.containsAll(collection.toSet()));
} }
static boolean canReplyToMessage(@NonNull Recipient conversationRecipient, boolean actionMessage, @NonNull MessageRecord messageRecord, boolean isDisplayingMessageRequest) { static boolean canReplyToMessage(@NonNull Recipient conversationRecipient,
boolean actionMessage,
@NonNull MessageRecord messageRecord,
boolean isDisplayingMessageRequest,
boolean isNonAdminInAnnouncementGroup)
{
return !actionMessage && return !actionMessage &&
!isNonAdminInAnnouncementGroup &&
!messageRecord.isRemoteDelete() && !messageRecord.isRemoteDelete() &&
!messageRecord.isPending() && !messageRecord.isPending() &&
!messageRecord.isFailed() && !messageRecord.isFailed() &&