Skip to content

Add default paywall UI components#3133

Open
JZDesign wants to merge 1 commit intojzdesign/fallback-paywall-2-color-helpersfrom
jzdesign/fallback-paywall-3-default-paywall-ui
Open

Add default paywall UI components#3133
JZDesign wants to merge 1 commit intojzdesign/fallback-paywall-2-color-helpersfrom
jzdesign/fallback-paywall-3-default-paywall-ui

Conversation

@JZDesign
Copy link
Contributor

@JZDesign JZDesign commented Feb 23, 2026

Summary

  • Adds DefaultPaywallView composable: the main fallback paywall with dynamic app icon theming, package list, purchase and restore buttons
  • Adds DefaultPaywallWarning: debug-only warning panel showing what went wrong, with RevenueCat branding and dashboard links
  • Adds DefaultProductCell: selectable product row with animated color transitions
  • Adds RevenueCat branding image and string resources for the default paywall

Part 3 of the fallback paywall feature breaking up #2945. Stacked on #3132.


Note

Medium Risk
Adds new purchase/restore UI and debug-only warning flows; while mostly UI, it can impact purchase triggering and link launching if wired incorrectly.

Overview
Introduces a new fallback paywall UI in defaultpaywall/ via DefaultPaywallView, rendering an app-branded paywall (colors derived from the app icon), a selectable package list, and footer Purchase/Restore Purchases actions.

Adds DefaultPaywallWarning, a debug-build-only warning panel (RevenueCat-branded, optional “Go to Dashboard” deep link) shown when paywall validation fails, plus DefaultProductCell for animated selection styling. Updates strings.xml with new default paywall copy.

Written by Cursor Bugbot for commit 10f55d9. This will update automatically on new commits. Configure here.

Adds the composable UI for the fallback paywall:
- DefaultPaywallView: main fallback paywall with app icon, color extraction,
  package list, purchase and restore buttons
- DefaultPaywallWarning: debug-only warning panel with RC branding and help links
- DefaultProductCell: selectable product row with animated color transitions
- RevenueCat branding image and string resources

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@RevenueCat-Danger-Bot
Copy link

1 Error
🚫 Label the PR using one of the change type labels. If you are not sure which label to use, choose pr:other.
Label Description
pr:feat A new feature. Use along with pr:breaking to force a major release.
pr:fix A bug fix. Use along with pr:force_minor to force a minor release.
pr:other Other changes. Catch-all for anything that doesn't fit the above categories. Releases that only contain this label will not be released. Use along with pr:force_patch, or pr:force_minor to force a patch or minor release.
pr:RevenueCatUI Use along any other tag to mark a PR that only contains RevenueCatUI changes
pr:next_release Preparing a new release
pr:dependencies Updating a dependency
pr:phc_dependencies Updating purchases-hybrid-common dependency
pr:changelog_ignore The PR will not be included in the changelog. This label doesn't determine the type of bump of the version and must be combined with pr:feat, pr:fix or pr:other.

Generated by 🚫 Danger

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

}
}

Spacer(modifier = Modifier.height(16.dp))
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Scrollable content hidden behind overlapping footer buttons

Medium Severity

The footer buttons are absolutely positioned at the bottom of the Box via Alignment.BottomCenter, overlaying the scrollable Column. The scrollable content only has ~32dp of clearance at the bottom (16dp spacer + 16dp padding), but the footer is approximately 140dp tall. When there are enough packages to require scrolling, the last product item(s) will be permanently obscured behind the purchase and restore buttons, making them unselectable.

Additional Locations (1)

Fix in Cursor Fix in Web

OutlinedButton(
onClick = {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
context.startActivity(intent)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing ActivityNotFoundException handling for URL intent launch

Low Severity

Calling context.startActivity(intent) without catching ActivityNotFoundException can crash on devices with no browser installed. The codebase already provides Context.openUriOrElse in Uris.kt for exactly this purpose, and all other URL-opening code paths use it. Though this only affects debug builds, it's still an unhandled crash.

Fix in Cursor Fix in Web

@emerge-tools
Copy link

emerge-tools bot commented Feb 23, 2026

2 builds increased size

Name Version Download Change Install Change Approval
TestPurchasesUIAndroidCompatibility
com.revenuecat.testpurchasesuiandroidcompatibility
1.0 (1) 70.7 MB ⬆️ 112.2 kB (0.16%) 113.7 MB ⬆️ 161.1 kB (0.14%) N/A
SDKSizeTesting
com.revenuecat.testapps.sdksizetesting
1.0 (1) 11.9 MB ⬆️ 86.1 kB (0.73%) 34.3 MB ⬆️ 121.1 kB (0.35%) ⏳ Needs approval

TestPurchasesUIAndroidCompatibility 1.0 (1)
com.revenuecat.testpurchasesuiandroidcompatibility

⚖️ Compare build
⏱️ Analyze build performance

Total install size change: ⬆️ 161.1 kB (0.14%)
Total download size change: ⬆️ 112.2 kB (0.16%)

Largest size changes

Item Install Size Change Download Size Change
📝 visual_ob_create_paywall.png ⬆️ 77.6 kB ⬆️ 77.2 kB
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPa... ⬆️ 13.9 kB ⬆️ 4.8 kB
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPa... ⬆️ 3.6 kB ⬆️ 1.2 kB
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPr... ⬆️ 2.9 kB ⬆️ 999 B
📝 com.revenuecat.purchases.ui.revenuecatui.helpers.AppStyleExtracto... ⬆️ 2.7 kB ⬆️ 812 B
View Treemap

Image of diff

SDKSizeTesting 1.0 (1)
com.revenuecat.testapps.sdksizetesting

⚖️ Compare build
⏱️ Analyze build performance

Total install size change: ⬆️ 121.1 kB (0.35%)
Total download size change: ⬆️ 86.1 kB (0.73%)

Largest size changes

Item Install Size Change Download Size Change
📝 visual_ob_create_paywall.png ⬆️ 66.3 kB ⬆️ 66.3 kB
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPa... ⬆️ 7.6 kB ⬆️ 2.5 kB
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPa... ⬆️ 2.2 kB ⬆️ 708 B
📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPr... ⬆️ 2.0 kB ⬆️ 657 B
📝 com.revenuecat.purchases.ui.revenuecatui.helpers.AppStyleExtracto... ⬆️ 1.7 kB ⬆️ 553 B
View Treemap

Image of diff


🛸 Powered by Emerge Tools

Comment trigger: Size diff threshold of 100.00kB exceeded

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants