From 139317cf1b079e6c223469cc746d3442ef08ad6d Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 18 Aug 2020 18:13:45 -0400 Subject: [PATCH] Improve various aspects of mentions. --- .../securesms/conversation/ConversationActivity.java | 7 ++++++- .../ui/mentions/MentionsPickerViewModel.java | 11 +++++++++-- .../securesms/megaphone/MegaphoneRepository.java | 5 +++++ .../thoughtcrime/securesms/megaphone/Megaphones.java | 2 +- .../org/thoughtcrime/securesms/util/FeatureFlags.java | 2 +- 5 files changed, 22 insertions(+), 5 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 d9bfbbc5d..2c2e01461 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1902,7 +1902,12 @@ public class ConversationActivity extends PassphraseRequiredActivity private void initializeMentionsViewModel() { MentionsPickerViewModel mentionsViewModel = ViewModelProviders.of(this, new MentionsPickerViewModel.Factory()).get(MentionsPickerViewModel.class); - recipient.observe(this, mentionsViewModel::onRecipientChange); + recipient.observe(this, r -> { + if (r.isPushV2Group() && !mentionsSuggestions.resolved()) { + mentionsSuggestions.get(); + } + mentionsViewModel.onRecipientChange(r); + }); composeText.setMentionQueryChangedListener(query -> { if (getRecipient().isPushV2Group()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java index d212bb47d..a2a0cde48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java @@ -15,6 +15,8 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.LiveGroup; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry.FullMember; +import org.thoughtcrime.securesms.megaphone.MegaphoneRepository; +import org.thoughtcrime.securesms.megaphone.Megaphones; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.MappingModel; import org.thoughtcrime.securesms.util.SingleLiveEvent; @@ -30,8 +32,11 @@ public class MentionsPickerViewModel extends ViewModel { private final MutableLiveData group; private final MutableLiveData liveQuery; private final MutableLiveData isShowing; + private final MegaphoneRepository megaphoneRepository; + + MentionsPickerViewModel(@NonNull MentionsPickerRepository mentionsPickerRepository, @NonNull MegaphoneRepository megaphoneRepository) { + this.megaphoneRepository = megaphoneRepository; - MentionsPickerViewModel(@NonNull MentionsPickerRepository mentionsPickerRepository) { group = new MutableLiveData<>(); liveQuery = new MutableLiveData<>(Query.NONE); selectedRecipient = new SingleLiveEvent<>(); @@ -50,6 +55,7 @@ public class MentionsPickerViewModel extends ViewModel { void onSelectionChange(@NonNull Recipient recipient) { selectedRecipient.setValue(recipient); + megaphoneRepository.markFinished(Megaphones.Event.MENTIONS); } void setIsShowing(boolean isShowing) { @@ -116,7 +122,8 @@ public class MentionsPickerViewModel extends ViewModel { @Override public @NonNull T create(@NonNull Class modelClass) { //noinspection ConstantConditions - return modelClass.cast(new MentionsPickerViewModel(new MentionsPickerRepository(ApplicationDependencies.getApplication()))); + return modelClass.cast(new MentionsPickerViewModel(new MentionsPickerRepository(ApplicationDependencies.getApplication()), + ApplicationDependencies.getMegaphoneRepository())); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java index 698f57cec..95ff61eba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java @@ -101,6 +101,11 @@ public class MegaphoneRepository { @AnyThread public void markFinished(@NonNull Event event) { executor.execute(() -> { + MegaphoneRecord record = databaseCache.get(event); + if (record != null && record.isFinished()) { + return; + } + database.markFinished(event); resetDatabaseCache(); }); diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index e5fe0abd4..0721ae3b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -211,7 +211,7 @@ public final class Megaphones { } private static boolean shouldShowMentionsMegaphone() { - return FeatureFlags.mentions() && FeatureFlags.groupsV2(); + return FeatureFlags.mentions(); } private static boolean shouldShowLinkPreviewsMegaphone(@NonNull Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 6d526af16..6ae1afcb1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -233,7 +233,7 @@ public final class FeatureFlags { /** Whether or not we allow mentions send support in groups. */ public static boolean mentions() { - return getBoolean(MENTIONS, false); + return groupsV2() && getBoolean(MENTIONS, false); } /** Whether or not to use the UUID in verification codes. */