Skip to content

0.8.0 - #35

Merged
zigapovhe merged 16 commits into
mainfrom
v0.8.0
Jul 29, 2026
Merged

zigapovhe merged 16 commits into
mainfrom
v0.8.0

Conversation

@zigapovhe

@zigapovhe zigapovhe commented Jul 28, 2026 •

Copy link
Copy Markdown
Owner

Migrates Android to Play age-signals 0.0.4. Google removed the userStatus field, so the status is now derived from what Play does report.

This includes @syntaxticsugr's commits from #34, which is where the two-call access flow and the new result fields come from. On top of that it corrects the status derivation and adds docs and safety work.

The correction

#34 derived the status from the assurance tier: tierC/tierD mapped to verified, tierA to declared. But ageRangeSource says how an age was established, not what it is. A tierD result means an ID was checked, and that ID can read 12, so a minor could clear an adult gate. The reverse also held: a self-declared adult could never reach verified while the stronger tierC passed automatically.

The verdict now comes from the reported age band measured against your highest configured age gate, which is the comparison the iOS side already made.

Breaking

  • status is derived from the age band, not the tier. Read ageRangeSource for how the age was established.
  • AgeSignalsStatus.declared is deprecated and no longer returned. Read ageRangeSource == AgeRangeSource.tierA.
  • mostRecentApprovalDate renamed to significantChangeApprovalDate. The old name still works on the result, mock data, constructors and copyWith, and fromMap still reads the old channel key.
  • useMockData: true throws in non-debuggable builds. The fake manager forges age signals and should not be reachable in a release.
  • requestAgeSignalsAccess() is a new first step; call it before checkAgeSignals() and only read signals on shared.

Also

Refreshes the regulatory status (Texas is firmly in effect, Utah and Louisiana are delayed but Apple already shares age categories there, Singapore added), adds badges, and adds llms.txt plus context7 rules.

Testing

36 Kotlin tests, 75 Dart tests, analyze and format clean. Tested on a Pixel 7 with mock data.

The real Play path still needs a check on a US, Brazil or Australia account, since it returns NOT_SHARED here. That is the one assumption the tests cannot settle: verified requires Play to report ageLower >= 18 for an unsupervised adult.

zigapovhe and others added 9 commits July 28, 2026 16:22
0.0.4 removes userStatus; status is now derived from ageRangeSource +
significantChangeStatus, the replacement Google names in its release
notes, so existing status-based code keeps working. Follows the upstream
rename of mostRecentApprovalDate to significantChangeApprovalDate and
exposes the new fields on AgeSignalsResult and AgeSignalsMockData.

New requestAgeSignalsAccess() implements the 0.0.4 two-call flow: it can
show Play's age sharing prompt (the plugin now implements ActivityAware
to present it) and gates checkAgeSignals() on a shared, notShared, or
verificationRequired outcome. A decline is a result, not an error. iOS
reports shared and keeps gathering consent inside the check itself, so
one call sequence works on both platforms.

@syntaxticsugr syntaxticsugr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Went through the derivation change - the band-vs-gate verdict is right, no objections to the logic. The inline notes are all docs and examples the code moved out from under, plus one behavioural note on gate quantisation.

Happy for #34 to be closed in favour of this.

Comment thread README.md Outdated
Comment thread android/src/main/kotlin/si/povhe/age_range_signals/AgeRangeSignalsPlugin.kt Outdated
Comment thread android/src/main/kotlin/si/povhe/age_range_signals/AgeRangeSignalsPlugin.kt Outdated
Comment thread android/src/main/kotlin/si/povhe/age_range_signals/AgeRangeSignalsPlugin.kt Outdated
Comment thread android/src/main/kotlin/si/povhe/age_range_signals/AgeRangeSignalsPlugin.kt Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md
@zigapovhe
zigapovhe merged commit da3b2e9 into main Jul 29, 2026
3 checks passed
@zigapovhe
zigapovhe deleted the v0.8.0 branch September 6, 2026 12:27
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