diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java index 61db28d19..438c3bd6b 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java @@ -12,6 +12,7 @@ import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.androidpublisher.AndroidPublisher; import com.google.api.services.androidpublisher.AndroidPublisherRequest; import com.google.api.services.androidpublisher.AndroidPublisherScopes; +import com.google.api.services.androidpublisher.model.AutoRenewingPlan; import com.google.api.services.androidpublisher.model.BasePlan; import com.google.api.services.androidpublisher.model.OfferDetails; import com.google.api.services.androidpublisher.model.RegionalBasePlanConfig; @@ -244,13 +245,17 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor { case UNSPECIFIED -> SubscriptionStatus.UNKNOWN; }; + final boolean autoRenewEnabled = Optional + .ofNullable(lineItem.getAutoRenewingPlan()) + .map(AutoRenewingPlan::getAutoRenewEnabled) // returns null or false if auto-renew disabled + .orElse(false); return new SubscriptionInformation( price, productIdToLevel(lineItem.getProductId()), billingCycleAnchor.orElse(null), expiration.orElse(null), expiration.map(clock.instant()::isBefore).orElse(false), - lineItem.getAutoRenewingPlan() != null && lineItem.getAutoRenewingPlan().getAutoRenewEnabled(), + !autoRenewEnabled, status, PaymentProvider.GOOGLE_PLAY_BILLING, PaymentMethod.GOOGLE_PLAY_BILLING, @@ -467,5 +472,4 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor { return s; } } - } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManagerTest.java index 58fc7986c..767e4fd71 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManagerTest.java @@ -16,6 +16,7 @@ import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.google.api.services.androidpublisher.AndroidPublisher; +import com.google.api.services.androidpublisher.model.AutoRenewingPlan; import com.google.api.services.androidpublisher.model.BasePlan; import com.google.api.services.androidpublisher.model.Money; import com.google.api.services.androidpublisher.model.OfferDetails; @@ -234,6 +235,7 @@ class GooglePlayBillingManagerTest { .setRegionCode("US") .setLineItems(List.of(new SubscriptionPurchaseLineItem() .setExpiryTime(Instant.now().plus(Duration.ofDays(1)).toString()) + .setAutoRenewingPlan(new AutoRenewingPlan().setAutoRenewEnabled(null)) .setProductId(PRODUCT_ID) .setOfferDetails(new OfferDetails().setBasePlanId(basePlanId))))); @@ -251,6 +253,8 @@ class GooglePlayBillingManagerTest { assertThat(info.price().currency()).isEqualTo("USD"); assertThat(info.price().amount().compareTo(new BigDecimal("175"))).isEqualTo(0); // 175 cents assertThat(info.level()).isEqualTo(201L); + assertThat(info.cancelAtPeriodEnd()).isTrue(); + } }