Repository navigation
Conversation
The Restore Purchases button always showed 'Purchases restored.' even when nothing was restored. Wait for the entitlement to arrive on the store's purchase stream and say so either way. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
This store screenshot advertises “Twelve transmissions,” while the embedded app screen says “TRANSMISSION 1 OF 50” and the campaign in lib/intercept/transmission.dart contains the 50-transmission set. Because this committed asset is uploaded directly by the Fastlane metadata lane, the public App Store listing would contain contradictory and materially inaccurate content; regenerate it with the actual count.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| message = await _restoreAndConfirm() | ||
| ? 'Purchase restored. Ads are removed.' | ||
| : 'No previous purchase found for this Apple Account.'; |
There was a problem hiding this comment.
Distinguish an unavailable store from no prior purchase
When the App Store is unavailable, IapEntitlementService.restore() sees isAvailable() == false and returns normally without emitting an entitlement event, so this branch waits six seconds and tells the user that no previous purchase exists. The new connectivity message is only reached for thrown exceptions and therefore misses this normal offline/unavailable path; propagate the store-availability result or throw from the entitlement service before selecting the “no previous purchase” message.
Useful? React with 👍 / 👎.
| Future<void> _restore(BuildContext context) async { | ||
| await entitlement.restore(); | ||
| String message; | ||
| try { | ||
| message = await _restoreAndConfirm() |
There was a problem hiding this comment.
Block overlapping restore attempts
When there is no purchase to restore, this call now remains pending for six seconds while the Restore Purchases button stays enabled. A second tap starts another native restore, timer, and stream listener; one entitlement event then makes every invocation enqueue its own success snackbar, while the no-purchase case similarly queues duplicate messages. Coalesce an in-flight restore or disable the button until the first attempt completes.
Useful? React with 👍 / 👎.
| try { | ||
| message = await _restoreAndConfirm() | ||
| ? 'Purchase restored. Ads are removed.' | ||
| : 'No previous purchase found for this Apple Account.'; |
There was a problem hiding this comment.
Use platform-neutral account wording
The repository explicitly keeps packages/mobile as an iOS and Android client, and Android reaches this same Settings screen through the Google Play-backed in_app_purchase service. On that platform the no-purchase result incorrectly refers to an “Apple Account”; use a platform-specific label or neutral wording such as “store account.”
Useful? React with 👍 / 👎.
Promote restore-message fix, committed store screenshots, and release lane fixes.
🤖 Generated with Claude Code