From 415ba7f4481c64b5255e6167fcdcfa4aa9021232 Mon Sep 17 00:00:00 2001 From: Toni Rico Date: Fri, 3 Nov 2023 14:47:43 +0100 Subject: [PATCH 1/4] Add revenuecatui API tests --- api-tester/build.gradle | 4 + .../java/revenuecatui/FontProviderAPI.java | 108 ++++++++++++++++++ .../PaywallActivityLauncherAPI.java | 33 ++++++ .../java/revenuecatui/PaywallResultAPI.java | 35 ++++++ .../kotlin/revenuecatui/FontProviderAPI.kt | 96 ++++++++++++++++ .../kotlin/revenuecatui/PaywallAPI.kt | 29 +++++ .../PaywallActivityLauncherAPI.kt | 51 +++++++++ .../revenuecatui/PaywallDialogOptionsAPI.kt | 36 ++++++ .../kotlin/revenuecatui/PaywallOptionsAPI.kt | 23 ++++ .../kotlin/revenuecatui/PaywallResultAPI.kt | 30 +++++ 10 files changed, 445 insertions(+) create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt diff --git a/api-tester/build.gradle b/api-tester/build.gradle index f26a865584..9fec3147a2 100644 --- a/api-tester/build.gradle +++ b/api-tester/build.gradle @@ -50,8 +50,12 @@ dependencies { implementation project(path: ':purchases') implementation project(path: ':feature:amazon') implementation project(path: ':ui:debugview') + implementation project(path: ':ui:revenuecatui') implementation(platform(libs.kotlin.bom)) implementation platform(libs.compose.bom) implementation libs.compose.ui + implementation libs.activity.compose + implementation libs.androidx.fragment.ktx + implementation libs.compose.ui.google.fonts } diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java new file mode 100644 index 0000000000..0b0bac981c --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java @@ -0,0 +1,108 @@ +package com.revenuecat.apitester.java.revenuecatui; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.OptIn; +import androidx.compose.ui.text.font.FontFamily; +import androidx.compose.ui.text.font.FontWeight; +import androidx.compose.ui.text.googlefonts.GoogleFont; + +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI; +import com.revenuecat.purchases.ui.revenuecatui.fonts.CustomFontProvider; +import com.revenuecat.purchases.ui.revenuecatui.fonts.CustomParcelizableFontProvider; +import com.revenuecat.purchases.ui.revenuecatui.fonts.FontProvider; +import com.revenuecat.purchases.ui.revenuecatui.fonts.GoogleFontProvider; +import com.revenuecat.purchases.ui.revenuecatui.fonts.ParcelizableFontProvider; +import com.revenuecat.purchases.ui.revenuecatui.fonts.PaywallFont; +import com.revenuecat.purchases.ui.revenuecatui.fonts.PaywallFontFamily; +import com.revenuecat.purchases.ui.revenuecatui.fonts.TypographyType; + +import java.util.List; + +@SuppressWarnings({"unused"}) +@OptIn(markerClass = ExperimentalPreviewRevenueCatUIPurchasesAPI.class) +final class FontProviderAPI { + static void check(TypographyType typographyType) { + FontProvider fontProvider = new FontProvider() { + @Nullable + @Override + public FontFamily getFont(@NonNull TypographyType type) { + return null; + } + }; + FontFamily fontFamily = fontProvider.getFont(typographyType); + CustomFontProvider customFontProvider = new CustomFontProvider(FontFamily.Companion.getDefault()); + } + + static void checkParcelizableFontProvider(TypographyType typographyType, List fonts) { + ParcelizableFontProvider fontProvider = new ParcelizableFontProvider() { + @Nullable + @Override + public PaywallFontFamily getFont(@NonNull TypographyType type) { + return null; + } + }; + PaywallFontFamily fontFamily = fontProvider.getFont(typographyType); + CustomParcelizableFontProvider customFontProvider = new CustomParcelizableFontProvider(new PaywallFontFamily(fonts)); + } + + static void checkPaywallFontFamily(PaywallFontFamily fontFamily) { + List fonts = fontFamily.getFonts(); + } + + static void checkPaywallFont(PaywallFont font) { + if (font instanceof PaywallFont.GoogleFont) { + final PaywallFont.GoogleFont googleFont = (PaywallFont.GoogleFont) font; + String fontName = googleFont.getFontName(); + GoogleFontProvider provider = googleFont.getFontProvider(); + FontWeight fontWeight = googleFont.getFontWeight(); + int fontStyle = googleFont.getFontStyle(); + final PaywallFont.GoogleFont googleFont2 = new PaywallFont.GoogleFont( + fontName, + provider, + fontWeight, + fontStyle + ); + } else if (font instanceof PaywallFont.ResourceFont) { + final PaywallFont.ResourceFont resourceFont = (PaywallFont.ResourceFont) font; + int fontRes = resourceFont.getResourceId(); + FontWeight fontWeight = resourceFont.getFontWeight(); + int fontStyle = resourceFont.getFontStyle(); + final PaywallFont.ResourceFont resourceFont2 = new PaywallFont.ResourceFont(fontRes, fontWeight, fontStyle); + } + } + + static void checkGoogleFontProvider( + int certificates, + String providerAuthority, + String providerPackage + ) { + GoogleFontProvider provider = new GoogleFontProvider(certificates, providerAuthority, providerPackage); + int providerCertificates = provider.getCertificates(); + String providerAuthority2 = provider.getProviderAuthority(); + String providerPackage2 = provider.getProviderPackage(); + GoogleFont.Provider googleProvider = provider.toGoogleProvider(); + } + + static Boolean checkTypographyType(TypographyType type) { + switch (type) { + case DISPLAY_LARGE: + case DISPLAY_MEDIUM: + case DISPLAY_SMALL: + case HEADLINE_LARGE: + case HEADLINE_MEDIUM: + case HEADLINE_SMALL: + case TITLE_LARGE: + case TITLE_MEDIUM: + case TITLE_SMALL: + case BODY_LARGE: + case BODY_MEDIUM: + case BODY_SMALL: + case LABEL_LARGE: + case LABEL_MEDIUM: + case LABEL_SMALL: + return true; + } + return false; + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java new file mode 100644 index 0000000000..952b2e2b3c --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java @@ -0,0 +1,33 @@ +package com.revenuecat.apitester.java.revenuecatui; + + +import androidx.activity.ComponentActivity; +import androidx.fragment.app.Fragment; + +import com.revenuecat.purchases.Offering; +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI; +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityLauncher; +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResultHandler; +import com.revenuecat.purchases.ui.revenuecatui.fonts.ParcelizableFontProvider; + +@SuppressWarnings({"unused"}) +@ExperimentalPreviewRevenueCatUIPurchasesAPI +final class PaywallActivityLauncherAPI { + + static void check( + ComponentActivity activity, + Fragment fragment, + PaywallResultHandler resultHandler, + Offering offering, + ParcelizableFontProvider fontProvider + ) { + PaywallActivityLauncher launcher = new PaywallActivityLauncher(activity, resultHandler); + PaywallActivityLauncher launcher2 = new PaywallActivityLauncher(fragment, resultHandler); + launcher.launch(); + launcher.launch(offering); + launcher.launch(null, fontProvider); + launcher.launch(null, null, true); + launcher.launchIfNeeded("requiredEntitlementIdentifier"); + launcher.launchIfNeeded(null, null, true, customerInfo -> null); + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java new file mode 100644 index 0000000000..d986dd83cf --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java @@ -0,0 +1,35 @@ +package com.revenuecat.apitester.java.revenuecatui; + +import android.os.Parcel; +import android.os.Parcelable; + +import androidx.activity.result.ActivityResultCallback; +import androidx.annotation.NonNull; + +import com.revenuecat.purchases.CustomerInfo; +import com.revenuecat.purchases.PurchasesError; +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI; +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResult; +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResultHandler; + +@SuppressWarnings({"unused"}) +@ExperimentalPreviewRevenueCatUIPurchasesAPI +final class PaywallResultAPI { + + static void checkResultHandler( + final PaywallResultHandler resultHandler + ) { + final ActivityResultCallback callback = resultHandler; + } + + static void checkResult(PurchasesError error, CustomerInfo customerInfo) { + final PaywallResult result = PaywallResult.Cancelled.INSTANCE; + final Parcelable parcelable = result; + final PaywallResult.Error result2 = new PaywallResult.Error(error); + PurchasesError error2 = result2.getError(); + final PaywallResult.Purchased result3 = new PaywallResult.Purchased(customerInfo); + CustomerInfo customerInfo2 = result3.getCustomerInfo(); + final PaywallResult result2AsSealedClass = result2; + final PaywallResult result3AsSealedClass = result3; + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt new file mode 100644 index 0000000000..5fbc30fffc --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt @@ -0,0 +1,96 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontFamily.Companion.Default +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.googlefonts.GoogleFont +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.fonts.CustomFontProvider +import com.revenuecat.purchases.ui.revenuecatui.fonts.CustomParcelizableFontProvider +import com.revenuecat.purchases.ui.revenuecatui.fonts.FontProvider +import com.revenuecat.purchases.ui.revenuecatui.fonts.GoogleFontProvider +import com.revenuecat.purchases.ui.revenuecatui.fonts.ParcelizableFontProvider +import com.revenuecat.purchases.ui.revenuecatui.fonts.PaywallFont +import com.revenuecat.purchases.ui.revenuecatui.fonts.PaywallFontFamily +import com.revenuecat.purchases.ui.revenuecatui.fonts.TypographyType + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class FontProviderAPI { + fun check(typographyType: TypographyType) { + val fontProvider: FontProvider = object : FontProvider { + override fun getFont(type: TypographyType): FontFamily? { + return null + } + } + val fontFamily = fontProvider.getFont(typographyType) + val customFontProvider = CustomFontProvider(Default) + } + + fun checkParcelizableFontProvider(typographyType: TypographyType, fonts: List) { + val fontProvider: ParcelizableFontProvider = object : ParcelizableFontProvider { + override fun getFont(type: TypographyType): PaywallFontFamily? { + return null + } + } + val fontFamily = fontProvider.getFont(typographyType) + val customFontProvider = CustomParcelizableFontProvider(PaywallFontFamily(fonts)) + } + + fun checkPaywallFontFamily(fontFamily: PaywallFontFamily) { + val fonts = fontFamily.fonts + } + + fun checkPaywallFont(font: PaywallFont) { + if (font is PaywallFont.GoogleFont) { + val fontName: String = font.fontName + val provider: GoogleFontProvider = font.fontProvider + val fontWeight: FontWeight = font.fontWeight + val fontStyle: FontStyle = font.fontStyle + val googleFont = PaywallFont.GoogleFont( + fontName, + provider, + fontWeight, + fontStyle + ) + } else if (font is PaywallFont.ResourceFont) { + val fontRes: Int = font.resourceId + val fontWeight: FontWeight = font.fontWeight + val fontStyle: FontStyle = font.fontStyle + val resourceFont = PaywallFont.ResourceFont(fontRes, fontWeight, fontStyle) + } + } + + fun checkGoogleFontProvider( + certificates: Int, + providerAuthority: String?, + providerPackage: String?, + ) { + val provider = GoogleFontProvider(certificates, providerAuthority!!, providerPackage!!) + val providerCertificates = provider.certificates + val providerAuthority2 = provider.providerAuthority + val providerPackage2 = provider.providerPackage + val googleProvider: GoogleFont.Provider = provider.toGoogleProvider() + } + + fun checkTypographyType(type: TypographyType): Boolean { + when (type) { + TypographyType.DISPLAY_LARGE, + TypographyType.DISPLAY_MEDIUM, + TypographyType.DISPLAY_SMALL, + TypographyType.HEADLINE_LARGE, + TypographyType.HEADLINE_MEDIUM, + TypographyType.HEADLINE_SMALL, + TypographyType.TITLE_LARGE, + TypographyType.TITLE_MEDIUM, + TypographyType.TITLE_SMALL, + TypographyType.BODY_LARGE, + TypographyType.BODY_MEDIUM, + TypographyType.BODY_SMALL, + TypographyType.LABEL_LARGE, + TypographyType.LABEL_MEDIUM, + TypographyType.LABEL_SMALL -> return true + } + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt new file mode 100644 index 0000000000..7c3cf4dcff --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt @@ -0,0 +1,29 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import androidx.compose.runtime.Composable +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.Paywall +import com.revenuecat.purchases.ui.revenuecatui.PaywallDialog +import com.revenuecat.purchases.ui.revenuecatui.PaywallDialogOptions +import com.revenuecat.purchases.ui.revenuecatui.PaywallFooter +import com.revenuecat.purchases.ui.revenuecatui.PaywallOptions + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallAPI { + + @Composable + fun check(options: PaywallOptions) { + Paywall(options = options) + } + + @Composable + fun checkFooter(options: PaywallOptions) { + PaywallFooter(options = options, condensed = true) {} + } + + @Composable + fun checkDialog(options: PaywallDialogOptions) { + PaywallDialog(paywallDialogOptions = options) + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt new file mode 100644 index 0000000000..ace385e1c4 --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt @@ -0,0 +1,51 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import androidx.activity.ComponentActivity +import androidx.fragment.app.Fragment +import com.revenuecat.purchases.CustomerInfo +import com.revenuecat.purchases.Offering +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityLauncher +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResultHandler +import com.revenuecat.purchases.ui.revenuecatui.fonts.ParcelizableFontProvider + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallActivityLauncherAPI { + fun check( + componentActivity: ComponentActivity, + fragment: Fragment, + resultHandler: PaywallResultHandler, + offering: Offering, + fontProvider: ParcelizableFontProvider, + ) { + val activityLauncher = PaywallActivityLauncher(componentActivity, resultHandler) + val activityLauncher2 = PaywallActivityLauncher(fragment, resultHandler) + activityLauncher.launch() + activityLauncher.launch(offering) + activityLauncher.launch( + offering = offering, + fontProvider = fontProvider, + shouldDisplayDismissButton = true, + ) + activityLauncher.launchIfNeeded("requiredEntitlementIdentifier") + activityLauncher.launchIfNeeded( + requiredEntitlementIdentifier = "requiredEntitlementIdentifier", + offering = offering, + fontProvider = fontProvider, + shouldDisplayDismissButton = true, + ) + activityLauncher.launchIfNeeded { + val customerInfo: CustomerInfo = it + true + } + activityLauncher.launchIfNeeded( + offering = offering, + fontProvider = fontProvider, + shouldDisplayDismissButton = true, + ) { + val customerInfo: CustomerInfo = it + true + } + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt new file mode 100644 index 0000000000..d749d76afd --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt @@ -0,0 +1,36 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import com.revenuecat.purchases.CustomerInfo +import com.revenuecat.purchases.Offering +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.PaywallDialogOptions +import com.revenuecat.purchases.ui.revenuecatui.PaywallListener +import com.revenuecat.purchases.ui.revenuecatui.fonts.FontProvider + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallDialogOptionsAPI { + fun check( + requiredEntitlementIdentifier: String?, + shouldDisplayBlock: ((CustomerInfo) -> Boolean)?, + dismissRequest: () -> Unit, + offering: Offering?, + listener: PaywallListener?, + fontProvider: FontProvider?, + ) { + val options: PaywallDialogOptions = PaywallDialogOptions.Builder() + .setRequiredEntitlementIdentifier(requiredEntitlementIdentifier) + .setShouldDisplayBlock(shouldDisplayBlock) + .setDismissRequest(dismissRequest) + .setOffering(offering) + .setListener(listener) + .setShouldDisplayDismissButton(true) + .setFontProvider(fontProvider) + .build() + val shouldDisplayBlock2 = options.shouldDisplayBlock + val offering2: Offering? = options.offering + val listener2: PaywallListener? = options.listener + val fontProvider2: FontProvider? = options.fontProvider + val dismissRequest = options.dismissRequest + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt new file mode 100644 index 0000000000..e19191f2b9 --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt @@ -0,0 +1,23 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import com.revenuecat.purchases.Offering +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.PaywallListener +import com.revenuecat.purchases.ui.revenuecatui.PaywallOptions +import com.revenuecat.purchases.ui.revenuecatui.fonts.FontProvider + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallOptionsAPI { + fun check(offering: Offering?, listener: PaywallListener?, fontProvider: FontProvider?) { + val options: PaywallOptions = PaywallOptions.Builder(dismissRequest = {}) + .setOffering(offering) + .setListener(listener) + .setShouldDisplayDismissButton(true) + .setFontProvider(fontProvider) + .build() + val listener2: PaywallListener? = options.listener + val fontProvider2: FontProvider? = options.fontProvider + val dismissRequest: () -> Unit = options.dismissRequest + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt new file mode 100644 index 0000000000..04f773fda7 --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt @@ -0,0 +1,30 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import android.os.Parcelable +import androidx.activity.result.ActivityResultCallback +import com.revenuecat.purchases.CustomerInfo +import com.revenuecat.purchases.PurchasesError +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResult +import com.revenuecat.purchases.ui.revenuecatui.activity.PaywallResultHandler + +@Suppress("unused", "UNUSED_VARIABLE") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallResultAPI { + fun checkResultHandler( + resultHandler: PaywallResultHandler, + ) { + val callback: ActivityResultCallback = resultHandler + } + + fun checkResult(error: PurchasesError, customerInfo: CustomerInfo) { + val result: PaywallResult = PaywallResult.Cancelled + val parcelable: Parcelable = result + val result2 = PaywallResult.Error(error) + val error2: PurchasesError = result2.error + val result3 = PaywallResult.Purchased(customerInfo) + val customerInfo: CustomerInfo = result3.customerInfo + val result2AsSealedClass: PaywallResult = result2 + val result3AsSealedClass: PaywallResult = result3 + } +} From 6e3dd0521c58ec2ca5b0e2d928038ed8e347e611 Mon Sep 17 00:00:00 2001 From: Toni Rico Date: Fri, 3 Nov 2023 14:55:07 +0100 Subject: [PATCH 2/4] Some more API tests and fixing some things --- .../kotlin/revenuecatui/FontProviderAPI.kt | 5 ++-- .../revenuecatui/PaywallDialogOptionsAPI.kt | 2 +- .../kotlin/revenuecatui/PaywallListenerAPI.kt | 28 +++++++++++++++++++ .../kotlin/revenuecatui/PaywallResultAPI.kt | 18 +++++++----- 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt index 5fbc30fffc..1259e0febf 100644 --- a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt @@ -52,7 +52,7 @@ private class FontProviderAPI { fontName, provider, fontWeight, - fontStyle + fontStyle, ) } else if (font is PaywallFont.ResourceFont) { val fontRes: Int = font.resourceId @@ -90,7 +90,8 @@ private class FontProviderAPI { TypographyType.BODY_SMALL, TypographyType.LABEL_LARGE, TypographyType.LABEL_MEDIUM, - TypographyType.LABEL_SMALL -> return true + TypographyType.LABEL_SMALL, + -> return true } } } diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt index d749d76afd..ed01a5b4ba 100644 --- a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt @@ -7,7 +7,7 @@ import com.revenuecat.purchases.ui.revenuecatui.PaywallDialogOptions import com.revenuecat.purchases.ui.revenuecatui.PaywallListener import com.revenuecat.purchases.ui.revenuecatui.fonts.FontProvider -@Suppress("unused", "UNUSED_VARIABLE") +@Suppress("unused", "UNUSED_VARIABLE", "LongParameterList") @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) private class PaywallDialogOptionsAPI { fun check( diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt new file mode 100644 index 0000000000..ad6c152f5d --- /dev/null +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt @@ -0,0 +1,28 @@ +package com.revenuecat.apitester.kotlin.revenuecatui + +import com.revenuecat.purchases.CustomerInfo +import com.revenuecat.purchases.Package +import com.revenuecat.purchases.PurchasesError +import com.revenuecat.purchases.models.StoreTransaction +import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI +import com.revenuecat.purchases.ui.revenuecatui.PaywallListener + +@Suppress("unused", "UNUSED_VARIABLE", "EmptyFunctionBlock") +@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class) +private class PaywallListenerAPI { + fun check() { + val listener = object : PaywallListener { + override fun onPurchaseStarted(rcPackage: Package) {} + + override fun onPurchaseError(error: PurchasesError) {} + + override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransaction) {} + + override fun onRestoreStarted() {} + + override fun onRestoreError(error: PurchasesError) {} + + override fun onRestoreCompleted(customerInfo: CustomerInfo) {} + } + } +} diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt index 04f773fda7..3c61e8defa 100644 --- a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt +++ b/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt @@ -17,14 +17,18 @@ private class PaywallResultAPI { val callback: ActivityResultCallback = resultHandler } - fun checkResult(error: PurchasesError, customerInfo: CustomerInfo) { - val result: PaywallResult = PaywallResult.Cancelled - val parcelable: Parcelable = result + fun checkResult(paywallResult: PaywallResult, error: PurchasesError, customerInfo: CustomerInfo) { + when (paywallResult) { + is PaywallResult.Cancelled -> {} + is PaywallResult.Error -> { + val error2: PurchasesError = paywallResult.error + } + is PaywallResult.Purchased -> { + val customerInfo2: CustomerInfo = paywallResult.customerInfo + } + } + val parcelable: Parcelable = paywallResult val result2 = PaywallResult.Error(error) - val error2: PurchasesError = result2.error val result3 = PaywallResult.Purchased(customerInfo) - val customerInfo: CustomerInfo = result3.customerInfo - val result2AsSealedClass: PaywallResult = result2 - val result3AsSealedClass: PaywallResult = result3 } } From ada223acb2ba90bdc5be86e0af86276027b9ae46 Mon Sep 17 00:00:00 2001 From: Toni Rico Date: Fri, 3 Nov 2023 14:55:30 +0100 Subject: [PATCH 3/4] Put mandatory parameter first for convenience --- .../ui/revenuecatui/activity/PaywallActivityLauncher.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivityLauncher.kt b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivityLauncher.kt index 598cfff63f..f6e6b711b4 100644 --- a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivityLauncher.kt +++ b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivityLauncher.kt @@ -73,9 +73,9 @@ class PaywallActivityLauncher { */ @JvmOverloads fun launchIfNeeded( + requiredEntitlementIdentifier: String, offering: Offering? = null, fontProvider: ParcelizableFontProvider? = null, - requiredEntitlementIdentifier: String, shouldDisplayDismissButton: Boolean = DEFAULT_DISPLAY_DISMISS_BUTTON, ) { launchIfNeeded( From 797c5faa517b78d317b2cf99827fb00f10c06f56 Mon Sep 17 00:00:00 2001 From: Toni Rico Date: Fri, 3 Nov 2023 16:07:20 +0100 Subject: [PATCH 4/4] Fix API issues using PaywallFont in java --- api-tester/build.gradle | 2 +- .../java/revenuecatui/FontProviderAPI.java | 0 .../revenuecatui/PaywallActivityLauncherAPI.java | 0 .../java/revenuecatui/PaywallResultAPI.java | 0 .../kotlin/revenuecatui/FontProviderAPI.kt | 5 ++--- .../apitester/kotlin/revenuecatui/PaywallAPI.kt | 0 .../revenuecatui/PaywallActivityLauncherAPI.kt | 0 .../kotlin/revenuecatui/PaywallDialogOptionsAPI.kt | 0 .../kotlin/revenuecatui/PaywallListenerAPI.kt | 0 .../kotlin/revenuecatui/PaywallOptionsAPI.kt | 0 .../kotlin/revenuecatui/PaywallResultAPI.kt | 0 .../ui/revenuecatui/activity/PaywallActivity.kt | 5 +++-- .../ui/revenuecatui/fonts/FontStyleParceler.kt | 13 ------------- .../purchases/ui/revenuecatui/fonts/PaywallFont.kt | 8 ++++---- 14 files changed, 10 insertions(+), 23 deletions(-) rename api-tester/src/{main => defaults}/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java (100%) rename api-tester/src/{main => defaults}/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java (100%) rename api-tester/src/{main => defaults}/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt (96%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt (100%) rename api-tester/src/{main/java => defaults/kotlin}/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt (100%) delete mode 100644 ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/FontStyleParceler.kt diff --git a/api-tester/build.gradle b/api-tester/build.gradle index 9fec3147a2..94a0ef4685 100644 --- a/api-tester/build.gradle +++ b/api-tester/build.gradle @@ -17,7 +17,7 @@ android { } defaultConfig { - minSdkVersion 21 // Compose requires minSdkVersion 21 + minSdkVersion 24 // RevenueCat UI requires 24 } compileOptions { diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java b/api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java rename to api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/FontProviderAPI.java diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java b/api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java rename to api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/PaywallActivityLauncherAPI.java diff --git a/api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java b/api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java rename to api-tester/src/defaults/java/com/revenuecat/apitester/java/revenuecatui/PaywallResultAPI.java diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt similarity index 96% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt index 1259e0febf..553b5f8f1b 100644 --- a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt +++ b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/FontProviderAPI.kt @@ -2,7 +2,6 @@ package com.revenuecat.apitester.kotlin.revenuecatui import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily.Companion.Default -import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.googlefonts.GoogleFont import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI @@ -47,7 +46,7 @@ private class FontProviderAPI { val fontName: String = font.fontName val provider: GoogleFontProvider = font.fontProvider val fontWeight: FontWeight = font.fontWeight - val fontStyle: FontStyle = font.fontStyle + val fontStyle: Int = font.fontStyle val googleFont = PaywallFont.GoogleFont( fontName, provider, @@ -57,7 +56,7 @@ private class FontProviderAPI { } else if (font is PaywallFont.ResourceFont) { val fontRes: Int = font.resourceId val fontWeight: FontWeight = font.fontWeight - val fontStyle: FontStyle = font.fontStyle + val fontStyle: Int = font.fontStyle val resourceFont = PaywallFont.ResourceFont(fontRes, fontWeight, fontStyle) } } diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallActivityLauncherAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallDialogOptionsAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallListenerAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallOptionsAPI.kt diff --git a/api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt b/api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt similarity index 100% rename from api-tester/src/main/java/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt rename to api-tester/src/defaults/kotlin/com/revenuecat/apitester/kotlin/revenuecatui/PaywallResultAPI.kt diff --git a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivity.kt b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivity.kt index 721a43ae1a..df82b88554 100644 --- a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivity.kt +++ b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/activity/PaywallActivity.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.Scaffold import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.googlefonts.Font import androidx.compose.ui.text.googlefonts.GoogleFont import com.revenuecat.purchases.CustomerInfo @@ -53,7 +54,7 @@ internal class PaywallActivity : ComponentActivity(), PaywallListener { val fontsMap = getArgs()?.fonts?.mapValues { (_, fontFamily) -> val fonts = fontFamily?.fonts?.map { font -> when (font) { - is PaywallFont.ResourceFont -> Font(font.resourceId, font.fontWeight, font.fontStyle) + is PaywallFont.ResourceFont -> Font(font.resourceId, font.fontWeight, FontStyle(font.fontStyle)) is PaywallFont.GoogleFont -> { val googleFontProvider = font.fontProvider val provider = googleFontProviders.getOrElse(googleFontProvider) { @@ -61,7 +62,7 @@ internal class PaywallActivity : ComponentActivity(), PaywallListener { googleFontProviders[googleFontProvider] = googleProvider googleProvider } - Font(GoogleFont(font.fontName), provider, font.fontWeight, font.fontStyle) + Font(GoogleFont(font.fontName), provider, font.fontWeight, FontStyle(font.fontStyle)) } } } diff --git a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/FontStyleParceler.kt b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/FontStyleParceler.kt deleted file mode 100644 index ec49ae154c..0000000000 --- a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/FontStyleParceler.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.revenuecat.purchases.ui.revenuecatui.fonts - -import android.os.Parcel -import androidx.compose.ui.text.font.FontStyle -import kotlinx.parcelize.Parceler - -internal object FontStyleParceler : Parceler { - override fun create(parcel: Parcel) = FontStyle(parcel.readInt()) - - override fun FontStyle.write(parcel: Parcel, flags: Int) { - parcel.writeInt(value) - } -} diff --git a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/PaywallFont.kt b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/PaywallFont.kt index e3cde3070a..8df275e77f 100644 --- a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/PaywallFont.kt +++ b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/fonts/PaywallFont.kt @@ -33,9 +33,9 @@ sealed class PaywallFont : Parcelable { val fontWeight: FontWeight = FontWeight.Normal, /** * The style of the font, normal or italic. The system uses this to match a font to a font request. + * We use int instead of [FontStyle] because [FontStyle] is not compatible with Java. */ - @TypeParceler() - val fontStyle: FontStyle = FontStyle.Normal, + val fontStyle: Int = FontStyle.Normal.value, ) : PaywallFont() @Parcelize @@ -52,8 +52,8 @@ sealed class PaywallFont : Parcelable { val fontWeight: FontWeight = FontWeight.Normal, /** * The style of the font, normal or italic. The system uses this to match a font to a font request. + * We use int instead of [FontStyle] because [FontStyle] is not compatible with Java. */ - @TypeParceler() - val fontStyle: FontStyle = FontStyle.Normal, + val fontStyle: Int = FontStyle.Normal.value, ) : PaywallFont() }