Repository navigation
chore(deps): Play Billing 9, play-services-auth 22, Firebase BoM 35, google-java-format 2.0 - #183
Merged
Merged
Conversation
…BoM 35.2.0 - Play Billing 8.3.0 -> 9.1.0. No API the app uses changed. One behaviour change: when the system blocks the Play Store (for example an OEM kids mode), billing now answers BILLING_UNAVAILABLE instead of ERROR, which BillingManager already reports as an unavailable billing service. - play-services-auth 21.4.0 -> 22.0.0. 22.0.0 removes the legacy Google Sign-In APIs; the app signs in through Credential Manager and authorizes Drive through Identity/AuthorizationClient, which remain. Every gms class credentials-play-services-auth 1.6.0 references is still present. - Firebase BoM 34.18.0 -> 35.2.0 (firebase-auth 25.0.0). Its breaking change is minSdk 24; the app's minSdk is 26.
pasichDev
changed the base branch from
chore/upgrade-gradle-agp-plugins
to
master
November 13, 2026 10:57
Formatter version only; the codebase is reformatted in the next commit. google-java-format 2.0 runs on Java 21; the Gradle daemon already runs on JDK 21 through gradle/gradle-daemon-jvm.properties.
Formatting only, produced by ./gradlew spotlessApply; no code changes. The commit is listed in .git-blame-ignore-revs.
google-java-format 2.0 needs Java 21. The Gradle daemon already runs on the JDK 21 toolchain from gradle/gradle-daemon-jvm.properties; setting it up in CI too stops spotlessCheck from depending on a toolchain download. The app still compiles for Java 17 (compileOptions).
- BILLING_UNAVAILABLE now reads "Google Play billing is not available on this device". Since Billing 9 it also covers a Play Store blocked by the system (an OEM kids mode), and the purchase path showed "Billing API version is not supported". - Donations are sorted by getPriceAmountMicros() instead of by parsing the formatted price, which read "¥1,000" as 1.0 and listed it as the cheapest. - enableAutoServiceReconnection(): a dropped Play Store service reconnects on the next call, instead of every donation tap failing with "Billing service not connected" until the screen is reopened. - A purchase the user was never thanked for (completed while the app was closed, or a pending purchase that settled in the background) is now thanked once its consume succeeds, instead of being consumed silently. - Purchases are queried once per screen open, not twice: SupportActivity already queries them when billing is initialized.
pasichDev
force-pushed
the
chore/major-dependency-bumps
branch
from
November 13, 2026 11:07
b624cab to
2c12c52
Compare
… a failed setup Second review round on the Play Billing 9 fixes: - Thanks for purchases the user never saw are given only when billing connects, once for the whole batch, instead of once per purchase. The pre-purchase cleanup and the ITEM_ALREADY_OWNED path consume silently again: they showed "Purchase successful" before a purchase sheet opened, or next to "Item already owned". - A donation thanked in the purchase flow is remembered (ThankedPurchases, keyed by purchase token) until its consume succeeds, so a failed consume is not thanked a second time when the purchase comes back. - The isServiceConnected gate is gone. It was set only by a successful first setup, so a failed setup refused every call for the life of the screen, which automatic service reconnection would otherwise recover from. - destroy() ends the connection unconditionally: a dropped client is not ready but still reconnects for a call in flight. - The unused five-argument DonationProduct constructor is removed, so a caller cannot silently create a product without a price.
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.
Dependencies
setSkuDetails, removed, was unused). Behaviour change: a Play Store blocked by the system (an OEM kids mode, for example) now answersBILLING_UNAVAILABLEinstead ofERROR; see the billing fixes below.Identity/AuthorizationClient, which remain.proguard-rules.prohas-dontwarn com.google.android.gms.**, which would hide missing classes from R8, so every gms class referenced bycredentials-play-services-auth1.6.0 was checked against 22.0.0: none are missing.gradle/gradle-daemon-jvm.properties); CI now sets up JDK 21 too. The app still compiles for Java 17.Billing fixes (from review)
BILLING_UNAVAILABLEreads "Google Play billing is not available on this device" instead of "Billing API version is not supported".getPriceAmountMicros(); parsing the formatted price read "¥1,000" as 1.0.enableAutoServiceReconnection(): a dropped Play Store service reconnects on the next call instead of failing until the screen is reopened.Tests:
DonationProductTest,BillingManagerErrorMessageTest.Commits
Review commit by commit.
8e4e556is formatting only (74 files are identical with all whitespace removed) and is listed in.git-blame-ignore-revs, so merge with a merge commit, not squash or rebase, or the listed hash will not exist onmaster. The formatter version change is its own commit (2e3b344), so blame still shows it.Verification
./gradlew spotlessCheck test lint assembleReleasepasses locally. The donation flow still needs a manual check on a device with a Play test account.