Closed
Conversation
While CEC already had the `storefrontCountryCode`, this also adds the APIs `getStorefrontCountryCode` and `awaitStorefrontCountryCode` to the CEC flavor.
### Description This fixes the previews for the `Switch` component so we can preview the checked state. They weren't working since they tried to use an unused property `defaultValue`, which is removed in this PR. The component uses the selected tab index to know whether the switch should be checked or not.
This updates the CustomEntitlementComputation sample app to kotlin 1.8.22. This is needed after dropping support for 1.7 in #2493
### Description Bump AGP to 8.10.1 and Gradle to 8.14.2.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [gradle](https://gradle.org) ([source](https://redirect.github.com/gradle/gradle)) | | minor | `8.10.2` -> `8.14.2` | | [gradle](https://gradle.org) ([source](https://redirect.github.com/gradle/gradle)) | | minor | `8.9` -> `8.14.2` | | [com.android.library](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | plugin | minor | `8.8.0` -> `8.11.0` | | [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | plugin | minor | `8.8.0` -> `8.11.0` | | [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | plugin | minor | `8.1.3` -> `8.11.0` | --- ### Release Notes <details> <summary>gradle/gradle (gradle)</summary> ### [`v8.14.2`](https://redirect.github.com/gradle/gradle/releases/tag/v8.14.2): 8.14.2 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.14.1...v8.14.2) The Gradle team is excited to announce Gradle 8.14.2. Here are the highlights of this release: - Java 24 support - GraalVM Native Image toolchain selection - Enhancements to test reporting - Build Authoring improvements [Read the Release Notes](https://docs.gradle.org/8.14.2/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Aurimas](https://redirect.github.com/liutikas), [Ben Bader](https://redirect.github.com/benjamin-bader), [Björn Kautler](https://redirect.github.com/Vampire), [chandre92](https://redirect.github.com/chandre92), [Daniel Hammer](https://redirect.github.com/dlehammer), [Danish Nawab](https://redirect.github.com/danishnawab), [Florian Dreier](https://redirect.github.com/DreierF), [Ivy Chen](https://redirect.github.com/Mengmeiivy), [Jendrik Johannes](https://redirect.github.com/jjohannes), [jimmy1995-gu](https://redirect.github.com/jimmy1995-gu), [Madalin Valceleanu](https://redirect.github.com/vmadalin), [Na Minhyeok](https://redirect.github.com/NaMinhyeok). ##### Upgrade instructions Switch your build to use Gradle 8.14.2 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.14.2 && ./gradlew wrapper ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.14.2/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.14.2/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.14.1`](https://redirect.github.com/gradle/gradle/releases/tag/v8.14.1): 8.14.1 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.14.0...v8.14.1) The Gradle team is excited to announce Gradle 8.14.1. [Read the Release Notes](https://docs.gradle.org/8.14.1/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Aurimas](https://redirect.github.com/liutikas), [Ben Bader](https://redirect.github.com/benjamin-bader), [Björn Kautler](https://redirect.github.com/Vampire), [chandre92](https://redirect.github.com/chandre92), [Daniel Hammer](https://redirect.github.com/dlehammer), [Danish Nawab](https://redirect.github.com/danishnawab), [Florian Dreier](https://redirect.github.com/DreierF), [Ivy Chen](https://redirect.github.com/Mengmeiivy), [Jendrik Johannes](https://redirect.github.com/jjohannes), [jimmy1995-gu](https://redirect.github.com/jimmy1995-gu), [Madalin Valceleanu](https://redirect.github.com/vmadalin), [Na Minhyeok](https://redirect.github.com/NaMinhyeok). ##### Upgrade instructions Switch your build to use Gradle 8.14.1 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.14.1 && ./gradlew wrapper ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.14.1/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.14.1/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.14`](https://redirect.github.com/gradle/gradle/releases/tag/v8.14.0): 8.14 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.13.0...v8.14.0) The Gradle team is excited to announce Gradle 8.14. [Read the Release Notes](https://docs.gradle.org/8.14/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Aurimas](https://redirect.github.com/liutikas), [Ben Bader](https://redirect.github.com/benjamin-bader), [Björn Kautler](https://redirect.github.com/Vampire), [chandre92](https://redirect.github.com/chandre92), [Daniel Hammer](https://redirect.github.com/dlehammer), [Danish Nawab](https://redirect.github.com/danishnawab), [Florian Dreier](https://redirect.github.com/DreierF), [Ivy Chen](https://redirect.github.com/Mengmeiivy), [Jendrik Johannes](https://redirect.github.com/jjohannes), [jimmy1995-gu](https://redirect.github.com/jimmy1995-gu), [Madalin Valceleanu](https://redirect.github.com/vmadalin), [Na Minhyeok](https://redirect.github.com/NaMinhyeok). ##### Upgrade instructions Switch your build to use Gradle 8.14 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.14 && ./gradlew wrapper ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.14/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.14/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.13`](https://redirect.github.com/gradle/gradle/releases/tag/v8.13.0): 8.13 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.12.1...v8.13.0) The Gradle team is excited to announce Gradle 8.13. [Read the Release Notes](https://docs.gradle.org/8.13/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Adam](https://redirect.github.com/adam-enko), [Adam](https://redirect.github.com/aSemy), [Ahmad Al-Masry](https://redirect.github.com/AhmadMasry), [Ahmed Ehab](https://redirect.github.com/ahmedehabb), [Aurimas](https://redirect.github.com/liutikas), [Baptiste Decroix](https://redirect.github.com/bdecroix-spiria), [Björn Kautler](https://redirect.github.com/Vampire), [Borewit](https://redirect.github.com/Borewit), [Jorge Matamoros](https://redirect.github.com/YungOkra), [Lei Zhu](https://redirect.github.com/Korov), [Madalin Valceleanu](https://redirect.github.com/vmadalin), [Mohammed Thavaf](https://redirect.github.com/mthavaf), [Patrick Brückner](https://redirect.github.com/madmuffin1), [Philip Wedemann](https://redirect.github.com/hfhbd), [Roberto Perez Alcolea](https://redirect.github.com/rpalcolea), [Róbert Papp](https://redirect.github.com/TWiStErRob), [Semyon Gaschenko](https://redirect.github.com/gasches), [Shi Chen](https://redirect.github.com/CsCherrYY), [Stefan M.](https://redirect.github.com/StefMa), [Steven Schoen](https://redirect.github.com/DSteve595), [tg-freigmbh](https://redirect.github.com/tg-freigmbh), [TheGoesen](https://redirect.github.com/TheGoesen), [Tony Robalik](https://redirect.github.com/autonomousapps), [Zongle Wang](https://redirect.github.com/Goooler). ##### Upgrade instructions Switch your build to use Gradle 8.13 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.13 && ./gradlew wrapper ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.13/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.13/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.12.1`](https://redirect.github.com/gradle/gradle/releases/tag/v8.12.1): 8.12.1 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.12.0...v8.12.1) The Gradle team is excited to announce Gradle 8.12.1. [Read the Release Notes](https://docs.gradle.org/8.12.1/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Abhiraj Adhikary](https://redirect.github.com/abhirajadhikary06), [Ayush Saxena](https://redirect.github.com/Ayushcode10), [Björn Kautler](https://redirect.github.com/Vampire), [davidburstrom](https://redirect.github.com/davidburstrom), [Dominic Fellbaum](https://redirect.github.com/felldo), [Emmanuel Ferdman](https://redirect.github.com/emmanuel-ferdman), [Finn Petersen](https://redirect.github.com/fp7), [Johnny Lim](https://redirect.github.com/izeye), [Mahdi Hosseinzadeh](https://redirect.github.com/mahozad), [Martin Bonnin](https://redirect.github.com/martinbonnin), [Paint\_Ninja](https://redirect.github.com/PaintNinja), [Petter Måhlén](https://redirect.github.com/pettermahlen), [Philip Wedemann](https://redirect.github.com/hfhbd), [stegeto22](https://redirect.github.com/stegeto22), [Tanish](https://redirect.github.com/Taz03), [TheGoesen](https://redirect.github.com/TheGoesen), [Tim Nielens](https://redirect.github.com/tnielens), [Trout Zhang](https://redirect.github.com/TroutZhang), [Victor Merkulov](https://redirect.github.com/urdak) ##### Upgrade instructions Switch your build to use Gradle 8.12.1 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.12.1 ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.12.1/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.12.1/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.12`](https://redirect.github.com/gradle/gradle/releases/tag/v8.12.0): 8.12 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.11.1...v8.12.0) The Gradle team is excited to announce Gradle 8.12. [Read the Release Notes](https://docs.gradle.org/8.12/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Abhiraj Adhikary](https://redirect.github.com/abhirajadhikary06), [Ayush Saxena](https://redirect.github.com/Ayushcode10), [Björn Kautler](https://redirect.github.com/Vampire), [davidburstrom](https://redirect.github.com/davidburstrom), [Dominic Fellbaum](https://redirect.github.com/felldo), [Emmanuel Ferdman](https://redirect.github.com/emmanuel-ferdman), [Finn Petersen](https://redirect.github.com/fp7), [Johnny Lim](https://redirect.github.com/izeye), [Mahdi Hosseinzadeh](https://redirect.github.com/mahozad), [Martin Bonnin](https://redirect.github.com/martinbonnin), [Paint\_Ninja](https://redirect.github.com/PaintNinja), [Petter Måhlén](https://redirect.github.com/pettermahlen), [Philip Wedemann](https://redirect.github.com/hfhbd), [stegeto22](https://redirect.github.com/stegeto22), [Tanish](https://redirect.github.com/Taz03), [TheGoesen](https://redirect.github.com/TheGoesen), [Tim Nielens](https://redirect.github.com/tnielens), [Trout Zhang](https://redirect.github.com/TroutZhang), [Victor Merkulov](https://redirect.github.com/urdak) ##### Upgrade instructions Switch your build to use Gradle 8.12 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.12 ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.12/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.12/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.11.1`](https://redirect.github.com/gradle/gradle/releases/tag/v8.11.1): 8.11.1 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.11.0...v8.11.1) This is a patch release for Gradle 8.11. We recommend users upgrade to 8.11.1 instead of 8.11. It fixes the following issues: - [#​31268](https://redirect.github.com/gradle/gradle/issues/31268) BuildEventsListenerRegistry corrupted with Isolated Projects and parallel configuration - [#​31282](https://redirect.github.com/gradle/gradle/issues/31282) Running executables sporadically fails with ETXTBSY (Text file busy) - [#​31284](https://redirect.github.com/gradle/gradle/issues/31284) ArrayIndexOutOfBoundsException after upgrading to gradle 8.11 when generating problems report - [#​31310](https://redirect.github.com/gradle/gradle/issues/31310) Unable to run Gradle task in 8.10 due to bytecode interception [Read the Release Notes](https://docs.gradle.org/8.11.1/release-notes.html) ##### Upgrade instructions Switch your build to use Gradle 8.11.1 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.11.1 ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.11.1/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.11.1/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). ### [`v8.11`](https://redirect.github.com/gradle/gradle/releases/tag/v8.11.0): 8.11 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.10.2...v8.11.0) The Gradle team is excited to announce Gradle 8.11. [Read the Release Notes](https://docs.gradle.org/8.11/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Adam](https://redirect.github.com/adam-enko), [alyssoncs](https://redirect.github.com/alyssoncs), [Bilel MEDIMEGH](https://redirect.github.com/LelouBil), [Björn Kautler](https://redirect.github.com/Vampire), [Chuck Thomas](https://redirect.github.com/chuckthemole), [Daniel Lacasse](https://redirect.github.com/lacasseio), [Finn Petersen](https://redirect.github.com/fp7), [JK](https://redirect.github.com/jknair0), [Jérémie Bresson](https://redirect.github.com/jmini), [luozexuan](https://redirect.github.com/luozexuan), [Mahdi Hosseinzadeh](https://redirect.github.com/mahozad), [Markus Gaisbauer](https://redirect.github.com/quijote), [Matthew Haughton](https://redirect.github.com/3flex), [Matthew Von-Maszewski](https://redirect.github.com/matthewvon), [ploober](https://redirect.github.com/ploober), [Siarhei](https://redirect.github.com/madhead), [Titus James](https://redirect.github.com/tj330), [vrp0211](https://redirect.github.com/vrp0211) ##### Upgrade instructions Switch your build to use Gradle 8.11 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.11 ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.11/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.11/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNy4yIiwidXBkYXRlZEluVmVyIjoiNDEuMTcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicHI6ZGVwZW5kZW5jaWVzIl19--> --------- Co-authored-by: Renovate Bot <[email protected]> Co-authored-by: JayShortway <[email protected]>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [gradle](https://gradle.org) ([source](https://redirect.github.com/gradle/gradle)) | | patch | `8.14.2` -> `8.14.3` | | [com.android.library](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | plugin | patch | `8.11.0` -> `8.11.1` | | [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | plugin | patch | `8.11.0` -> `8.11.1` | --- ### Release Notes <details> <summary>gradle/gradle (gradle)</summary> ### [`v8.14.3`](https://redirect.github.com/gradle/gradle/releases/tag/v8.14.3): 8.14.3 [Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.14.2...v8.14.3) The Gradle team is excited to announce Gradle 8.14.3. This is a patch release for 8.14. We recommend using 8.14.3 instead of 8.14. Here are the highlights of this release: - Java 24 support - GraalVM Native Image toolchain selection - Enhancements to test reporting - Build Authoring improvements [Read the Release Notes](https://docs.gradle.org/8.14.3/release-notes.html) We would like to thank the following community members for their contributions to this release of Gradle: [Aurimas](https://redirect.github.com/liutikas), [Ben Bader](https://redirect.github.com/benjamin-bader), [Björn Kautler](https://redirect.github.com/Vampire), [chandre92](https://redirect.github.com/chandre92), [Daniel Hammer](https://redirect.github.com/dlehammer), [Danish Nawab](https://redirect.github.com/danishnawab), [Florian Dreier](https://redirect.github.com/DreierF), [Ivy Chen](https://redirect.github.com/Mengmeiivy), [Jendrik Johannes](https://redirect.github.com/jjohannes), [jimmy1995-gu](https://redirect.github.com/jimmy1995-gu), [Madalin Valceleanu](https://redirect.github.com/vmadalin), [Na Minhyeok](https://redirect.github.com/NaMinhyeok). ##### Upgrade instructions Switch your build to use Gradle 8.14.3 by updating your wrapper: ``` ./gradlew wrapper --gradle-version=8.14.3 && ./gradlew wrapper ``` See the Gradle [8.x upgrade guide](https://docs.gradle.org/8.14.3/userguide/upgrading_version_8.html) to learn about deprecations, breaking changes and other considerations when upgrading. For Java, Groovy, Kotlin and Android compatibility, see the [full compatibility notes](https://docs.gradle.org/8.14.3/userguide/compatibility.html). ##### Reporting problems If you find a problem with this release, please file a bug on [GitHub Issues](https://redirect.github.com/gradle/gradle/issues) adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the [forum](https://discuss.gradle.org/c/help-discuss). We hope you will build happiness with Gradle, and we look forward to your feedback via [Twitter](https://twitter.com/gradle) or on [GitHub](https://redirect.github.com/gradle). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4zMC41IiwidXBkYXRlZEluVmVyIjoiNDEuMzAuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicHI6ZGVwZW5kZW5jaWVzIl19--> Co-authored-by: Renovate Bot <[email protected]>
### Description This updates the android orb and the tag we use for our jobs. Which will allow us to have access to the latest android SDKs and fix tests in #2520
### Description Snapshot deployment broke in #2521. This should fix that
Increases compile/target SDK version to 35
### Description This makes it so we don't consume insets in paywalls in Android 16+. Starting on Android 16+, by default apps will go edge to edge. We already consume insets correctly within the paywall as needed, but the activity was actually consuming those insets before that. A better fix might be to add an option to enable/disable this consumption, while keeping the current behavior in Android < 16 but changing it for android 16+. This is a short term fix for now.
### Description As the title says. Now, we will rely on Google instead to handle resubscribing. The default behavior by Google is: - If trying to purchase the same base plan that the user is already subscribed, display a message indicating so, with a link to manage subscriptions - If trying to purchase a different base plan for a product the user is already subscribed to, perform an upgrade/downgrade. - If trying to purchase a product the user has an active but cancelled subscription for, resubscribe.
…l in full screen (#2530) ### Description We currently were not supporting edge to edge in paywalls when using the `launch` and `launchIfNeeded` APIs. This adds a new parameter that allows to display it in edgeToEdge mode, or not. The default will be true for Android 15+ and false otherwise.
…e is not set up (#2527) ## Description This opens the door to showing `PaywallView` in a new Window, instead of in an Activity. It should also fix a few crashes we've been seeing in react-native-purchases, when the Paywall is shown modally. There's an explainer added to the documentation of `CompatComposeView`.
Android counterpart to RevenueCat/purchases-ios#5108. This PR introduces virtual currencies to the Android SDK. It's a large PR, but all parts of it have been reviewed individually before here: - #2466 - #2496 - #2505 It includes the following: These functions allow you to fetch the virtual currencies for the current subscriber. The `invalidateVirtualCurrenciesCache` function allows developers to clear the cached virtual currencies, which will then force the refreshing of the virtual currencies from the backend the next time `getVirtualCurrencies()` is called. ```kotlin class Purchases { fun getVirtualCurrencies( callback: GetVirtualCurrenciesCallback, ) fun invalidateVirtualCurrenciesCache() val cachedVirtualCurrencies: VirtualCurrencies? } ``` ```kotlin class VirtualCurrencies internal constructor( val all: Map<String, VirtualCurrency>, ) : Parcelable { operator fun get(code: String): VirtualCurrency? = all[code] } class VirtualCurrency internal constructor( val balance: Int, val name: String, val code: String, val serverDescription: String? = null, ) ``` Kotlin: ```swift Purchases.sharedInstance.invalidateVirtualCurrenciesCache() Purchases.sharedInstance.getVirtualCurrencies( object: GetVirtualCurrenciesCallback { override fun onReceived(virtualCurrencies: VirtualCurrencies) {} override fun onError(error: PurchasesError) {} } ) Purchases.sharedInstance.getVirtualCurrenciesWith( onError = { _: PurchasesError -> }, onSuccess = { _: VirtualCurrencies -> }, ) val getVirtualCurrenciesResult: VirtualCurrencies = Purchases.sharedInstance.awaitGetVirtualCurrencies() val cachedVirtualCurrencies = Purchases.sharedInstance.cachedVirtualCurrencies ```
### Description We were running virtual currency integration tests both with and without the load shedder. However, the load shedder doesn't currently support virtual currencies, so these tests were failing when run for the load shedder integration test app. This PR updates the integration tests so that the virtual currency integration tests don't run for the load shedder integration tests app. ### Implementation Details We are able to accomplish this by: - When we're running integration tests through the integration tests app, fastlane sets the `IS_RUNNING_LOAD_SHEDDER_INTEGRATION_TESTS` string to `true` in `Constants.kt`. - There's a new function `BasePurchasesIntegrationTest.isRunningLoadShedderIntegrationTests`, that tests can use to determine if they're running in the load shedder integration test app. ### Testing I manually forced the integration tests to run on this PR, and both the regular and load shedder integration tests passed in Firebase
### Description This is the first of a series of PRs to support a test store in purchases-android. In this one, we add support for a new test API key and expose the API key validation result to the billing factory, so we can in future PRs create a billing implementation for this test store.
### Description This PR exposes the `VirtualCurrency` and `VirtualCurrencies` constructors publicly behind the `@InternalRevenueCatAPI` annotation. This will help us in a few scenarios when we need to instantiate VC objects outside of `purchases-android`, including in the mapper tests in PHC. #### Other Approaches Considered We considered a few other approaches before deciding to use `@InternalRevenueCatAPI`: - Making the constructor public without an annotation. This works, but isn't ideal for a few reasons: - Adding new properties would be a breaking change unless we used the `@JvmOverloads` annotation. Even then, we would need to provide a default value, and that won't always be easy (e.g. when we add VC icons, these will likely not be optionals) - Parsing the VC objects from JSON in the PHC mapper tests. This would work but feels a little dirty, and wouldn't help us if we ever need to do this in other circumstances. Using `@InternalRevenueCatAPI` allows us to access the constructor outside of `purchases-android` while still giving us the freedom to make breaking changes to the constructor in the future.
If the subscription is already cancelled, it should say "Resubscribe" instead of "Cancel Subscription" It should also not open any feedback survey or promotional offer
…dark mode (#2550) The Customer Center was closing when switching between light and dark mode
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.8 to 1.18.9. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's releases</a>.</em></p> <blockquote> <h2>v1.18.9 / 2025-07-20</h2> <h3>Security</h3> <ul> <li>[CRuby] Applied upstream libxml2 patches to address CVE-2025-6021, CVE-2025-6170, CVE-2025-49794, CVE-2025-49795, and CVE-2025-49796. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-353f-x4gh-cqq8">GHSA-353f-x4gh-cqq8</a> for more information.</li> </ul> <!-- raw HTML omitted --> <pre><code>5bcfdf7aa8d1056a7ad5e52e1adffc64ef53d12d0724fbc6f458a3af1a4b9e32 nokogiri-1.18.9-aarch64-linux-gnu.gem 55e9e6ca46c4ad1715e313f407d8481d15be1e3b65d9f8e52ba1c124d01676a7 nokogiri-1.18.9-aarch64-linux-musl.gem eea3f1f06463ff6309d3ff5b88033c4948d0da1ab3cc0a3a24f63c4d4a763979 nokogiri-1.18.9-arm64-darwin.gem fe611ae65880e445a9c0f650d52327db239f3488626df4173c05beafd161d46e nokogiri-1.18.9-arm-linux-gnu.gem 935605e14c0ba17da18d203922440bf6c0676c602659278d855d4622d756a324 nokogiri-1.18.9-arm-linux-musl.gem ac5a7d93fd0e3cef388800b037407890882413feccca79eb0272a2715a82fa33 nokogiri-1.18.9.gem 1fe5b7aa4a054eda689a969bb4e03999960a6ea806582d327207d687168bceb5 nokogiri-1.18.9-java.gem 6b4fc1523aa0370c78653e38c94cb50e7f3ab786425de66ba7ad24222c1164a3 nokogiri-1.18.9-x64-mingw-ucrt.gem e0d2deb03d3d7af8016e8c9df5ff4a7d692159cefb135cbb6a4109f265652348 nokogiri-1.18.9-x86_64-darwin.gem b52f5defedc53d14f71eeaaf990da66b077e1918a2e13088b6a96d0230f44360 nokogiri-1.18.9-x86_64-linux-gnu.gem e69359d6240c17e64cc9f43970d54f13bfc7b8cc516b819228f687e953425e69 nokogiri-1.18.9-x86_64-linux-musl.gem </code></pre> <!-- raw HTML omitted --> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's changelog</a>.</em></p> <blockquote> <h2>v1.18.9 / 2025-07-20</h2> <h3>Security</h3> <ul> <li>[CRuby] Applied upstream libxml2 patches to address CVE-2025-6021, CVE-2025-6170, CVE-2025-49794, CVE-2025-49795, and CVE-2025-49796. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-353f-x4gh-cqq8">GHSA-353f-x4gh-cqq8</a> for more information.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/sparklemotion/nokogiri/commit/1dcd8ce30365ebd4620a3b823bf806b127eeefc3"><code>1dcd8ce</code></a> version bump to v1.18.9</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/a05d2b44b930072af70dad12bddbac67f36c6f90"><code>a05d2b4</code></a> Apply upstream patches to address multiple vulnerabilities (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3526">#3526</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/947a55e87edff3c6d76ffd81f07da728e67c9b82"><code>947a55e</code></a> Apply upstream patches to address multiple vulnerabilities</li> <li>See full diff in <a href="https://github.com/sparklemotion/nokogiri/compare/v1.18.8...v1.18.9">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/RevenueCat/purchases-android/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…2558) Bumps [fastlane-plugin-revenuecat_internal](https://github.com/RevenueCat/fastlane-plugin-revenuecat_internal) from `9a29f63` to `7d97553`. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/RevenueCat/fastlane-plugin-revenuecat_internal/commit/7d97553e9c5baabcd18286f03d8034797a27dd64"><code>7d97553</code></a> Adds <code>create_or_checkout_branch</code>, <code>commit_all_changes</code>, `create_pr_if_necessa...</li> <li><a href="https://github.com/RevenueCat/fastlane-plugin-revenuecat_internal/commit/b519e5ce1f6f567b656d0db4a750e159c2c8d68a"><code>b519e5c</code></a> Only retry tests that failed but didn't succeed after in-run retry (<a href="https://redirect.github.com/RevenueCat/fastlane-plugin-revenuecat_internal/issues/79">#79</a>)</li> <li>See full diff in <a href="https://github.com/RevenueCat/fastlane-plugin-revenuecat_internal/compare/9a29f638e834a61c2f522df6247d484ad478bba0...7d97553e9c5baabcd18286f03d8034797a27dd64">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [fastlane](https://github.com/fastlane/fastlane) from 2.227.2 to 2.228.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fastlane/fastlane/releases">fastlane's releases</a>.</em></p> <blockquote> <h2>2.228.0 Improvements</h2> <ul> <li>[sigh][match] fix issue where unknown attribute <code>template_name</code> is being sent when creating provisioning profiles (<a href="https://redirect.github.com/fastlane/fastlane/issues/29591">#29591</a>) via Florentin Luca Rieger (<a href="https://github.com/visuallization"><code>@visuallization</code></a>)</li> <li>[action][hipchat] remove hipchat action (<a href="https://redirect.github.com/fastlane/fastlane/issues/29558">#29558</a>) via Eitan Adler (<a href="https://github.com/grimreaper"><code>@grimreaper</code></a>)</li> </ul> <hr /> <blockquote> <p>[!IMPORTANT] If your app relies on managed capabilities (previously referred to as custom entitlements or the <code>template_name</code> parameter in <em>match</em>), you are impacted by a change that Apple made to their APIs in the last 2 weeks. Please check out the ongoing discussion at <a href="https://github.com/fastlane/fastlane/discussions/29609">https://github.com/fastlane/fastlane/discussions/29609</a> for the latest updates. Your insights and contributions are welcome!</p> </blockquote> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fastlane/fastlane/commit/20fd6778dd2f38cc17477e821099e517bfbcdd07"><code>20fd677</code></a> Version bump to 2.228.0 (<a href="https://redirect.github.com/fastlane/fastlane/issues/29610">#29610</a>)</li> <li><a href="https://github.com/fastlane/fastlane/commit/db3b1e9f605d6b54f3ab8e948d1ba88bddb1cbb0"><code>db3b1e9</code></a> [sigh][match] fix issue where unknown attribute <code>template_name</code> is being sent...</li> <li><a href="https://github.com/fastlane/fastlane/commit/d7f1ca8eab11fb9de96e3f02a692b4e50058c791"><code>d7f1ca8</code></a> [action][hipchat] remove hipchat action (<a href="https://redirect.github.com/fastlane/fastlane/issues/29558">#29558</a>)</li> <li>See full diff in <a href="https://github.com/fastlane/fastlane/compare/fastlane/2.227.2...fastlane/2.228.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
### Description Android equivalent of RevenueCat/purchases-ios#5404 This PR updates the `VirtualCurrencyStrings.NO_CACHED_VIRTUAL_CURRENCIES` log message from `"No cached VirtualCurrencies, fetching from network."` to `"There are no cached VirtualCurrencies."`. The previous message stated that a network fetch would occur, which isn't always the case. There are two scenarios where this log may appear: - When fetching virtual currencies and the cache is not stale but contains no virtual currencies object (an edge case that shouldn't occur with normal usage). - When accessing the cache directly using `Purchases.cachedVirtualCurrencies` and it's empty - in this case, the SDK returns nil without initiating a network fetch. The updated message is more descriptive of what actually happens in the second scenario. In the first scenario, subsequent log messages state that the SDK is fetching VCs from the network.
Bumps [danger](https://github.com/danger/danger) from 9.5.1 to 9.5.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/danger/danger/releases">danger's releases</a>.</em></p> <blockquote> <h2>9.5.3</h2> <ul> <li>Revert "Add GitLab Merge Request support with a new <code>mr</code> command" - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1521">#1521</a></li> </ul> <h2>9.5.2</h2> <ul> <li>Add GitLab Merge Request support with a new <code>mr</code> command - <a href="https://github.com/jtslear"><code>@jtslear</code></a> <a href="https://redirect.github.com/danger/danger/pull/1516">#1516</a></li> <li>Support v4 of colored2 gem to make danger work with --enable-frozen-string-literal RUBYOPT of newer Ruby versions - <a href="https://github.com/eiskrenkov"><code>@eiskrenkov</code></a> <a href="https://redirect.github.com/danger/danger/pull/1513">#1513</a></li> <li>Support ruby-git 2.x - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1511">#1511</a></li> <li>Allow terminal-table versions through 4.x - <a href="https://github.com/murilooon"><code>@murilooon</code></a> <a href="https://redirect.github.com/danger/danger/pull/1508">#1508</a></li> <li>Bump kramdown to 2.5.1 - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1514">#1514</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/danger/danger/blob/master/CHANGELOG.md">danger's changelog</a>.</em></p> <blockquote> <h2>9.5.3</h2> <ul> <li>Revert "Add GitLab Merge Request support with a new <code>mr</code> command" - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1521">#1521</a></li> </ul> <h2>9.5.2</h2> <ul> <li>Add GitLab Merge Request support with a new <code>mr</code> command - <a href="https://github.com/jtslear"><code>@jtslear</code></a> <a href="https://redirect.github.com/danger/danger/pull/1516">#1516</a></li> <li>Support v4 of colored2 gem to make danger work with --enable-frozen-string-literal RUBYOPT of newer Ruby versions - <a href="https://github.com/eiskrenkov"><code>@eiskrenkov</code></a> <a href="https://redirect.github.com/danger/danger/pull/1513">#1513</a></li> <li>Support ruby-git 2.x - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1511">#1511</a></li> <li>Allow terminal-table versions through 4.x - <a href="https://github.com/murilooon"><code>@murilooon</code></a> <a href="https://redirect.github.com/danger/danger/pull/1508">#1508</a></li> <li>Bump kramdown to 2.5.1 - <a href="https://github.com/manicmaniac"><code>@manicmaniac</code></a> <a href="https://redirect.github.com/danger/danger/pull/1514">#1514</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/danger/danger/commit/bb3e85616b48e3ec23c6b3ccf8c0c972cb299462"><code>bb3e856</code></a> Prepare for release</li> <li><a href="https://github.com/danger/danger/commit/8209b62770b81a8daed360a5a64bbde906197964"><code>8209b62</code></a> Merge pull request <a href="https://redirect.github.com/danger/danger/issues/1521">#1521</a> from manicmaniac/revert-add-gitlab-merge-request-sup...</li> <li><a href="https://github.com/danger/danger/commit/12d7696e43194a020fac814906da7e5086a3874b"><code>12d7696</code></a> Revert "Merge pull request <a href="https://redirect.github.com/danger/danger/issues/1516">#1516</a> from jtslear/add-gitlab-merge-request-support"</li> <li><a href="https://github.com/danger/danger/commit/ea7cfb0858a59a6f5105d4fa0549d1472029e805"><code>ea7cfb0</code></a> Prepare for release</li> <li><a href="https://github.com/danger/danger/commit/f1064d24a43ac5a6f68403b0d1d6bf51fb52191b"><code>f1064d2</code></a> Merge pull request <a href="https://redirect.github.com/danger/danger/issues/1514">#1514</a> from manicmaniac/bump-kramdown-to-2.5.1</li> <li><a href="https://github.com/danger/danger/commit/cb97334d4e0d35e72ee51a32d030df742c8cbae1"><code>cb97334</code></a> Merge pull request <a href="https://redirect.github.com/danger/danger/issues/1519">#1519</a> from ydah/fixfixme</li> <li><a href="https://github.com/danger/danger/commit/683c6893682c81b50fff2ff63a0af984d2836d5e"><code>683c689</code></a> Resolve FIXME comments for <code>Metrics/BlockLength</code> in .rubocop.yml</li> <li><a href="https://github.com/danger/danger/commit/7d92b8d4f81c36f86ef9c6ce61529143c4533b0d"><code>7d92b8d</code></a> Merge pull request <a href="https://redirect.github.com/danger/danger/issues/1516">#1516</a> from jtslear/add-gitlab-merge-request-support</li> <li><a href="https://github.com/danger/danger/commit/7b28dffa54f4edcfba0dae0beb5dd2cc1688416b"><code>7b28dff</code></a> RuboCop was angry, so I refactored the client method to make it smile again</li> <li><a href="https://github.com/danger/danger/commit/02b6b6cb63581ef9444cb076cc4fb5fe7b87bbcc"><code>02b6b6c</code></a> Add GitLab Merge Request support</li> <li>Additional commits viewable in <a href="https://github.com/danger/danger/compare/v9.5.1...v9.5.3">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…2559) | Old | New | |--------|--------| | <img width="347" height="704" alt="Screenshot 2025-07-22 at 16 38 15" src="https://github.com/user-attachments/assets/31530ae9-9cf0-4f87-9c13-3eecf4450b91" /> | <img width="344" height="707" alt="Screenshot 2025-07-22 at 16 37 21" src="https://github.com/user-attachments/assets/a4dc612d-18ef-4093-aede-34aa27ea1b80" /> |
Display the latest expired subscription in the customer center, if there are no active subscriptions
This reverts commit c57e59a.
This reverts commit e537ae1.
This reverts commit 8ca222d.
### Description Until now, if trying to restore a purchase with a payment pending error, the SDK returned an `UnknownBackendError` code. This should be returned instead with a `PaymentPendingError` code for proper handling. Note that restore errors return the error of the last post receipt with errors. If there were multiple errors, all might not be exposed right now.
<!-- Thank you for contributing to Purchases! Before pressing the "Create Pull Request" button, please provide the following: --> - [x] If applicable, unit tests We have several users who want the ability to delay the appearance of the close paywall button. Implemented a Transitions mechanism that will optionally hide/show a view when the component is marked with a transition object. This lays the groundwork for accepting custom animation declarations so that it would not error out if/when we add that in the future.
### Motivation We want to be more explicit on how to edit the button text for the ScreenOffering. [ios](RevenueCat/purchases-ios#5501)  ### Description - Add button text to ScreenOffering > This comes already translated. For backwards compatibility, we default to the key used right now.
### Description There is an issue in our current version of compose that causes the Dialog composable to extend beyond the screen size in Android 35+ devices: https://issuetracker.google.com/issues/246909281. This was fixed in a newer version of Compose, however, that introduces a breaking change by forcing apps to compile against Android 35. This PR introduces a workaround by applying some bottom padding that consists on the status bar + navigation bars sizes as bottom padding. It also makes the PaywallDialog go Edge to Edge on Android 35+, which is the default starting on that version. The current fix has been tested on Android <35 and >35 and also when the client app uses a higher version of compsoe with the fix. | Issue in Android 35+ | Android < 35 | Android >= 35 with older compose version | Android >= 35 with newer compose version | | ------ | ----- | ----- | ----- | | <img width="540" height="1212" alt="image" src="https://github.com/user-attachments/assets/5ceb3a20-c25c-419f-8aa2-2ac54f6e458e" /> | <img width="540" height="1200" alt="image" src="https://github.com/user-attachments/assets/06d2ec4b-da6e-471c-a471-d2950b651008" /> | <img width="540" height="1212" alt="image" src="https://github.com/user-attachments/assets/8cd441a5-6e45-4ae8-bc11-228787189063" /> | <img width="540" height="1212" alt="image" src="https://github.com/user-attachments/assets/adba21c1-d5f8-46e8-b3ed-c7623437353a" /> |
…ghly with team (#2641) <!-- Thank you for contributing to Purchases! Before pressing the "Create Pull Request" button, please provide the following: --> - [x] If applicable, unit tests PR #2623 merged a day too soon. After Josh got back from a long weekend we had more time to chat. There are existing patterns in place to keep the json flat. Fortunately, if the code from that PR merges to production it will fallback to a Fade transition which is what we need for the immediate ask anyway. We also hashed out some details on what is optional. Flattened the json from : ```JSON "type": { "type": "some_type", "maybe_never_would_add_another_field": "some_value" } ``` to: ```JSON "type": "some_type", "maybe_never_would_add_another_field": "some_value" ``` and made the int values required values in the json <!-- Describe your changes in detail --> <!-- Please describe in detail how you tested your changes -->
…n network IDs at configuration time (#2643) ### Description This adds a new API that can be used to disable automatic collection of Advertising ID, IP and device info when using one of the attribution networks we support like Adjust or Appsflyer. This can be set at configuration time like this: ``` val purchasesConfiguration = PurchasesConfiguration.Builder(context, "YOUR_API_KEY") .automaticDeviceIdentifierCollectionEnabled(enabled) .build() Purchases.configure(purchasesConfiguration) ``` Note that you can still collect these identifiers with this option disabled by calling `Purchases.sharedInstance.collectDeviceIdentifiers()`
## Summary This PR adds the ability to override the system locale for RevenueCat UI components (Paywalls and Customer Center), allowing developers to display the UI in a specific language regardless of the system locale setting. This implements the same functionality that was added to the iOS SDK in RevenueCat/purchases-ios#5292. ## Changes ### Configuration API - Add `preferredUILocaleOverride` property to `PurchasesConfiguration` - Add `preferredUILocaleOverride(String?)` builder method with comprehensive documentation ### Runtime API - Add `overridePreferredUILocale(String?): Boolean` method to `Purchases` class - Add public getter `preferredUILocaleOverride` property - **Automatic cache management**: Cache clearing happens automatically when locale changes - **Rate limiting**: Built-in rate limiting (10 calls per 60 seconds) prevents excessive API calls - Both APIs available for default and custom entitlement computation flavors ### UI Components Integration - Update `PaywallViewModel` and `PaywallState` to use preferred locale override - Add reflection-based approach to access preferred locale from UI components - Support both "es-ES" and "es_ES" locale format patterns - Proper locale matching logic that prioritizes preferred override - Graceful fallback to system default for invalid locales with proper logging ### HTTP Request Integration - Update `LocaleProvider` to include preferred locale override in API requests - Preferred locale is sent first in Accept-Language header when set - Ensures both UI rendering and API responses respect the same locale preference ### Paywall Tester Enhancements - Add comprehensive locale selection tab with 15+ predefined locales - Add search/filter functionality to offerings tab - Support custom locale input with validation - Optional preferred locale configuration via `Constants.kt` - Real-time feedback on cache clearing status with rate limit handling ## API Usage ### Configuration time: ```kotlin val configuration = PurchasesConfiguration.Builder(context, apiKey) .preferredUILocaleOverride("es-ES") // or "es_ES" - both formats supported .build() Purchases.configure(configuration) ``` ### Runtime override: ```kotlin // Set preferred locale (automatically clears cache if changed) val cacheCleared = Purchases.sharedInstance.overridePreferredUILocale("de-DE") if (cacheCleared) { // Cache was cleared and offerings will be refetched with new locale } // Revert to system default Purchases.sharedInstance.overridePreferredUILocale(null) ``` ## Architecture ### Rate Limiting - Cache clearing operations are rate limited to prevent excessive network requests - Uses the same `RateLimiter` utility as subscriber attributes (10 calls per 60 seconds) - Locale setting is immediate, cache clearing is rate limited separately ### Locale Resolution Priority 1. **Preferred override** (if set via configuration or runtime API) 2. **System default locales** (from `LocaleListCompat.getDefault()`) 3. **Paywall default locale** (fallback for UI components) ### Thread Safety - All operations are properly synchronized - Reflection-based access includes proper exception handling - State management through PurchasesOrchestrator ensures consistency ## Test plan - [x] All existing unit tests pass - [x] Code compiles successfully for all modules - [x] Lint/detekt checks pass with no new violations - [x] API compatibility checks pass (metalava) - [x] Graceful error handling for invalid locale strings - [x] Thread-safe access to shared configuration state - [x] Rate limiting functionality verified - [x] Paywall tester UI enhancements tested ## Testing Notes - Manual testing shows paywalls now correctly display in the preferred locale - HTTP requests include the preferred locale in Accept-Language headers - Cache clearing triggers background refetch of offerings with new locale - Rate limiting prevents excessive API calls when rapidly changing locales - Paywall tester provides comprehensive UI for testing different locales 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <[email protected]>
### Motivation Don't validate if no package components on paywall ### Description This shouldn't be a SDK validation but a server side one
### Motivation Improve thread safety of setting preferred locale ### Description Make the variable `@Volatile` Co-authored-by: Claude <[email protected]>
### Description Follow-up to #2610. We had a non-null offeringIdentifier parameter, which doesn't allow us to reset the offering selection to none. This would be very uncommon, but we should still support it.
Fixes #2588 (comment) A new lint issue that starts happening when upgrading to AGP 8.13.0 Also wrapped the `refreshStateIfColorsChanged` in a LaunchedEffect keyed by the inputs, so it only runs when the theme actually changes.
### Description This PR adds a new `RevenueCatBackupAgent` that consumers of this library can optionally use to backup revenuecat data accross installations. To use it, developers need to add this in the application's AndroidManifest `<application>` tag: ``` android:backupAgent="com.revenuecat.purchases.backup.RevenueCatBackupAgent" ``` After that, the shared preferences file with the main content from RevenueCat will be saved using the device's backup system. See official docs for this type of backup here: https://developer.android.com/identity/data/keyvaluebackup. If users already have their own BackupAgentHelper configured for their app, they can just add a line to backup the `com_revenuecat_purchases_preferences` preferences file to their BackupAgentHelper, like: ``` SharedPreferencesBackupHelper(this, RevenueCatBackupAgent.REVENUECAT_PREFS_FILE_NAME).also { addHelper("revenuecat_prefs_backup", it) } ``` This will allow customers, specially for apps using anonymous users, to immediately regain access to any entitlements they had before changing devices or uninstalling and reinstalling, effectively removing the need for these users to "restore purchases".
1 build increased size
TestPurchasesUIAndroidCompatibility 1.0 (1)
|
| Item | Install Size Change | Download Size Change |
|---|---|---|
| 📝 com.revenuecat.purchases.virtualcurrencies.VirtualCurrencyManager | ⬆️ 10.6 kB | ⬆️ 3.5 kB |
| 📝 com.revenuecat.purchases.common.SharedPreferencesManager | ⬆️ 9.6 kB | ⬆️ 3.2 kB |
| 📝 kotlin.text.HexExtensionsKt | ⬆️ 6.9 kB | ⬆️ 2.5 kB |
| com.revenuecat.purchases.common.caching.DeviceCache | ⬆️ 7.5 kB | ⬆️ 2.4 kB |
| 📝 com.revenuecat.purchases.ui.revenuecatui.components.button.Button... | ⬆️ 4.9 kB | ⬆️ 1.7 kB |
🛸 Powered by Emerge Tools
Comment trigger: Size diff threshold of 100.00kB exceeded
Generated by 🚫 Danger |
📸 Snapshot TestSome snapshots failed to render
🛸 Powered by Emerge Tools |
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.

RevenueCat SDK
Note
This release brings all non-breaking changes between SDK versions 9.6.0 and 9.11.0 to major 8, so developers that don't/can't use major 9, can still get the latest updates. meant to be bought only once, for example, lifetime subscriptions.
✨ New Features
storefrontLocaleAPIs. (Adds new experimentalstorefrontLocaleAPIs. #2726) via JayShortway (@JayShortway)🐞 Bugfixes
allowSharingPlayStoreAccount(Fix deadlock inallowSharingPlayStoreAccount#2707) via Cesar de la Vega (@vegaro)RevenueCatUI SDK
Paywallv2
✨ New Features
launchandlaunchIfNeededto Java (ExposelaunchandlaunchIfNeededto Java #2695) via Cesar de la Vega (@vegaro)🐞 Bugfixes
Customer Center
✨ New Features
🐞 Bugfixes
NoClassDefFoundErrorwhen using Material 1.4.0 (Fixes more Icons crashing withNoClassDefFoundErrorwhen using Material 1.4.0 #2732) via Cesar de la Vega (@vegaro)NoClassDefFoundErrorcrash findingIconscaused by material3 1.4.0 (Fix potentialNoClassDefFoundErrorcrash findingIconscaused by material3 1.4.0 #2727) via Cesar de la Vega (@vegaro)🔄 Other Changes
TestStoreSimulatedPurchaseErrorerror code (AddTestStoreSimulatedPurchaseErrorerror code #2716) via Toni Rico (@tonidero)3f7fffcto25c7fb8(Bump fastlane-plugin-revenuecat_internal from3f7fffcto25c7fb8#2721) via dependabot[bot] (@dependabot[bot])a8770fdto3f7fffc(Bump fastlane-plugin-revenuecat_internal froma8770fdto3f7fffc#2712) via dependabot[bot] (@dependabot[bot])e555afbtoa8770fd(Bump fastlane-plugin-revenuecat_internal frome555afbtoa8770fd#2708) via dependabot[bot] (@dependabot[bot])TabsComponent. (Adds new tab ID properties toTabsComponent. #2577) via JayShortway (@JayShortway)401d148to7508f17(Bump fastlane-plugin-revenuecat_internal from401d148to7508f17#2697) via dependabot[bot] (@dependabot[bot])a6dc551to401d148(Bump fastlane-plugin-revenuecat_internal froma6dc551to401d148#2683) via dependabot[bot] (@dependabot[bot])489faeftoa6dc551(Bump fastlane-plugin-revenuecat_internal from489faeftoa6dc551#2673) via dependabot[bot] (@dependabot[bot])7d97553to489faef(Bump fastlane-plugin-revenuecat_internal from7d97553to489faef#2671) via dependabot[bot] (@dependabot[bot])