kopia lustrzana https://github.com/ryukoposting/Signal-Android
Disable the reply action in announcement groups.
rodzic
adbda02aa4
commit
eb5418787a
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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() &&
|
||||||
|
|
Ładowanie…
Reference in New Issue