Fix gv1 migration reminder bug.

Fixes #12554
main
Cody Henthorne 2022-11-01 14:39:59 -04:00
rodzic 0ff4175538
commit 99a516f8e5
4 zmienionych plików z 20 dodań i 18 usunięć

Wyświetl plik

@ -85,10 +85,10 @@ final class ConversationGroupViewModel extends ViewModel {
liveRecipient.setValue(recipient);
}
void onSuggestedMembersBannerDismissed(@NonNull GroupId groupId, @NonNull List<RecipientId> 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<RecipientId> 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();
}

Wyświetl plik

@ -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(() -> {

Wyświetl plik

@ -220,6 +220,17 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere
}
}
public void removeUnmigratedV1Members(@NonNull GroupId.V2 id) {
Optional<GroupRecord> 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.

Wyświetl plik

@ -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 -> {