Add support for manual cancellation proto field.

This commit is contained in:
Alex Hart 2021-12-16 17:37:03 -04:00 committed by Greyson Parrelli
parent 5918227bff
commit 9177f5637a
6 changed files with 72 additions and 45 deletions

View file

@ -200,6 +200,7 @@ class DonationPaymentRepository(activity: Activity) : StripeApi.PaymentIntentFet
if (it.status == 200 || it.status == 204) { if (it.status == 200 || it.status == 204) {
Log.d(TAG, "Successfully set user subscription to level $subscriptionLevel with response code ${it.status}", true) Log.d(TAG, "Successfully set user subscription to level $subscriptionLevel with response code ${it.status}", true)
SignalStore.donationsValues().clearUserManuallyCancelled() SignalStore.donationsValues().clearUserManuallyCancelled()
scheduleSyncForAccountRecordChange()
SignalStore.donationsValues().clearLevelOperations() SignalStore.donationsValues().clearLevelOperations()
LevelUpdate.updateProcessingState(false) LevelUpdate.updateProcessingState(false)
Completable.complete() Completable.complete()

View file

@ -188,6 +188,7 @@ class SubscribeViewModel(
SignalStore.donationsValues().markUserManuallyCancelled() SignalStore.donationsValues().markUserManuallyCancelled()
refreshActiveSubscription() refreshActiveSubscription()
MultiDeviceSubscriptionSyncRequestJob.enqueue() MultiDeviceSubscriptionSyncRequestJob.enqueue()
donationPaymentRepository.scheduleSyncForAccountRecordChange()
store.update { it.copy(stage = SubscribeState.Stage.READY) } store.update { it.copy(stage = SubscribeState.Stage.READY) }
}, },
onError = { throwable -> onError = { throwable ->

View file

@ -109,8 +109,9 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor<Signal
String e164 = local.getE164(); String e164 = local.getE164();
List<String> defaultReactions = remote.getDefaultReactions().size() > 0 ? remote.getDefaultReactions() : local.getDefaultReactions(); List<String> defaultReactions = remote.getDefaultReactions().size() > 0 ? remote.getDefaultReactions() : local.getDefaultReactions();
boolean displayBadgesOnProfile = remote.isDisplayBadgesOnProfile(); boolean displayBadgesOnProfile = remote.isDisplayBadgesOnProfile();
boolean matchesRemote = doParamsMatch(remote, unknownFields, givenName, familyName, avatarUrlPath, profileKey, noteToSelfArchived, noteToSelfForcedUnread, readReceipts, typingIndicators, sealedSenderIndicators, linkPreviews, phoneNumberSharingMode, unlisted, pinnedConversations, preferContactAvatars, payments, universalExpireTimer, primarySendsSms, e164, defaultReactions, subscriber, displayBadgesOnProfile); boolean subscriptionManuallyCancelled = remote.isSubscriptionManuallyCancelled();
boolean matchesLocal = doParamsMatch(local, unknownFields, givenName, familyName, avatarUrlPath, profileKey, noteToSelfArchived, noteToSelfForcedUnread, readReceipts, typingIndicators, sealedSenderIndicators, linkPreviews, phoneNumberSharingMode, unlisted, pinnedConversations, preferContactAvatars, payments, universalExpireTimer, primarySendsSms, e164, defaultReactions, subscriber, displayBadgesOnProfile); boolean matchesRemote = doParamsMatch(remote, unknownFields, givenName, familyName, avatarUrlPath, profileKey, noteToSelfArchived, noteToSelfForcedUnread, readReceipts, typingIndicators, sealedSenderIndicators, linkPreviews, phoneNumberSharingMode, unlisted, pinnedConversations, preferContactAvatars, payments, universalExpireTimer, primarySendsSms, e164, defaultReactions, subscriber, displayBadgesOnProfile, subscriptionManuallyCancelled);
boolean matchesLocal = doParamsMatch(local, unknownFields, givenName, familyName, avatarUrlPath, profileKey, noteToSelfArchived, noteToSelfForcedUnread, readReceipts, typingIndicators, sealedSenderIndicators, linkPreviews, phoneNumberSharingMode, unlisted, pinnedConversations, preferContactAvatars, payments, universalExpireTimer, primarySendsSms, e164, defaultReactions, subscriber, displayBadgesOnProfile, subscriptionManuallyCancelled);
if (matchesRemote) { if (matchesRemote) {
return remote; return remote;
@ -141,6 +142,7 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor<Signal
.setDefaultReactions(defaultReactions) .setDefaultReactions(defaultReactions)
.setSubscriber(subscriber) .setSubscriber(subscriber)
.setDisplayBadgesOnProfile(displayBadgesOnProfile) .setDisplayBadgesOnProfile(displayBadgesOnProfile)
.setSubscriptionManuallyCancelled(subscriptionManuallyCancelled)
.build(); .build();
} }
} }
@ -182,7 +184,8 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor<Signal
String e164, String e164,
@NonNull List <String> defaultReactions, @NonNull List <String> defaultReactions,
@NonNull SignalAccountRecord.Subscriber subscriber, @NonNull SignalAccountRecord.Subscriber subscriber,
boolean displayBadgesOnProfile) boolean displayBadgesOnProfile,
boolean subscriptionManuallyCancelled)
{ {
return Arrays.equals(contact.serializeUnknownFields(), unknownFields) && return Arrays.equals(contact.serializeUnknownFields(), unknownFields) &&
Objects.equals(contact.getGivenName().or(""), givenName) && Objects.equals(contact.getGivenName().or(""), givenName) &&
@ -205,6 +208,7 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor<Signal
contact.isPrimarySendsSms() == primarySendsSms && contact.isPrimarySendsSms() == primarySendsSms &&
Objects.equals(contact.getPinnedConversations(), pinnedConversations) && Objects.equals(contact.getPinnedConversations(), pinnedConversations) &&
Objects.equals(contact.getSubscriber(), subscriber) && Objects.equals(contact.getSubscriber(), subscriber) &&
contact.isDisplayBadgesOnProfile() == displayBadgesOnProfile; contact.isDisplayBadgesOnProfile() == displayBadgesOnProfile &&
contact.isSubscriptionManuallyCancelled() == subscriptionManuallyCancelled;
} }
} }

