From 99a516f8e5575b66db07fd4bdf9496024c8a90cf Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 1 Nov 2022 14:39:59 -0400 Subject: [PATCH] Fix gv1 migration reminder bug. Fixes #12554 --- .../ConversationGroupViewModel.java | 17 ++++++----------- .../ConversationParentFragment.java | 6 +----- .../securesms/database/GroupDatabase.java | 11 +++++++++++ .../GroupsV1MigrationSuggestionsDialog.java | 4 ++-- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java index 6c3ee6c2e..c144dc7ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java @@ -85,10 +85,10 @@ final class ConversationGroupViewModel extends ViewModel { liveRecipient.setValue(recipient); } - void onSuggestedMembersBannerDismissed(@NonNull GroupId groupId, @NonNull List suggestions) { + void onSuggestedMembersBannerDismissed(@NonNull GroupId groupId) { SignalExecutors.BOUNDED.execute(() -> { if (groupId.isV2()) { - SignalDatabase.groups().removeUnmigratedV1Members(groupId.requireV2(), suggestions); + SignalDatabase.groups().removeUnmigratedV1Members(groupId.requireV2()); liveRecipient.postValue(liveRecipient.getValue()); } }); @@ -161,15 +161,10 @@ final class ConversationGroupViewModel extends ViewModel { @WorkerThread private static List mapToGroupV1MigrationSuggestions(@Nullable GroupRecord record) { - if (record == null) { - return Collections.emptyList(); - } - - if (!record.isV2Group()) { - return Collections.emptyList(); - } - - if (!record.isActive() || record.isPendingMember(Recipient.self())) { + if (record == null || + !record.isV2Group() || + !record.isActive() || + record.isPendingMember(Recipient.self())) { return Collections.emptyList(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 839e03598..c82024eb2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -248,8 +248,6 @@ import org.thoughtcrime.securesms.mms.StickerSlide; import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.v2.ConversationId; -import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog; -import org.thoughtcrime.securesms.payments.MobileCoinPublicAddress; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.profiles.spoofing.ReviewBannerView; import org.thoughtcrime.securesms.profiles.spoofing.ReviewCardDialogFragment; @@ -295,7 +293,6 @@ import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MessageRecordUtil; import org.thoughtcrime.securesms.util.MessageUtil; import org.thoughtcrime.securesms.util.PlayStoreUtil; -import org.thoughtcrime.securesms.util.ProfileUtil; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.SmsUtil; @@ -313,7 +310,6 @@ import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; import org.thoughtcrime.securesms.wallpaper.ChatWallpaperDimLevelUtil; import org.whispersystems.signalservice.api.SignalSessionLock; -import org.whispersystems.signalservice.api.util.ExpiringProfileCredentialUtil; import java.io.IOException; import java.security.SecureRandom; @@ -1905,7 +1901,7 @@ public class ConversationParentFragment extends Fragment if (actionId == R.id.reminder_action_gv1_suggestion_add_members) { GroupsV1MigrationSuggestionsDialog.show(requireActivity(), recipient.get().requireGroupId().requireV2(), gv1MigrationSuggestions); } else if (actionId == R.id.reminder_action_gv1_suggestion_no_thanks) { - groupViewModel.onSuggestedMembersBannerDismissed(recipient.get().requireGroupId(), gv1MigrationSuggestions); + groupViewModel.onSuggestedMembersBannerDismissed(recipient.get().requireGroupId()); } }); reminderView.get().setOnDismissListener(() -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java index 2bc18c390..3f80fdc12 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -220,6 +220,17 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere } } + public void removeUnmigratedV1Members(@NonNull GroupId.V2 id) { + Optional group = getGroup(id); + + if (!group.isPresent()) { + Log.w(TAG, "Couldn't find the group!", new Throwable()); + return; + } + + removeUnmigratedV1Members(id, group.get().getUnmigratedV1Members()); + } + /** * Removes the specified members from the list of 'unmigrated V1 members' -- the list of members * that were either dropped or had to be invited when migrating the group from V1->V2. diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationSuggestionsDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationSuggestionsDialog.java index 358c4594e..a7fa43450 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationSuggestionsDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationSuggestionsDialog.java @@ -77,14 +77,14 @@ public final class GroupsV1MigrationSuggestionsDialog { try { GroupManager.addMembers(fragmentActivity, groupId.requirePush(), suggestions); Log.i(TAG, "Successfully added members! Removing these dropped members from the list."); - SignalDatabase.groups().removeUnmigratedV1Members(groupId, suggestions); + SignalDatabase.groups().removeUnmigratedV1Members(groupId); return Result.SUCCESS; } catch (IOException | GroupChangeBusyException e) { Log.w(TAG, "Temporary failure.", e); return Result.NETWORK_ERROR; } catch (GroupNotAMemberException | GroupInsufficientRightsException | MembershipNotSuitableForV2Exception | GroupChangeFailedException e) { Log.w(TAG, "Permanent failure! Removing these dropped members from the list.", e); - SignalDatabase.groups().removeUnmigratedV1Members(groupId, suggestions); + SignalDatabase.groups().removeUnmigratedV1Members(groupId); return Result.IMPOSSIBLE; } }, result -> {