WIP Fallback Paywall#2945
Closed
JZDesign wants to merge 5 commits into
Closed
Conversation
Generated by 🚫 Danger |
1 build increased size
TestPurchasesUIAndroidCompatibility 1.0 (1)
|
| 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.InternalPaywallKt | ⬆️ 3.2 kB | ⬆️ 1.1 kB |
| 📝 com.revenuecat.purchases.ui.revenuecatui.defaultpaywall.DefaultPr... | ⬆️ 2.9 kB | ⬆️ 998 B |
🛸 Powered by Emerge Tools
Comment trigger: Size diff threshold of 100.00kB exceeded
This was referenced Feb 23, 2026
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Mar 2, 2026
## Summary - Adds PaywallWarning sealed class that maps PaywallValidationError to user-facing warning messages with titles, body text, and help URLs - Adds a warning computed property on PaywallValidationResult.Legacy to surface the first validation error as a displayable warning (stacked PRs) breaking up #2945. - Add PaywallWarning type for fallback paywall #3131 (This PR) - Add color helpers, AppStyleExtractor, and CircleOutlined icon #3132 - Add default paywall UI components #3133 - Wire validation warning through paywall state pipeline #3134 - Plug in Paywall - Remove Big background image and clean up CI <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk: adds an internal warning type and a derived property without changing validation or paywall rendering logic. Main risk is minor mismatches in error-to-message mapping affecting debug-only messaging. > > **Overview** > Adds an internal sealed `PaywallWarning` that maps `PaywallValidationError` to user-facing `title`, `bodyText`, and optional `helpUrl` for displaying debug warnings on the default/fallback paywall. > > Extends `PaywallValidationResult.Legacy` with a `warning` computed property that converts the *first* validation error into a `PaywallWarning` for easy consumption by the default paywall UI. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 800e7fe. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Mar 10, 2026
> [!IMPORTANT] > This PR is all dark code, nothing is used yet. PR 5 will wire it all together This PR is prepping for color extraction and paywall styling. Unused code. ## Summary - Adds ColorComputationHelpers with WCAG 2.0 contrast ratio and luminance calculations - Adds AppStyleExtractor to extract app name, icon bitmap, and prominent colors from the app icon at runtime - Adds CircleOutlined vector icon for unselected product cells - Includes tests for color extraction, contrast computation, and luminance Part 2 of the fallback paywall feature breaking up #2945. Stacked on #3131. - Add PaywallWarning type for fallback paywall #3131 - Add color helpers, AppStyleExtractor, and CircleOutlined icon #3132 (This PR) - Add default paywall UI components #3133 - Wire validation warning through paywall state pipeline #3134 - Plug in Paywall - Remove Big background image and clean up CI <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Adds new, currently-unused helper utilities and a vector icon with unit tests; no changes to runtime paywall flow or persisted data. > > **Overview** > Prepares groundwork for styling by adding `AppStyleExtractor` to fetch app name/icon and to asynchronously extract a small set of prominent colors from a bitmap via sampling, quantization, and similarity/brightness/alpha filtering. > > Introduces `ColorComputationHelpers` with WCAG-based luminance/contrast utilities (plus best-contrast selection) and adds a new `CircleOutlined` Compose `ImageVector`. > > Adds Robolectric tests covering prominent-color extraction edge cases and the new color math helpers (distance, luminance, contrast, and selection). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3619218. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
JZDesign
added a commit
that referenced
this pull request
Mar 12, 2026
<!-- Thank you for contributing to Purchases! Before pressing the "Create Pull Request" button, please provide the following: --> Wires in the default paywall into the sdk for use. Adds previews for emerge snapshot testing Part 5 of the fallback paywall feature breaking up #2945. Stacked on #3134 - Add PaywallWarning type for fallback paywall #3131 - Add color helpers, AppStyleExtractor, and CircleOutlined icon #3132 - Add default paywall UI components #3133 - Wire validation warning through paywall state pipeline #3134 - Plug in Paywall #3178 (This PR) - Remove Big background image and clean up CI <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Introduces a new paywall rendering path that can trigger purchase/restore actions from the fallback UI, so regressions could affect paywall display and transaction initiation when validation warnings occur. > > **Overview** > Adds a *fallback “default paywall”* flow: `InternalPaywall` now renders `DefaultPaywallView` whenever a legacy paywall loads with a `validationWarning`, wiring its purchase/restore actions through the existing `PaywallViewModel` and reusing a shared `screenModeBackground` modifier. > > Refactors `DefaultPaywallView` layout to use `Scaffold` with a fixed footer and `LazyColumn`, adds preview-only overrides plus new Compose previews, and introduces a deterministic `DualColorImageGenerator` used by previews and a new `AppStyleExtractor` prominent-colors test. Also removes developer-facing debug strings from `strings.xml` in favor of local constants, and updates `.gitignore` to exclude `.cursor/`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 42d3af2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
JZDesign
added a commit
that referenced
this pull request
Mar 12, 2026
## Summary - Adds validationWarning: PaywallWarning? field to PaywallState.Loaded.Legacy - Threads validationWarning through OfferingToStateMapper.toLegacyPaywallState - Passes validationResult.warning from PaywallViewModel.calculateState to the state mapper When a paywall fails validation, the warning is now carried on the loaded state, ready for the UI layer (PR 5) to check and render the DefaultPaywallView instead of the template paywall. Part 4 of the fallback paywall feature breaking up #2945. Stacked on #3133. - Add PaywallWarning type for fallback paywall #3131 - Add color helpers, AppStyleExtractor, and CircleOutlined icon #3132 - Add default paywall UI components #3133 - Wire validation warning through paywall state pipeline #3134 (This PR) - Plug in Paywall #3178 - Remove Big background image and clean up CI <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk additive change: it only carries an optional `PaywallWarning` through state creation and does not alter validation or rendering logic yet. > > **Overview** > **Threads paywall validation warnings through the Legacy paywall state.** `PaywallState.Loaded.Legacy` now includes an optional `validationWarning: PaywallWarning?`. > > `PaywallViewModel.calculateState` passes `validationResult.warning` into `Offering.toLegacyPaywallState`, and the mapper stores it on the created legacy state so the UI can later decide to show a fallback/default paywall when validation issues occur. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 64f72f8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Mar 13, 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. - Add PaywallWarning type for fallback paywall #3131 - Add color helpers, AppStyleExtractor, and CircleOutlined icon #3132 - Add default paywall UI components #3133 (This PR) - Wire validation warning through paywall state pipeline #3134 - Plug in Paywall #3178 - Remove Big background image and clean up CI <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Adds a new fallback paywall UI path for legacy paywalls and threads a new `validationWarning` through state mapping, which can change what users see when paywall validation fails (though warning UI is debug-only). Main risk is UI/behavior regressions around package selection, purchase/restore entrypoints, and full-screen vs sheet background handling. > > **Overview** > Adds a new **default/fallback paywall** Compose UI (`DefaultPaywallView`) that themes itself from the app icon, shows a selectable package list, and provides localized *Purchase*/*Restore* actions, plus a debug-only `DefaultPaywallWarning` panel (with a Dashboard link) and preview/test utilities. > > Wires a new `validationWarning: PaywallWarning?` through `PaywallValidationResult` mapping into `PaywallState.Loaded.Legacy`, and updates `InternalPaywall` to render the new default paywall when the warning is present (including refactoring background handling via `screenModeBackground`). > > Updates test/mocks to support the new legacy fallback flow (selection mutates state; purchase captures selected package id; restore uses `restorePurchases()` entrypoint) and adds string resources for the default paywall across locales; also ignores `.cursor/` in `.gitignore`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6ca1786. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Checklist
purchases-iosand hybrids Fallback Paywall purchases-ios#5930Motivation
Description
Important
Not complete.