From 15905882caa7ef0c6f98b8aa4832549ad150118d Mon Sep 17 00:00:00 2001 From: Jason Ross Date: Thu, 2 Jul 2026 16:39:02 -0500 Subject: [PATCH] fix(accountsetup): show 2-Step Verification link before app-password link for Gmail 2-Step Verification is a prerequisite for Gmail's app-passwords page, so render the twoFactorHelpUrl button first when present, then the appPasswordHelpUrl button. Previously the prerequisite link rendered second, so a user without 2FA enabled would hit a dead end on the first button before noticing the second. No visible change for Yahoo/iCloud, which have no twoFactorHelpUrl. Closes #152 Co-Authored-By: Claude Opus 4.8 --- .../ui/accountsetup/AppPasswordSetupScreen.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/org/libremail/ui/accountsetup/AppPasswordSetupScreen.kt b/app/src/main/kotlin/org/libremail/ui/accountsetup/AppPasswordSetupScreen.kt index 1a640ba..357d4fe 100644 --- a/app/src/main/kotlin/org/libremail/ui/accountsetup/AppPasswordSetupScreen.kt +++ b/app/src/main/kotlin/org/libremail/ui/accountsetup/AppPasswordSetupScreen.kt @@ -151,23 +151,23 @@ fun AppPasswordSetupScreen( ) Spacer(Modifier.height(12.dp)) - OutlinedButton( - onClick = { openUrl(provider.appPasswordHelpUrl) }, - modifier = Modifier.fillMaxWidth(), - ) { - Text(stringResource(R.string.app_password_open_page, provider.displayName)) - } // Only Gmail has a two-factor prerequisite (see MailProvider.twoFactorHelpUrl): its - // app-passwords page rejects accounts without 2-Step Verification, so give those users - // a way to set it up instead of a dead end. + // app-passwords page rejects accounts without 2-Step Verification, so point users + // there first instead of sending them to the app-passwords page's dead end. provider.twoFactorHelpUrl?.let { twoFactorHelpUrl -> - Spacer(Modifier.height(8.dp)) OutlinedButton( onClick = { openUrl(twoFactorHelpUrl) }, modifier = Modifier.fillMaxWidth(), ) { Text(stringResource(R.string.app_password_2fa_help)) } + Spacer(Modifier.height(8.dp)) + } + OutlinedButton( + onClick = { openUrl(provider.appPasswordHelpUrl) }, + modifier = Modifier.fillMaxWidth(), + ) { + Text(stringResource(R.string.app_password_open_page, provider.displayName)) } Spacer(Modifier.height(20.dp))