View file

@ -134,6 +134,7 @@ public final class StorageSyncHelper {
.setDefaultReactions(SignalStore.emojiValues().getReactions()) .setDefaultReactions(SignalStore.emojiValues().getReactions())
.setSubscriber(StorageSyncModels.localToRemoteSubscriber(SignalStore.donationsValues().getSubscriber())) .setSubscriber(StorageSyncModels.localToRemoteSubscriber(SignalStore.donationsValues().getSubscriber()))
.setDisplayBadgesOnProfile(SignalStore.donationsValues().getDisplayBadgesOnProfile()) .setDisplayBadgesOnProfile(SignalStore.donationsValues().getDisplayBadgesOnProfile())
.setSubscriptionManuallyCancelled(SignalStore.donationsValues().isUserManuallyCancelled())
.build(); .build();
return SignalStorageRecord.forAccount(account); return SignalStorageRecord.forAccount(account);
@ -159,6 +160,12 @@ public final class StorageSyncHelper {
SignalStore.emojiValues().setReactions(update.getNew().getDefaultReactions()); SignalStore.emojiValues().setReactions(update.getNew().getDefaultReactions());
SignalStore.donationsValues().setDisplayBadgesOnProfile(update.getNew().isDisplayBadgesOnProfile()); SignalStore.donationsValues().setDisplayBadgesOnProfile(update.getNew().isDisplayBadgesOnProfile());
if (update.getNew().isSubscriptionManuallyCancelled()) {
SignalStore.donationsValues().markUserManuallyCancelled();
} else {
SignalStore.donationsValues().clearUserManuallyCancelled();
}
Subscriber subscriber = StorageSyncModels.remoteToLocalSubscriber(update.getNew().getSubscriber()); Subscriber subscriber = StorageSyncModels.remoteToLocalSubscriber(update.getNew().getSubscriber());
if (subscriber != null) { if (subscriber != null) {
SignalStore.donationsValues().setSubscriber(subscriber); SignalStore.donationsValues().setSubscriber(subscriber);

View file

@ -162,6 +162,10 @@ public final class SignalAccountRecord implements SignalRecord {
diff.add("DisplayBadgesOnProfile"); diff.add("DisplayBadgesOnProfile");
} }
if (!Objects.equals(this.isSubscriptionManuallyCancelled(), that.isSubscriptionManuallyCancelled())) {
diff.add("SubscriptionManuallyCancelled");
}
return diff.toString(); return diff.toString();
} else { } else {
return "Different class. " + getClass().getSimpleName() + " | " + other.getClass().getSimpleName(); return "Different class. " + getClass().getSimpleName() + " | " + other.getClass().getSimpleName();
@ -260,6 +264,10 @@ public final class SignalAccountRecord implements SignalRecord {
return proto.getDisplayBadgesOnProfile(); return proto.getDisplayBadgesOnProfile();
} }
public boolean isSubscriptionManuallyCancelled() {
return proto.getSubscriptionManuallyCancelled();
}
AccountRecord toProto() { AccountRecord toProto() {
return proto; return proto;
} }
@ -588,6 +596,11 @@ public final class SignalAccountRecord implements SignalRecord {
return this; return this;
} }
public Builder setSubscriptionManuallyCancelled(boolean subscriptionManuallyCancelled) {
builder.setSubscriptionManuallyCancelled(subscriptionManuallyCancelled);
return this;
}
public SignalAccountRecord build() { public SignalAccountRecord build() {
AccountRecord proto = builder.build(); AccountRecord proto = builder.build();

View file

@ -151,4 +151,5 @@ message AccountRecord {
bytes subscriberId = 21; bytes subscriberId = 21;
string subscriberCurrencyCode = 22; string subscriberCurrencyCode = 22;
bool displayBadgesOnProfile = 23; bool displayBadgesOnProfile = 23;
bool subscriptionManuallyCancelled = 24;
} }