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)) diff --git a/app/src/main/kotlin/org/libremail/ui/compose/RichTextEditor.kt b/app/src/main/kotlin/org/libremail/ui/compose/RichTextEditor.kt index 18f4804..942af0b 100644 --- a/app/src/main/kotlin/org/libremail/ui/compose/RichTextEditor.kt +++ b/app/src/main/kotlin/org/libremail/ui/compose/RichTextEditor.kt @@ -78,7 +78,8 @@ internal const val IMAGE_TAG = "libremail:image" * feels exactly like the old editor. * * The field is a normal Compose text field, so TalkBack, text selection, and large system fonts all - * work as usual; the toolbar buttons carry content descriptions and toggle state for accessibility. + * work as usual; each toolbar button exposes its accessible action label via `onClickLabel` on its + * [Modifier.clickable] (not a `contentDescription`), and still carries toggle state for accessibility. * * [resolveFont] maps a CSS font-family stack to a Compose [FontFamily] for display; the default * resolves nothing, leaving the system font (the model still round-trips the CSS value untouched).