Skip to content

feat: seedphrase sign-in, instant account creation, and multi-method auth settings#466

Open
Ryanmello07 wants to merge 8 commits into
urnetwork:mainfrom
Ryanmello07:feat/seedphrase-auth-android-upstream
Open

feat: seedphrase sign-in, instant account creation, and multi-method auth settings#466
Ryanmello07 wants to merge 8 commits into
urnetwork:mainfrom
Ryanmello07:feat/seedphrase-auth-android-upstream

Conversation

@Ryanmello07

Copy link
Copy Markdown
Contributor

Summary

Adds seedphrase-based authentication to the Android app, matching the iOS port (urnetwork/apple#331) and the corresponding server work (urnetwork/server#406):

  • Seedphrase sign-in + instant account creation across all 4 flavors (github, play, solana_dapp, ethos_dapp): new LoginSeedphrase, CreateNetworkInstant, and SeedphraseDisplayScreen screens, wired into each flavor's login flow.
  • Guest-mode removal: guest account creation, the guest onboarding sheet/overlay, and all associated guest-only UI branches are removed in favor of the seedphrase flow.
  • Sign-In Methods management: a rebuilt AddAuthMethodSheet (email/password, Google, Solana wallet) and a Settings "Sign-In Methods" list, matching iOS's AddAuthSheet.swift structure.
  • Seedphrase generate/regenerate: a Settings section above Sign-In Methods, since Api.addAuth doesn't return the generated phrase — only the dedicated generateSeedphrase/regenerateSeedphrase calls do.
  • Profile name-claim + rename: migrated off the legacy, cooldown-free NetworkUserUpdate endpoint onto changeNetworkName/claimNetworkName (matching iOS), with claim-vs-change UX and JWT-refresh-on-foreground so a rename is reflected without a fresh login.

Provenance

This is the squashed, upstream-facing recombination of four PRs merged into the fork's integration branch, each independently reviewed and CI-verified there (Ryanmello07/urnetwork-android):

  • build fixes #6 — seedphrase login, instant account creation, guest-mode removal (all 4 flavors)
  • Initial login screen #7 — Sign-In Methods list + AddAuthMethodSheet
  • V0 #8 — Profile name-claim + rename migration
  • Login password #9 — Generate/Regenerate Seedphrase Settings section + AddAuthMethodSheet fix (feature commits only; fork-internal CI-retrigger and sync-merge commits excluded)

Recombining onto upstream/main directly (rather than merging the fork's integration branch verbatim) surfaced only two conflicts, both mechanical: a fork-only CI workflow file that doesn't exist upstream (dropped, correctly), and an adjacent string-resource insertion in strings.xml (both sides' strings kept). No logic conflicts. Fork-internal planning/spec docs (docs/superpowers/...) were stripped as not relevant upstream.

Verification

No local Android build toolchain or Android SDK available in the environment this was prepared in, and urnetwork/android has no CI workflow configured to validate this automatically. However, the underlying code was already build-verified per-PR on the fork's own CI (all 4 flavors, github/play/solana_dapp/ethos_dapp) before each of #6/#7/#8/#9 merged there. The only new manual work in this recombination (the two conflicts above) has been checked by hand: strings.xml confirmed well-formed XML, and the dropped CI file is fork-only tooling with no code implications.

Process

Each of #6/#7/#8/#9 was built via a written design spec + implementation plan, executed task-by-task with a fresh implementer and independent review per task, plus a final whole-branch review before merging into the fork's integration branch. See the linked PRs for each one's individual review history.

Ryanmello07 and others added 8 commits July 21, 2026 21:30
feat: seedphrase login, instant account creation, remove guest mode (all 4 flavors)
PR2: Sign-In Methods list + AddAuthMethodSheet
feat: Profile name-claim + rename migration
Api.addAuth never returns the generated seedphrase, so this option could
add a seedphrase auth method the user could never see or use. The new
dedicated Seedphrase section in Settings (Generate/Regenerate) is the
only path that actually returns and displays the phrase.
The dialog was closing pendingSeedphraseAction = null synchronously on
tap, before generateSeedphrase/regenerateSeedphrase's async result comes
back. Any error (no connectivity, server rejection) set
seedphraseActionError, but that text lives inside the already-closed
dialog, so it was never shown -- a security-sensitive operation was
failing completely silently. Fixed by closing only via a
LaunchedEffect(generatedSeedphrase) once the call actually succeeds,
mirroring the remove-sign-in-method dialog's real behavior (it closes on
onSuccess, not eagerly). Flagged by the final whole-branch review.
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.

1 participant