Skip to content

Commit 7e5fbd3

Browse files
committed
feat: Accessibility & i18n Audit
1 parent 8070632 commit 7e5fbd3

File tree

90 files changed

+3798
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+3798
-3
lines changed

auth/src/main/java/com/firebase/ui/auth/compose/ui/components/AuthTextField.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import androidx.compose.foundation.layout.height
2323
import androidx.compose.foundation.layout.padding
2424
import androidx.compose.foundation.text.KeyboardActions
2525
import androidx.compose.foundation.text.KeyboardOptions
26+
import androidx.compose.ui.text.input.ImeAction
27+
import androidx.compose.ui.text.input.KeyboardType
2628
import androidx.compose.material.icons.Icons
2729
import androidx.compose.material.icons.filled.Email
2830
import androidx.compose.material.icons.filled.Lock
@@ -104,6 +106,22 @@ fun AuthTextField(
104106
) {
105107
var passwordVisible by remember { mutableStateOf(false) }
106108

109+
// Automatically set the correct keyboard type based on validator or field type
110+
val resolvedKeyboardOptions = remember(validator, isSecureTextField, keyboardOptions) {
111+
when {
112+
keyboardOptions != KeyboardOptions.Default -> keyboardOptions
113+
validator is EmailValidator -> KeyboardOptions(
114+
keyboardType = KeyboardType.Email,
115+
imeAction = ImeAction.Next
116+
)
117+
isSecureTextField -> KeyboardOptions(
118+
keyboardType = KeyboardType.Password,
119+
imeAction = ImeAction.Done
120+
)
121+
else -> keyboardOptions
122+
}
123+
}
124+
107125
TextField(
108126
modifier = modifier
109127
.fillMaxWidth(),
@@ -121,7 +139,7 @@ fun AuthTextField(
121139
Text(text = errorMessage ?: validator.errorMessage)
122140
}
123141
},
124-
keyboardOptions = keyboardOptions,
142+
keyboardOptions = resolvedKeyboardOptions,
125143
keyboardActions = keyboardActions,
126144
visualTransformation = if (isSecureTextField && !passwordVisible)
127145
PasswordVisualTransformation() else visualTransformation,

auth/src/main/java/com/firebase/ui/auth/compose/ui/components/CountrySelector.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ import androidx.compose.ui.Modifier
4949
import androidx.compose.ui.graphics.Color
5050
import androidx.compose.ui.platform.LocalContext
5151
import androidx.compose.ui.platform.testTag
52+
import androidx.compose.ui.semantics.Role
5253
import androidx.compose.ui.semantics.contentDescription
54+
import androidx.compose.ui.semantics.role
5355
import androidx.compose.ui.semantics.semantics
5456
import androidx.compose.ui.unit.dp
5557
import com.firebase.ui.auth.compose.configuration.string_provider.DefaultAuthUIStringProvider
@@ -109,6 +111,7 @@ fun CountrySelector(
109111
}
110112
.padding(start = 8.dp)
111113
.semantics {
114+
role = Role.DropdownList
112115
contentDescription = "Country selector"
113116
},
114117
verticalAlignment = Alignment.CenterVertically,

auth/src/main/java/com/firebase/ui/auth/compose/ui/components/QrCodeImage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fun QrCodeImage(
7070
bitmap?.let {
7171
Image(
7272
bitmap = it.asImageBitmap(),
73-
contentDescription = "QR Code for $content",
73+
contentDescription = "QR code for authenticator app setup",
7474
modifier = Modifier.size(size)
7575
)
7676
}

auth/src/main/java/com/firebase/ui/auth/compose/ui/components/VerificationCodeInputField.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ import androidx.compose.ui.text.style.TextAlign
5252
import androidx.compose.ui.tooling.preview.Preview
5353
import androidx.compose.ui.unit.dp
5454
import androidx.compose.ui.unit.sp
55+
import androidx.compose.ui.semantics.Role
56+
import androidx.compose.ui.semantics.contentDescription
57+
import androidx.compose.ui.semantics.role
58+
import androidx.compose.ui.semantics.semantics
5559
import androidx.core.text.isDigitsOnly
5660
import com.firebase.ui.auth.compose.configuration.theme.AuthUITheme
5761
import com.firebase.ui.auth.compose.configuration.validators.FieldValidator
@@ -248,6 +252,9 @@ private fun SingleDigitField(
248252
modifier = Modifier
249253
.fillMaxSize()
250254
.wrapContentSize()
255+
.semantics {
256+
contentDescription = "Verification code digit"
257+
}
251258
.focusRequester(focusRequester)
252259
.onFocusChanged {
253260
isFocused.value = it.isFocused

auth/src/main/java/com/firebase/ui/auth/compose/ui/screens/email/SignInUI.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ import androidx.compose.runtime.remember
4141
import androidx.compose.ui.Alignment
4242
import androidx.compose.ui.Modifier
4343
import androidx.compose.ui.platform.LocalContext
44+
import androidx.compose.ui.platform.LocalLayoutDirection
45+
import androidx.compose.ui.semantics.heading
46+
import androidx.compose.ui.semantics.semantics
4447
import androidx.compose.ui.text.style.TextAlign
4548
import androidx.compose.ui.text.style.TextDecoration
4649
import androidx.compose.ui.tooling.preview.Preview
@@ -124,12 +127,17 @@ fun SignInUI(
124127
}
125128
}
126129

130+
val layoutDirection = LocalLayoutDirection.current
131+
127132
Scaffold(
128133
modifier = modifier,
129134
topBar = {
130135
TopAppBar(
131136
title = {
132-
Text(stringProvider.signInDefault)
137+
Text(
138+
text = stringProvider.signInDefault,
139+
modifier = Modifier.semantics { heading() }
140+
)
133141
},
134142
colors = AuthUITheme.topAppBarColors
135143
)

auth/src/main/res/values-ar/strings.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,39 @@
129129
<string name="fui_mfa_error_invalid_verification_code" translation_description="Error message when MFA enrollment fails due to invalid verification code">رمز التحقق غير صحيح. يُرجى المحاولة مرة أخرى.</string>
130130
<string name="fui_mfa_error_network" translation_description="Error message when MFA enrollment fails due to network issues">حدث خطأ في الشبكة. يُرجى التحقق من اتصالك والمحاولة مرة أخرى.</string>
131131
<string name="fui_mfa_error_generic" translation_description="Generic error message for MFA enrollment failures">حدث خطأ أثناء التسجيل. يُرجى المحاولة مرة أخرى.</string>
132+
133+
<string name="fui_back_action">رجوع</string>
134+
<string name="fui_identity_verified_message">تم التحقق من الهوية. أعد المحاولة.</string>
135+
<string name="fui_manage_mfa_action">إدارة المصادقة الثنائية</string>
136+
<string name="fui_incorrect_password_error">كلمة المرور غير صحيحة</string>
137+
<string name="fui_mfa_choose_method_instruction">اختر طريقة التحقق</string>
138+
<string name="fui_mfa_enrollment_instruction">أضف طبقة أمان إضافية</string>
139+
<string name="fui_mfa_method_sms">رسالة نصية</string>
140+
<string name="fui_mfa_method_totp">تطبيق المصادقة</string>
141+
<string name="fui_mfa_phone_number_already_exists_error">رقم الهاتف هذا مرتبط بحساب آخر</string>
142+
<string name="fui_mfa_second_factor_required_error">التحقق مطلوب</string>
143+
<string name="fui_mfa_setup_instruction">امسح رمز الاستجابة السريعة باستخدام تطبيق المصادقة</string>
144+
<string name="fui_mfa_totp_already_exists_error">تطبيق المصادقة معد بالفعل</string>
145+
<string name="fui_mfa_unenrollment_confirmation_message">هل أنت متأكد من إزالة طريقة التحقق هذه؟</string>
146+
<string name="fui_mfa_unenrollment_error">تعذرت إزالة طريقة التحقق</string>
147+
<string name="fui_mfa_unenrollment_success_message">تمت إزالة طريقة التحقق</string>
148+
<string name="fui_mfa_verification_instruction">أدخل رمز التحقق</string>
149+
<string name="fui_profile_update_error">تعذر تحديث الملف الشخصي</string>
150+
<string name="fui_profile_update_success_message">تم تحديث الملف الشخصي</string>
151+
<string name="fui_reauth_instruction">أكد هويتك للمتابعة</string>
152+
<string name="fui_reauth_required_error">إعادة المصادقة مطلوبة</string>
153+
<string name="fui_reauth_success_message">نجحت إعادة المصادقة</string>
154+
<string name="fui_reauthenticate_action">إعادة المصادقة</string>
155+
<string name="fui_recovery_codes_saved_action">حفظت رموز الاسترداد</string>
156+
<string name="fui_remove_action">إزالة</string>
157+
<string name="fui_resend_verification_email_action">إعادة إرسال بريد التحقق</string>
158+
<string name="fui_secret_key_label">المفتاح السري</string>
159+
<string name="fui_sign_out_action">تسجيل الخروج</string>
160+
<string name="fui_signed_in_as">مسجل الدخول باسم</string>
161+
<string name="fui_skip_action">تخطي</string>
162+
<string name="fui_use_different_method_action">استخدم طريقة أخرى</string>
163+
<string name="fui_verification_code_label">رمز التحقق</string>
164+
<string name="fui_verified_email_action">البريد الإلكتروني محقق</string>
165+
<string name="fui_verify_action">تحقق</string>
166+
<string name="fui_verify_email_instruction">أرسلنا بريدًا للتحقق إلى %1$s</string>
132167
</resources>

auth/src/main/res/values-b+es+419/strings.xml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,57 @@
129129
<string name="fui_mfa_error_invalid_verification_code" translation_description="Error message when MFA enrollment fails due to invalid verification code">El código de verificación es incorrecto. Inténtalo de nuevo.</string>
130130
<string name="fui_mfa_error_network" translation_description="Error message when MFA enrollment fails due to network issues">Se produjo un error de red. Verifica tu conexión e inténtalo de nuevo.</string>
131131
<string name="fui_mfa_error_generic" translation_description="Generic error message for MFA enrollment failures">Se produjo un error durante la inscripción. Inténtalo de nuevo.</string>
132+
133+
<!-- MFA and Account Management - Added for v10 -->
134+
<string name="fui_back_action">Atrás</string>
135+
<string name="fui_identity_verified_message">Identidad verificada. Vuelve a intentar tu acción.</string>
136+
<string name="fui_incorrect_password_error">Contraseña incorrecta. Inténtalo de nuevo.</string>
137+
<string name="fui_manage_mfa_action">Administrar autenticación multifactor</string>
138+
<string name="fui_mfa_active_methods_title">Métodos activos</string>
139+
<string name="fui_mfa_add_new_method_title">Agregar nuevo método</string>
140+
<string name="fui_mfa_all_methods_enrolled_message">Todos los métodos de autenticación disponibles están registrados</string>
141+
<string name="fui_mfa_enrolled_on">Registrado el %1$s</string>
142+
<string name="fui_mfa_label_sms_authentication">Autenticación por SMS</string>
143+
<string name="fui_mfa_label_totp_authentication">Aplicación de autenticación</string>
144+
<string name="fui_mfa_label_unknown_method">Método desconocido</string>
145+
<string name="fui_mfa_manage_factors_description">Agregar o eliminar métodos de autenticación para tu cuenta</string>
146+
<string name="fui_mfa_manage_factors_title">Administrar autenticación de dos factores</string>
147+
<string name="fui_mfa_setup_authenticator_description">Escanea el código QR o ingresa la clave secreta en tu aplicación de autenticación</string>
148+
<string name="fui_profile_completion_message">Completa tu información de perfil para continuar.</string>
149+
<string name="fui_profile_missing_fields_message">Campos faltantes: %1$s</string>
150+
<string name="fui_reauth_account_label">Cuenta: %1$s</string>
151+
<string name="fui_reauth_dialog_message">Por tu seguridad, vuelve a ingresar tu contraseña para continuar.</string>
152+
<string name="fui_reauth_dialog_title">Verifica tu identidad</string>
153+
<string name="fui_reauth_generic_error">Error de autenticación. Inténtalo de nuevo.</string>
154+
<string name="fui_recovery_codes_saved_action">He guardado estos códigos</string>
155+
<string name="fui_remove_action">Eliminar</string>
156+
<string name="fui_resend_verification_email_action">Reenviar correo de verificación</string>
157+
<string name="fui_secret_key_label">Clave secreta</string>
158+
<string name="fui_sign_out_action">Cerrar sesión</string>
159+
<string name="fui_signed_in_as">Sesión iniciada como %1$s</string>
160+
<string name="fui_skip_action">Omitir por ahora</string>
161+
<string name="fui_use_different_method_action">Usar un método diferente</string>
162+
<string name="fui_verification_code_label">Código de verificación</string>
163+
<string name="fui_verified_email_action">He verificado mi correo electrónico</string>
164+
<string name="fui_verify_action">Verificar</string>
165+
<string name="fui_verify_email_instruction">Verifica %1$s para continuar.</string>
166+
167+
<string name="fui_mfa_choose_method_instruction">Elige un método de verificación</string>
168+
<string name="fui_mfa_enrollment_instruction">Agrega una capa adicional de seguridad</string>
169+
<string name="fui_mfa_method_sms">SMS</string>
170+
<string name="fui_mfa_method_totp">Aplicación de autenticación</string>
171+
<string name="fui_mfa_phone_number_already_exists_error">Este número de teléfono está asociado con otra cuenta</string>
172+
<string name="fui_mfa_second_factor_required_error">Verificación requerida</string>
173+
<string name="fui_mfa_setup_instruction">Escanea el código QR con tu aplicación de autenticación</string>
174+
<string name="fui_mfa_totp_already_exists_error">La aplicación de autenticación ya está configurada</string>
175+
<string name="fui_mfa_unenrollment_confirmation_message">¿Estás seguro de que quieres eliminar este método?</string>
176+
<string name="fui_mfa_unenrollment_error">No se puede eliminar el método</string>
177+
<string name="fui_mfa_unenrollment_success_message">Método eliminado</string>
178+
<string name="fui_mfa_verification_instruction">Ingresa el código de verificación</string>
179+
<string name="fui_profile_update_error">No se puede actualizar el perfil</string>
180+
<string name="fui_profile_update_success_message">Perfil actualizado</string>
181+
<string name="fui_reauth_instruction">Confirma tu identidad para continuar</string>
182+
<string name="fui_reauth_required_error">Se requiere reautenticación</string>
183+
<string name="fui_reauth_success_message">Reautenticación exitosa</string>
184+
<string name="fui_reauthenticate_action">Reautenticar</string>
132185
</resources>

auth/src/main/res/values-bg/strings.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,39 @@
129129
<string name="fui_mfa_error_invalid_verification_code" translation_description="Error message when MFA enrollment fails due to invalid verification code">Кодът за потвърждение е неправилен. Моля, опитайте отново.</string>
130130
<string name="fui_mfa_error_network" translation_description="Error message when MFA enrollment fails due to network issues">Възникна мрежова грешка. Моля, проверете връзката си и опитайте отново.</string>
131131
<string name="fui_mfa_error_generic" translation_description="Generic error message for MFA enrollment failures">Възникна грешка по време на регистрацията. Моля, опитайте отново.</string>
132+
133+
<string name="fui_back_action">Назад</string>
134+
<string name="fui_identity_verified_message">Самоличността е потвърдена. Опитайте отново действието си.</string>
135+
<string name="fui_manage_mfa_action">Управление на двуфакторно удостоверяване</string>
136+
<string name="fui_incorrect_password_error">Неправилна парола</string>
137+
<string name="fui_mfa_choose_method_instruction">Изберете метод за потвърждение</string>
138+
<string name="fui_mfa_enrollment_instruction">Добавете допълнително ниво на сигурност</string>
139+
<string name="fui_mfa_method_sms">SMS</string>
140+
<string name="fui_mfa_method_totp">Приложение за удостоверяване</string>
141+
<string name="fui_mfa_phone_number_already_exists_error">Този телефонен номер е свързан с друг акаунт</string>
142+
<string name="fui_mfa_second_factor_required_error">Необходимо е потвърждение</string>
143+
<string name="fui_mfa_setup_instruction">Сканирайте QR кода с приложението си за удостоверяване</string>
144+
<string name="fui_mfa_totp_already_exists_error">Приложението за удостоверяване вече е настроено</string>
145+
<string name="fui_mfa_unenrollment_confirmation_message">Сигурни ли сте, че искате да премахнете този метод?</string>
146+
<string name="fui_mfa_unenrollment_error">Методът не може да бъде премахнат</string>
147+
<string name="fui_mfa_unenrollment_success_message">Методът е премахнат</string>
148+
<string name="fui_mfa_verification_instruction">Въведете кода за потвърждение</string>
149+
<string name="fui_profile_update_error">Профилът не може да бъде актуализиран</string>
150+
<string name="fui_profile_update_success_message">Профилът е актуализиран</string>
151+
<string name="fui_reauth_instruction">Потвърдете самоличността си, за да продължите</string>
152+
<string name="fui_reauth_required_error">Необходимо е повторно удостоверяване</string>
153+
<string name="fui_reauth_success_message">Повторното удостоверяване е успешно</string>
154+
<string name="fui_reauthenticate_action">Повторно удостоверяване</string>
155+
<string name="fui_recovery_codes_saved_action">Запазих кодовете за възстановяване</string>
156+
<string name="fui_remove_action">Премахване</string>
157+
<string name="fui_resend_verification_email_action">Изпращане на имейл за потвърждение отново</string>
158+
<string name="fui_secret_key_label">Таен ключ</string>
159+
<string name="fui_sign_out_action">Изход</string>
160+
<string name="fui_signed_in_as">Влезли сте като</string>
161+
<string name="fui_skip_action">Пропускане</string>
162+
<string name="fui_use_different_method_action">Използване на друг метод</string>
163+
<string name="fui_verification_code_label">Код за потвърждение</string>
164+
<string name="fui_verified_email_action">Имейлът е потвърден</string>
165+
<string name="fui_verify_action">Потвърждаване</string>
166+
<string name="fui_verify_email_instruction">Изпратихме имейл за потвърждение до %1$s</string>
132167
</resources>

0 commit comments

Comments
 (0)