From fb006523960dc9dc0f525cd706d01b78304bab48 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 5 Oct 2020 12:59:00 -0400 Subject: [PATCH] Fix incorrect UI for inactive groups. --- .../conversation/ConversationActivity.java | 13 +++++++----- .../conversation/ConversationFragment.java | 18 +++++++++------- .../ConversationReactionOverlay.java | 20 +++++++++++------- .../securesms/conversation/MenuState.java | 21 +++++++++++-------- 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 8ea5d57ab..eb6981df4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -815,10 +815,9 @@ public class ConversationActivity extends PassphraseRequiredActivity } else { menu.findItem(R.id.menu_distribution_conversation).setChecked(true); } - inflater.inflate(R.menu.conversation_active_group_options, menu); - } else if (isActiveV2Group || isActiveGroup) { - inflater.inflate(R.menu.conversation_active_group_options, menu); } + + inflater.inflate(R.menu.conversation_active_group_options, menu); } inflater.inflate(R.menu.conversation, menu); @@ -865,7 +864,7 @@ public class ConversationActivity extends PassphraseRequiredActivity if (isActiveV2Group) { hideMenuItem(menu, R.id.menu_mute_notifications); hideMenuItem(menu, R.id.menu_conversation_settings); - } else if (isActiveGroup) { + } else if (isGroupConversation()) { hideMenuItem(menu, R.id.menu_conversation_settings); } @@ -2227,6 +2226,10 @@ public class ConversationActivity extends PassphraseRequiredActivity private Drafts getDraftsForCurrentState() { Drafts drafts = new Drafts(); + if (recipient.get().isGroup() && !recipient.get().isActiveGroup()) { + return drafts; + } + if (!Util.isEmpty(composeText)) { drafts.add(new Draft(Draft.TEXT, composeText.getTextTrimmed().toString())); List draftMentions = composeText.getMentions(); @@ -3081,7 +3084,7 @@ public class ConversationActivity extends PassphraseRequiredActivity { reactionOverlay.setOnToolbarItemClickedListener(toolbarListener); reactionOverlay.setOnHideListener(onHideListener); - reactionOverlay.show(this, maskTarget, messageRecord, inputAreaHeight()); + reactionOverlay.show(this, maskTarget, recipient.get(), messageRecord, inputAreaHeight()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 6c710cdc9..bea00d965 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -226,7 +226,10 @@ public class ConversationFragment extends LoggingFragment { new ConversationItemSwipeCallback( conversationMessage -> actionMode == null && - MenuState.canReplyToMessage(MenuState.isActionMessage(conversationMessage.getMessageRecord()), conversationMessage.getMessageRecord(), messageRequestViewModel.shouldShowMessageRequest()), + MenuState.canReplyToMessage(recipient.get(), + MenuState.isActionMessage(conversationMessage.getMessageRecord()), + conversationMessage.getMessageRecord(), + messageRequestViewModel.shouldShowMessageRequest()), this::handleReplyMessage ).attachToRecyclerView(list); @@ -573,7 +576,7 @@ public class ConversationFragment extends LoggingFragment { return; } - MenuState menuState = MenuState.getMenuState(Stream.of(messages).map(ConversationMessage::getMessageRecord).collect(Collectors.toSet()), messageRequestViewModel.shouldShowMessageRequest()); + MenuState menuState = MenuState.getMenuState(recipient.get(), Stream.of(messages).map(ConversationMessage::getMessageRecord).collect(Collectors.toSet()), messageRequestViewModel.shouldShowMessageRequest()); menu.findItem(R.id.menu_context_forward).setVisible(menuState.shouldShowForwardAction()); menu.findItem(R.id.menu_context_reply).setVisible(menuState.shouldShowReplyAction()); @@ -1223,11 +1226,12 @@ public class ConversationFragment extends LoggingFragment { MessageRecord messageRecord = conversationMessage.getMessageRecord(); - if (messageRecord.isSecure() && - !messageRecord.isRemoteDelete() && - !messageRecord.isUpdate() && - !recipient.get().isBlocked() && - !messageRequestViewModel.shouldShowMessageRequest() && + if (messageRecord.isSecure() && + !messageRecord.isRemoteDelete() && + !messageRecord.isUpdate() && + !recipient.get().isBlocked() && + !messageRequestViewModel.shouldShowMessageRequest() && + (!recipient.get().isGroup() || recipient.get().isActiveGroup()) && ((ConversationAdapter) list.getAdapter()).getSelectedItems().isEmpty()) { isReacting = true; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java index 6137cb57c..6aaf0b7ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java @@ -5,9 +5,7 @@ import android.animation.AnimatorSet; import android.app.Activity; import android.content.Context; import android.graphics.PointF; -import android.graphics.PorterDuff; import android.graphics.Rect; -import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; import android.view.HapticFeedbackConstants; @@ -24,7 +22,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; -import androidx.core.content.ContextCompat; import androidx.vectordrawable.graphics.drawable.AnimatorInflaterCompat; import com.annimon.stream.Stream; @@ -60,6 +57,7 @@ public final class ConversationReactionOverlay extends RelativeLayout { private final PointF lastSeenDownPoint = new PointF(); private Activity activity; + private Recipient conversationRecipient; private MessageRecord messageRecord; private OverlayState overlayState = OverlayState.HIDDEN; @@ -145,15 +143,21 @@ public final class ConversationReactionOverlay extends RelativeLayout { maskView.setTargetParentTranslationY(translationY); } - public void show(@NonNull Activity activity, @NonNull View maskTarget, @NonNull MessageRecord messageRecord, int maskPaddingBottom) { + public void show(@NonNull Activity activity, + @NonNull View maskTarget, + @NonNull Recipient conversationRecipient, + @NonNull MessageRecord messageRecord, + int maskPaddingBottom) + { if (overlayState != OverlayState.HIDDEN) { return; } - this.messageRecord = messageRecord; - overlayState = OverlayState.UNINITAILIZED; - selected = -1; + this.messageRecord = messageRecord; + this.conversationRecipient = conversationRecipient; + overlayState = OverlayState.UNINITAILIZED; + selected = -1; setupToolbarMenuItems(); setupSelectedEmoji(); @@ -498,7 +502,7 @@ public final class ConversationReactionOverlay extends RelativeLayout { } private void setupToolbarMenuItems() { - MenuState menuState = MenuState.getMenuState(Collections.singleton(messageRecord), false); + MenuState menuState = MenuState.getMenuState(conversationRecipient, Collections.singleton(messageRecord), false); toolbar.getMenu().findItem(R.id.action_copy).setVisible(menuState.shouldShowCopyAction()); toolbar.getMenu().findItem(R.id.action_download).setVisible(menuState.shouldShowSaveAttachmentAction()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MenuState.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MenuState.java index ad703d7bd..22d3f1c83 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MenuState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MenuState.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; +import org.thoughtcrime.securesms.recipients.Recipient; import java.util.Set; @@ -50,7 +51,8 @@ final class MenuState { return copy; } - static MenuState getMenuState(@NonNull Set messageRecords, + static MenuState getMenuState(@NonNull Recipient conversationRecipient, + @NonNull Set messageRecords, boolean shouldShowMessageRequest) { @@ -102,20 +104,21 @@ final class MenuState { ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getStickerSlide() == null) .shouldShowForwardAction(!actionMessage && !sharedContact && !viewOnce && !remoteDelete) .shouldShowDetailsAction(!actionMessage) - .shouldShowReplyAction(canReplyToMessage(actionMessage, messageRecord, shouldShowMessageRequest)); + .shouldShowReplyAction(canReplyToMessage(conversationRecipient, actionMessage, messageRecord, shouldShowMessageRequest)); } return builder.shouldShowCopyAction(!actionMessage && !remoteDelete && hasText) .build(); } - static boolean canReplyToMessage(boolean actionMessage, @NonNull MessageRecord messageRecord, boolean isDisplayingMessageRequest) { - return !actionMessage && - !messageRecord.isRemoteDelete() && - !messageRecord.isPending() && - !messageRecord.isFailed() && - !isDisplayingMessageRequest && - messageRecord.isSecure() && + static boolean canReplyToMessage(@NonNull Recipient conversationRecipient, boolean actionMessage, @NonNull MessageRecord messageRecord, boolean isDisplayingMessageRequest) { + return !actionMessage && + !messageRecord.isRemoteDelete() && + !messageRecord.isPending() && + !messageRecord.isFailed() && + !isDisplayingMessageRequest && + messageRecord.isSecure() && + (!conversationRecipient.isGroup() || conversationRecipient.isActiveGroup()) && !messageRecord.getRecipient().isBlocked(); }