From 3c0c445ea7b7d0114b5f2abd508c28693b91847d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 12 Feb 2021 14:35:22 +0100 Subject: [PATCH 01/31] Fix issue on Slovanian language --- vector/src/main/res/values-sl/strings_no_weblate.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/res/values-sl/strings_no_weblate.xml b/vector/src/main/res/values-sl/strings_no_weblate.xml index fe3f5085d5..781cf2f4a4 100644 --- a/vector/src/main/res/values-sl/strings_no_weblate.xml +++ b/vector/src/main/res/values-sl/strings_no_weblate.xml @@ -1,6 +1,7 @@ + sl SI \ No newline at end of file From ebd55ea2828ca9f3ef6882c2f172ac8ad6f2e29a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 12 Feb 2021 14:35:28 +0100 Subject: [PATCH 02/31] Fix some lint issue about accessibility --- vector/lint.xml | 3 +++ vector/src/main/res/layout/dialog_base_edit_text.xml | 1 + vector/src/main/res/layout/dialog_preference_edit_text.xml | 1 + vector/src/main/res/layout/fragment_login_server_url_form.xml | 1 + vector/src/main/res/values/strings.xml | 2 ++ 5 files changed, 8 insertions(+) diff --git a/vector/lint.xml b/vector/lint.xml index 572f937406..2ec7f44d7a 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -17,6 +17,9 @@ + + + diff --git a/vector/src/main/res/layout/dialog_base_edit_text.xml b/vector/src/main/res/layout/dialog_base_edit_text.xml index 1c4695a815..5c3255060c 100644 --- a/vector/src/main/res/layout/dialog_base_edit_text.xml +++ b/vector/src/main/res/layout/dialog_base_edit_text.xml @@ -12,6 +12,7 @@ android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" + android:hint="@string/dialog_edit_hint" android:inputType="text"> diff --git a/vector/src/main/res/layout/dialog_preference_edit_text.xml b/vector/src/main/res/layout/dialog_preference_edit_text.xml index a6c570f751..3933231a34 100644 --- a/vector/src/main/res/layout/dialog_preference_edit_text.xml +++ b/vector/src/main/res/layout/dialog_preference_edit_text.xml @@ -20,6 +20,7 @@ android:id="@android:id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" + android:hint="@string/dialog_edit_hint" android:paddingStart="4dp" android:paddingEnd="4dp" tools:ignore="TextFields" /> diff --git a/vector/src/main/res/layout/fragment_login_server_url_form.xml b/vector/src/main/res/layout/fragment_login_server_url_form.xml index a441fee3be..d3b69043da 100644 --- a/vector/src/main/res/layout/fragment_login_server_url_form.xml +++ b/vector/src/main/res/layout/fragment_login_server_url_form.xml @@ -64,6 +64,7 @@ android:id="@+id/loginServerUrlFormHomeServerUrl" android:layout_width="match_parent" android:layout_height="wrap_content" + android:hint="@string/hs_url" android:imeOptions="actionDone" android:inputType="textUri" android:maxLines="1" /> diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 3fbd233888..e235e5eb70 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -144,6 +144,8 @@ Error Success + New value + Home Notifications From 9e86b35f8cbe923332a79e13c328876d6a43a24e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 12 Feb 2021 15:04:03 +0100 Subject: [PATCH 03/31] Fix some lint issue about accessibility --- .../java/im/vector/app/core/dialogs/ExportKeysDialog.kt | 2 +- vector/src/main/res/layout/activity_bug_report.xml | 1 + vector/src/main/res/layout/activity_call.xml | 6 +++++- .../src/main/res/layout/bottom_sheet_call_dial_pad.xml | 9 ++++++--- .../main/res/layout/bottom_sheet_logout_and_backup.xml | 1 + .../src/main/res/layout/bottom_sheet_matrix_to_card.xml | 1 + .../res/layout/bottom_sheet_room_widget_permission.xml | 1 + .../main/res/layout/bottom_sheet_save_recovery_key.xml | 2 ++ .../main/res/layout/custom_action_item_layout_badge.xml | 2 ++ vector/src/main/res/layout/dialog_change_password.xml | 1 + vector/src/main/res/layout/dialog_export_e2e_keys.xml | 1 + vector/src/main/res/layout/dialog_import_e2e_keys.xml | 1 + vector/src/main/res/layout/dialog_prompt_password.xml | 2 +- .../src/main/res/layout/fragment_attachments_preview.xml | 1 + .../layout/fragment_bootstrap_enter_account_password.xml | 1 + .../res/layout/fragment_bootstrap_migrate_backup.xml | 1 + vector/src/main/res/layout/fragment_contacts_book.xml | 1 + .../fragment_create_direct_room_directory_users.xml | 1 + vector/src/main/res/layout/fragment_create_room.xml | 1 + vector/src/main/res/layout/fragment_home_drawer.xml | 2 ++ .../res/layout/fragment_keys_backup_restore_from_key.xml | 2 ++ .../fragment_keys_backup_restore_from_passphrase.xml | 2 ++ vector/src/main/res/values/strings.xml | 4 ++++ 23 files changed, 40 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt b/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt index e137eb1b70..6e7d2a3f4d 100644 --- a/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt +++ b/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt @@ -61,7 +61,7 @@ class ExportKeysDialog { passwordVisible = !passwordVisible views.exportDialogEt.showPassword(passwordVisible) views.exportDialogEtConfirm.showPassword(passwordVisible) - views.exportDialogShowPassword.setImageResource(if (passwordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.exportDialogShowPassword.setImageResource(if (passwordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) // TODO Content description } val exportDialog = builder.show() diff --git a/vector/src/main/res/layout/activity_bug_report.xml b/vector/src/main/res/layout/activity_bug_report.xml index 34169f44f8..2347d84ee3 100644 --- a/vector/src/main/res/layout/activity_bug_report.xml +++ b/vector/src/main/res/layout/activity_bug_report.xml @@ -150,6 +150,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:adjustViewBounds="true" + android:contentDescription="@string/a11y_screenshot" android:maxWidth="260dp" android:scaleType="fitCenter" tools:src="@tools:sample/backgrounds/scenic" /> diff --git a/vector/src/main/res/layout/activity_call.xml b/vector/src/main/res/layout/activity_call.xml index ff33c5f17c..7ea632eefb 100644 --- a/vector/src/main/res/layout/activity_call.xml +++ b/vector/src/main/res/layout/activity_call.xml @@ -16,6 +16,7 @@ android:id="@+id/bgCallView" android:layout_width="match_parent" android:layout_height="match_parent" + android:importantForAccessibility="no" android:scaleType="centerCrop" tools:src="@tools:sample/avatars" /> @@ -53,6 +54,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:foreground="?attr/selectableItemBackground" + android:importantForAccessibility="no" android:scaleType="centerCrop" tools:src="@tools:sample/avatars" /> @@ -61,6 +63,7 @@ android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center" + android:importantForAccessibility="no" android:src="@drawable/ic_call_small_pause" /> @@ -70,6 +73,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:contentDescription="@string/avatar" + android:importantForAccessibility="no" android:scaleType="centerCrop" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -81,13 +85,13 @@ android:id="@+id/smallIsHeldIcon" android:layout_width="20dp" android:layout_height="20dp" + android:importantForAccessibility="no" android:src="@drawable/ic_call_small_pause" app:layout_constraintBottom_toBottomOf="@id/otherMemberAvatar" app:layout_constraintEnd_toEndOf="@id/otherMemberAvatar" app:layout_constraintStart_toStartOf="@id/otherMemberAvatar" app:layout_constraintTop_toTopOf="@id/otherMemberAvatar" /> - + android:scaleType="center" + android:src="@drawable/ic_cross" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml b/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml index 97168b4bdb..069f52df31 100644 --- a/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml +++ b/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml @@ -47,6 +47,7 @@ android:id="@+id/backupCompleteImage" android:layout_width="20dp" android:layout_height="20dp" + android:importantForAccessibility="no" android:visibility="gone" app:srcCompat="@drawable/unit_test_ok" tools:visibility="visible" /> diff --git a/vector/src/main/res/layout/bottom_sheet_matrix_to_card.xml b/vector/src/main/res/layout/bottom_sheet_matrix_to_card.xml index d051bd7c98..37f9633728 100644 --- a/vector/src/main/res/layout/bottom_sheet_matrix_to_card.xml +++ b/vector/src/main/res/layout/bottom_sheet_matrix_to_card.xml @@ -22,6 +22,7 @@ android:layout_width="60dp" android:layout_height="60dp" android:layout_marginTop="@dimen/layout_vertical_margin_big" + android:contentDescription="@string/avatar" android:elevation="4dp" android:transitionName="profile" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/layout/bottom_sheet_room_widget_permission.xml b/vector/src/main/res/layout/bottom_sheet_room_widget_permission.xml index 56459e90d6..2f8d890131 100644 --- a/vector/src/main/res/layout/bottom_sheet_room_widget_permission.xml +++ b/vector/src/main/res/layout/bottom_sheet_room_widget_permission.xml @@ -45,6 +45,7 @@ android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center" + android:contentDescription="@string/avatar" tools:src="@tools:sample/avatars" /> @@ -77,6 +78,7 @@ android:layout_height="24dp" android:layout_gravity="center_vertical" android:layout_marginEnd="16dp" + android:importantForAccessibility="no" android:src="@drawable/ic_material_save" app:tint="?colorAccent" tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/custom_action_item_layout_badge.xml b/vector/src/main/res/layout/custom_action_item_layout_badge.xml index 4d1d398559..b9b3e7fef2 100644 --- a/vector/src/main/res/layout/custom_action_item_layout_badge.xml +++ b/vector/src/main/res/layout/custom_action_item_layout_badge.xml @@ -6,12 +6,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:clipToPadding="false" + android:contentDescription="@string/a11y_open_widget" android:focusable="true"> diff --git a/vector/src/main/res/layout/fragment_attachments_preview.xml b/vector/src/main/res/layout/fragment_attachments_preview.xml index ec99cce9b3..f40cc51e9d 100644 --- a/vector/src/main/res/layout/fragment_attachments_preview.xml +++ b/vector/src/main/res/layout/fragment_attachments_preview.xml @@ -67,6 +67,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" + android:contentDescription="@string/send" android:src="@drawable/ic_send" app:layout_constraintBottom_toTopOf="@id/attachmentPreviewerBottomContainer" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/layout/fragment_bootstrap_enter_account_password.xml b/vector/src/main/res/layout/fragment_bootstrap_enter_account_password.xml index cc1e809a6c..d4f4e044ce 100644 --- a/vector/src/main/res/layout/fragment_bootstrap_enter_account_password.xml +++ b/vector/src/main/res/layout/fragment_bootstrap_enter_account_password.xml @@ -49,6 +49,7 @@ android:layout_height="@dimen/layout_touch_size" android:layout_marginTop="8dp" android:background="?attr/selectableItemBackground" + android:contentDescription="@string/a11y_show_password" android:scaleType="center" android:src="@drawable/ic_eye" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/layout/fragment_bootstrap_migrate_backup.xml b/vector/src/main/res/layout/fragment_bootstrap_migrate_backup.xml index 770fc405a7..d05aad5101 100644 --- a/vector/src/main/res/layout/fragment_bootstrap_migrate_backup.xml +++ b/vector/src/main/res/layout/fragment_bootstrap_migrate_backup.xml @@ -69,6 +69,7 @@ android:layout_height="@dimen/layout_touch_size" android:layout_marginTop="8dp" android:background="?attr/selectableItemBackground" + android:contentDescription="@string/a11y_show_password" android:scaleType="center" android:src="@drawable/ic_eye" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/layout/fragment_contacts_book.xml b/vector/src/main/res/layout/fragment_contacts_book.xml index 843b15e9f2..0ff64cf657 100644 --- a/vector/src/main/res/layout/fragment_contacts_book.xml +++ b/vector/src/main/res/layout/fragment_contacts_book.xml @@ -29,6 +29,7 @@ android:layout_width="@dimen/layout_touch_size" android:layout_height="@dimen/layout_touch_size" android:clickable="true" + android:contentDescription="@string/action_close" android:focusable="true" android:foreground="?attr/selectableItemBackground" android:scaleType="center" diff --git a/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml b/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml index 6a18bdea0b..69e9e658cb 100644 --- a/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml +++ b/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml @@ -29,6 +29,7 @@ android:layout_width="@dimen/layout_touch_size" android:layout_height="@dimen/layout_touch_size" android:clickable="true" + android:contentDescription="@string/action_close" android:focusable="true" android:foreground="?attr/selectableItemBackground" android:scaleType="center" diff --git a/vector/src/main/res/layout/fragment_create_room.xml b/vector/src/main/res/layout/fragment_create_room.xml index 015b739dc9..89883fb8b4 100644 --- a/vector/src/main/res/layout/fragment_create_room.xml +++ b/vector/src/main/res/layout/fragment_create_room.xml @@ -29,6 +29,7 @@ android:id="@+id/createRoomClose" android:layout_width="@dimen/layout_touch_size" android:layout_height="@dimen/layout_touch_size" + android:contentDescription="@string/action_close" android:scaleType="center" android:src="@drawable/ic_x_18dp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/vector/src/main/res/layout/fragment_home_drawer.xml b/vector/src/main/res/layout/fragment_home_drawer.xml index e627882d96..642119e5f8 100644 --- a/vector/src/main/res/layout/fragment_home_drawer.xml +++ b/vector/src/main/res/layout/fragment_home_drawer.xml @@ -22,6 +22,7 @@ style="@style/VectorDebug" android:layout_width="@dimen/layout_touch_size" android:layout_height="@dimen/layout_touch_size" + android:importantForAccessibility="no" android:scaleType="center" android:src="@drawable/ic_settings_x" app:layout_constraintEnd_toEndOf="parent" @@ -35,6 +36,7 @@ android:layout_height="50dp" android:layout_marginStart="@dimen/layout_horizontal_margin" android:layout_marginTop="24dp" + android:contentDescription="@string/avatar" android:transitionName="profile" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/vector/src/main/res/layout/fragment_keys_backup_restore_from_key.xml b/vector/src/main/res/layout/fragment_keys_backup_restore_from_key.xml index 96401470ac..4920f685db 100644 --- a/vector/src/main/res/layout/fragment_keys_backup_restore_from_key.xml +++ b/vector/src/main/res/layout/fragment_keys_backup_restore_from_key.xml @@ -16,6 +16,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="36dp" + android:importantForAccessibility="no" android:src="@drawable/key_big" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -67,6 +68,7 @@ android:layout_width="48dp" android:layout_height="48dp" android:background="?attr/selectableItemBackground" + android:contentDescription="@string/a11y_import_key_from_file" android:scaleType="center" android:src="@drawable/ic_import_black" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/layout/fragment_keys_backup_restore_from_passphrase.xml b/vector/src/main/res/layout/fragment_keys_backup_restore_from_passphrase.xml index b3a243d9c6..817c2e15a7 100644 --- a/vector/src/main/res/layout/fragment_keys_backup_restore_from_passphrase.xml +++ b/vector/src/main/res/layout/fragment_keys_backup_restore_from_passphrase.xml @@ -16,6 +16,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="36dp" + android:importantForAccessibility="no" android:src="@drawable/key_big" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -67,6 +68,7 @@ android:layout_height="@dimen/layout_touch_size" android:layout_marginTop="8dp" android:background="?attr/selectableItemBackground" + android:contentDescription="@string/a11y_show_password" android:scaleType="center" android:src="@drawable/ic_eye" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index e235e5eb70..38f2001f6d 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2829,4 +2829,8 @@ Re-Authentication Needed Element requires you to enter your credentials to perform this action. Failed to authenticate + + Screenshot + Open widgets + Import key from file From 15f479b42420a1e2ca6c0fdc1498a99ad0a0ad80 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 12 Feb 2021 15:19:38 +0100 Subject: [PATCH 04/31] Create a View for password reveal button -> better management of a11y --- .../app/core/dialogs/ExportKeysDialog.kt | 2 +- .../app/core/dialogs/PromptPasswordDialog.kt | 2 +- .../core/ui/views/RevealPasswordImageView.kt | 43 +++++++++++++++++++ .../app/features/auth/PromptFragment.kt | 9 +--- ...KeysBackupRestoreFromPassphraseFragment.kt | 2 +- .../setup/KeysBackupSetupStep2Fragment.kt | 2 +- .../SharedSecuredStoragePassphraseFragment.kt | 2 +- .../BootstrapConfirmPassphraseFragment.kt | 2 +- .../BootstrapEnterPassphraseFragment.kt | 2 +- .../recover/BootstrapMigrateBackupFragment.kt | 2 +- .../app/features/login/LoginFragment.kt | 9 +--- .../login/LoginResetPasswordFragment.kt | 9 +--- .../settings/VectorSettingsGeneralFragment.kt | 2 +- .../VectorSettingsSecurityPrivacyFragment.kt | 2 +- .../soft/epoxy/LoginPasswordFormItem.kt | 13 ++---- .../res/layout/dialog_change_password.xml | 2 +- .../res/layout/dialog_export_e2e_keys.xml | 2 +- .../res/layout/dialog_import_e2e_keys.xml | 2 +- .../res/layout/dialog_prompt_password.xml | 2 +- .../fragment_bootstrap_enter_passphrase.xml | 3 +- .../fragment_bootstrap_migrate_backup.xml | 2 +- ...nt_keys_backup_restore_from_passphrase.xml | 2 +- .../fragment_keys_backup_setup_step2.xml | 2 +- vector/src/main/res/layout/fragment_login.xml | 4 +- .../layout/fragment_login_reset_password.xml | 4 +- .../res/layout/fragment_reauth_confirm.xml | 4 +- .../fragment_ssss_access_from_passphrase.xml | 3 +- .../res/layout/item_login_password_form.xml | 4 +- 28 files changed, 78 insertions(+), 61 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/core/ui/views/RevealPasswordImageView.kt diff --git a/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt b/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt index 6e7d2a3f4d..23018fe758 100644 --- a/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt +++ b/vector/src/main/java/im/vector/app/core/dialogs/ExportKeysDialog.kt @@ -61,7 +61,7 @@ class ExportKeysDialog { passwordVisible = !passwordVisible views.exportDialogEt.showPassword(passwordVisible) views.exportDialogEtConfirm.showPassword(passwordVisible) - views.exportDialogShowPassword.setImageResource(if (passwordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) // TODO Content description + views.exportDialogShowPassword.render(passwordVisible) } val exportDialog = builder.show() diff --git a/vector/src/main/java/im/vector/app/core/dialogs/PromptPasswordDialog.kt b/vector/src/main/java/im/vector/app/core/dialogs/PromptPasswordDialog.kt index 6d7b721976..1839a8b11c 100644 --- a/vector/src/main/java/im/vector/app/core/dialogs/PromptPasswordDialog.kt +++ b/vector/src/main/java/im/vector/app/core/dialogs/PromptPasswordDialog.kt @@ -44,7 +44,7 @@ class PromptPasswordDialog { views.promptPasswordPasswordReveal.setOnClickListener { passwordVisible = !passwordVisible views.promptPassword.showPassword(passwordVisible) - views.promptPasswordPasswordReveal.setImageResource(if (passwordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.promptPasswordPasswordReveal.render(passwordVisible) } AlertDialog.Builder(activity) diff --git a/vector/src/main/java/im/vector/app/core/ui/views/RevealPasswordImageView.kt b/vector/src/main/java/im/vector/app/core/ui/views/RevealPasswordImageView.kt new file mode 100644 index 0000000000..d33f3ecbd0 --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/ui/views/RevealPasswordImageView.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.core.ui.views + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatImageView +import im.vector.app.R + +class RevealPasswordImageView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : AppCompatImageView(context, attrs, defStyleAttr) { + + init { + render(false) + } + + fun render(isPasswordShown: Boolean) { + if (isPasswordShown) { + setImageResource(R.drawable.ic_eye_closed) + contentDescription = context.getString(R.string.a11y_hide_password) + } else { + setImageResource(R.drawable.ic_eye) + contentDescription = context.getString(R.string.a11y_show_password) + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/auth/PromptFragment.kt b/vector/src/main/java/im/vector/app/features/auth/PromptFragment.kt index 917f60dacb..4bdd54ae45 100644 --- a/vector/src/main/java/im/vector/app/features/auth/PromptFragment.kt +++ b/vector/src/main/java/im/vector/app/features/auth/PromptFragment.kt @@ -87,14 +87,7 @@ class PromptFragment : VectorBaseFragment() { } views.passwordField.showPassword(it.passwordVisible) - - if (it.passwordVisible) { - views.passwordReveal.setImageResource(R.drawable.ic_eye_closed) - views.passwordReveal.contentDescription = getString(R.string.a11y_hide_password) - } else { - views.passwordReveal.setImageResource(R.drawable.ic_eye) - views.passwordReveal.contentDescription = getString(R.string.a11y_show_password) - } + views.passwordReveal.render(it.passwordVisible) if (it.lastErrorCode != null) { when (it.flowType) { diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt index 6c139aaf45..d15446dd62 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt @@ -60,7 +60,7 @@ class KeysBackupRestoreFromPassphraseFragment @Inject constructor() : VectorBase viewModel.showPasswordMode.observe(viewLifecycleOwner, Observer { val shouldBeVisible = it ?: false views.keysBackupPassphraseEnterEdittext.showPassword(shouldBeVisible) - views.keysBackupViewShowPassword.setImageResource(if (shouldBeVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.keysBackupViewShowPassword.render(shouldBeVisible) }) views.keysBackupPassphraseEnterEdittext.setOnEditorActionListener { _, actionId, _ -> diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt index e739df8ce4..7f958d0e0a 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt @@ -119,7 +119,7 @@ class KeysBackupSetupStep2Fragment @Inject constructor() : VectorBaseFragment val shouldBeVisible = state.passphraseVisible views.ssssPassphraseEnterEdittext.showPassword(shouldBeVisible) - views.ssssViewShowPassword.setImageResource(if (shouldBeVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.ssssViewShowPassword.render(shouldBeVisible) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapConfirmPassphraseFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapConfirmPassphraseFragment.kt index 9862a97db2..2d26436556 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapConfirmPassphraseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapConfirmPassphraseFragment.kt @@ -109,7 +109,7 @@ class BootstrapConfirmPassphraseFragment @Inject constructor() if (state.step is BootstrapStep.ConfirmPassphrase) { val isPasswordVisible = state.step.isPasswordVisible views.ssssPassphraseEnterEdittext.showPassword(isPasswordVisible, updateCursor = false) - views.ssssViewShowPassword.setImageResource(if (isPasswordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.ssssViewShowPassword.render(isPasswordVisible) } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapEnterPassphraseFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapEnterPassphraseFragment.kt index 9d3f26cba8..7a5d6e5fd7 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapEnterPassphraseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapEnterPassphraseFragment.kt @@ -103,7 +103,7 @@ class BootstrapEnterPassphraseFragment @Inject constructor() if (state.step is BootstrapStep.SetupPassphrase) { val isPasswordVisible = state.step.isPasswordVisible views.ssssPassphraseEnterEdittext.showPassword(isPasswordVisible, updateCursor = false) - views.ssssViewShowPassword.setImageResource(if (isPasswordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.ssssViewShowPassword.render(isPasswordVisible) state.passphraseStrength.invoke()?.let { strength -> val score = strength.score diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt index 99507fd1c7..ca0942f59a 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt @@ -133,7 +133,7 @@ class BootstrapMigrateBackupFragment @Inject constructor( if (state.step is BootstrapStep.GetBackupSecretPassForMigration) { val isPasswordVisible = state.step.isPasswordVisible views.bootstrapMigrateEditText.showPassword(isPasswordVisible, updateCursor = false) - views.bootstrapMigrateShowPassword.setImageResource(if (isPasswordVisible) R.drawable.ic_eye_closed else R.drawable.ic_eye) + views.bootstrapMigrateShowPassword.render(isPasswordVisible) } views.bootstrapDescriptionText.text = getString(R.string.bootstrap_migration_enter_backup_password) diff --git a/vector/src/main/java/im/vector/app/features/login/LoginFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginFragment.kt index 3b22e0f206..8f18fd8296 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginFragment.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginFragment.kt @@ -255,14 +255,7 @@ class LoginFragment @Inject constructor() : AbstractSSOLoginFragment() { @@ -76,20 +76,13 @@ abstract class LoginPasswordFormItem : VectorEpoxyModel(R.id.itemLoginPasswordFormPasswordField) val passwordFieldTil by bind(R.id.itemLoginPasswordFormPasswordFieldTil) - val passwordReveal by bind(R.id.itemLoginPasswordFormPasswordReveal) + val passwordReveal by bind(R.id.itemLoginPasswordFormPasswordReveal) val forgetPassword by bind