diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 38b49c2edd..7414472e1e 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -763,6 +763,10 @@ "@loginMethodDivider": { "description": "Text on the divider between the username/password form and the third-party login options. Uppercase (for languages with letter case)." }, + "loginMethodDividerSemanticLabel": "Log-in alternatives", + "@loginMethodDividerSemanticLabel": { + "description": "Semantic label for divider between the username/password form and the third-party login options." + }, "signInWithFoo": "Sign in with {method}", "@signInWithFoo": { "description": "Button to use {method} to sign in to the app.", diff --git a/lib/generated/l10n/zulip_localizations.dart b/lib/generated/l10n/zulip_localizations.dart index fe79921c07..9a8f064df4 100644 --- a/lib/generated/l10n/zulip_localizations.dart +++ b/lib/generated/l10n/zulip_localizations.dart @@ -1179,6 +1179,12 @@ abstract class ZulipLocalizations { /// **'OR'** String get loginMethodDivider; + /// Semantic label for divider between the username/password form and the third-party login options. + /// + /// In en, this message translates to: + /// **'Log-in alternatives'** + String get loginMethodDividerSemanticLabel; + /// Button to use {method} to sign in to the app. /// /// In en, this message translates to: diff --git a/lib/generated/l10n/zulip_localizations_ar.dart b/lib/generated/l10n/zulip_localizations_ar.dart index 5e69a181da..5908bcd973 100644 --- a/lib/generated/l10n/zulip_localizations_ar.dart +++ b/lib/generated/l10n/zulip_localizations_ar.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_de.dart b/lib/generated/l10n/zulip_localizations_de.dart index 241e886e55..c562def892 100644 --- a/lib/generated/l10n/zulip_localizations_de.dart +++ b/lib/generated/l10n/zulip_localizations_de.dart @@ -647,6 +647,9 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get loginMethodDivider => 'ODER'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Anmelden mit $method'; diff --git a/lib/generated/l10n/zulip_localizations_el.dart b/lib/generated/l10n/zulip_localizations_el.dart index ce72dc77bf..b1600d22e3 100644 --- a/lib/generated/l10n/zulip_localizations_el.dart +++ b/lib/generated/l10n/zulip_localizations_el.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsEl extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_en.dart b/lib/generated/l10n/zulip_localizations_en.dart index 6d10362555..d02025921d 100644 --- a/lib/generated/l10n/zulip_localizations_en.dart +++ b/lib/generated/l10n/zulip_localizations_en.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_es.dart b/lib/generated/l10n/zulip_localizations_es.dart index 80098d557f..b6f03f00af 100644 --- a/lib/generated/l10n/zulip_localizations_es.dart +++ b/lib/generated/l10n/zulip_localizations_es.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsEs extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_fr.dart b/lib/generated/l10n/zulip_localizations_fr.dart index adb41177b2..896d9445eb 100644 --- a/lib/generated/l10n/zulip_localizations_fr.dart +++ b/lib/generated/l10n/zulip_localizations_fr.dart @@ -644,6 +644,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_he.dart b/lib/generated/l10n/zulip_localizations_he.dart index e59309be3e..af6f7ecba8 100644 --- a/lib/generated/l10n/zulip_localizations_he.dart +++ b/lib/generated/l10n/zulip_localizations_he.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsHe extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_hu.dart b/lib/generated/l10n/zulip_localizations_hu.dart index 6a3c11465c..f2af21cb90 100644 --- a/lib/generated/l10n/zulip_localizations_hu.dart +++ b/lib/generated/l10n/zulip_localizations_hu.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsHu extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_it.dart b/lib/generated/l10n/zulip_localizations_it.dart index cd27a1daa7..33e32eaa2c 100644 --- a/lib/generated/l10n/zulip_localizations_it.dart +++ b/lib/generated/l10n/zulip_localizations_it.dart @@ -641,6 +641,9 @@ class ZulipLocalizationsIt extends ZulipLocalizations { @override String get loginMethodDivider => 'O'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Accedi con $method'; diff --git a/lib/generated/l10n/zulip_localizations_ja.dart b/lib/generated/l10n/zulip_localizations_ja.dart index d11aedf19f..c6ed8e28f7 100644 --- a/lib/generated/l10n/zulip_localizations_ja.dart +++ b/lib/generated/l10n/zulip_localizations_ja.dart @@ -614,6 +614,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations { @override String get loginMethodDivider => 'または'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return '$methodでログイン'; diff --git a/lib/generated/l10n/zulip_localizations_nb.dart b/lib/generated/l10n/zulip_localizations_nb.dart index 162ca9e677..46a023a3e4 100644 --- a/lib/generated/l10n/zulip_localizations_nb.dart +++ b/lib/generated/l10n/zulip_localizations_nb.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/generated/l10n/zulip_localizations_pl.dart b/lib/generated/l10n/zulip_localizations_pl.dart index 40682171b2..601fac0d94 100644 --- a/lib/generated/l10n/zulip_localizations_pl.dart +++ b/lib/generated/l10n/zulip_localizations_pl.dart @@ -641,6 +641,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get loginMethodDivider => 'LUB'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Logowanie z $method'; diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index 04f8903b91..c3e2eece83 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -642,6 +642,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get loginMethodDivider => 'ИЛИ'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Войти с помощью $method'; diff --git a/lib/generated/l10n/zulip_localizations_sk.dart b/lib/generated/l10n/zulip_localizations_sk.dart index e2dc542fc5..b1b66c28e1 100644 --- a/lib/generated/l10n/zulip_localizations_sk.dart +++ b/lib/generated/l10n/zulip_localizations_sk.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations { @override String get loginMethodDivider => 'alebo'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Prihlásiť sa pomocou $method'; diff --git a/lib/generated/l10n/zulip_localizations_sl.dart b/lib/generated/l10n/zulip_localizations_sl.dart index 6f9d8343ca..6e167dcc19 100644 --- a/lib/generated/l10n/zulip_localizations_sl.dart +++ b/lib/generated/l10n/zulip_localizations_sl.dart @@ -653,6 +653,9 @@ class ZulipLocalizationsSl extends ZulipLocalizations { @override String get loginMethodDivider => 'ALI'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Prijava z $method'; diff --git a/lib/generated/l10n/zulip_localizations_uk.dart b/lib/generated/l10n/zulip_localizations_uk.dart index 84df26a42e..7be41b907b 100644 --- a/lib/generated/l10n/zulip_localizations_uk.dart +++ b/lib/generated/l10n/zulip_localizations_uk.dart @@ -642,6 +642,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations { @override String get loginMethodDivider => 'АБО'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Увійти з $method'; diff --git a/lib/generated/l10n/zulip_localizations_zh.dart b/lib/generated/l10n/zulip_localizations_zh.dart index b08c25004e..01c70134f0 100644 --- a/lib/generated/l10n/zulip_localizations_zh.dart +++ b/lib/generated/l10n/zulip_localizations_zh.dart @@ -628,6 +628,9 @@ class ZulipLocalizationsZh extends ZulipLocalizations { @override String get loginMethodDivider => 'OR'; + @override + String get loginMethodDividerSemanticLabel => 'Log-in alternatives'; + @override String signInWithFoo(String method) { return 'Sign in with $method'; diff --git a/lib/widgets/login.dart b/lib/widgets/login.dart index 664a24509a..0c1fb4b1e4 100644 --- a/lib/widgets/login.dart +++ b/lib/widgets/login.dart @@ -457,7 +457,7 @@ class _LoginPageState extends State { final externalAuthenticationMethods = widget.serverSettings.externalAuthenticationMethods; - final loginForm = Column(mainAxisAlignment: MainAxisAlignment.center, children: [ + final loginContent = Column(mainAxisAlignment: MainAxisAlignment.center, children: [ _UsernamePasswordForm(loginPageState: this), if (externalAuthenticationMethods.isNotEmpty) ...[ const OrDivider(), @@ -497,7 +497,7 @@ class _LoginPageState extends State { // left or the right of this box child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 400), - child: loginForm)))))); + child: loginContent)))))); } } @@ -677,17 +677,20 @@ class OrDivider extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric(vertical: 10), - child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ - divider, - Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: Text(zulipLocalizations.loginMethodDivider, - textAlign: TextAlign.center, - style: TextStyle( - color: designVariables.loginOrDividerText, - height: 1.5, - ).merge(weightVariableTextStyle(context, wght: 600)))), - divider, - ])); + child: Semantics( + excludeSemantics: true, + label: zulipLocalizations.loginMethodDividerSemanticLabel, + child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ + divider, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 5), + child: Text(zulipLocalizations.loginMethodDivider, + textAlign: TextAlign.center, + style: TextStyle( + color: designVariables.loginOrDividerText, + height: 1.5, + ).merge(weightVariableTextStyle(context, wght: 600)))), + divider, + ]))); } }