Onboarding: app-password guided setup screen #29

Closed
opened 2026-07-01 03:49:18 +00:00 by JMR-dev · 0 comments
JMR-dev commented 2026-07-01 03:49:18 +00:00 (Migrated from github.com)

Part of #9.

Context

Gmail, Yahoo, and iCloud all authenticate the same way in this flow: preconfigured
IMAP/SMTP + an app password. Rather than three near-identical screens, build one guided
app-password screen parameterized by the provider preset from #28. The existing
ManualSetupViewModel already builds a PASSWORD_IMAP Account and calls
AccountRepository.addImapAccount (verify + persist) — reuse that backend path.

Scope

  • Reusable app-password setup screen that takes a provider key and loads its preset +
    help copy from #28.
  • Explain what an app password is, and warn the user to store it carefully and
    securely because it grants access to their account
    .
  • A button/link that opens the provider's app-password creation page (from #28).
  • Inputs: email + app password. Servers come from the preset and are not shown as
    required fields (optionally reveal a read-only/advanced override for edge cases).
  • Test + save via addImapAccount(account, appPassword) (live connection test already
    built in), surfacing failures the way ManualSetupScreen does today.
  • ViewModel unit tests (valid/invalid input, connection failure surfaced as error);
    new files carry the SPDX header.

Acceptance criteria

  • Selecting Gmail/Yahoo/iCloud in the picker opens this screen preconfigured for that
    provider, with the correct app-password link and explanation.
  • A valid email + app password verifies against the server and persists the account,
    reusing the existing credential store + sync trigger.
  • A bad password/host surfaces an inline error and does not persist the account.

Relevant files

  • app/src/main/kotlin/org/libremail/ui/accountsetup/ManualSetup{Screen,ViewModel}.kt (pattern to reuse)
  • app/src/main/kotlin/org/libremail/data/repository/AccountRepositoryImpl.kt (addImapAccount)
  • provider registry from #28

Dependencies

Depends on #28. Reached from #27.

Part of #9. ## Context Gmail, Yahoo, and iCloud all authenticate the same way in this flow: preconfigured IMAP/SMTP + an app password. Rather than three near-identical screens, build one guided app-password screen parameterized by the provider preset from #28. The existing `ManualSetupViewModel` already builds a `PASSWORD_IMAP` `Account` and calls `AccountRepository.addImapAccount` (verify + persist) — reuse that backend path. ## Scope - [ ] Reusable app-password setup screen that takes a provider key and loads its preset + help copy from #28. - [ ] Explain **what an app password is**, and warn the user to **store it carefully and securely because it grants access to their account**. - [ ] A button/link that opens the provider's app-password creation page (from #28). - [ ] Inputs: email + app password. Servers come from the preset and are **not** shown as required fields (optionally reveal a read-only/advanced override for edge cases). - [ ] Test + save via `addImapAccount(account, appPassword)` (live connection test already built in), surfacing failures the way `ManualSetupScreen` does today. - [ ] ViewModel unit tests (valid/invalid input, connection failure surfaced as error); new files carry the SPDX header. ## Acceptance criteria - Selecting Gmail/Yahoo/iCloud in the picker opens this screen preconfigured for that provider, with the correct app-password link and explanation. - A valid email + app password verifies against the server and persists the account, reusing the existing credential store + sync trigger. - A bad password/host surfaces an inline error and does not persist the account. ## Relevant files - `app/src/main/kotlin/org/libremail/ui/accountsetup/ManualSetup{Screen,ViewModel}.kt` (pattern to reuse) - `app/src/main/kotlin/org/libremail/data/repository/AccountRepositoryImpl.kt` (`addImapAccount`) - provider registry from #28 ## Dependencies Depends on #28. Reached from #27.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMail#29